ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

メルサイア
記事: 120
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by メルサイア » 2017年5月19日(金) 12:34

目的: 特定のアイテムを使ったときに呼び出すコモンイベントで、そのアイテムの使用者と対象者を特定したい。

方法は、題目の通りなのですが、今までアイテムIDを取るところまではできたものの、
対象やインデックスを格納するところがうまく取れなくって、困っています。
ご存知の方、よろしければ、教えていただけないでしょうか。

参考までに、これまで書いたスクリプトを置きます。
(有志の方がつくられたスクリプトコマンド集TkoolMV_PluginCommandBook.jsを参考にさせていただいています。感謝!)

コード: 全て選択

// 変数1292に最後に使ったアイテムid、変数1293に対象が敵か(敵:1、味方:2、その他:3)
// 変数1294に対象のインデックス情報
// (アクターならパーティ番号1~、敵なら敵インデックス1~、その他ならランダム0、なし-1)
// を格納します。
if (!$gameParty.lastItem()) {
  // アイテムを使ってなかったら、何もしない(初期値はすべて0)
}else{
  // アイテムを使っていたら、そのidを変数に格納。
  $gameVariables.setValue(1292, $gameParty.lastItem().???);
  $gameVariables.setValue(1293, $gameParty.lastItem().id);
  $gameVariables.setValue(1294, $gameParty.lastItem().???);
}

使用例は以下の画像のような形で、コモンイベントに入れて使う予定です。
この3つが取得できるのであれば、
プラグインなど、もっと簡単に実現できる方法があれば、それでもかまいません。
(いろいろ調べてなかったので質問していますが、私が見落としているだけかもしれません)

よろしくお願いいたします。
添付ファイル
a5413e12ad75a623f1e40fa094ca4fdd.png
最後に編集したユーザー メルサイア on 2017年5月19日(金) 19:43 [ 編集 3 回目 ]

アバター
しぐれん
記事: 225
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: ラスト使用スキル情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by しぐれん » 2017年5月19日(金) 12:57

BattleManager.startActionのタイミングでスキルの処理を開始する前に情報を記録する必要があります。
startAction()終了後にBattleManager._targetsに攻撃対象全てのリストが残っています。

これらはGame_Battlerなので、index()メソッドで番号に変換できます。
メルサイア
記事: 120
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by メルサイア » 2017年5月19日(金) 13:16

>しぐれんさん
参考になる情報、ありがとうございます。
ただ、私にはかなり難しい内容で、あまりよく理解できていません…。

あと、申し訳ありません。タイトル名が間違っておりました。
「ラスト使用スキル情報」ではなく、「ラスト使用アイテム情報」です。
スキルは一応、3種とも取れています。

また、対象者だけでなく、使用者についても、本来は同じようなことをしないといけないのですが、
スキルであまりに面倒だった経験をした(エラーが出なくなるまで、1か月以上かかりました…><)ため、
なるべく簡潔化できるようにと、このたびは3つで質問しました。

スキルに関しては、例外処理がとてもややこしいですが、以下のようなやり方でやっています。
https://www.dropbox.com/s/le2o9sbogta0c ... .html?dl=0

もしスキルもアイテムも、取得方法が同じの場合、
BattleManager.startActionのタイミングで取るということは、プラグインにしないと厳しいということでしょうか。
このメソッドに対する知識はほとんどなく、またスクリプトも苦手なため、
できましたら他の方の助力をいただければ幸いです。
フトコロ
記事: 458
登録日時: 2017年2月06日(月) 21:32

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by フトコロ » 2017年5月19日(金) 13:57

こんにちは。

ラスト使用アイテム情報、というわけではありませんが
スキルやアイテムを使用した時に変数を操作するプラグインであれば、下があります。

<ダウンロード>
https://raw.githubusercontent.com/futokoro/RPGMaker/master/FTKR_ExVariablesChange.js

プラグインパラメータの--アイテム使用時--<Use>に操作したい内容を入力するとどのスキル・アイテム使用時にも実行します。

入力例)

コード: 全て選択

v[100] = !!a._actorId; v[101] = !!b._actorId; v[102] = DataManager.isSkill(item);

上の意味は、
変数100に使用者がアクターなら真、エネミーなら偽を代入(a で使用者のゲームデータを参照)
変数101に対象者がアクターなら真、エネミーなら偽を代入(b で対象者のゲームデータを参照)
変数102に使用したものがスキルなら真、アイテムなら偽を代入(item で使用したスキル・アイテムのデータを参照)

