【解決済】攻撃時属性を取得する事は出来るのでしょうか?

某大佐
記事: 27
登録日時: 2022年2月19日(土) 22:44
連絡を取る:

【解決済】攻撃時属性を取得する事は出来るのでしょうか?

投稿記事by 某大佐 » 2022年7月30日(土) 18:35

弱点を突いてもHPを1残すスキルを作りたいのですが、攻撃時属性の取得は出来るものなのでしょうか?
基本の残す計算式、防御の考慮は出来、振れ幅は0にするつもりです。相手の属性有効度に関しては検索して出て来たので、問題ありません。
属性にまつわるプラグインは入れていないので、属性計算はデフォルトの一番有効度の高い属性で計算されるのですが、そういったスキルは属性無しもしくは、固定のものに限られてしまうのでしょうか?
最後に編集したユーザー 某大佐 on 2022年8月02日(火) 08:55 [ 編集 1 回目 ]

ツクール初心者です。結構な期間ウディタ使って来てて、感覚がややずれているので、度々おかしな発言があるかもしれません。
アバター
Plasma Dark
記事: 674
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 攻撃時属性を取得する事は出来るのでしょうか?

投稿記事by Plasma Dark » 2022年7月31日(日) 09:14

弱点を突いてもHPを1残すスキルを作りたいのですが、攻撃時属性の取得は出来るものなのでしょうか?


やりたいことは、「弱点をついていようが何であろうが、攻撃対象にトドメを刺せない(HPを最低1残す)スキルを作る」でしょうか。
もしそうであれば、プラグインを書いてみました。
https://github.com/elleonard/DarkPlasma ... OfSword.js
Rawボタンを右クリックして対象をファイルに保存してお使いください。

この仕様を、属性にかかわらずMZエディタのダメージ計算式のみで実現するのは推奨しません。

MZデフォルトのダメージ計算は以下の順序で行われます。

1. ダメージ計算式を評価する
2. 属性有効度を乗算する
3. (命中タイプが物理攻撃ならば)物理ダメージ率を乗算する
4. (命中タイプが魔法攻撃ならば)魔法ダメージ率を乗算する
5. (回復ならば)回復効果率を乗算する
6. (会心ならば)会心倍率(3)を乗算する
7. 分散度の適用を行う
8. 防御時のダメージ軽減を適用する
9. 小数点以下を四捨五入する

必中・会心なし・分散度0%の設定にして、ようやく影響が1,2,8,9のみになります。
通常攻撃属性の場合、2の計算で適用される攻撃属性は、行動者に特徴で付与された攻撃時属性の中から対象に最も有効な属性が選ばれます。
属性に関するプラグインを入れていないこと、最も有効度の高い属性で計算されるという記述から、ここでは通常攻撃属性で、攻撃時属性の特徴を複数種類付与しているという前提で考えます。

バトラーに付与された攻撃時属性は、 Game_BattlerBase.prototype.attackElements で一覧を取得できます。
その中から最も有効な属性の有効度を得るには、 Game_Action.prototype.elementsMaxRate を用いるのが楽です。
(Game_Actionインスタンスはダメージ計算式から参照できませんが、このメソッドは Game_Action インスタンス自身に依存しないので引数さえ指定すれば正しい結果を返します)

Math.min(b.hp/属性有効度-1, ダメージ計算) で1残す計算をしようと思う場合、以下のように書けます。
Math.min(b.hp/(Game_Action.prototype.maxElementsRate(b, a.attackElements()))-1, ダメージ計算)

MZエディタのダメージ計算式に複雑な内容を記述すると、その分だけメンテナンスしにくくなるので推奨はしません。
某大佐
記事: 27
登録日時: 2022年2月19日(土) 22:44
連絡を取る:

Re: 攻撃時属性を取得する事は出来るのでしょうか?

投稿記事by 某大佐 » 2022年8月02日(火) 08:48

プラグインとアドバイスありがとうございます!

ヘルプになかったので見落としていましたが、物理ダメージ率、魔法ダメージ率なんてあってそういう条件とタイミングで計算式に関わって来るのですね……。
特殊能力値にあるのを確認してきました。

クリティカル発生時は貫通でもと考えていたのですが、ありがたくプラグイン使わせていただきます!
ツクール初心者です。結構な期間ウディタ使って来てて、感覚がややずれているので、度々おかしな発言があるかもしれません。

“MZ:質問” へ戻る