【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい

mmr
記事: 4
登録日時: 2021年5月06日(木) 18:01

【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい

投稿記事by mmr » 2023年8月08日(火) 09:36

敵のドロップアイテムについてですが、設定した複数のアイテムから1個だけ獲得できるようにしたいです。
例えば以下のようにアイテムと確率を設定して、その中から1個ドロップするという感じです。
そういうスクリプトを探してみたのですが見つけることが出来ずで…、何卒よろしくお願いいたします。
------------------
アイテムA:40%
アイテムB:30%
アイテムC:15%
アイテムD:10%
アイテムE:5%
計100%
------------------

名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい

投稿記事by 名無し蛙 » 2023年8月09日(水) 16:02

詳細な要望は分かりませんけどドロップ周りを適当に書き換えれば出来そうな気がしますね
あんまりテストしてないですけどこんな感じですか

コード: 全て選択

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%にする必要は無いです。
当然ですけど従来のドロップアイテム設定は形骸化します。
厳密な境界チェックはしていないのでバグを見落としている可能性もありますけど。
mmr
記事: 4
登録日時: 2021年5月06日(木) 18:01

Re: 【RGSS3】ドロップアイテム設定で複数個の中から1個抽選するようにしたい

投稿記事by mmr » 2023年8月09日(水) 23:18

お早い対応ありがとうございます。
そうです、そんな感じの抽選システムが欲しかったんです!
とても助かりました。ありがたく使わせていただきます。

“VX / Ace:質問” へ戻る