몬스터가 드롭하는 아이템을 여러 개 지정할 수 있습니다.(기본적으로는 한 개만 지정할 수 있음) 물론 각각의 아이템에 대한 드롭율 지정도 가능합니다. 아이템 드롭 지정은 스크립트에 있는
Enemy_Item_Drops = { 에너미id => { 아이템id => 드롭률(%), ... }, ... }
Enemy_Weapon_Drops = { enemy_id => { item_id => drop_percent, ... }, ... }
Enemy_Armor_Drops = { enemy_id => { item_id => drop_percent, ... }, ... }
에서 지정합니다. (몬스터 수가 많으면 귀찮아짐?)
#==============================================================================
# ** 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
Enemy_Item_Drops = { 에너미id => { 아이템id => 드롭률(%), ... }, ... }
Enemy_Weapon_Drops = { enemy_id => { item_id => drop_percent, ... }, ... }
Enemy_Armor_Drops = { enemy_id => { item_id => drop_percent, ... }, ... }
에서 지정합니다. (몬스터 수가 많으면 귀찮아짐?)
#==============================================================================
# ** 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