ページ 1 / 1
【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい
Posted: 2023年8月08日(火) 09:36
by mmr
敵のドロップアイテムについてですが、設定した複数のアイテムから1個だけ獲得できるようにしたいです。
例えば以下のようにアイテムと確率を設定して、その中から1個ドロップするという感じです。
そういうスクリプトを探してみたのですが見つけることが出来ずで…、何卒よろしくお願いいたします。
------------------
アイテムA:40%
アイテムB:30%
アイテムC:15%
アイテムD:10%
アイテムE:5%
計100%
------------------
Re: 【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい
Posted: 2023年8月09日(水) 16:02
by 名無し蛙
詳細な要望は分かりませんけどドロップ周りを適当に書き換えれば出来そうな気がしますね
あんまりテストしてないですけどこんな感じですか
コード: 全て選択
class RPG::Enemy
attr_reader :ex_drop_items
#--------------------------------------------------------------------------
# ● 拡張ドロップアイテム配列の取得
#--------------------------------------------------------------------------
def ex_drop_items
return @ex_drop_items if @ex_drop_items
@ex_drop_items = []
note.scan(/<drop_(\S+):(\d+) (\d+)%>/) do
drop = DropItem.new
drop.kind = $1 == 'weapon' ? 2 : $1 == 'armor' ? 3 : 1
drop.data_id = $2.to_i
drop.denominator = $3.to_i
@ex_drop_items.push drop
end
return @ex_drop_items
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ○ ドロップアイテムの配列作成
#--------------------------------------------------------------------------
def make_drop_items
return [] if enemy.ex_drop_items.empty?
r = rand * enemy.ex_drop_items.inject(0){|sum, di| sum + di.denominator}
check_meter = 0
di = enemy.ex_drop_items.find do |di|
check_meter += di.denominator
r < check_meter
end
return [item_object(di.kind, di.data_id)]
end
end
使い方はエネミーのメモ欄に
<drop_item:1 40%>
<drop_weapon:2 40%>
<drop_armor:3 40%>
のタグでドロップアイテムを設定すれば反映されると思います。
左の数値がidで右の数値が重みですね。合計100%にする必要は無いです。
当然ですけど従来のドロップアイテム設定は形骸化します。
厳密な境界チェックはしていないのでバグを見落としている可能性もありますけど。
Re: 【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい
Posted: 2023年8月09日(水) 23:18
by mmr
お早い対応ありがとうございます。
そうです、そんな感じの抽選システムが欲しかったんです!
とても助かりました。ありがたく使わせていただきます。