【解決済み】最も近くにいるイベントのIDとマップ座標を取得する方法

アバター
マニア~ジュ
記事: 45
登録日時: 2019年3月13日(水) 00:31
連絡を取る:

【解決済み】最も近くにいるイベントのIDとマップ座標を取得する方法

投稿記事by マニア~ジュ » 2022年6月09日(木) 09:49

いつもお世話になっております。
件名の通りですが、プレイヤーの最も近くにいるイベントのIDとマップ座標を取得する方法についてご質問させて頂きます。

まず、過去の記事で以下のスクリプトを見つけました。
let vid = 94; // 取得する変数番号
let min = 15; // 最大距離
let get = null;
$gameMap.events().forEach(function(event){
let distance = $gameMap.distance($gamePlayer.x,$gamePlayer.y,event.x,event.y);
if (min >= distance) { min = distance; get = event); }
});
$gameVariables.setValue(vid, get ? get.eventId() : 0);

これにより、近くのイベントIDを取得する方法は分かったのですが、これをさらに改良して、イベントのメモ欄に【エネミー】と書いてあるイベントだけを対象にすることは可能でしょうか?

やりたいこととしては、近くの敵に魔法で雷を落とすというものですが、今のままだとアイテムや階段も対象に含まれてしまい、アイテムの近くで魔法を唱えると敵よりもアイテムに雷が落ちるという状況です。

イベントのメモ欄に【エネミー】と書いてある場合、そいつだけを対象にIDを取得する方法はありますでしょうか?

それと、上記のコードでは最大距離が15となっておりますが、これはプレイヤーからX,Y軸の15マス離れたところから、ひし形で計算されていると思うのですが、これを正方形にする方法はありますか?

また、取得したイベントIDのマップ座標を取得する方法もお教え頂ければ幸いです。
最後に編集したユーザー マニア~ジュ on 2022年6月09日(木) 15:06 [ 編集 1 回目 ]

アバター
フラクタル
記事: 17
登録日時: 2021年12月28日(火) 15:36

Re: 最も近くにいるイベントのIDとマップ座標を取得する方法

投稿記事by フラクタル » 2022年6月09日(木) 15:03

こんにちは。

ご希望の動作となるよう提示していただいたスクリプトを書き換えてみました。

コード: 全て選択

let vid = 3; let vxpoint =4; let vypoint =5; let min = 25; let get = null;
$gameMap.events().forEach(function(event){
    if($gameMap.event(event.eventId()).event().note.match("[エネミー]")){
        let distanceX = Math.abs($gamePlayer.x - event.x);
        let distanceY = Math.abs($gamePlayer.y - event.y);
        if(min >= (distanceX + distanceY) ** 2){
            min = (distanceX + distanceY) ** 2; get = event;
            $gameVariables.setValue(vid, get ? get.eventId() : 0)
            $gameVariables.setValue(vxpoint, get ? $gameMap.events()[get.eventId() - 1].x : 0)
            $gameVariables.setValue(vypoint, get ? $gameMap.events()[get.eventId() - 1].y : 0)
        }}});
以下、変更点の説明です。

最初に、対象イベントのx座標、y座標であるvxpointとvypointを追加しました。

matchメソッドではイベントのメモ欄にエネミーがあるものだけを抽出しています。

次に、プレイヤーとイベントのx座標およびy座標の絶対値を求め、その和の二乗を求めています。おそらくこれで最大距離の計算が正方形になる……はず。ちなみにminの初期値25は5の二乗を表しています。

最後にそれぞれ求められた値を変数に代入しています。


ただしこの動作の場合、同一距離にエネミーが居た場合はイベント番号の大きい方のエネミーだけが抽出されます。
アバター
マニア~ジュ
記事: 45
登録日時: 2019年3月13日(水) 00:31
連絡を取る:

Re: 最も近くにいるイベントのIDとマップ座標を取得する方法

投稿記事by マニア~ジュ » 2022年6月09日(木) 15:06

ありがとうございます!
わざわざ詳しい説明までしてくれて感謝です(*'ω'*)
座標の取得に関しては自力で何とか出来たので、これで思い通りの動作になりました!

“MV:質問” へ戻る