【解決済】プラグインの改変方法について教えてください。

ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

【解決済】プラグインの改変方法について教えてください。

投稿記事by ksk » 2024年2月14日(水) 00:19

こんにちは。

砂川赳さまが作成されたプラグイン『NRP_BattleEventEX.js』導入時、
スキルを使用した際の挙動を望むものに変更したいと考えております。
https://newrpg.seesaa.net/article/473072095.html

●現在の仕様として
①アクターに混乱などの行動制約『誰かを攻撃』となっているステートを付与する。
②バトルイベントから混乱を付与したアクターに戦闘行動の強制でスキルを使用させる。
 (ファイア等、敵1体を対象としたスキル)

上記のような設定を行った際の挙動ですが、
・プラグイン導入なし:敵に対してスキルを発動。
・プラグイン導入あり:敵か味方に対して通常攻撃を発動。

この挙動を、プラグインを導入した後でも
に対してスキルを発動するように変更したいと考えております。

プラグインの中身を確認してみたところ、素人でも大体の内容が分かるよう丁寧に書かれており、277行の

コード: 全て選択

    // 強制状態でなければ、有効判定を行う。
    if (!this.isForceEX()) {
        // かつ、戦闘行動の強制状態ならば、混乱処理を行う。
        // ※戦闘行動の強制では、この処理を飛ばしているため。
        if (this.isForcedTurn() && subject.isConfused()) {
            action.setConfusion();
        }
        // 実行不能なら終了
        if (!action.isForceValid()) {
            this._phase = "action";
            return;
        }

コード: 全て選択

    // 強制状態でなければ、有効判定を行う。
    if (!this.isForceEX()) {
        // かつ、戦闘行動の強制状態ならば、混乱処理を行う。
        // ※戦闘行動の強制では、この処理を飛ばしているため。
        //if (this.isForcedTurn() && subject.isConfused()) {
        //    action.setConfusion();
        //}
        // 実行不能なら終了
        if (!action.isForceValid()) {
            this._phase = "action";
            return;
        }
とコメントアウトすることで、プラグイン導入後でも通常攻撃ではなくスキルを使用させることには成功しました。
しかしながら、やりたいこののもう1方である攻撃対象を敵に限定させる方法が分かりません。
(ステート『誰かを攻撃』に設定している場合でも、スキル『範囲』の設定が優先されるようにしたい)

望む挙動を実装するために修正を加えるべき個所がわかりましたら、どなたか教えていただけないでしょうか。
どうぞよろしくお願いいたします。
最後に編集したユーザー ksk on 2024年2月15日(木) 02:00 [ 編集 1 回目 ]

ねこしゃり
記事: 12
登録日時: 2024年1月13日(土) 02:30
連絡を取る:

Re: プラグインの改変方法について教えてください。

投稿記事by ねこしゃり » 2024年2月14日(水) 04:00

こんばんは。

以下のプラグインコマンドを実行した場合は、プラグインの編集自体そもそも必要ないように思います。
◆NRP.forceAction [true or false]

こちらのコマンドでtrueを実行すればご要望の挙動となりそうなのですがいかがですか?
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: プラグインの改変方法について教えてください。

投稿記事by ksk » 2024年2月14日(水) 21:02

ねこしゃりさん

返信ありがとうございます。
ご指摘の通り、NRP.forceAction trueとプラグインコマンドを設定することで
パラメータの設定に関わらず『戦闘行動の強制』で強制行動を実行することができるのですが、
これはツクールデフォルトの動作そのものでして、
本プラグインで実装したいと考えている下記挙動を再現することが出来ず、難儀しております。

・MPやTPが不足している場合はスキルを発動しない。
・睡眠など、『行動できない』ステートにかかっている場合はスキルを発動しない。

あくまで、『誰かを攻撃』もしくは『敵を攻撃』となっているステートにかかっている場合のみ
仕様を変更したいと考えプラグインの編集に至りました。

ふと、状況の再現が面倒と感じましたので
必要最低限の要素のみ設定したプロジェクトファイルのDLリンクを記載しておきます。
引き続き皆様のお知恵を拝借できれば幸いです。

https://7.gigafile.nu/0219-e738e2cc901f ... e17e454ebe
DLパスワード:446
ねこしゃり
記事: 12
登録日時: 2024年1月13日(土) 02:30
連絡を取る:

Re: プラグインの改変方法について教えてください。

投稿記事by ねこしゃり » 2024年2月14日(水) 23:40

回答ありがとうございます。
ご要望の旨を理解できておらず申し訳ありませんでした。

プラグインの編集方法としまして、
現時点で修正を施されている箇所
280行目付近
action.setConfusion();
はまさしく混乱時にスキルを攻撃に切り替える命令で、こちらをコメントアウトする手法に問題はないと思います。

続いて攻撃対象の修正箇所について、
以下の修正をお試しください。
331行目付近、

コード: 全て選択

var _Game_Action_makeTargets = Game_Action.prototype.makeTargets;
Game_Action.prototype.makeTargets = function() {
    // 強制状態でなければ、混乱処理を行う。
    if (!BattleManager.isForceEX() && this.subject().isConfused()) {
        return this.repeatTargets([this.confusionTarget()]);
    }

    return _Game_Action_makeTargets.apply(this);
};


コード: 全て選択

var _Game_Action_makeTargets = Game_Action.prototype.makeTargets;
Game_Action.prototype.makeTargets = function() {
    // 強制状態でなければ、混乱処理を行う。
    // if (!BattleManager.isForceEX() && this.subject().isConfused()) {
    //     return this.repeatTargets([this.confusionTarget()]);
    // }

    return _Game_Action_makeTargets.apply(this);
};


同様にコメントアウトしてください。
こちらが混乱や激昂ステートのとき、特別にターゲットを作成している部分ですので、コメントアウトでスキップします。
戦闘行動の強制実行時においては混乱処理をしなくなるので、スキルの【範囲】が適用される、
といった動作になります。
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: プラグインの改変方法について教えてください。

投稿記事by ksk » 2024年2月15日(木) 01:59

ねこしゃりさん

返信ありがとうございます。
ご指摘いただいた変更を加えたところ、望み通りの挙動を実装することができました。
本当に助かりました!ありがとうございます。

“MV:質問” へ戻る