#============================================================================== # ■ エリアドロップ # @version 0.11 10/02/15 みんとのお部屋さんのアクティブレベルアップ併用版 # @author さば缶 #------------------------------------------------------------------------------ #  Area別にドロップアイテムを設定できます。 # # ■設定方法 # AREA_DROPS 定数で設定します。 # # [1, [ # [[2, 3], 1], #ロングスピア # ] # ], # # の場合、最初の 1 がエリアIDです。 # # 次の [2, 3] がアイテム設定。 # 最初の数字は # 1 → アイテム # 2 → 武器 # 3 → 防具 # です。 # 次の数字はそのアイテム、武器、防具のIDです。 # # 最後の 1 という数字がオッズです。これが大きいほど、そのアイテムがドロップしやすくなります。 # オッズが 2 のアイテムは、オッズが 1 のアイテムの2倍でやすくなります。 #============================================================================== module Saba module AreaDrop # エリアドロップが発生する確率です。0〜1の間の数値。 # 敵ごと、エリアごとなどの機能はありません。 DROP_RATE = 0.3 AREA_DROPS = [ [1, [ [[1, 1], 2], #ポーション [[1, 2], 1], #ハイポーション [[2, 1], 1], #クラブ [[2, 2], 1], #ロングソード [[2, 3], 1], #ロングスピア [[3, 1], 1], #レザーシールド [[3, 2], 1], #スケールシールド [[3, 7], 1], #フェザーハット [[3, 13], 1], #ローブ [[3, 14], 1], #レザープレート ] ], [2, [ [[1, 1], 2], #ポーション [[1, 2], 1], #ハイポーション [[2, 2], 1], #ロングソード [[2, 4], 1], #ロングボウ [[2, 5], 1], #レザーウィップ [[2, 6], 1], #ブロードソード [[3, 2], 1], #スケールシールド [[3, 3], 1], #フレイムシールド [[3, 7], 1], #フェザーハット [[3, 8], 1], #チェインコイフ [[3, 13], 1], #ローブ [[3, 14], 1], #レザープレート [[3, 15], 1], #リングメイル ] ], [3, [ [[1, 1], 1], #ポーション [[1, 2], 2], #ハイポーション [[2, 4], 1], #ロングボウ [[2, 5], 1], #レザーウィップ [[2, 6], 1], #ブロードソード [[2, 7], 1], #アイアンナックル [[2, 8], 1], #メイス [[3, 3], 1], #フレイムシールド [[3, 4], 1], #アイスシールド [[3, 8], 1], #チェインコイフ [[3, 9], 1], #アイアンヘルム [[3, 14], 1], #レザープレート [[3, 15], 1], #リングメイル [[3, 16], 1], #マジックローブ ] ], ] end end $imported = {} if $imported == nil $imported["AreaDrop"] = true class Game_Troop #-------------------------------------------------------------------------- # ● ドロップアイテムの配列作成 #-------------------------------------------------------------------------- alias saba_areadrop_make_drop_items make_drop_items def make_drop_items(forcing = false) if forcing == false then return [] end drop_items = saba_areadrop_make_drop_items(true) all_drop = all_area_drop_items for enemy in dead_members next unless rand(100) < Saba::AreaDrop::DROP_RATE * 100 drop_item = decide_item(all_drop) return drop_items if drop_item == nil di = RPG::Enemy::DropItem.new di.kind = drop_item[0] di.item_id = drop_item[1] di.weapon_id = drop_item[1] di.armor_id = drop_item[1] if $imported["SabaIdentify"] == true push_drop_item(nil, drop_items, di) else if di.kind == 1 drop_items.push($data_items[di.item_id]) elsif di.kind == 2 drop_items.push($data_weapons[di.weapon_id]) elsif di.kind == 3 drop_items.push($data_armors[di.armor_id]) end end end return drop_items end def all_area_drop_items result = [] for drop_set in Saba::AreaDrop::AREA_DROPS area = find_area(drop_set[0]) if $game_player.in_area?(area) result += drop_set[1] end end return result end def find_area(id) for area in $data_areas.values return area if area.id == id end p "IDが" + id.to_s + "のエリアが見つかりません" end def decide_item(set) roulette = [] for item_set in set item_set[1].times do roulette.push(item_set[0]) end end return roulette.size > 0 ? roulette[rand(roulette.size)] : nil end end