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

アバター
紫苑もみじ
記事: 18
登録日時: 2019年6月27日(木) 17:20
連絡を取る:

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

投稿記事by 紫苑もみじ » 2019年6月27日(木) 17:30

デフォルトでは攻撃をする際、得られるTPが【攻撃する敵の数】×【連続回数】×【得TP】になっていると思います。

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

これを連続回数や敵の数に依存せず、TPを固定値増加させるにはどうすれば良いでしょうか?
どのような攻撃でも得TPの値だけ増加するようにできると最も望ましいです。
最後に編集したユーザー 紫苑もみじ on 2019年6月28日(金) 22:58 [ 編集 1 回目 ]

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

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

投稿記事by ムノクラ » 2019年6月28日(金) 19:17

多分、下記のプラグインで実現できます。

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

この計算式を固定値にすれば良いかと思います。
最後に編集したユーザー ムノクラ on 2019年10月24日(木) 22:09 [ 編集 1 回目 ]
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
紫苑もみじ
記事: 18
登録日時: 2019年6月27日(木) 17:20
連絡を取る:

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

投稿記事by 紫苑もみじ » 2019年6月28日(金) 20:54

ご回答ありがとうございます!
申し訳ないのですが、私が意図しているのは「得られる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関数の呼び出し元がわかる方がいらっしゃいましたら教えていただけると幸いです。
さすらいのなんちゃら
記事: 17
登録日時: 2017年7月24日(月) 17:23

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

投稿記事by さすらいのなんちゃら » 2019年6月28日(金) 21:20

BattleManager.js内のBattleManager.invokeNormalActionから呼び出されているかと思います。
引数subjectが攻撃する側、targetが攻撃を受ける側です。
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

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

投稿記事by astral » 2019年6月28日(金) 22:16

こんばんは。
特に戦闘関連のプラグインを利用する場合ですが、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;
        }
    };

})();
アバター
紫苑もみじ
記事: 18
登録日時: 2019年6月27日(木) 17:20
連絡を取る:

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

投稿記事by 紫苑もみじ » 2019年6月28日(金) 22:44

ありがとうございます!!
無事、望んだとおりの動作をしました!!

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

“MV:質問” へ戻る