こちらは使えませんか?
メルサイア
記事: 120
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by メルサイア » 2017年5月19日(金) 19:30

>フトコロさん
便利で多機能なプラグインをありがとうございます。
ソースもざっと見てみました。
競合対策もしてあって、スキル・アイテム使用時に(コモンイベント発生前に)割り込んでスクリプトを実行でき、
かつパラメータに「a.」や「b.」で、すでにスキルなどで取得した使用者・対象の情報を簡単にゲーム内変数に取れるとは、すごい機能ですね。

例をいただき、ありがとうございます。
パラメータ「Use」を

コード: 全て選択

v[100] = !!a._actorId; v[101] = !!a._actorId; v[102] = DataManager.isSkill(item); alert(v[100]+" "+v[101]+" "+v[102]);

として、早速動かしてみました。
vはゲーム内変数なのにtrue、falseを出力できることや、「!!a._actorId」で敵や味方が判別できることを知り、勉強になりました。
ただ、アイテムの対象が「なし」の時も、v[102]は「true(味方)」となることを確認しました。
また、パラメータ名Useなどの説明では「アイテム・スキル使用時」とあり挙動と一致しますが、
その上の項目名には「--アイテム使用時--」となっていたので、少しわかりにくかったです。

ただ、私のスクリプトの技術では、これを使っても、例外処理やエラー処理が複雑すぎて、解決に数週間かかりそうです…。
現在β版公開に向けてのテストプレイ中で、かつ戦闘時のエラーは致命的で、
短時間で取り切れないとテストプレイヤーさんなどにも迷惑がかかるため、この方法ではちょっと私の力量的に厳しく、
できるだけ簡単なやり方はないか、探しています。

しかし、これは本当に便利な汎用プラグインだと思います。
もし時間をかけて、スクリプトを使いこなせるようになった暁には、テストプレイなどに使おうと思います。
添付ファイル
fc8112d3db662e88941775a7db35b310.png
フトコロ
記事: 458
登録日時: 2017年2月06日(月) 21:32

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by フトコロ » 2017年5月19日(金) 21:09

メルサイア さんが書きました:また、パラメータ名Useなどの説明では「アイテム・スキル使用時」とあり挙動と一致しますが、
その上の項目名には「--アイテム使用時--」となっていたので、少しわかりにくかったです。

これは見逃していました。
ご連絡ありがとうございます。

メルサイア さんが書きました:パラメータ「Use」を
コード: 全て選択
v[100] = !!a._actorId; v[101] = !!a._actorId; v[102] = DataManager.isSkill(item); alert(v[100]+" "+v[101]+" "+v[102]);

として、早速動かしてみました。

v[100] と v[101] に同じ内容を入力していますが、正しいでしょうか?

メルサイア さんが書きました:ただ、アイテムの対象が「なし」の時も、v[102]は「true(味方)」となることを確認しました。

v[102]には、使用したものがスキルかどうかを判定した結果を代入しますので、味方かどうかとは違います。

あと、アイテムの対象が「なし」の場合は、基本的に使用時の処理は実行されません。
(なんらかのプラグインで処理を変えている場合は除く)

>追記
件名の情報は以下のスクリプトで取得できます。

1.アイテムID
v[x] = item.id

2.対象が敵か味方かその他か
v[x] = b ? (!!b._enemyId ? 1 : 2) : 3

3.インデックス番号はこれで指定するのは厳しいですね
→ただ、添付されていたスキルの処理を見るとアクターやエネミーの名前を知りたいようですので
その場合は、以下で取得できます。

対象の名前(アクター)
v[x] = b && !!b._actorId ? b.actor().name : ''

対象の名前(エネミー)
v[x] = b && !!b._enemyId ? b.enemy().name : ''
メルサイア
記事: 120
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by メルサイア » 2017年5月20日(土) 06:11

>フトコロさん
ご丁寧にありがとうございます。
こんなポカミスが多い返信に、いろいろ教えてくださり、助かります……!

>v[100] と v[101] に同じ内容を入力していますが、正しいでしょうか?
すみません、ポカミスです。「v[101] = !!b._actorId;」でないとおかしいですよね。

>v[102]には、使用したものがスキルかどうかを判定した結果を代入しますので、味方かどうかとは違います。
申し訳ないです、これも入力ミスです。「v[101]」と書くつもりで数字を間違えてしまいました。
ですので、v[102]がスキルかどうかの判定をしていることは理解しています。
上記のミスでv[101]にはv[100]と同じ値が入っていたので、テスト結果自体が間違っています。
もう一度テストをやり直します。

