| 
 
| 赞 | 3 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 23 |  
| 经验 | 2892 |  
| 最后登录 | 2025-3-19 |  
| 在线时间 | 275 小时 |  
 Lv3.寻梦者 
	梦石0 星屑2338 在线时间275 小时注册时间2017-7-25帖子163 | 
| 
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  复制代码#==============================================================================
# ■ 伤害吸血与反弹  by 老鹰
#------------------------------------------------------------------------------
#   - 新增对所有造成的伤害的吸血、反弹的处理(先吸血、再反弹)
#   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害反弹进行设置
#    <HP Rebound: 伤害反弹比例(%)>
#     - 伤害反弹比例(%) : 填入对最终伤害的反弹的比例,为百分数,%可省略
#    <Resist HP Rebound: 抵抗反弹比例(%)>
#     - 抵抗反弹比例(%) : 填入对最终伤害的抵抗反弹的比例,为百分数,%可省略
#   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害吸血进行设置
#    <HP Drain: 吸血比例(%) 吸血概率分子 吸血概率分母>
#     - 吸血比例(%) : 填入最终伤害的吸血比例,为百分数,%可加可不加
#     - 概率分子分母 : 吸血的概率为 分子/分母,可不填,默认为 1
#    <Resist HP Drain: 抵抗吸血比例(%) 抵抗概率分子 抵抗概率分母>
#     - 抵抗比例(%) : 被吸血时,比例要减去的值,默认为 0
#     - 抵抗分子分母 : 抵抗的概率为 分子/分母,进行吸血处理时,要减去该概率,默认为 0
#   - 举例:
#    1 号角色备注内填入了 <HP Drain: 20%>
#     - 1号角色造成的所有伤害,会吸取伤害的 20% (不超过目标的当前hp值)回复自己
#    1 号敌人备注内填入了 <Resist HP Drain: 10%, 1,5>
#    1 号角色备注内填入了 <HP Drain: 20%, 1,2>
#     - 1号角色攻击1号敌人,有 1/2 - 1/5 的概率 吸取伤害的 20% - 10% 回复自己
#
#   - 实质:在真正实行伤害加减时,先进行吸血操作的处理;在计算完伤害后,进行反弹计算
#==============================================================================
 
class Game_ActionResult
  #--------------------------------------------------------------------------
  # ○ 生成反弹数值
  #--------------------------------------------------------------------------
  def execute_equips_hp_rebound(user)
    return if @hp_damage <= 0
    rate = (@battler.hp_rebound_rate - user.resist_hp_rebound_rate) / 100.0
    return if rate <= 0
    value = (@hp_damage * rate).to_i
    user.result.hp_damage += value
  end
  #--------------------------------------------------------------------------
  # ○ 生成吸血数值
  #--------------------------------------------------------------------------
  def execute_equips_hp_drain(user)
    return if @hp_damage <= 0
    pro = user.hp_drain_pro - @battler.resist_hp_drain_pro
    return if pro < 1 && (pro < 0 || rand > pro)
    rate = (user.hp_drain_rate - @battler.resist_hp_drain_rate) / 100.0
    return if rate <= 0
    @hp_drain += (@hp_damage * rate).to_i
    @hp_drain = [@battler.hp, @hp_drain.to_i].min
  end
end
 
class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ○ 获取用于计算吸血相关的数组
  #--------------------------------------------------------------------------
  def get_hp_drain_array
    []
  end
  #--------------------------------------------------------------------------
  # ○ 重新获取吸血与反弹的相关参数
  #--------------------------------------------------------------------------
  def reget_hp_drain_params
    # 数组依次存储 [吸血比例 吸血概率 抗吸血比例 抗吸血概率] 
    @hp_drain_params = [0, 0, 0, 0]
    # [反弹比例 抗反弹比例]
    @hp_rebound_params = [0, 0]
    get_hp_drain_array.each do |a|
      next if a == nil
      if a.note =~ /<HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
        @hp_drain_params[0] = $1.to_i
        pro1 = $2 == "" ? 1 : $2.to_i
        pro2 = $3 == "" ? 1 : $3.to_i
        @hp_drain_params[1] = pro1 * 1.0 / pro2
      end
      if a.note =~ /<Resist HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
        @hp_drain_params[2] = $1.to_i
        pro1 = $2 == "" ? 1 : $2.to_i
        pro2 = $3 == "" ? 1 : $3.to_i
        @hp_drain_params[3] = pro1 * 1.0 / pro2
      end
      @hp_rebound_params[0] = $1.to_i if a.note =~ /<HP Rebound: *(-?\d+)%?>/
      @hp_rebound_params[1] = $1.to_i if a.note =~ /<Resist HP Rebound: *(-?\d+)%?>/
    end
  end
  #--------------------------------------------------------------------------
  # ○ 吸血比例与概率
  #--------------------------------------------------------------------------
  def hp_drain_rate
    @hp_drain_params[0]
  end
  def hp_drain_pro
    @hp_drain_params[1]
  end
  #--------------------------------------------------------------------------
  # ○ 抗吸血比例与概率
  #--------------------------------------------------------------------------
  def resist_hp_drain_rate
    @hp_drain_params[2]
  end
  def resist_hp_drain_pro
    @hp_drain_params[3]
  end
  #--------------------------------------------------------------------------
  # ○ 伤害反弹比例
  #--------------------------------------------------------------------------
  def hp_rebound_rate
    @hp_rebound_params[0]
  end
  #--------------------------------------------------------------------------
  # ○ 抗反弹比例
  #--------------------------------------------------------------------------
  def resist_hp_rebound_rate
    @hp_rebound_params[1]
  end
end
 
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 计算伤害
  #--------------------------------------------------------------------------
  alias eagle_equips_hp_rebound_make_damage_value make_damage_value
  def make_damage_value(user, item)
    user.reget_hp_drain_params
    reget_hp_drain_params
    eagle_equips_hp_rebound_make_damage_value(user, item)
    @result.execute_equips_hp_rebound(user)
  end
  #--------------------------------------------------------------------------
  # ● 执行伤害
  #--------------------------------------------------------------------------
  alias eagle_equips_hp_drain_execute_damage execute_damage
  def execute_damage(user)
    @result.execute_equips_hp_drain(user)
    eagle_equips_hp_drain_execute_damage(user)
    user.hp -= user.result.hp_damage
  end
end
 
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 获取用于计算吸血相关的数组
  #--------------------------------------------------------------------------
  def get_hp_drain_array
    [actor, self.class] + equips + states
  end
end
 
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 获取用于计算吸血相关的数组
  #--------------------------------------------------------------------------
  def get_hp_drain_array
    [enemy] + states
  end
end
 
 
 
 {:2_272:}就是这个,实际测试中发现只要加入该脚本,哪怕数据库没有进行任何备注,都自带一个【攻击了某个敌人后,那个敌人再攻击回来时会受到等同于之前角色打它时的伤害】的现象(因为战斗中要看到血量变化必须要一个显示血条的脚本所以测试的时候还有一个血条脚本,但换了两个不同的血条脚本都出现一样的问题,应该不是冲突造成的),求大佬帮忙看看是哪句出了问题,感激不尽!
 | 
 |