############################ アイテムドロップ拡張 ############################ # # # 特定の属性でトドメを刺した場合にドロップするアイテムおよび確率を # # 変化させるスクリプトです。 # # # # module Drop_Item_Systemのdef get_drop_item_hash(id)で設定します。 # # 雛形を参考にして設定してください。 # # 例えば # # when 1 # # return {"炎" => ["w", 1, 100], "氷" => ["i", 2, 100]} # # とした場合は、炎属性でトドメを刺した場合100%の確率で # # 武器のID1をドロップ、氷属性の場合は100%の確率でアイテムID2のもの。 # # といったように、{"属性" => ["種別", ID, 取得率]...} # # の形式で設定してください。 # # また、同時に複数の属性でトドメを刺した場合、 # # 左側から順に確認するので左側を優先します。 # # 上記の例の場合は炎と氷の両属性を持つ技でとどめを刺した場合、 # # 炎属性での攻撃として処理されます。 # # # ############################################################################## module Drop_Item_System def get_drop_item_hash(id) case id # -----ココから設定 when 1 return {"炎" => ["w", 1, 100], "氷" => ["i", 2, 100]} when 2 return {"雷" => ["a", 1, 15]} # when (エネミーID) # return {"属性名" => ["種別", (ID), (落とす確率)] ...} # -----ココまで設定 # # 種別は i (道具), w (武器), a (防具) の三つ。 # return {"炎" => ["w", 1, 60], "氷" => ["i", 2, 35]} とした場合は # 炎属性でトドメを刺したらしたらID1の武器を60%でドロップ、 # 氷属性でトドメを刺したらしたらID2の道具を35%でドロップ。 # 炎と氷両方の属性の場合は左側、つまり炎属性での攻撃とみなします。 end end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ◎ 追加:任意の属性配列にその属性が含まれるか否か #-------------------------------------------------------------------------- def include_element?(element_set, name) return element_set.include?($data_system.elements.index(name)) end #-------------------------------------------------------------------------- # ○ 通常攻撃の効果適用 # attacker : 攻撃者 (バトラー) #-------------------------------------------------------------------------- alias drop_change_attack_effect attack_effect def attack_effect(attacker) # 呼び戻し result = drop_change_attack_effect(attacker) # 死亡していて、それがGame_Enemyだった場合 if self.dead? and self.is_a?(Game_Enemy) # ドロップアイテムの再設定 self.set_drop_item(attacker.element_set) end # 結果を返す return result end #-------------------------------------------------------------------------- # ○ スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- alias drop_change_skill_effect skill_effect def skill_effect(user, skill) # 呼び戻し result = drop_change_skill_effect(user, skill) # 死亡していて、それがGame_Enemyだった場合 if self.dead? and self.is_a?(Game_Enemy) # ドロップアイテムの再設定 self.set_drop_item(skill.element_set) end # 結果を返す return result end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● オブジェクト初期化 (再定義) # troop_id : トループ ID # member_index : トループメンバーのインデックス #-------------------------------------------------------------------------- def initialize(troop_id, member_index) super() @troop_id = troop_id @member_index = member_index troop = $data_troops[@troop_id] @enemy_id = troop.members[@member_index].enemy_id enemy = $data_enemies[@enemy_id] @battler_name = enemy.battler_name @battler_hue = enemy.battler_hue @hp = maxhp @sp = maxsp @hidden = troop.members[@member_index].hidden @immortal = troop.members[@member_index].immortal # ☆ココから追加 @drop_item = nil # ドロップアイテムのデータ # ☆ココまで追加 end #-------------------------------------------------------------------------- # ◎追加: アイテム 習得率と習得アイテムの変更 #-------------------------------------------------------------------------- include Drop_Item_System def set_drop_item(element_set) # ドロップするアイテムを初期化 @drop_item = nil # 属性を渡して、ハッシュから確認 hash = get_drop_item_hash(self.id) # 合致する属性があるか確認していく for key in hash.keys if include_element?(element_set, key) @drop_item = hash[key] break end end end #-------------------------------------------------------------------------- # ○ アイテム 習得率 #-------------------------------------------------------------------------- alias drop_change_treasure_prob treasure_prob def treasure_prob # ドロップアイテムが変化している場合 if @drop_item != nil return @drop_item[2] # ドロップアイテムが変化していない場合 else # 呼び戻し return drop_change_treasure_prob end end #-------------------------------------------------------------------------- # ○ アイテム ID の取得 #-------------------------------------------------------------------------- alias drop_change_item_id item_id def item_id # ドロップアイテムが変化している場合 if @drop_item != nil # それが アイテム ("i") だった場合 if @drop_item[0] == "i" # IDを返す return @drop_item[1] else return 0 end # ドロップアイテムが変化していない場合 else # 呼び戻し return drop_change_item_id end end #-------------------------------------------------------------------------- # ○ 武器 ID の取得 #-------------------------------------------------------------------------- alias drop_change_weapon_id weapon_id def weapon_id # ドロップアイテムが変化している場合 if @drop_item != nil # それが 武器 ("w") だった場合 if @drop_item[0] == "w" # IDを返す return @drop_item[1] else return 0 end # ドロップアイテムが変化していない場合 else # 呼び戻し return drop_change_weapon_id end end #-------------------------------------------------------------------------- # ○ 防具 ID の取得 #-------------------------------------------------------------------------- alias drop_change_armor_id armor_id def armor_id # ドロップアイテムが変化している場合 if @drop_item != nil # それが 武器 ("a") だった場合 if @drop_item[0] == "a" # IDを返す return @drop_item[1] else return 0 end # ドロップアイテムが変化していない場合 else # 呼び戻し return drop_change_armor_id end end end