Glenelg開発メモ/地図自動判定について

2006-09-04 (月) 08:28:55
お名前:

Glenelgの機能についてのメモ。
自分のための覚書でもあり、利用者のための豆知識でもあり、他AI開発者のための参考情報でもあり。

Glenelg開発メモ:地図情報についてでも書いた通り、Glenelgでは「周囲のNPCの位置」を元に地図の自動判定の仕組みをもっています。
ですが、そのNPCのIDは、メンテによって多少変化することがあります。
Glenelgではそれを見越して、ある程度までは変動を吸収できる仕組みを作っています。
それについて簡単に説明を。

新しくゲートに入る際、その入りたいゲートをALT+SHIFT+右クリックしてから入るようにしてみてください。
そのための判定用情報が AI\USER_AI\mapinfo の下に入っています。
そこに「今から入るマップ名」をもったファイルがあれば、だいたい判定できるはずです。
GD,ピラ、SDあたりでは確実に動いています。時計塔も入り口→3F→地下2(廃屋)コースは確認しました。

上記操作、おそらくマップサーバー単位で行えば大丈夫です:例えばゲフェンタワーに入る前にその入り口のゲートをALT+SHIFT+右クリックしたら、以後GD内でゲート移動する限りは再度操作する必要はありません。
入るダンジョンが変わったらやる、くらいの気持ちでいるとよろしいかと。

以下、古い内容のメモ:オフセットの手動計算

上述の機能実装前は、友瀬が手動計算していたので・・・その当時のメモです。


Glenelg開発メモ:地図情報についてでも書いた通り、Glenelgでは「周囲のNPCの位置」を元に地図の自動判定の仕組みをもっています。
ですが、そのNPCのIDは、メンテによって多少変化することがあります。
Glenelgではそれを見越して、ある程度までは変動を吸収できる仕組みを作っていたのですが、現状は自動補正ができなくなっています。
気が付くとそのあたりは報告しているのですが、掲示板でも質問があったので、どうやって補正値を決めているのかを説明します。


手順1:手近なカプラさんの側に行く。
手順2:そのカプラさんをALT+SHIFT+右クリック。(例えば、ゲフェン中央のカプラさんを指定した例を以下に続けます)
手順3:RO\AI\USER_AIの中にある、npcinfo.txtを開くと、以下のような感じのデータができている。

2006/08/16 09:03:40
geffen = 55336 , 272 , 74 , 45
MapObjectList[55336] = {  mapname = "geffen"     , posx = 120 , posy =  62 , type = 115  }

手順4:RO\AI\USRE_AIの maplibB.luaを開き、その中のInitMapObjectList_global() を見る。
ここにNPCごとに手順3で記載したような形でデータがあるので、コメントを参考に手順2でクリックしたカプラさんを探す:今回の例だと以下のような行がある。

MapObjectList[55050+offset] = {  mapname = "geffen"     , posx = 120 , posy =  62 , type = 115  } -- type 115 -- ゲフェン街内 南カプラ

手順5:手順3と手順4とのデータを見比べて、「offsetがいくつだとちょうどいいのか」を計算する。
今回の例だと、

55050+offset == 55336
offset == 55336 - 55050 == 286

・・・となる。
手順6:RO\AI\USER_AI内、ai_selfset.ini を開くと、そこにoffsetの記載欄があるので、手順5で計算した値を反映する。

手順7:手近なゲートを対象にして、上記手順1〜3と同じことを行う。例えばゲフェンタワーへの入り口のゲートをALT+SHIFT+右クリックすると、mapinfo.txtには以下のような記録ができる。

geffen = 51122 , 120 , 114 , 45

手順8:RO\AI\USER_AI\mapinfo 内にたくさんあるiniファイルの中から、現在いるマップ名を持つファイルを開く。
その中には上述の形式の行がいくつかあるので、その中から第2・第3パラメータが同じ列を探す。
今回の例だと、以下のような行が見つけられる。

geffen = 51124 , 120 , 114

手順9:手順7と手順8のデータから、offset_gを計算する。手順7での値から手順8の値を引けばよい。例えば今回の例では・・・

offset_g == 51122 - 51124 == -2

・・・となる。
手順10:RO\AI\USER_AI内、ai_selfset.ini を開くと、そこにoffset_gの記載欄があるので、手順9で計算した値を反映する。

手順11:作業終了。npcinfo.txtの中身は全部消してしまってかまいません。


・・・という感じです。 offset が「一般NPC(全世界共通)のID」、offset_gがワープゲートのIDオフセットになっている、ということです。

機械的な作業なので自動化もできそう・・・なのですが、どうもこのoffset_gがマップサーバ?によって異なっている様子で、上記の形で設定してもうまく行くマップ・行かないマップがあります。
なので、ちと自動化処理を保留しているところ。
やはり無理矢理感がありますね。