お疲れ様です。
ダメージ計算式の挙動が想定通り作用しておらず困っています。
具体的に ステート8番か9番が付与されている敵に攻撃した際、ステート3番を付与して通常より高いダメージを与える という処理を想定しています。
記述しているダメージ計算式は
(b.isStateAffected(8) || b.isStateAffected(9) ? b.addState(3) ; (50 + a.atk - b.def) * 2.5 : (50 + a.atk - b.def) * 1.5)
です。
想定している挙動; ステート8番か9番が付与されているbにステート3番が適用され、(50 + a.atk - b.def) * 2.5のダメージ処理が適用される。指定のステートが付与されていない場合は(50 + a.atk - b.def) * 1.5のダメージ処理のみが適用される
実際に確認できた挙動; ステート8番か9番が付与されているbには何のステートも付与されず、ダメージが0になる。指定のステートが付与されていない場合は問題なく(50 + a.atk - b.def) * 1.5のダメージが適用される。
当方が記述式に詳しくない為頓珍漢な記述をしているとは思うのですが、どなたか助言を頂戴できれば幸いです
ダメージ計算式のaddStateの挙動について
-
- 記事: 8
- 登録日時: 2020年6月25日(木) 03:17
- Plasma Dark
- 記事: 731
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: ダメージ計算式のaddStateの挙動について
コード: 全て選択
(b.isStateAffected(8) || b.isStateAffected(9) ? b.addState(3) ; (50 + a.atk - b.def) * 2.5 : (50 + a.atk - b.def) * 1.5)
JavaScriptにおいてセミコロンは文を区切る役割を果たします。
https://jsprimer.net/basic/statement-expression/
よく見かける
コード: 全て選択
b.addState(3); (ダメージ計算式)
https://developer.mozilla.org/ja/docs/W ... jects/eval
(RPGツクールMVのダメージ計算式はevalによって評価されています。 rpg_objects.js Game_Action.prototype.evalDamageFormula 参照)
ご提示頂いた計算式は、条件演算子を用いた式の途中で文を区切るような記述がされてしまっており、構文エラーになります。
あまり複雑な計算式を書くべきとは思いませんが、if文で分岐してあげることで意図通りの挙動になると思います。
コード: 全て選択
if (b.isStateAffected(8) || b.isStateAffected(9)) { b.addState(3) ; (50 + a.atk - b.def) * 2.5 } else { (50 + a.atk - b.def) * 1.5 }
- Plasma Dark
- 記事: 731
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: ダメージ計算式のaddStateの挙動について
あまり複雑なダメージ計算を書くべきとは思わない、と書きながら対案がないのもアレなので、特定ステートにかかっている対象に使用した場合に別ステートを付与したりダメージ倍率を上げるスキル・アイテム効果を実現するプラグインの例を書いてみました。
https://gist.github.com/elleonard/fc1f7 ... a6ee10bb93
ただし、これは独自の効果を実現する方法の一例です。
応用を効かせれば他にも様々な効果が実現できますが、今回提示した効果のスキルをひとつだけ実装したい、などという場合にはちょっと大仰でもあります。
最終的にはプロジェクトの規模、自身や開発チームの能力などを総合して、管理しやすい方法で実現してください。
https://gist.github.com/elleonard/fc1f7 ... a6ee10bb93
ただし、これは独自の効果を実現する方法の一例です。
応用を効かせれば他にも様々な効果が実現できますが、今回提示した効果のスキルをひとつだけ実装したい、などという場合にはちょっと大仰でもあります。
最終的にはプロジェクトの規模、自身や開発チームの能力などを総合して、管理しやすい方法で実現してください。