#============================================================================== # ** Additional Enemy Drops #------------------------------------------------------------------------------ # SephirothSpawn # 2006-07-09 # Version 1 #------------------------------------------------------------------------------ # * Customization # # ~ Enemy Item Drops # Enemy_Item_Drops = { enemy_id => { item_id => drop_percent, ... }, ... } # # ~ Enemy Weapon Drops # Enemy_Weapon_Drops = { enemy_id => { item_id => drop_percent, ... }, ... } # # ~ Enemy Armor Drops # Enemy_Armor_Drops = { enemy_id => { item_id => drop_percent, ... }, ... } #============================================================================== #------------------------------------------------------------------------------ # * SDK Log Script #------------------------------------------------------------------------------ SDK.log('Additional Enemy Drops', 'SephirothSpawn', 1, '2006-07-09') #------------------------------------------------------------------------------ # * Begin SDK Enable Test #------------------------------------------------------------------------------ if SDK.state('Additional Enemy Drops') #============================================================================== # ** Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # * Enemy Item Drops # ~ enemy_id => { item_id => drop_percent, ... } #-------------------------------------------------------------------------- Enemy_Item_Drops = { 1 => {1 => 50, 2 => 30, 3 => 10} } #-------------------------------------------------------------------------- # * Enemy Weapon Drops # ~ enemy_id => { weapon_id => drop_percent, ... } #-------------------------------------------------------------------------- Enemy_Weapon_Drops = { 1 => {1 => 25} } #-------------------------------------------------------------------------- # * Enemy Item Drops # ~ enemy_id => { item_id => drop_percent, ... } #-------------------------------------------------------------------------- Enemy_Armor_Drops = { 1 => {1 => 25} } #-------------------------------------------------------------------------- # * Get Drop Items #-------------------------------------------------------------------------- def get_drop_items # Item, Weapon & Armor Collection List items = [] # Item Lists if Enemy_Item_Drops.has_key?(@enemy_id) # Passes Each Item Enemy_Item_Drops[@enemy_id].each do |item_id, drop_percent| # Adds items If Randomly Dropped if rand(100) < drop_percent items << $data_items[item_id] $game_party.gain_item(item_id, 1) end end # Passes Each Weapon Enemy_Weapon_Drops[@enemy_id].each do |weapon_id, drop_percent| # Adds items If Randomly Dropped if rand(100) < drop_percent items << $data_weapons[weapon_id] $game_party.gain_weapon(weapon_id, 1) end end # Passes Each Armor Enemy_Armor_Drops[@enemy_id].each do |armor_id, drop_percent| # Adds items If Randomly Dropped if rand(100) < drop_percent items << $data_armors[armor_id] $game_party.gain_armor(armor_id, 1) end end end # Return List return items end end #============================================================================== # ** Window_BattleResult #============================================================================== class Window_BattleResult < Window_Base #-------------------------------------------------------------------------- # * Add Multiple Drops #-------------------------------------------------------------------------- def add_multi_drops # Collects Extra Droppings for enemy in $game_troop.enemies # Adds Extra Treasures @treasures << enemy.get_drop_items end # Flatten Array @treasures.flatten! # Sort Treasures By ID @treasures.sort! {|a, b| a.id <=> b.id} # Sort Treasures By Type @treasures.sort! do |a, b| a_class = a.is_a?(RPG::Item) ? 0 : a.is_a?(RPG::Weapon) ? 1 : 2 b_class = b.is_a?(RPG::Item) ? 0 : b.is_a?(RPG::Weapon) ? 1 : 2 a_class<=>b_class end # Adjust Height & Window Contents self.height = [@treasures.size * 32 + 64, 256].min self.contents = Bitmap.new(width - 32, @treasures.size * 32 + 32) # Adjust Y self.y = 160 - height / 2 # Refresh Window refresh end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super if Input.press?(Input::UP) self.oy -= 4 if self.oy > 0 elsif Input.press?(Input::DOWN) self.oy += 4 if self.oy < self.contents.height - 64 end end end #============================================================================== # ** Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias seph_enemydrops_scnbtl_sp5 start_phase5 #-------------------------------------------------------------------------- # * Start After Battle Phase #-------------------------------------------------------------------------- def start_phase5 # Original Start Phase 5 seph_enemydrops_scnbtl_sp5 # Add Extra Item Drops @result_window.add_multi_drops end end #-------------------------------------------------------------------------- # * End SDK Enable Test #-------------------------------------------------------------------------- end