お返事

 2019-03-12
嵐がヤバイᕕ( ᐛ )ᕗ

> ポリフェノール さん
これ動いてますか?
actor.states ってないと思うのですが。

とりあえず動くと仮定して、情報を整理してみます。
rate の 4 行は、ステートがついていれば 2 通常 1
if 文は常に false で実行されないので無視して、
return は、データベースの値を rate で割って、1 未満にはならないようにしてますね。

1~5 を設定した場合の結果を見てみると、
1 の場合、1/1=1, 1/2=0=1 必ずドロップ
2 の場合、2/1=2, 2/2=1 仕様通り
3 の場合、3/1=3, 3/2=1 ステート付きの場合は必ずドロップ
4 の場合、4/1=4, 4/2=2 仕様通り
5 の場合、5/1=5, 5/2=2 ステート付きの場合は2分の1でドロップ
ですね。

まず、整数同士の除算は小数点以下は切り捨てられ整数が返ることはご存じでしょうか?
たとえ小数で扱っても、ドロップの判定が
next if rand(di.denominator) != 0 ですので、小数点以下は切り捨てられます。
そもそも 1/N でしか指定できないので、細かな調整はできない仕様です。
それを変更するため RPG::Enemy::DropItem ではなく、
Game_Troop#make_drop_items を変更されてはいかがでしょう?
書き換えるのは、next if rand(di.denominator) != 0 の行ですね。
それと、複数のレート設定は、ハッシュで ID と RATE を紐付ければ良いと思いますよ。

すぐ思いつくのは、出現率 N を百分率にする方法ですね。
デフォでは、1/1~1/200 まで設定できるようですが、
これを 1~100% に変更します。幅は減っちゃいますけど影響はないでしょ。
他と競合とかあるかもですけど。。。
next if di.denominator < rand(100)

ステートを考慮するなら
# 100%, 50%UP, 25%DOWN
states = { 1=>100, 2=>1.5, 3=>0.75 }
rate = actor.states.inject(1) {|r,n| r * (states[n.id] || 1) }
next if (di.denominator*rate).round < rand(100)
こんな感じでしょうか。
states と actor.states は、そちらの環境に合わせて変更してください。



ところで、すごく懐かしいの思い出した。
CACAO.gif
わたくしの脳内はこのようになっております。
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/784-83f5765f
≪ トップページ ≫
カレンダー
10 << 2019/11 >> 12
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリー
最近の記事
最近のコメント
タグクラウド

リンク