#============================================================================== # ■ 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 |
QQ截图20250710000411.png (98.83 KB, 下载次数: 1)
QQ截图20250710000426.png (18.51 KB, 下载次数: 1)
QQ截图20250710000438.png (20.69 KB, 下载次数: 0)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |