#==============================================================================
# ** RPG::ShieldSystem
#------------------------------------------------------------------------------
# 护盾系统核心逻辑
#==============================================================================
module RPG
class ShieldSystem
# 初始化护盾值(默认0)
attr_accessor :shield_value
def initialize
@shield_value = 0
end
# 设置护盾值
# value: 新的护盾数值
def set_shield(value)
@shield_value = [value, 0].max
end
# 增加护盾值
# amount: 增加的数值
def add_shield(amount)
@shield_value += amount
@shield_value = [@shield_value, 0].max
end
# 扣除护盾值(返回实际扣除量)
# damage: 尝试扣除的伤害值
def reduce_shield(damage)
actual = [damage, @shield_value].min
@shield_value -= actual
return actual
end
# 检查是否有护盾
def has_shield?
@shield_value > 0
end
end
end
# 绑定到Game_Actor类
class Game_Actor
attr_reader :shield
alias shield_initialize initialize
def initialize(actor_id)
shield_initialize(actor_id)
@shield = RPG::ShieldSystem.new
end
# 重写受伤逻辑
def hp=(hp)
if @shield.has_shield? && hp < self.hp
damage = self.hp - hp
shield_damage = @shield.reduce_shield(damage)
hp = self.hp - (damage - shield_damage)
end
@hp = [[hp, 0].max, maxhp].min
end
end
# 新增脚本指令
class Interpreter
# 设置角色护盾值
# actor_id: 角色ID
# value: 护盾数值
def set_actor_shield(actor_id, value)
$game_actors[actor_id].shield.set_shield(value)
end
# 增加角色护盾值
def add_actor_shield(actor_id, amount)
$game_actors[actor_id].shield.add_shield(amount)
end
end