【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト

返信する
ぷらずま
記事: 10
登録日時: 2020年11月11日(水) 16:28

【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト

投稿記事 by ぷらずま »

お世話になっております。

同じマスに2つのイベントが重なっている場合、
$gameMap.eventIdXy(x, y)でIDを所得するとイベントIDが小さい方を優先して得ますが、
これを2つともIDを取得して、個別に参照することは可能でしょうか。

例えば、ID3とID8のイベントが重なっている場所のIDを$gameMap.eventIdXy(x, y)で取得すると、
ID3の方だけ得られますが、これをID3とID8の両方を得てそれぞれ別の変数に格納したりする方法はあるでしょうか。

viewtopic.php?t=8470
すでに同様の質問として、↑の質問がありましたが
$gameMap.eventsXy(x, y) と $gameMap.eventsNtXy(x, y) の両方とも上手くいきません。
([Object,Object]の配列しか取得できない)

お願いいたします。
最後に編集したユーザー ぷらずま [ 2021年2月07日(日) 14:14 ], 累計 2 回
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得する方法

投稿記事 by WTR »

$gameMap.eventsXy(x, y) で取得しているのはイベントIDではなく、イベントオブジェクトそのものです。
IDが知りたいならイベントオブジェクトからさらにそのイベントIDを取得する必要があります。

$gameMap.eventsXy(x, y) で3つのイベントオブジェクトが見つかったのなら
それぞれのイベントID は
$gameMap.eventsXy(x,y)[0].eventId()
$gameMap.eventsXy(x,y)[1].eventId()
$gameMap.eventsXy(x,y)[2].eventId()

で取得できます。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
ぷらずま
記事: 10
登録日時: 2020年11月11日(水) 16:28

Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得する方法

投稿記事 by ぷらずま »

WTR様

ありがとうございます。
$gameMap.eventsXy(x,y)[0].eventId()で個別にIDを取得できました。
しかし、このスクリプトを用いて特定の処理を組みたいのですが、そちらが上手く機能しません…。
もう少しだけよろしいでしょうか。

座標(変数2,変数3)にあるすべてのイベントに対し、
「そのイベントIDが0でないとき、メモ欄に[敵]の文字が入っているかを判別し、
 入っていたらそのイベントのセルフスイッチDをONにする」
という処理をしたくスクリプトを組みました。

 var LightX = $gameVariables.value(2);
 var LightY = $gameVariables.value(3);
 var array = $gameMap.eventsXy(LightX, LightY);
 for(var i = 0; i < array.length; i++){
 $gameVariables.setValue(8,$gameMap.eventsXy(LightX,LightY).eventId())
 if($gameVariables.value(8) !== 0){
 //(if($dataMap.events[$gameVariables.value(8)].note.indexOf("[敵]")){
 //($gameSelfSwitches.setValue([this._mapId, $gameVariables.value(8), "D"], true))
 })
 }

変数8というのは取得したイベントのIDを格納する場所です。
javascript自体がまだ勉強途中で、どこが間違っているのか分かりません。
どなたかご教授いただければと思います。
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト

投稿記事 by WTR »

細かく見てませんが
7行目コメントアウトされているif文は、indexOf() の戻り値が 0 のとき偽になると思います。
if (0) は実行されない。

メモ欄の頭に [敵] があると indexOf() で 0 が返るのでダメじゃないでしょうか。
>= 0 もしくは !== -1 なら動くのでは。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
ぷらずま
記事: 10
登録日時: 2020年11月11日(水) 16:28

Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト

投稿記事 by ぷらずま »

WTR様

ありがとうございます。
まだスクリプトは上手く機能はしないのですが、色々と試行錯誤してみます。
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

Re: 【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト

投稿記事 by WTR »

コード: 全て選択

var LightX = $gameVariables.value(2);
var LightY = $gameVariables.value(3);
var array = $gameMap.eventsXy(LightX, LightY);
for(var i = 0; i < array.length; i++){
    $gameVariables.setValue(8,array[i].eventId())
    if(array[i].event().note.indexOf("[敵]") >= 0){
        $gameSelfSwitches.setValue([this._mapId, array[i].eventId(), "D"], true)
    }
}
こんなでどうでしょうか。
一応デバッグに役立つかもしれないので変数8への代入を残しましたが別に使っていません。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
ぷらずま
記事: 10
登録日時: 2020年11月11日(水) 16:28

Re: 【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト

投稿記事 by ぷらずま »

WTR様

上記のスクリプトで上手く動作しました!
これで制作を進められます。
度々アドバイスをくださり、ありがとうございました!
返信する

“MV:質問”に戻る