ページ 11

ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 00:40
by スズラン
質問......というよりはちょっとした疑問なのですが

 HPダメージを与えつつTPダメージを与える
ダメージ計算式を作ろうとして
「(HPダメージの計算式) , (TPダメージの計算式)」
と書いたところHPのダメージが0になり
TPダメージの部分しか正常に適用されないという
状態に陥っていました。
 しかし、
「(TPダメージの計算式) , (HPダメージの計算式)」
と、逆にしてみたところ
何故か両方ともうまく適用されるようになりました

既に解決自体はしているのですが
解決した理由がよくわからないので
もし理由がわかる人がいたら教えてくれると助かります

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 03:31
by 名無し蛙
それは最終結果値をHPダメージ値として扱うという
スクリプト欄の中にTP減少処理を書き加えているからです。
式を,で区切ると「①, ②」の順に実行されます。
「1000, b.gainTp(-100)」と書いてしまうと最終結果値は
b.gainTp(-100)の戻り値(undefined)で1000というHPダメージ値は上書きされてしまいます。

ついでに言えばダメージ計算スクリプト内に計算以外の処理を書くのもあまり好ましくないです。
デフォルトの特徴「自動戦闘」やそれを流用したオートコマンド等では
最適な行動を評価する為に内部的に使用可能な全てのスキルのダメージ計算式を実行します。
その為、b.gainTp(-100)等が含まれていると
当該スキルを選出していないのに実行される、という事態が発生します。
その辺の仕様を理解した上で使用するなら問題は無いですが、バグの温床になるので注意が必要です。

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 11:08
by スズラン
そうだったのですか。ありがとうございます
要するに自動戦闘を使わなければこの形でも問題ないというわけですか?

 HPダメージと同時にTPダメージを与えることで
TPがMAX(or 0)になった際に行動不能かつ被ダメージ増加、っていう
ネプテューヌやソフィーのアトリエにあるような
いわゆるブレイクシステムを作りたかったんです。
 ですがプラグインなどでスキルを追加発動させようとすると攻撃がMissでもTP付与が適用され、
条件付き追加効果のプラグインでヒットした時にステートを付与することで
命中したかどうかの判定を行おうとすると動作こそすれ
ヒット→TPダメージまでに毎回約2秒ほど空白時間ができてしまうので
計算式にいれるしかないなと思いました。

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 13:24
by 名無し蛙
スズラン さんが書きました:要するに自動戦闘を使わなければこの形でも問題ないというわけですか?
そうですね。コアスクリプト内ではそこ以外で使用している様子はないです。

まぁ、否定だけするのも何なので自分なら
「使用効果の適用」部分に合わせて適当なプラグインを書きますかね。
これでスキル/アイテムのメモ欄に<TP_DAMAGE:70>とか書けばヒット時に対象のTPを70減らします。

コード: 全て選択

(()=>{
    'use strict'
    const _Game_Action_apply = Game_Action.prototype.apply;
    Game_Action.prototype.apply = function(target) {
        _Game_Action_apply.apply(this, arguments);
        if (!target.result().isHit()) return;
        if (!this.item().meta['TP_DAMAGE']) return;
        const value = Number(this.item().meta['TP_DAMAGE']);
        target.gainTp(-value);
    };
})();

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 14:17
by スズラン
返信ありがとうございます

 一つ気になるのですが
このプラグインって対象のTPチャージ率を
反映させたりはできるんですか?

そもそもダメージ計算式に書いたのは
・スキル毎にTPダメージを変える
・TPが減りやすい/にくい状態にするステート
・ボスと雑魚でTP被ダメージ量を変更
あたりを実装したかったからなので。
 元々は被ダメージ時のTPチャージを
利用していたのですが、それだと2回攻撃などのスキルが
あまりにも強力すぎたので別の方法を模索してました。

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 20:13
by 名無し蛙
TPチャージ率は.tcr(tp charge rate)というプロパティです。
ここでは対象者(b)がtarget、行動者(a)がthis.subject()となるので
const value = Number(this.item().meta['TP_DAMAGE']);の直下の行に
value = Math.floor(value * target.tcr);
を挿し込めば攻撃対象者のTPチャージ率が反映されます。
Math.floorは小数点以下の切り捨て処理です。

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 22:18
by スズラン
ありがとうございます
正常に動作したので使わせていただきます

どうやらTPチャージを反映させると
「Assignment to constant variable」
というエラーが出るので色々調べて
const value =

var value =
に書き換えたのですが、その辺は大丈夫ですか?
(Javascriptについては全くの無知で....)

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 22:34
by 名無し蛙
あっそれで大丈夫です。完全に自分の凡ミスですね。
constで指定すると宣言と同時に代入した値から変更する事を禁止します。
その制限を失くしたものがletになります。
varは更にletの性質を緩くしたものなのですが、厳密な挙動の違いは少々説明が面倒なので割愛します。

Re: ダメージ計算式についての疑問

Posted: 2022年4月01日(金) 22:52
by スズラン
ちょっとした疑問のつもりが
問題点とその対策まで丁寧に教えていただき
本当にありがとうございました