>あと、アイテムの対象が「なし」の場合は、基本的に使用時の処理は実行されません。
>(なんらかのプラグインで処理を変えている場合は除く)
これは知りませんでした。このプラグインや、使用効果にあるコモンイベントすら呼び出されないのでしょうか。
呼び出されていたような気がしますが、私の勘違いかもしれませんので、
これも、テストをもう一度やり直して、
プラグインや、コモンイベントが、それぞれ呼び出されたかどうかを、ここで報告します。

>1.アイテムID、2.対象が敵か味方かその他か、3.インデックス番号とキャラ名
ありがとうございます! 詳細なスクリプト、非常に助かります。
インデックス番号に関しては、ツイッターでも助言を募ったところ、@fuku_fgsさんに、
「バトル中であればBattleManager._action.subject().index()で使用者のindex、
BattleManager._action._targetIndexで目標のindexが取れそう」
との助言をいただいたので、こちらで試してみます。
スキルで同じようなことをやった覚えがあるので、例外処理やエラー処理はそちらのノウハウを流用してみます。

重ね重ねのミス、申し訳ありません。
私はミスしやすい人なのか、特に数字や英字に対して、勘違いやポカミスが多いみたいで、
自分で正しくテストをしているつもりでも、他人に指摘されるまでそのことに気付かないことが多いので、
それで人より余計に時間がかかっているのかもしれません……。
もう少し、投稿時やテスト時に入力を見直すことにします。
フトコロ
記事: 458
登録日時: 2017年2月06日(月) 21:32

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by フトコロ » 2017年5月20日(土) 07:14

メルサイア さんが書きました:>あと、アイテムの対象が「なし」の場合は、基本的に使用時の処理は実行されません。
>(なんらかのプラグインで処理を変えている場合は除く)
これは知りませんでした。このプラグインや、使用効果にあるコモンイベントすら呼び出されないのでしょうか。

使用効果のコモンイベント呼び出しだけは実行できます。

これは、コモンイベントの呼び出しは、スキルやアイテムの発動処理とは別に実行するためです。

スキルやアイテムの発動処理、つまり命中回避判定やダメージ計算、使用効果の処理には、対象が必要です。

そのため、対象が無いと発動処理が実行されないのです。

当プラグインの使用時の処理は、この発動処理の中で行いますので、対象が無いと実行しないのです。
メルサイア
記事: 120
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by メルサイア » 2017年5月21日(日) 22:07

>フトコロさん
ご丁寧に説明をいただき、ありがとうございます。よく理解できました。

しばらく創作に時間が取れるかわからないので、もう少し期間がかかるかもしれませんが、
時間をかけてトライしています。
ご助言、感謝です。
メルサイア
記事: 120
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: ラスト使用アイテム情報(ID、対象が敵か味方かその他か、敵or味方インデックス)を取得するスクリプトかプラグインを知りませんか

投稿記事by メルサイア » 2017年7月25日(火) 14:34

>フトコロさん
ご無沙汰しております。
お返事が大変遅くなってしまい、申し訳ありません。

あれから何度もトライしてみたのですが、やはり私には難しく、この部分の制作を断念してしまっていました。

「;」で複数のスクリプトをつなげて書けるのはスクリプト熟練者には非常に便利ですが、
なにぶん初心者には敷居が高く、
あとで見返してみても何をしているのかが理解できず、プロジェクトの保守的な面からも混乱してしまうため、
いったんFTKR_ExVariablesChange.jsの使用を見送ろうと思います。
たくさん教えていただいたのに申し訳ありませんが、ご了承願います。
アイテム使用時に呼び出すコモンイベントで、フトコロさんに教えてもらったスクリプトを使うなど、別の方法を探してみます。

別件ですが、ツミオさんがツクールフォーラムで紹介されていた『RPGMakerMV Intellisense』というものを使えば
コアスクリプトのメソッドも入力補完が効くので、これを使えば少しは不具合が減るかも…と思っています。
https://forum.tkool.jp/index.php?thread ... #post-2097

またこれも別件ですが、フトコロさんのFTKR_ExBattleEvent.jsの方は、コモンイベントでの割り込みが可能なので、
そちらはうまく使わせていただいています。
とても使いやすく、目的の実装を数十分で終わらせることができました。ありがとうございます!

いつも有能なプラグインをありがとうございます。今後ともよろしくお願いします。

“MV:質問” へ戻る