トリアコンタン様の、イベント動的生成プラグインとセットで利用する
テンプレートイベントプラグインによって生成されたイベントに関する質問になります。
【イベント動的生成プラグイン(EventReSpawn.js)】
https://raw.githubusercontent.com/triac ... ReSpawn.js
【テンプレートイベントプラグイン(TemplateEvent.js)】
https://raw.githubusercontent.com/triac ... teEvent.js
以下のスクリプトで、
メモ欄に<テンプレートマップ生成イベント>という記述があるイベントを検索し、
複数の場合もあるため、forを回して配列化しています。
コード: 全て選択
let arr = [];
for(var id = $gameMap.events().length; id > 0; id--) {
if($gameMap.event(id)!=null){
if($gameMap.event(id).event().note.match("<テンプレートマップ生成イベント>")){
arr[id] = $gameMap.event(id).event().name;
}
}
}
console.log(arr);
同じマップで、同じ生成イベントを、消去→再生成すると、
2回目以降から取得できなくなります。
.indexOf("<テンプレートマップ生成イベント>") !== -1 を用いても同様にスルーされます。
見た目、イベントはしっかり存在しているのですが、
上記スクリプトのメモ欄のifの中に入ってくれません。
($gameMap.events()では、2回目以降も確実に存在しており、取得も出来ました。
.lengthの数も問題ありません。
$gameMap.events()の中身を見た時に、
Game_EventとGame_PrefabEventがあり、後者が生成イベントになるため
event(id)を、PrefabEvent(id)としましたが、取得できずエラーになりましたし
初回だとevent(id)でもPrefabEventが取得できるので、問題ではないと考えます)
また、再生成でイベントIDは新しく付与され、変化するのですが、
イベントIDではなくイベントのメモ欄を条件にしているため、こちらも問題ではないと考えます。
以下のような検証を行いました(※①~③は、それぞれ別々に実行しています)。
①4つのイベントを生成して、生成した順(イベントIDが小さい順)に2つを消去。そのあと上記のコードで検索をかけると、2つ生成イベントが残っているのに配列には何も入らない
②消去したイベントを再生成して、もう一度検索をかけると、再生成したイベントをスルーして、先ほど残っていたイベントだけが配列に入る
③別途、検索を実行しても、結果は②と同じ
これは、$gameMap.refresh();を要所に走らせても同じでした。
上記のことから、以下の仮説を立てました。
最初に削除された生成イベントのIDが仮に10番、11番。残された生成イベントが12番、13番。
10番と11番が消去されたため、歯抜けの状態となる(9、12、13)。
イベント再生成で新たに14番と15番が生成される。しかし検知されたのは、12番と13番だけ。
つまり、歯抜けができると、上記のコードでは、検索を途中でやめてしまうのではないか。
この仮説だと、②と③で検索をかけたとき、12番と13番が検知されるのは変ですが
12番と13番は初回生成イベントである点も考慮しなければならないかと思います。
ここまでくると、恐らくTemplateEvent側の仕様を確認する他ないと思われますが
もし、「こういう理由なのでは?」とお心当たりのある方がいらっしゃいましたら
この結果になってしまう原因をご教示いただけますと幸いです。
何卒、よろしくお願いいたします。