【解決済】TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

kagami
記事: 18
登録日時: 2018年11月22日(木) 20:44

【解決済】TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by kagami » 2024年2月04日(日) 17:22

イベントA(味方)がイベントB(敵)を探して攻撃して倒す、といった事をしたいと思い、
Aが攻撃したときにBのセルフ変数をいじってHP減らそうと思ったのですが、外部のセルフ変数の操作で加算や減算の方法がわかりませんでした。代入はできます。

味方や敵は大量に出したいので、トリアコンタン様が作成されたテンプレートイベントプラグイン&イベント動的プラグインを使用しています。

もしも方法がわかる方がおりましたらアドバイスを頂けると幸いです。
最後に編集したユーザー kagami on 2024年2月07日(水) 21:39 [ 編集 1 回目 ]

アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by DoujinRuis » 2024年2月04日(日) 22:13

ご確認ください
https://www.youtube.com/watch?v=a_zYSfwEFF0

ツクール初心者の方質問し放題のディスコードです↓
https://discord.com/invite/dzUAC3CSMH
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw
kagami
記事: 18
登録日時: 2018年11月22日(木) 20:44

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by kagami » 2024年2月06日(火) 01:49

>DoujinRuis様

わざわざ動画にして頂きありがとうございます。
同じようにイベントを作成し、「味方と敵が互いに索敵して攻撃する(倒す)」処理が実装できました。

ただ、このイベントを「イベント動的プラグイン」で別マップにイベント生成した所、お互い攻撃はするもののセルフ変数の数値が変わらなくなってしまいました。
最終的には別マップにこの味方と敵のイベントを複数生成して戦わせたいのですが、可能でしょうか?
(セルフ変数がイベントIDを参照してるので難しいような気がしてきました…)
アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by DoujinRuis » 2024年2月06日(火) 18:42

すいません、現状苦戦してます。
一体だけなら出来るのですが、複数コピーすると・・・
よく分かってないです。
ただこのプラグインから考えるとこういう使い方を想定しているとしか思えないので、
一度作者のトリアコンタンさんに確認してみようと思います。

是非、期待せずお待ちください
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw
kagami
記事: 18
登録日時: 2018年11月22日(木) 20:44

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by kagami » 2024年2月07日(水) 01:24

>DoujinRuis様

お手数をおかけしてしまったようで申し訳ございません!
セルフ変数の加算などの方法がわかっただけでも非常に勉強になりました。

作者様にご確認頂くのは大変ありがたいのですが、お時間に余裕があればで良いですので!
ねこしゃり
記事: 12
登録日時: 2024年1月13日(土) 02:30
連絡を取る:

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by ねこしゃり » 2024年2月07日(水) 01:52

こんばんは。

現状問題になっている点、マップが変わったときにセルフ変数の値が変わらないについて。

・原因について
 恐らくセルフ変数のキーを正しく指定できていないことが原因かと推測します。
 実際の実装が定かでないので恐縮ですが、前回答者様の動画を拝見いたしましたところ、
 以下の部分で問題となってそうと思う部分がありました。

コード: 全て選択

$gameSelfSwitches.getVariableValue([1,1,2]);

 セルフ変数を取得する部分のコードですが、キーの指定が1,1,2のように定数で行われています。
 []内に指定すべき値は[マップID,イベントID,セルフ変数のインデックス]ですので、
 別マップに実装した際、キーの部分を修正されていないのであれば、
 『ID1のマップのセルフ変数にダメージ処理をしているが、見ている変数は今のマップ』という形になっているのかなと推測します。
 見当違いなら申し訳ありません。

・解決策について
 まず、複数イベントで動作させるのに、EventReSpawnにてイベントを生成する手を使うとして、
 自動でイベントIDが割付されるので、
 どのIDを指定してよいかわからないといった懸念を感じられたのだと想定します。
 そこでマップID、イベントIDは動的に取得するという方法がありますので、その方法を使えば
 マップ毎、イベント毎のIDの指定という意識は必要なくなります。

 動画内のコードで例を示します。以下の例を参考に実装してみてください。

コード: 全て選択

if(event3Exists){
  let i = $gameSelfSwitches.getVariableValue([1,1,2]);
  let z = i - 10;
  $gameSelfSwitches.setVariableValue([1,1,2],z);
}


の部分を

コード: 全て選択

if(event3Exists){
  const mapId = $gameMap.mapId(); // 現在のマップIDを取得します。
  const eventId = adjacentEvents[0].eventId(); // 攻撃対象のイベントIDを取得します。
  const selfVarIndex =  2;
  const key = [mapId, eventId, selfVarIndex];
  const i = $gameSelfSwitches.getVariableValue(key);
  const z = i - 10;
  $gameSelfSwitches.setVariableValue(key, z);
}

というように変更を加えてください。

これで、隣接した敵のセルフ変数を処理する
という処理になるかと思います。
マップ毎、敵毎に手を加える必要はありません。

問題はまだまだあるかと思いますが、ひとまずどこか参考になれば幸いです。
アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by DoujinRuis » 2024年2月07日(水) 12:29

ご確認ください
https://www.youtube.com/watch?v=FxgP2xfMAys

ツクール初心者の方質問し放題のディスコードです↓
https://discord.com/invite/dzUAC3CSMH


ねこしゃりさんありがとうございました
今回のプログラム


let eventId = this._eventId; // このイベントのID
let event = $gameMap.event(eventId); // このイベントのオブジェクトを取得
let eventX = event.x; // このイベントのマップX座標
let eventY = event.y; // このイベントのマップY座標

// イベント2が特定の方向を向いている場合の隣接座標を計算
let targetX = eventX;
let targetY = eventY;

switch (event.direction()) {
case 2: // 下を向いている
targetY += 1;
break;
case 4: // 左を向いている
targetX -= 1;
break;
case 6: // 右を向いている
targetX += 1;
break;
case 8: // 上を向いている
targetY -= 1;
break;
default:
// その他の方向(通常はあり得ないが、念のため)
break;
}

// 隣接座標にイベントが存在するか確認
let adjacentEvents = $gameMap.eventsXy(targetX, targetY);
let eventExists = adjacentEvents.length > 0;

if ( eventExists ) {
  const mapId = $gameMap.mapId(); // 現在のマップIDを取得します。
  const eventId = adjacentEvents[0].eventId(); // 攻撃対象のイベントIDを取得します。
  const selfVarIndex = 2;
  const key = [mapId, eventId, selfVarIndex];
  const i = $gameSelfSwitches.getVariableValue(key);
  const z = i - 10;
  $gameSelfSwitches.setVariableValue(key, z);
}
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw
kagami
記事: 18
登録日時: 2018年11月22日(木) 20:44

Re: TemplateEventを使用して外部のセルフ変数を変更(加算など)したい

投稿記事by kagami » 2024年2月07日(水) 21:39

>ねこしゃり様
詳しいコードを教えて頂きありがとうございます。
こちらの記述に変更したところ、別マップでもセルフ変数の増減が機能しておりました。
ちゃんとコピー後のイベントIDを拾ってくれるのですね。

>DoujinRuis様
再度動画の方をありがとうございます。自分の方でも同様の動きが作成できました。
隣接マスのイベントのチェックはイベントコマンドで作っていましたが、こちらのコードの方がすっきりしていて使い勝手が良さそうですね。

お二方にアドバイスを頂いたおかげでやりたい仕様に1歩近づけました。
ありがとうございました!

“MZ:質問” へ戻る