我不知道你的战斗系统是啥,所以我基于默认的来写。
class Game_Battler < Game_BattlerBase attr_reader :result def make_damage_value(user, item) value = item.damage.eval(user, self, $game_variables) value *= item_element_rate(user, item) value *= pdr if item.physical? value *= mdr if item.magical? value *= rec if item.damage.recover? value = apply_critical(value) if @result.critical value = apply_variance(value, item.damage.variance) value = apply_guard(value) if self.state?(30) && item.damage.to_hp? #把30换成状态ID value *= 0.5 $disperse_value = true $disperse_params = [value, self, user, item] end @result.make_damage(value.to_i, item) end end class Scene_Battle attr_reader :log_window def disperse_value return if !$disperse_value || !$disperse_params params = $disperse_params arr = $game_party.alive_members.clone arr.delete(params[1]) value = params[0] value /= arr.size value = value.to_i arr.each{|a| a.result.clear a.result.make_damage(value, params[3]) a.execute_damage(params[2]) a.result.used = true refresh_status @log_window.display_action_results(a, params[3]) } $disperse_value = nil $disperse_params = nil end alias :dpv_apply_item_effects :apply_item_effects def apply_item_effects(target, item) dpv_apply_item_effects(target,item) disperse_value if $disperse_value end end
class Game_Battler < Game_BattlerBase
attr_reader :result
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value *= item_element_rate(user, item)
value *= pdr if item.physical?
value *= mdr if item.magical?
value *= rec if item.damage.recover?
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
if self.state?(30) && item.damage.to_hp? #把30换成状态ID
value *= 0.5
$disperse_value = true
$disperse_params = [value, self, user, item]
end
@result.make_damage(value.to_i, item)
end
end
class Scene_Battle
attr_reader :log_window
def disperse_value
return if !$disperse_value || !$disperse_params
params = $disperse_params
arr = $game_party.alive_members.clone
arr.delete(params[1])
value = params[0]
value /= arr.size
value = value.to_i
arr.each{|a|
a.result.clear
a.result.make_damage(value, params[3])
a.execute_damage(params[2])
a.result.used = true
refresh_status
@log_window.display_action_results(a, params[3])
}
$disperse_value = nil
$disperse_params = nil
end
alias :dpv_apply_item_effects :apply_item_effects
def apply_item_effects(target, item)
dpv_apply_item_effects(target,item)
disperse_value if $disperse_value
end
end
这是插件脚本。伤害的50%会平分到活着的队友身上。 |