叫AI随便写了个护盾脚本,能用,就是不能显示护盾,看状态吧
#============================================================================== # ** 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
#==============================================================================
# ** 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
|