【解決済】currentActionの取得

アバター
あるまじろ
記事: 48
登録日時: 2016年6月08日(水) 00:19
連絡を取る:

【解決済】currentActionの取得

投稿記事by あるまじろ » 2021年4月06日(火) 22:01

追記:
タイトルの内容とは異なりますが、
当方の思っていた処理が実現しましたので
当記事は解決済とさせていただきます。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

いつもお世話になっております。
実装したい内容に関して、スクリプトのいじり方が分からなかったので
質問させていただきます。

現在、ツクールMZで
Yana氏のBeforeCommon.jsを使用し、
スキルの効果処理の前にコモンイベントを呼び出しています。
そのコモンイベントの中で、
今現在選択して処理しようとしているスキルのスキルIDを取得したいと思っています
(MZデフォルトで可能な、
 直前に使用したスキルIDの取得に関する情報が更新されるのは
 スキルが発動した以後のタイミングなのでできない状態です)。

コアスクリプトを見てみたところ、
BattleManagerのstartActionが
スキル解決前の選択したスキル情報を有しているのだろうと
目星をつけました。

コード: 全て選択

BattleManager.startAction = function() {
    const subject = this._subject;
    const action = subject.currentAction();
    const targets = action.makeTargets();
    this._phase = "action";
    this._action = action;
    this._targets = targets;
    subject.useItem(action.item());
    this._action.applyGlobal();
    this._logWindow.startAction(subject, action, targets);
};


上記中のcurrentActionが選択したスキルのスキルIDを意味しているのだろうとにらんでいます。
ですが、スクリプトには疎く、ここをどうすれば変数に取得できるかが分かりません。
どうにかして、このcurrentActionのインデックスを、
変数に取得する処理を挟めないでしょうか。

また、解決中の(選択した)スキル番号を取得する方法に関しまして、
上記の自分の予想が違っておりましたら、
スキル選択時にスキルIDを取得する方法を教えていただけましたら幸いです。
よろしくお願いいたします。
最後に編集したユーザー あるまじろ on 2021年4月07日(水) 01:10 [ 編集 3 回目 ]

アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: currentActionの取得

投稿記事by WTR » 2021年4月06日(火) 22:44

BeforeCommon.js がどういう処理かわからないので startAction() のタイミングで間に合うのかわかりませんが
とりあえず以下のようなモノで取得可能とは思います。
ベタ書きで汎用性の欠片もなくて恐縮ですが…

コード: 全て選択

(() => {
   "use strict";
   const _BattleManager_startAction = BattleManager.startAction;
   BattleManager.startAction = function() {
      _BattleManager_startAction.apply(this, arguments);
      if (this._action.isSkill()) {
         $gameVariables.setValue(1, this._action._item._itemId); // アクション内容がスキルなら変数1にスキルIDを取得
      }
   };
})();
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
あるまじろ
記事: 48
登録日時: 2016年6月08日(水) 00:19
連絡を取る:

Re: currentActionの取得

投稿記事by あるまじろ » 2021年4月06日(火) 23:33

>>WTRさん

お返事いただきありがとうございます。
コードをプラグインにして試してみたのですが、
Yana氏のプラグインと合わせた処理順の関係か、
自分の思ったタイミングでの取得となっていない状態でした。
(取得自体はWTRさんのコードで処理されており、スキル後のコモンイベントでは反映されていました)

Yana氏のプラグインもちょうどこのBattleManager_startActionでの処理で
currentActionを触られている様子なので競合しているのかもしれません。

beforecommon.jsですが、
こちらでご覧いただけます。

ツクプラさんの該当ページ
https://plugin.fungamemake.com/archives/2033
最後に編集したユーザー あるまじろ on 2021年4月06日(火) 23:42 [ 編集 1 回目 ]
アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: currentActionの取得

投稿記事by WTR » 2021年4月06日(火) 23:40

プラグインの順番が効くかもしれません。BeforeCommon.js より↾に配置したらどうでしょうか。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
あるまじろ
記事: 48
登録日時: 2016年6月08日(水) 00:19
連絡を取る:

Re: currentActionの取得

投稿記事by あるまじろ » 2021年4月06日(火) 23:49

>>WTRさん
試してみたのですが、
やはりコモンイベントが処理されるタイミングでは変数に取得できていないようです。

①BeforeCommon時の変数=0
②WTRさんのコードで取得?
③スキル処理(ダメージその他)
④スキル後コモン→取得されたスキルIDは表示される

このような順番になっているのかもしれません
Artemis

Re: currentActionの取得

投稿記事by Artemis » 2021年4月07日(水) 00:25

横やりで申し訳ございません。
コモンイベント内で以下のスクリプトを入れて取得できませんでしょうか?

コード: 全て選択

const subject = BattleManager._subject;
const action = subject ? subject._actions[0] : null;
let SkillId;
if (action && action.isSkill()) {
SkillId = action.item().id;
// SkillIdにスキルIDが入る
}
アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: currentActionの取得

投稿記事by WTR » 2021年4月07日(水) 00:45

Artemis さんが書きました:横やりで申し訳ございません。
コモンイベント内で以下のスクリプトを入れて取得できませんでしょうか?


たしかにコモンイベント内で使う変数ならコモンイベント内で取ればいいですね。思い至らなかった…
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
あるまじろ
記事: 48
登録日時: 2016年6月08日(水) 00:19
連絡を取る:

Re: currentActionの取得

投稿記事by あるまじろ » 2021年4月07日(水) 01:07

>>Artemisさん

いつもお世話になっております。

コード: 全て選択

const subject = BattleManager._subject;
const action = subject ? subject._actions[0] : null;
let SkillId;
if (action && action.isSkill()) {
SkillId = action.item().id;
// SkillIdにスキルIDが入る
}
 $gameVariables.setValue(1,SkillId)


上記のように、
いただいたコードに[SkillId]を変数1に取得するコードを追加したところ、
無事に取得することができました。
魔法のような処理で、深夜ながら思わず声を上げてしまいました。
これで、思っていた通りの処理が実現できます。
ありがとうございます!


>>WTRさん
こちらの説明不足の中、対応いただきましてありがとうございました。
機会がありましたら、またお力をお貸しください。
ありがとうございました。


つきましては、当記事を解決済とさせていただきます。

“MZ:質問” へ戻る