ダメージを回復に変換するステートが作りたいです
条件として50ダメージ以下のみ回復して50以上はダメージはそのまま受けるなどしたいです。
実行可能なプラグインや代案などもあれば教えてください。
【解決済み】ダメージを回復に変換するステート
【解決済み】ダメージを回復に変換するステート
最後に編集したユーザー =匠= [ 2022年6月01日(水) 10:44 ], 累計 1 回
Re: ダメージを回復に変換するステート
色々試した結果うまくいったので共有します。
色々粗があるかもしれませんがよかったらどうぞ。
前提として必要なプラグインは
やな氏の の二つです
条件付き追加効果に関してはデフォルトだと一々発動した際に"追加効果が発動した!"的なメッセージが
出てしまうのでパラメータにnullと入れておきましょう。
1.ステートを作成
効果はナシでいいです。説明のためにここではD変換とでも呼んでおきますね。
2.攻撃用のスキルを作成
HPダメージ効果のあるスキル全ての計算式を書き換える必要があります。
敵にこのステートが付与されることがないのであれば敵が使うスキルだけ
計算式を書き換えるというのもアリです。
計算式は以下の通り
"D"=ダメージ計算式、"maxD"=無効化するダメージの最大値、"D変換"=D変換のステートID
まずifでダメージがmaxD以上か判断し、そうでない場合はさらに対象が
D変換のステートにかかっているかを判定。かかっていればダメージを無効化、
そうでなければ通常通りダメージを受ける、といった感じです。
例としてダメージ計算式が『a.atk * 4 - b.def * 2』、無効化するダメージの最大値が『50』、
D変換のステートIDが『10』なら
といった感じです。
そしてメモ欄に
と記入しておきましょう。
3.回復用のスキルを作成
攻撃用スキルの追加効果としてこのスキルを発動させることで
無効化→回復とし、ダメージ変換を実現します。
ダメージタイプはHP回復です。
計算式は以下の通り
まずifでダメージがmaxD以上か判断し、そうだった場合はランダムで1~3回復、
そうでない場合は能動側(攻撃を行った側)のダメージがそのまま回復量となる、といった感じです。
上の例に合わせるなら
といった感じですね。
『Math.randam()』は0~1未満の数字をランダムで代入するという意味で、
それに×2+1とすることで最低1~最大3でHP回復、という感じになります。
で、なぜランダムで1~3回復を入れているのかというと、
回復量が0の場合、要するにD変換のステートにかかってはいたけど
maxDを上回ってしまい変換できない、となった時に
ダメージの後に「0」と表示され(回復時の緑色ではなくなぜか白色)
「ダメージを受けていない!」というメッセージも出てしまいます。
ダメージを受けていない的なメッセージを用語から消してしまうのも手ですが、
それでもやっぱり白色で0と出るのが見映え的に悪かったので
ランダムで1~3回復、という形にしました。
無効化失敗時の回復が1~3なのも単にランダム性があった方が
見映えがいいというだけなので、別に0以外なら何でも構いません。
単純に『1』とかでもいいし、そもそも見映えを気にしないなら0でも可です。
とまあ、若干個人的な好みによる改変が入っていますがこんな感じでどうでしょう?
色々粗があるかもしれませんがよかったらどうぞ。
前提として必要なプラグインは
やな氏の の二つです
条件付き追加効果に関してはデフォルトだと一々発動した際に"追加効果が発動した!"的なメッセージが
出てしまうのでパラメータにnullと入れておきましょう。
1.ステートを作成
効果はナシでいいです。説明のためにここではD変換とでも呼んでおきますね。
2.攻撃用のスキルを作成
HPダメージ効果のあるスキル全ての計算式を書き換える必要があります。
敵にこのステートが付与されることがないのであれば敵が使うスキルだけ
計算式を書き換えるというのもアリです。
計算式は以下の通り
"D"=ダメージ計算式、"maxD"=無効化するダメージの最大値、"D変換"=D変換のステートID
コード: 全て選択
if ( ( "D" ) >= "maxD" ) { "D" } else { ( b.isStateAffected("D変換")? 0 : "D" ) }
D変換のステートにかかっているかを判定。かかっていればダメージを無効化、
そうでなければ通常通りダメージを受ける、といった感じです。
例としてダメージ計算式が『a.atk * 4 - b.def * 2』、無効化するダメージの最大値が『50』、
D変換のステートIDが『10』なら
コード: 全て選択
if ( ( a.atk * 4 - b.def * 2 ) >= 50 ) { a.atk * 4 - b.def * 2 } else { ( b.isStateAffected(10)? 0 : a.atk * 4 - b.def * 2 ) }
そしてメモ欄に
コード: 全て選択
<追加効果:S"回復用スキルのID(後述)",100%>
対象ステート条件:1:"D変換"
</追加効果>
3.回復用のスキルを作成
攻撃用スキルの追加効果としてこのスキルを発動させることで
無効化→回復とし、ダメージ変換を実現します。
ダメージタイプはHP回復です。
計算式は以下の通り
コード: 全て選択
if ( ("D") >= "maxD" ) { ( Math.random() * 2 + 1 ) } else { "D" }
そうでない場合は能動側(攻撃を行った側)のダメージがそのまま回復量となる、といった感じです。
上の例に合わせるなら
コード: 全て選択
if ( a.atk * 4 - b.def * 2 >= 50 ) { ( Math.random() * 2 + 1 ) } else { a.atk * 4 - b.def * 2 }
『Math.randam()』は0~1未満の数字をランダムで代入するという意味で、
それに×2+1とすることで最低1~最大3でHP回復、という感じになります。
で、なぜランダムで1~3回復を入れているのかというと、
回復量が0の場合、要するにD変換のステートにかかってはいたけど
maxDを上回ってしまい変換できない、となった時に
ダメージの後に「0」と表示され(回復時の緑色ではなくなぜか白色)
「ダメージを受けていない!」というメッセージも出てしまいます。
ダメージを受けていない的なメッセージを用語から消してしまうのも手ですが、
それでもやっぱり白色で0と出るのが見映え的に悪かったので
ランダムで1~3回復、という形にしました。
無効化失敗時の回復が1~3なのも単にランダム性があった方が
見映えがいいというだけなので、別に0以外なら何でも構いません。
単純に『1』とかでもいいし、そもそも見映えを気にしないなら0でも可です。
とまあ、若干個人的な好みによる改変が入っていますがこんな感じでどうでしょう?
Re: ダメージを回復に変換するステート
もっと簡単に実装できるプラグインを発見しました。
必要なプラグインはフトコロ氏のFTKR_SkillCounterです。
これでD変換用のステートのメモ欄に
と記入するだけで実装できました。
特定の属性のみ変換したい場合は
でいけました。
必要なプラグインはフトコロ氏のFTKR_SkillCounterです。
これでD変換用のステートのメモ欄に
コード: 全て選択
<ダメージ反転: Hp>
<SCT 有効条件>
( "ダメージ計算式" ) <= "無効化最大値"
</SCT 有効条件>
特定の属性のみ変換したい場合は
コード: 全て選択
<属性吸収: x>
<SCT 有効条件>
( "ダメージ計算式" ) <= "無効化最大値"
</SCT 有効条件>
Re: ダメージを回復に変換するステート
返信遅くなてしまい申し訳ありません
止まっていた作業を進められました
ありがとうございました
止まっていた作業を進められました
ありがとうございました