miduo_server/luafight/Modules/Battle/Logic/Base/Passivity.lua

948 lines
32 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

local floor = math.floor
local max = math.max
--local RoleDataName = RoleDataName
--local BattleLogic = BattleLogic
--local BattleUtil = BattleUtil
--local BattleEventName = BattleEventName
--local BuffName = BuffName
--属性编号
local propertyList = {
RoleDataName.Attack,
RoleDataName.PhysicalDefence,
RoleDataName.MagicDefence,
RoleDataName.Speed,
RoleDataName.DamageBocusFactor,
RoleDataName.DamageReduceFactor,
RoleDataName.Hit,
RoleDataName.Dodge,
RoleDataName.Crit,
RoleDataName.CritDamageFactor,
RoleDataName.TreatFacter,
RoleDataName.MaxHp,
RoleDataName.Hp,
RoleDataName.CureFacter,
RoleDataName.Tenacity,
}
--被动技能表
local passivityList = {
--发动技能时,[a]的概率将[b]*[c]算作[d]计算
--a[float],b[属性],c[float],d[属性]
[1] = function(role, args)
local f1 = args[1]
local pro1 = args[2]
local f2 = args[3]
local pro2 = args[4]
local OnSkillCast = function(skill)
BattleUtil.RandomAction(f1, function ()
local duration = 0
for i=1, skill.effectList.size do
duration = max(duration, skill.effectList.buffer[i].duration)
end
role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], 2, duration + BattleLogic.GameDeltaTime * 2)
end)
end
role.Event:AddEvent(BattleEventName.SkillCast, OnSkillCast)
end,
--发动技能后,[a]的概率对敌方随机1名施加攻击*[c]的[d]伤害。
--a[float],c[float],d[伤害类型]
[2] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local dt = args[3]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 20001)
if arr[1] then
BattleUtil.CalDamage(role, arr[1], dt, f2)
end
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[c]使仇恨目标受到治疗效果降低[a],持续[b]
--a[float],b[int],c[float]
[3] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local f3 = args[3]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f3, function ()
local arr = BattleUtil.ChooseTarget(role, 40000)
if arr[1] then
arr[1]:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, RoleDataName.CureFacter, f1, 3))
end
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[d]改变自身[a]属性[b],持续[c]秒
--a[属性],b[float],c[int],d[改变类型]
[4] = function(role, args)
local pro = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
local OnSkillCastEnd = function(skill)
role:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, propertyList[pro], f1, ct))
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[a]的概率回复攻击最高的1人的[b]*[c]血量,持续[d]秒。
--a[float],b[属性],c[float],d[int]
[5] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local f3 = args[4]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 10321)
if arr[1] then
arr[1]:AddBuff(Buff.Create(role, BuffName.HOT, f3, 1, floor(role:GetRoleData(propertyList[pro]) * f2)))
end
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[a]的概率提升随机角色的[b]*[c]的[d],持续[e]秒。
--a[float],b[属性],c[float],d[属性],e[int]
[6] = function(role, args)
local f1 = args[1]
local pro1 = args[2]
local f2 = args[3]
local pro2 = args[4]
local f3 = args[5]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 10001)
if arr[1] then
arr[1]:AddBuff(Buff.Create(role, BuffName.PropertyChange, f3, propertyList[pro2], floor(role:GetRoleData(propertyList[pro1]) * f2), 1))
end
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--使用回复技能时,[a]的概率提高恢复效果[b]。
--a[float],b[float]
[7] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local OnPassiveTreating = function(treatingFunc)
BattleUtil.RandomAction(f1, function ()
treatingFunc(f2)
end)
end
role.Event:AddEvent(BattleEventName.PassiveTreating, OnPassiveTreating)
end,
--受击后,[a]的概率,回复自身的[b]*[c]的血量
--a[float],b[属性],c[float]
[8] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local OnBeHit = function(treatingFunc)
BattleUtil.RandomAction(f1, function ()
BattleUtil.CalTreat(role, role, floor(role:GetRoleData(propertyList[pro]) * f2))
end)
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--受击后,[a]对攻击者造成的攻击*[c]的持续伤害,持续[d]秒。
--a[float],c[float],d[int]
[9] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local f3 = args[3]
local triggerUid = {}
local OnBeHit = function(atkRole)
if atkRole.isTeam then
return
end
if triggerUid[atkRole.uid] then --加入限定避免循环触发
return
end
BattleUtil.RandomAction(f1, function ()
atkRole:AddBuff(Buff.Create(role, BuffName.DOT, f3, 1, 0, 1, f2))
triggerUid[atkRole.uid] = atkRole.uid
BattleLogic.WaitForTrigger(f3+1, function ()
triggerUid[atkRole.uid] = nil
end)
end)
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--受击时[e][a]的概率将[b]*[c]算作[d]计算
--a[float],b[属性],c[float],d[属性],e[伤害类型]
[10] = function(role, args)
local f1 = args[1]
local pro1 = args[2]
local f2 = args[3]
local pro2 = args[4]
local dt = args[5]
local OnRoleBeDamagedBefore = function(atkRole, func, damageType)
if damageType == dt then
BattleUtil.RandomAction(f1, function ()
role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], 2, BattleLogic.GameDeltaTime)
end)
end
end
role.Event:AddEvent(BattleEventName.RoleBeDamagedBefore, OnRoleBeDamagedBefore)
end,
--受击时,有[a]的概率抵消[b]*[c]的攻击。
--a[float],b[属性],c[float]
[11] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local OnPassiveDamaging = function(damagingFunc)
BattleUtil.RandomAction(f1, function ()
damagingFunc(floor(role:GetRoleData(propertyList[pro]) * f2))
end)
end
role.Event:AddEvent(BattleEventName.PassiveBeDamaging, OnPassiveDamaging)
end,
--受击后,有[a]的概率对敌方全体造成攻击*[c]的[d]伤害
--a[float],c[float],d[伤害类型]
[12] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local dt = args[3]
local lastTrigger = 0
local OnBeHit = function(atkRole)
if atkRole.isTeam then
return
end
lastTrigger = lastTrigger + 1
if lastTrigger > 1 then --加入限定避免循环触发
return
end
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 20000)
for i=1, #arr do
BattleUtil.CalDamage(role, arr[i], dt, f2)
end
end)
lastTrigger = 0
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--受击后,有[a]的概率对随机1人造成[b]*[c]的真实伤害。
--a[float],b[属性],c[float]
[13] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local lastTrigger = 0
local OnBeHit = function(atkRole)
if atkRole.isTeam then
return
end
lastTrigger = lastTrigger + 1
if lastTrigger > 1 then --加入限定避免循环触发
return
end
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 20001)
if arr[1] then
BattleUtil.ApplyDamage(role, arr[1], floor(role:GetRoleData(propertyList[pro]) * f2))
end
end)
lastTrigger = 0
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--受击后[f][a]的概率将[b]*[c]算作[d]计算,持续[e]秒。
--a[float],b[属性],c[float],d[属性],e[int],f[伤害类型]
[14] = function(role, args)
local f1 = args[1]
local pro1 = args[2]
local f2 = args[3]
local pro2 = args[4]
local f3 = args[5]
local dt = args[6]
local OnBeHit = function(atkRole, damage, bCrit, finalDmg, damageType)
if damageType == dt then
BattleUtil.RandomAction(f1, function ()
role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], 2, f3)
end)
end
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--免疫[a]属性伤害。
--a[属性类型]
[15] = function(role, args)
local pt = args[1]
local elementDamageReduceFactor
if pt == 1 then
elementDamageReduceFactor = RoleDataName.FireDamageReduceFactor
elseif pt == 2 then
elementDamageReduceFactor = RoleDataName.WindDamageReduceFactor
elseif pt == 3 then
elementDamageReduceFactor = RoleDataName.IceDamageReduceFactor
elseif pt == 4 then
elementDamageReduceFactor = RoleDataName.LandDamageReduceFactor
elseif pt == 5 then
elementDamageReduceFactor = RoleDataName.LightDamageReduceFactor
elseif pt == 6 then
elementDamageReduceFactor = RoleDataName.DarkDamageReduceFactor
end
role.data:AddValue(elementDamageReduceFactor, 10000)
end,
--发动技能后,[a]的概率将[b]*[c]算作[d]计算,持续[e]秒。
--a[float],b[属性],c[float],d[属性],e[int]
[16] = function(role, args)
local f1 = args[1]
local pro1 = args[2]
local f2 = args[3]
local pro2 = args[4]
local f3 = args[5]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
role:AddPropertyTransfer(propertyList[pro1], f2, propertyList[pro2], 2, f3)
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[d]改变仇恨目标[a]属性[b],持续[c]秒
--a[属性],b[int],c[int],d[改变类型]
[17] = function(role, args)
local pro1 = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
local OnSkillCastEnd = function(skill)
local arr = BattleUtil.ChooseTarget(role, 40000)
if arr[1] then
arr[1]:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, propertyList[pro1], f1, ct))
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[d]改变己方全体[a]属性[b],持续[c]秒
--a[属性],b[int],c[int],d[改变类型]
[18] = function(role, args)
local pro1 = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
local OnSkillCastEnd = function(skill)
local arr = BattleUtil.ChooseTarget(role, 10000)
for i=1, #arr do
arr[i]:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, propertyList[pro1], f1, ct))
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--受到治疗效果提高[a]。
--a[float]
[19] = function(role, args)
local f1 = args[1]
role.data:AddValue(RoleDataName.CureFacter, f1)
end,
--[b]造成的持续伤害时间延长[a]。
--a[int],b[改变类型]
[20] = function(role, args)
local f1 = args[1]
local ct = args[2]
local OnBuffCaster = function(buff)
if buff.type == BuffName.DOT then
if ct == 1 then --加算
buff.duration = buff.duration + f1
elseif ct == 2 then --乘加算(百分比属性加算)
buff.duration = buff.duration * (1 + f1)
elseif ct == 3 then --减算
buff.duration = buff.duration - f1
elseif ct == 4 then --乘减算(百分比属性减算)
buff.duration = buff.duration * (1 - f1)
end
end
end
role.Event:AddEvent(BattleEventName.BuffCaster, OnBuffCaster)
end,
--自身增益效果超过[a]时,技能伤害提升[b]。
--a[int],b[float]
[21] = function(role, args)
local i1 = args[1]
local f1 = args[2]
local count = 0
local targetBuff
local active = count > i1
local OnBuffStart = function(buff)
if buff.isBuff then
count = count + 1
if count > i1 and not active then
active = true
targetBuff = Buff.Create(role, BuffName.PropertyChange, 0, RoleDataName.DamageBocusFactor, f1, 1)
targetBuff.isBuff = false --自身不算增益
role:AddBuff(targetBuff)
end
end
end
local OnBuffEnd = function(buff)
if buff.isBuff then
count = count - 1
if count <= i1 and active then
active = false
if targetBuff then
targetBuff.disperse = true
end
end
end
end
role.Event:AddEvent(BattleEventName.BuffStart, OnBuffStart)
role.Event:AddEvent(BattleEventName.BuffEnd, OnBuffEnd)
end,
--血量低于[a]时,[b]概率触发控制免疫,持续[c]秒。每场战斗只能触发1次。
--a[float],b[float],c[int]
[22] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local f3 = args[3]
local triggerCount = 0
local OnBeHit = function(atkRole)
if BattleUtil.GetHPPencent(role) < f1 then
if triggerCount < 1 then
BattleUtil.RandomAction(f2, function ()
role:AddBuff(Buff.Create(role, BuffName.Immune, f3, 1))
triggerCount = triggerCount + 1
end)
end
end
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--死亡时,立即回复己方全体[a]*[b]的血量。
--a[属性],b[float]
[23] = function(role, args)
local pro = args[1]
local f1 = args[2]
local OnDead = function(atkRole)
local arr = BattleUtil.ChooseTarget(role, 10000)
for i=1, #arr do
BattleUtil.CalTreat(role, arr[i], floor(role:GetRoleData(propertyList[pro]) * f1))
end
end
role.Event:AddEvent(BattleEventName.RoleDead, OnDead)
end,
--控制效果命中后,[a]的概率施加[c]的[d]伤害
--a[float],c[float],d[伤害类型]
[24] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local dt = args[3]
local OnBuffCaster = function(buff)
if buff.type == BuffName.Control then
BattleUtil.RandomAction(f1, function ()
BattleUtil.CalDamage(role, buff.target, dt, f2)
end)
end
end
role.Event:AddEvent(BattleEventName.BuffCaster, OnBuffCaster)
end,
--控制效果命中后,[a]对全体造成[c]的[d]伤害。
--a[float],c[float],d[伤害类型]
[25] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local dt = args[3]
local OnBuffCaster = function(buff)
if buff.type == BuffName.Control then
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(buff.target, 10000)
for i=1, #arr do
BattleUtil.CalDamage(role, arr[i], dt, f2)
end
end)
end
end
role.Event:AddEvent(BattleEventName.BuffCaster, OnBuffCaster)
end,
--造成的伤害暴击后,[a]施加攻击*[c]的[d]持续伤害,持续[e]秒。
--a[float],c[float],d[伤害类型],e[int]
[26] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local dt = args[3]
local f3 = args[4]
local triggerUid = {}
local OnRoleCrit = function(defRole)
if triggerUid[defRole.uid] then --加入限定避免循环触发
return
end
BattleUtil.RandomAction(f1, function ()
defRole:AddBuff(Buff.Create(role, BuffName.DOT, f3, 1, 0, dt, f2))
triggerUid[defRole.uid] = defRole.uid
BattleLogic.WaitForTrigger(f3+1, function ()
triggerUid[defRole.uid] = nil
end)
end)
end
role.Event:AddEvent(BattleEventName.RoleCrit, OnRoleCrit)
end,
--造成的伤害暴击后,[a]的概率回复自身[b]*[c]的血量
--a[float],b[属性],c[float]
[27] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local OnRoleCrit = function(defRole)
BattleUtil.RandomAction(f1, function ()
BattleUtil.CalTreat(role, role, floor(role:GetRoleData(propertyList[pro]) * f2))
end)
end
role.Event:AddEvent(BattleEventName.RoleCrit, OnRoleCrit)
end,
--对血量高于[a]的敌人伤害提高[b]。
--a[float],b[float]
[28] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local OnPassiveDamaging = function(damagingFunc, defRole, damage)
if BattleUtil.GetHPPencent(defRole) > f1 then
damagingFunc(-floor(f2 * damage))
end
end
role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging)
end,
--对血量低于[a]的敌人伤害提高[b]。
--a[float],b[float]
[29] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local OnPassiveDamaging = function(damagingFunc, defRole, damage)
if BattleUtil.GetHPPencent(defRole) < f1 then
damagingFunc(-floor(f2 * damage))
end
end
role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging)
end,
--发动技能后,[d]改变敌方全体[a]属性[b],持续[c]秒
--a[属性],b[float],c[int],d[改变类型]
[30] = function(role, args)
local pro = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
local OnSkillCastEnd = function(skill)
local arr = BattleUtil.ChooseTarget(role, 20000)
for i=1, #arr do
arr[i]:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, propertyList[pro], f1, ct))
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,有[a]的概率眩晕敌方其中1人持续[b]秒。
--a[float],b[int]
[31] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 20001)
if arr[1] then
arr[1]:AddBuff(Buff.Create(role, BuffName.Control, f2, 1))
end
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--持续伤害效果命中后,[d]改变自身[a]属性[b],持续[c]秒
--a[属性],b[float],c[int],d[改变类型]
[32] = function(role, args)
local pro = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
local OnBuffCaster = function(buff)
if buff.type == BuffName.DOT then
role:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, propertyList[pro], f1, ct))
end
end
role.Event:AddEvent(BattleEventName.BuffCaster, OnBuffCaster)
end,
--[d]改变自身[a]属性[b],持续[c]秒
--a[属性],b[float],c[int],d[改变类型]
[33] = function(role, args)
local pro = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
role:AddBuff(Buff.Create(role, BuffName.PropertyChange, f2, propertyList[pro], f1, ct))
end,
--造成伤害时,额外增加[a]点伤害。
--a[int]
[34] = function(role, args)
local f1 = args[1]
local OnPassiveDamaging = function(damagingFunc)
damagingFunc(-f1)
end
role.Event:AddEvent(BattleEventName.PassiveDamaging, OnPassiveDamaging)
end,
--进入战斗[a]秒后,造成的伤害提升[b],持续[c]秒
--a[int],b[float],c[int]
[35] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local f3 = args[3]
BattleLogic.WaitForTrigger(f1, function ()
role:AddBuff(Buff.Create(role, BuffName.PropertyChange, f3, RoleDataName.DamageBocusFactor, f2, 1))
end)
end,
--进入战斗[a]秒后,[d]改变[b]属性[c],持续[e]秒
--a[int],b[属性],c[int],d[改变类型],e[int]
[36] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local ct = args[4]
local f3 = args[5]
BattleLogic.WaitForTrigger(f1, function ()
role:AddBuff(Buff.Create(role, BuffName.PropertyChange, f3, propertyList[pro], f2, ct))
end)
end,
--进入战斗[a]秒后,免疫控制效果,持续[b]秒
--a[int],b[int]
[37] = function(role, args)
local f1 = args[1]
local f2 = args[2]
BattleLogic.WaitForTrigger(f1, function ()
role:AddBuff(Buff.Create(role, BuffName.Immune, f2, 1))
end)
end,
--每[a]秒,[d]改变[b]的[c][g改变[e]的[f],最高叠加[h]层 (举例:每5秒扣除10%的生命提高5%的速度, 最高叠加5层)
--a[int],b[float],c[属性],d[改变类型],e[float],f[属性],g[改变类型],h[int]
[38] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local pro1 = args[3]
local ct1 = args[4]
local f3 = args[5]
local pro2 = args[6]
local ct2 = args[7]
local i1 = args[8]
local auraBuff = Buff.Create(role, BuffName.Aura, 0, function (r)
local changeBuff1 = Buff.Create(r, BuffName.PropertyChange, 0, propertyList[pro1], f2, ct1)
changeBuff1.cover = true
changeBuff1.maxLayer = i1
local changeBuff2 = Buff.Create(r, BuffName.PropertyChange, 0, propertyList[pro2], f3, ct2)
changeBuff2.cover = true
changeBuff2.maxLayer = i1
r:AddBuff(changeBuff1)
r:AddBuff(changeBuff2)
end)
auraBuff.interval = f1
role:AddBuff(auraBuff)
end,
--进入战斗后,每[a]秒回复[b]生命
--a[int],b[int]
[39] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local auraBuff = Buff.Create(role, BuffName.Aura, 0, function (r)
BattleUtil.CalTreat(r, r, f2)
end)
auraBuff.interval = f1
role:AddBuff(auraBuff)
end,
--被指定[a]造成伤害时,回复[b]生命
--a[职业],b[int]
[40] = function(role, args)
local i1 = args[1]
local f1 = args[2]
local OnBeHit = function(atkRole)
if atkRole.roleData.professionId == i1 then
BattleUtil.CalTreat(role, role, f1)
end
end
role.Event:AddEvent(BattleEventName.RoleBeHit, OnBeHit)
end,
--造成伤害时,将伤害的[a]%转化为自身生命
--a[float]
[41] = function(role, args)
local f1 = args[1]
local OnDamage = function(defRole, damage, bCrit, finalDmg)
BattleUtil.CalTreat(role, role, floor(f1 * finalDmg))
end
role.Event:AddEvent(BattleEventName.RoleDamage, OnDamage)
end,
--造成暴击伤害时,有[a]的概率造成[b]的暴击伤害。
--a[float],b[float]
[42] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local OnPassiveCriting = function(crit)
BattleUtil.RandomAction(f1, function ()
crit(f2)
end)
end
role.Event:AddEvent(BattleEventName.PassiveCriting, OnPassiveCriting)
end,
--发动技能后,[d]改变仇恨目标[a]属性[b],持续整场战斗,属性最多可改变[c]
--a[属性],b[float],c[float],d[改变类型]
[43] = function(role, args)
local pro = args[1]
local f1 = args[2]
local i1 = args[3]
local ct = args[4]
local OnSkillCastEnd = function(skill)
local arr = BattleUtil.ChooseTarget(role, 40000)
if arr[1] then
local buff = Buff.Create(role, BuffName.PropertyChange, 0, propertyList[pro], f1, ct)
buff.cover = true
buff.maxLayer = i1
arr[1]:AddBuff(buff)
end
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--发动技能后,[a]的概率[e]改变自身[b]属性[c],持续[d]秒。
--a[float],b[属性],c[float],d[int],e[改变类型]
[44] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local f3 = args[4]
local ct = args[5]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
role:AddBuff(Buff.Create(role, BuffName.PropertyChange, f3, propertyList[pro], f2, ct))
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--免疫[a]控制状态。
--a[控制类型]
[45] = function(role, args)
local ct = args[1]
role.buffFilter:Add(function(buff)
return buff.type == BuffName.Control and (ct == 0 or buff.ctrlType == ct)
end)
end,
--免疫[a]持续伤害状态。
--a[持续伤害类型]
[46] = function(role, args)
local dt = args[1]
role.buffFilter:Add(function(buff)
return buff.type == BuffName.DOT and (dt == 0 or buff.damageType == dt)
end)
end,
--战斗中,[c]改变[a]属性[b]。
--a[属性],b[float],c[改变类型]
[47] = function(role, args)
local pro = args[1]
local f1 = args[2]
local ct = args[3]
if ct == 1 then --加算
role.data:AddValue(propertyList[pro], f1)
elseif ct == 2 then --乘加算(百分比属性加算)
role.data:AddPencentValue(propertyList[pro], f1)
elseif ct == 3 then --减算
role.data:SubValue(propertyList[pro], f1)
elseif ct == 4 then --乘减算(百分比属性减算)
role.data:SubPencentValue(propertyList[pro], f1)
end
end,
--战斗中,[c]改变[a]属性[b][f]改变[d]属性[e]。
--a[属性],b[float],c[改变类型],d[属性],e[float],f[改变类型]
[48] = function(role, args)
local pro = args[1]
local f1 = args[2]
local ct = args[3]
local pro2 = args[4]
local f2 = args[5]
local ct2 = args[6]
if ct == 1 then --加算
role.data:AddValue(propertyList[pro], f1)
elseif ct == 2 then --乘加算(百分比属性加算)
role.data:AddPencentValue(propertyList[pro], f1)
elseif ct == 3 then --减算
role.data:SubValue(propertyList[pro], f1)
elseif ct == 4 then --乘减算(百分比属性减算)
role.data:SubPencentValue(propertyList[pro], f1)
end
if ct2 == 1 then --加算
role.data:AddValue(propertyList[pro2], f2)
elseif ct2 == 2 then --乘加算(百分比属性加算)
role.data:AddPencentValue(propertyList[pro2], f2)
elseif ct2 == 3 then --减算
role.data:SubValue(propertyList[pro2], f2)
elseif ct2 == 4 then --乘减算(百分比属性减算)
role.data:SubPencentValue(propertyList[pro2], f2)
end
end,
--发动技能后,[a]概率[e]改变敌方全体[b]属性[c],持续[d]秒
--a[float],b[属性],c[float],d[int],e[改变类型]
[49] = function(role, args)
local f1 = args[1]
local pro = args[2]
local f2 = args[3]
local f3 = args[4]
local ct = args[5]
local OnSkillCastEnd = function(skill)
BattleUtil.RandomAction(f1, function ()
local arr = BattleUtil.ChooseTarget(role, 20000)
for i=1, #arr do
arr[i]:AddBuff(Buff.Create(role, BuffName.PropertyChange, f3, propertyList[pro], f2, ct))
end
end)
end
role.Event:AddEvent(BattleEventName.SkillCastEnd, OnSkillCastEnd)
end,
--战斗中,每[a]秒增加[b]%的异妖能量
--a[int],b[float]
[50] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local auraBuff = Buff.Create(role, BuffName.Aura, 0, function (r)
BattleLogic.AddMP(role.camp, f2 * 100)
end)
auraBuff.interval = f1
BattleLogic.BuffMgr:AddBuff(role, auraBuff)
end,
--战斗中,初始拥有[a]%的异妖能量
--a[float]
[51] = function(role, args)
local f1 = args[1]
BattleLogic.AddMP(role.camp, f1 * 100)
end,
--战斗中,队伍每损失[a]%的生命值,增加[b]%的异妖能量
--a[float],b[float]
[52] = function(role, args)
local f1 = args[1]
local f2 = args[2]
local maxHp = 0
local curHp = 0
if f1 == 0 then
return
end
local curHpGears = 0
local arr = BattleUtil.ChooseTarget(role, 10000)
for i=1, #arr do
curHp = curHp + arr[i]:GetRoleData(RoleDataName.Hp)
maxHp = maxHp + arr[i]:GetRoleData(RoleDataName.MaxHp)
end
local auraBuff = Buff.Create(role, BuffName.Aura, 0, function (r)
local hp = 0
for i=1, #arr do
hp = hp + arr[i]:GetRoleData(RoleDataName.Hp)
end
if hp < curHp then
local gears = floor((maxHp - hp) / (f1 * maxHp))
if gears > curHpGears then
BattleLogic.AddMP(role.camp, f2 * (gears - curHpGears) * 100)
curHpGears = gears
end
curHp = hp
end
end)
auraBuff.interval = 0
BattleLogic.BuffMgr:AddBuff(role, auraBuff)
end,
}
return passivityList