ページ 1 / 1
【解決済み】運が高いほど分散度がよい方向に働くように処理する方法
Posted: 2022年3月13日(日) 21:26
by Dante
いつもお世話になっております。
表題について、例えば分散度が20%の攻撃スキルについて使用者の運を参照し
運が0~100の時:ダメージは80%~120%
運が100~200の時:ダメージは90%~120%
運が200~300の時:ダメージは100%~120%
運が300~400の時:ダメージは110%~120%
運が401以上の時:ダメージは120%
となるように処理をしたいと考えております。
何かよい手段や計算方法等がありましたら教えて頂きたいです。
よろしくお願いいたします。
Re: 運が高いほど分散度がよい方向に働くように処理する方法
Posted: 2022年3月14日(月) 12:37
by ムノクラ
Dante さんが書きました:いつもお世話になっております。
表題について、例えば分散度が20%の攻撃スキルについて使用者の運を参照し
運が0~100の時:ダメージは80%~120%
運が100~200の時:ダメージは90%~120%
運が200~300の時:ダメージは100%~120%
運が300~400の時:ダメージは110%~120%
運が401以上の時:ダメージは120%
となるように処理をしたいと考えております。
何かよい手段や計算方法等がありましたら教えて頂きたいです。
よろしくお願いいたします。
スキルの分散度の仕様を変更するのはプラグイン必須になると思います。
そこで、ダメージ計算式の中に分散度を含めてしまうのが、手っ取り早いと考えます。
ダメージ計算式で、行動者の運は a.luk で取得されます。
参考
https://tkool.jp/mv/guide/004_006d.html
Dante氏が求めているであろう、運でダメージが変動する分散度を算出する式は下記になります。
コード: 全て選択
Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80
この式に、本来のダメージ計算式を乗算すれば、分散値として働きます。
例:デフォルトのスキル「攻撃」
元
コード: 全て選択
a.atk * 4 - b.def * 2
分散度:20%
変更後
コード: 全て選択
(a.atk * 4 - b.def * 2) * (Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80) / 100
分散度:0%
一応、ここに至るまでの過程を整理します。
100や200の値が重複しているので、100上がる毎に分散値の最低値が上がると判断しました。
(3桁目の数字だけで判別できるシンプル化にもなります)
条件を表に整理すると下記になると思います。
運最低値 運最高値 分散最低値 分散最高値
0 99 80 120
100 199 90 120
200 299 100 120
300 399 110 120
400 499 120 120
500 --- 120 120
※RPGツクールMVで運の最低値は1ですが、便宜上
つまり、
・分散最低値は運の3桁目が上がる毎に10上がる。
・運の影響は500未満まで。
・最高値は120で固定。
という条件になります。
最低分散度の値は下記で算出できます。
コード: 全て選択
Math.floor(Math.min(499, a.luk) / 100) * 10 + 80
Math.floor は端数切捨て
Math.min は()内の数値の小さい方を使用
する関数です。
あとは、乱数の発生方法「Math.random()」を理解すれば、分かると思います。
参考
https://www.sejuku.net/blog/22432
Re: 運が高いほど分散度がよい方向に働くように処理する方法
Posted: 2022年3月14日(月) 21:39
by Dante
ムノクラ さんが書きました:Dante さんが書きました:いつもお世話になっております。
表題について、例えば分散度が20%の攻撃スキルについて使用者の運を参照し
運が0~100の時:ダメージは80%~120%
運が100~200の時:ダメージは90%~120%
運が200~300の時:ダメージは100%~120%
運が300~400の時:ダメージは110%~120%
運が401以上の時:ダメージは120%
となるように処理をしたいと考えております。
何かよい手段や計算方法等がありましたら教えて頂きたいです。
よろしくお願いいたします。
スキルの分散度の仕様を変更するのはプラグイン必須になると思います。
そこで、ダメージ計算式の中に分散度を含めてしまうのが、手っ取り早いと考えます。
ダメージ計算式で、行動者の運は a.luk で取得されます。
参考
https://tkool.jp/mv/guide/004_006d.html
Dante氏が求めているであろう、運でダメージが変動する分散度を算出する式は下記になります。
コード: 全て選択
Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80
この式に、本来のダメージ計算式を乗算すれば、分散値として働きます。
例:デフォルトのスキル「攻撃」
元
コード: 全て選択
a.atk * 4 - b.def * 2
分散度:20%
変更後
コード: 全て選択
(a.atk * 4 - b.def * 2) * (Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80) / 100
分散度:0%
一応、ここに至るまでの過程を整理します。
100や200の値が重複しているので、100上がる毎に分散値の最低値が上がると判断しました。
(3桁目の数字だけで判別できるシンプル化にもなります)
条件を表に整理すると下記になると思います。
運最低値 運最高値 分散最低値 分散最高値
0 99 80 120
100 199 90 120
200 299 100 120
300 399 110 120
400 499 120 120
500 --- 120 120
※RPGツクールMVで運の最低値は1ですが、便宜上
つまり、
・分散最低値は運の3桁目が上がる毎に10上がる。
・運の影響は500未満まで。
・最高値は120で固定。
という条件になります。
最低分散度の値は下記で算出できます。
コード: 全て選択
Math.floor(Math.min(499, a.luk) / 100) * 10 + 80
Math.floor は端数切捨て
Math.min は()内の数値の小さい方を使用
する関数です。
あとは、乱数の発生方法「Math.random()」を理解すれば、分かると思います。
参考
https://www.sejuku.net/blog/22432
ムノクラ様
こんばんわ。ご回答ありがとうございます。
計算方法を詳細に教えて頂きまして、本当にありがとうございます。
運の値と乱数で場合分けするしかないんじゃないかとか考えてたのですが、こうやって1つの式で表せられるのですね・・・全く考え付かなかったです。
おかげさまで運の使い道が1つ増えて嬉しい限りです。
改めまして、本当にありがとうございました。