【解決致しました。】あるアクターが最後に攻撃した敵のIDを取得したい。

風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

【解決致しました。】あるアクターが最後に攻撃した敵のIDを取得したい。

投稿記事by 風雨がぁ » 2017年11月28日(火) 17:54

こんにちは。
もしできないと思われるのであれば流しても結構なのですが、
あると制作において技の幅が広がるので是非お願いにまいりました。
例に表すと、
 アクター1が戦闘中に最後に攻撃した敵のIDを変数スクリプトで習得する。
という内容です。
 もしできましたら あるアクターが最後に攻撃相手と選択した(攻撃前)敵ID の
変数スクリプトでの習得方法もございましたらでいいのでお願いします。
(トリアコンタン様のスキルの副作用プラグインと併用したいためです。)

どうかよろしくお願いいたします。
最後に編集したユーザー 風雨がぁ on 2017年12月07日(木) 07:09 [ 編集 2 回目 ]

アバター
フトコロ
記事: 1029
登録日時: 2017年2月06日(月) 21:32

Re: あるアクターが最後に攻撃した敵のIDを習得したい。

投稿記事by フトコロ » 2017年12月02日(土) 23:44

こんにちは。

MVのデフォルトのスクリプトでは、残念ながら取得することができません。
$gameActors.actor(n)._lastTergetIndex で、最後に選択した対象のID(パーティーの並び順)を取得できますが
それが、敵なのか味方なのかは判断できません。

替わりにですが、以下のプラグインで代用できると思います。

https://raw.githubusercontent.com/futokoro/RPGMaker/master/FTKR_ExVariablesChange.js

アクターのメモ欄に以下のタグを追記してみてください。

<EVC 使用時>
if (b && !b._actorId) v[1] = b.index();
</EVC 使用時>

これで、スキルやアイテムを使用した相手がエネミーの場合、変数ID 1 に敵のIDを取得します。
あとは、$gameTroops.members()[$gameVariables.value(1)] で敵メンバーの情報を取得できます。

変数のIDは、アクターごとに変えてください。
最後に編集したユーザー フトコロ on 2017年12月03日(日) 15:01 [ 編集 1 回目 ]
---------------------------------------------------------------------------------------------------
プラグイン置き場(GitHub)
https://github.com/futokoro/RPGMaker/blob/master/README.md

検討中の内容は上記リンク先の「対応するかもしれないプラグインのメモ」を参照してください。
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: あるアクターが最後に攻撃した敵のIDを習得したい。

投稿記事by 風雨がぁ » 2017年12月03日(日) 07:21

フトコロ さんが書きました:こんにちは。

MVのデフォルトのスクリプトでは、残念ながら取得することができません。
$gameActors.actor(n)._lastTergetIndex で、最後に選択した対象のID(パーティーの並び順)を取得できますが
それが、敵なのか味方なのかは判断できません。

替わりにですが、以下のプラグインで代用できると思います。

https://raw.githubusercontent.com/futokoro/RPGMaker/master/FTKR_ExVariablesChange.js

アクターのメモ欄に以下のタグを追記してみてください。

<EVC_使用時>
if (b && !b._actorId) v[1] = b.index();
</EVC_使用時>

これで、スキルやアイテムを使用した相手がエネミーの場合、変数ID 1 に敵のIDを取得します。
あとは、$gameTroops.members()[$gameVariables.value(1)] で敵メンバーの情報を取得できます。

変数のIDは、アクターごとに変えてください。


フトコロ様、返信ありがとうございます。
デフォルトのスクリプトではできなかったのですね…。

試しにアクターのメモ欄に記述してみましたが、
目で確かめられるように文章表記を行ってみたのですが0と表示されました。
また、$gameTroops.members()[$gameVariables.value(1)]の
使いどころが間違っていなければですが、
トリアコンタン様の副作用プラグインにてターン開始時に取得を行ったのですが
やはり0と出てしまいます。
これは仕様でしょうか。
成功できているかできていないかの確認ができないため不安です。
変数の使いどころが間違っていないか指摘していただきたいです。
よろしくお願いいたします。
アバター
フトコロ
記事: 1029
登録日時: 2017年2月06日(月) 21:32

Re: あるアクターが最後に攻撃した敵のIDを習得したい。

投稿記事by フトコロ » 2017年12月03日(日) 15:00

すみません。タグが間違っていました。
正しくは、こうです。(EVCと使用時の間には半角スペース)

コード: 全て選択

<EVC 使用時>
if (b && !b._actorId) v[1] = b.index();
</EVC 使用時>

なお、格納される数値ですが、敵グループの先頭エネミーを 0 として、0,1,2,...となります。

