ページ 11

【解決済み】範囲攻撃や連続攻撃で得られるTPを一定にしたい

Posted: 2019年6月27日(木) 17:30
by 紫苑もみじ
デフォルトでは攻撃をする際、得られるTPが【攻撃する敵の数】×【連続回数】×【得TP】になっていると思います。

例1:
攻撃範囲が敵全体、連続回数が1、得TP10のスキルを敵が4体いるときに発動すると、4×1×10=40となる。
例2:
攻撃範囲が敵単体、連続回数が2、得TP10のスキルを発動すると、1×2×10=20となる。

これを連続回数や敵の数に依存せず、TPを固定値増加させるにはどうすれば良いでしょうか?
どのような攻撃でも得TPの値だけ増加するようにできると最も望ましいです。

Re: 範囲攻撃や連続攻撃で得られるTPを一定にしたい

Posted: 2019年6月28日(金) 19:17
by ムノクラ
多分、下記のプラグインで実現できます。

▼TP設定(茶の助様作)
TPに関する仕様を変更します。
https://plugin.fungamemake.com/archives/16332
* @param TPDamageUp
* @desc TPによる与ダメージ増加量の計算式
変化させたくない場合は、valueとだけ書き込んでください
* @default value * (100 + this.subject()._tp) / 100

この計算式を固定値にすれば良いかと思います。

Re: 範囲攻撃や連続攻撃で得られるTPを一定にしたい

Posted: 2019年6月28日(金) 20:54
by 紫苑もみじ
ご回答ありがとうございます!
申し訳ないのですが、私が意図しているのは「得られるTPを一定にする」動作で、「現在のTPの値を参照して攻撃力を変動させる」動作ではありません。

ですが、ご紹介頂いたスクリプトにありましたGame_Action.prototype.executeHpDamageという関数から辿ってみたところ、rpg_objects.jsにGame_Action.prototype.applyという関数を見つけました(1646行目)。
おそらくこれは1ヒット当たりの処理だと思われます。この内部にはapplyItemUserEffectという関数が使われており(1664行目)、これが攻撃時にTPを増やしている処理のようです。apply関数が攻撃回数と同じだけ呼び出されるため、TPを重複して取得する仕様になっているようです。

ですので、applyItemUserEffect関数をapply関数から削除し、apply関数の呼び出し元へ書き足せば私の目的が達成されると思うのですが、apply関数の呼び出し元が見つけられません。

apply関数の呼び出し元がわかる方がいらっしゃいましたら教えていただけると幸いです。

Re: 範囲攻撃や連続攻撃で得られるTPを一定にしたい

Posted: 2019年6月28日(金) 21:20
by さすらいのなんちゃら
BattleManager.js内のBattleManager.invokeNormalActionから呼び出されているかと思います。
引数subjectが攻撃する側、targetが攻撃を受ける側です。

Re: 範囲攻撃や連続攻撃で得られるTPを一定にしたい

Posted: 2019年6月28日(金) 22:16
by astral
こんばんは。
特に戦闘関連のプラグインを利用する場合ですが、Game_Action.prototype.applyは複数箇所やプラグインからも呼び出されています。
それとapplyItemUserEffectはTP目的ではないので、(TP以外の)機能を追加するプラグインあり、予期せぬ挙動をするようになってしまいます。

applyItemUserEffectを書き換えて、1回のみTPを増加させる方がいいです。
これを新規プラグインとして上の方へ登録してください。

コード: 全て選択

(function () {
    'use strict';

    var _Game_Action_initialize = Game_Action.prototype.initialize;
    Game_Action.prototype.initialize = function(subject, forcing) {
        _Game_Action_initialize.apply(this, arguments);
        this._userGainTp = false;
    };

    Game_Action.prototype.applyItemUserEffect = function(target) {
        if (!this._userGainTp) {
            var value = Math.floor(this.item().tpGain * this.subject().tcr);
            this.subject().gainSilentTp(value);
            this._userGainTp = true;
        }
    };

})();

Re: 範囲攻撃や連続攻撃で得られるTPを一定にしたい

Posted: 2019年6月28日(金) 22:44
by 紫苑もみじ
ありがとうございます!!
無事、望んだとおりの動作をしました!!

boolean変数でそういった処理をする方法は全然思いつかなかったです。参考になります。
本当にありがとうございました!!