赞 | 2 |
VIP | 0 |
好人卡 | 0 |
积分 | 14 |
经验 | 0 |
最后登录 | 2025-7-18 |
在线时间 | 26 小时 |
Lv3.寻梦者
- 梦石
- 1
- 星屑
- 375
- 在线时间
- 26 小时
- 注册时间
- 2023-9-8
- 帖子
- 10
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
#==============================================================================
# ■ HEV装甲系统
#------------------------------------------------------------------------------
# 功能:
# 1. 只有装备HEV装甲的角色才能使用电池物品
# 2. 卸下装甲时会保存当前装甲值,重新装备时恢复
# 3. 装甲会吸收70%伤害,剩余30%穿透
# 4. 电池物品只需备注即可使用,无需额外设置效果
# 使用方法:
# - 在防具备注中添加<HEV>标签
# - 在电池物品备注中添加<电池 回复量: X> (X为恢复数值)
#==============================================================================
module HEV_Config
MAX_ARMOR = 100 # 最大装甲值
DAMAGE_REDUCTION = 0.7 # 伤害减免比例(70%)
ARMOR_DECAY = 0.1 # 伤害导致的装甲衰减比例(10%)
end
class Game_Actor < Game_Battler
attr_accessor :armor
attr_accessor :max_armor
attr_accessor :stored_armor # 存储卸下时的装甲值
# 初始化
alias hev_initialize initialize
def initialize(actor_id)
hev_initialize(actor_id)
@armor = 0
@max_armor = 0
@stored_armor = 0
@has_hev = false
update_hev_status
end
# 更新HEV状态
def update_hev_status
old_hev_status = @has_hev
@has_hev = false
@max_armor = 0
# 检查装备中是否有HEV装甲
armors.each do |armor|
next unless armor
if armor.note.include?("<HEV>")
@has_hev = true
@max_armor = HEV_Config::MAX_ARMOR
break
end
end
# 处理装甲值存储和恢复
if @has_hev
# 刚装备HEV装甲时恢复存储的值
@armor = @stored_armor if !old_hev_status && @stored_armor > 0
@armor = [@armor, @max_armor].min
else
# 卸下HEV装甲时存储当前值
@stored_armor = @armor if old_hev_status
@armor = 0
end
end
# 装备变更
alias hev_change_equip change_equip
def change_equip(slot_id, item)
hev_change_equip(slot_id, item)
update_hev_status
end
# 伤害处理
alias hev_execute_damage execute_damage
def execute_damage(user)
hev_execute_damage(user)
return unless @has_hev && @armor > 0 && @result.hp_damage > 0
# 计算装甲吸收的伤害
armor_damage = [(@result.hp_damage * (1 - HEV_Config::DAMAGE_REDUCTION)).to_i, @armor].min
@result.hp_damage -= armor_damage
@armor -= armor_damage
# 装甲自然衰减
decay_amount = (@result.hp_damage * HEV_Config::ARMOR_DECAY).to_i
@armor = [@armor - decay_amount, 0].max
end
# 物品适用性检查
alias hev_item_test item_test
def item_test(user, item)
if battery_item?(item)
return @has_hev # 只有装备HEV装甲才能使用电池
end
hev_item_test(user, item)
end
# 物品效果应用
alias hev_item_apply item_apply
def item_apply(user, item)
if battery_item?(item)
return false unless @has_hev
recover_amount = item.note.match(/<电池 回复量:\s*(\d+)>/i)[1].to_i
@armor = [@armor + recover_amount, @max_armor].min
return true
end
hev_item_apply(user, item)
end
private
# 检查是否为电池物品
def battery_item?(item)
item && item.note && item.note.include?("<电池 回复量:")
end
end
class Window_Base < Window
# 在状态窗口显示装甲值
alias hev_draw_actor_simple_status draw_actor_simple_status
def draw_actor_simple_status(actor, x, y)
hev_draw_actor_simple_status(actor, x, y)
return unless actor.max_armor > 0
change_color(system_color)
draw_text(x, y + line_height * 2, 96, line_height, "装甲:")
change_color(normal_color)
draw_text(x + 48, y + line_height * 2, 48, line_height, "#{actor.armor}/#{actor.max_armor}", 2)
end
end
class Scene_Item < Scene_ItemBase
# 物品使用
alias hev_use_item use_item
def use_item
if battery_item?(@item)
target = $game_party.members[@item_window.index]
if target && target.max_armor > 0
target.item_apply(@actor, @item)
use_item_to_hev
else
$game_message.add("#{target ? target.name : '目标'}没有装备HEV装甲!")
end
return
end
hev_use_item
end
private
def battery_item?(item)
item && item.note && item.note.include?("<电池 回复量:")
end
def use_item_to_hev
play_se_for_item
$game_party.consume_item(@item)
check_common_event
check_gameover
@item_window.refresh
end
end
|
|
|