先頭エネミーを選択した時のみ 0 の値にしたい場合は、以下の様にしてみるとよいと思います。

コード: 全て選択

<EVC 使用時>
v[1] = b && !b._actorId ? b.index() : -1;
</EVC 使用時>

これで、エネミー以外を対象にした場合は、-1 が格納され、エネミーの場合は、0からの数値が格納されます。
---------------------------------------------------------------------------------------------------
プラグイン置き場(GitHub)
https://github.com/futokoro/RPGMaker/blob/master/README.md

検討中の内容は上記リンク先の「対応するかもしれないプラグインのメモ」を参照してください。
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: あるアクターが最後に攻撃した敵のIDを習得したい。

投稿記事by 風雨がぁ » 2017年12月04日(月) 08:25

フトコロ さんが書きました:すみません。タグが間違っていました。
正しくは、こうです。(EVCと使用時の間には半角スペース)

コード: 全て選択

<EVC 使用時>
if (b && !b._actorId) v[1] = b.index();
</EVC 使用時>

なお、格納される数値ですが、敵グループの先頭エネミーを 0 として、0,1,2,...となります。

先頭エネミーを選択した時のみ 0 の値にしたい場合は、以下の様にしてみるとよいと思います。

コード: 全て選択

<EVC 使用時>
v[1] = b && !b._actorId ? b.index() : -1;
</EVC 使用時>

これで、エネミー以外を対象にした場合は、-1 が格納され、エネミーの場合は、0からの数値が格納されます。


回答ありがとうございます。
直された内容と、新たに教えてくださった内容を実行してみました。
フトコロ様の教えてくださった通りにしてみると
しっかり二番目のエネミーに1と表記してくれました!
しかし、始めに教えて頂いた$gameTroops.members()[$gameVariables.value(1)]が
エラーを起こしている事を伝えるのを忘れていました…。申し訳ございません。
エラー内容は
ReferenceError
$gameTroops is not defined です。
コモンイベントにて取得させています。
多分私のミスだとは思いますが正しい使い方を教えてくださると嬉しいです。
よろしくお願いいたします。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: あるアクターが最後に攻撃した敵のIDを取得したい。

投稿記事by 奏ねこま » 2017年12月04日(月) 09:16

横から失礼します。
$gameTroopsではなく、$gameTroopですね。
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: あるアクターが最後に攻撃した敵のIDを取得したい。

投稿記事by 風雨がぁ » 2017年12月04日(月) 15:49

奏ねこま さんが書きました:横から失礼します。
$gameTroopsではなく、$gameTroopですね。


奏ねこま様、回答ありがとうございます。
sを消したらエラー無しでできました!ありがとうございます。

私の予想でしたら$gameTroop.members()[$gameVariables.value(1)]
でもエネミーの番号を習得できるかと思ったのですが
文章に出してみると[object Object]と出てきました。
if (b && !b._actorId) v[61] = b.index(); の時の変数と同じ数字が入ると思いましたが、
この[object Object]とは一体どういうものでしょうか。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: あるアクターが最後に攻撃した敵のIDを取得したい。

投稿記事by 奏ねこま » 2017年12月04日(月) 16:08

$gameTroop.members()は敵データのリストです。
$gameTroop.members()[n]だと「n番目の敵のデータ」となります。
インデックスを取得したいなら
$gameTroop.members()[n].index()
となるんでしょうけど、この場合、取得した結果は
nと同じになるんじゃないですかね?
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: あるアクターが最後に攻撃した敵のIDを取得したい。

投稿記事by 風雨がぁ » 2017年12月05日(火) 07:41

奏ねこま さんが書きました:$gameTroop.members()は敵データのリストです。
$gameTroop.members()[n]だと「n番目の敵のデータ」となります。
インデックスを取得したいなら
$gameTroop.members()[n].index()
となるんでしょうけど、この場合、取得した結果は
nと同じになるんじゃないですかね?


奏ねこま様、再び返信ありがとうございます。

難しい内容なのでしっかり理解はできていない状態ですが、
内容的にはアクターが最後に攻撃した敵グループの中の敵の先頭からの番号、
又は最後に選択した敵グループの中の敵の先頭からの番号
というスクリプトではないという認識でよろしいのでしょうか?
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: あるアクターが最後に攻撃した敵のIDを取得したい。

投稿記事by 奏ねこま » 2017年12月05日(火) 08:28

敵グループの先頭からの番号は、フトコロさんのプラグインで取得できてます。
フトコロさんのプラグインを使用し、説明の通りにメモ欄に記述していれば、
変数の中にその番号があるはずです。

$gameTroopだなんだというのは、そこからさらに敵の詳細な情報を取得するためのものです。
番号だけ知りたいのなら必要ありません。

“MV:質問” へ戻る