Project1
标题:
关于一个吸血反伤脚本出了点BUG
[打印本页]
作者:
骷髅岛遗老
时间:
2017-9-15 00:25
标题:
关于一个吸血反伤脚本出了点BUG
#==============================================================================
# ■ 伤害吸血与反弹 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:}就是这个,实际测试中发现只要加入该脚本,哪怕数据库没有进行任何备注,都自带一个【攻击了某个敌人后,那个敌人再攻击回来时会受到等同于之前角色打它时的伤害】的现象(因为战斗中要看到血量变化必须要一个显示血条的脚本所以测试的时候还有一个血条脚本,但换了两个不同的血条脚本都出现一样的问题,应该不是冲突造成的),求大佬帮忙看看是哪句出了问题,感激不尽!
作者:
百里_飞柳
时间:
2017-9-15 10:06
贴到脚本后面,因为默认战斗系统的一回合是所有角色行动完,导致本回合中受到攻击的战斗者的伤害记录没清除,那么它行动时还会执行自己的伤害记录……
我之前用的是仿轨迹的AT条,一回合就一个人,并没有这种情况
现在用的是YEA-Battle Core,直接就在它里面改了……
class Scene_Battle
#--------------------------------------------------------------------------
# ● 战斗行动结束时的处理
#--------------------------------------------------------------------------
alias eagle_hp_drain_process_action_end process_action_end
def process_action_end
all_battle_members.each { |m| m.result.clear_damage_values }
eagle_hp_drain_process_action_end
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1