设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 81|回复: 0
打印 上一主题 下一主题

[原创发布] 仿半条命HEV装甲系统脚本

[复制链接]

Lv3.寻梦者

梦石
1
星屑
375
在线时间
26 小时
注册时间
2023-9-8
帖子
10
跳转到指定楼层
1
发表于 2025-7-10 00:06:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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

QQ截图20250710000411.png (98.83 KB, 下载次数: 1)

QQ截图20250710000411.png

QQ截图20250710000426.png (18.51 KB, 下载次数: 1)

QQ截图20250710000426.png

QQ截图20250710000438.png (20.69 KB, 下载次数: 0)

QQ截图20250710000438.png
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-7-19 05:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表