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

719 lines
28 KiB
Lua
Raw Normal View History

2019-03-12 14:05:45 +08:00
local floor = math.floor
2019-04-16 14:32:11 +08:00
local min = math.min
local max = math.max
2019-03-12 14:05:45 +08:00
--local RoleDataName = RoleDataName
--local BattleLogic = BattleLogic
--local BattleUtil = BattleUtil
--属性编号
local propertyList = {
RoleDataName.Attack,
RoleDataName.PhysicalDefence,
RoleDataName.MagicDefence,
RoleDataName.Speed,
RoleDataName.DamageBocusFactor,
RoleDataName.DamageReduceFactor,
RoleDataName.Hit,
RoleDataName.Dodge,
RoleDataName.Crit,
RoleDataName.CritDamageFactor,
RoleDataName.TreatFacter,
2019-03-21 14:33:56 +08:00
RoleDataName.MaxHp,
2019-07-16 10:59:40 +08:00
RoleDataName.Hp,
2019-06-26 16:02:31 +08:00
RoleDataName.CureFacter,
RoleDataName.Tenacity,
2019-03-12 14:05:45 +08:00
}
2019-05-14 18:18:22 +08:00
local function buffRandomAction(random, caster, target, buffType, duration, ...)
local b = Random.Range01() <= random
if b then
target:AddBuff(Buff.Create(caster, buffType, duration, ...))
else
target.Event:DispatchEvent(BattleEventName.BuffDodge, caster, buffType, ...)
end
end
2019-05-29 17:55:32 +08:00
local function casterBulletEffect(caster, target, interval)
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target)
if caster.camp == 0 and target.camp == 1 then
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
end
end
2019-08-06 20:55:47 +08:00
local function calBuffHit(caster, target, baseRandom)
local hit = (1 + caster:GetRoleData(RoleDataName.Hit) / (1 + target:GetRoleData(RoleDataName.Dodge)))
return BattleUtil.ErrorCorrection(hit * baseRandom)
end
2019-03-12 14:05:45 +08:00
--效果表
local effectList = {
--造成[a]%的[b]伤害
--a[float],b[伤害类型]
[1] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
--造成[a]%的[b]伤害【AOE】
--a[float],b[伤害类型]
[2] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
--[a]%概率[b],持续[c]秒
--a[float],b[控制状态],c[float]
[3] = function(caster, target, args, interval)
2019-08-06 20:55:47 +08:00
local f1 = calBuffHit(caster, target, args[1])
2019-03-12 14:05:45 +08:00
local cb1 = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
2019-05-14 18:18:22 +08:00
buffRandomAction(f1, caster, target, BuffName.Control, f2, cb1)
2019-03-12 14:05:45 +08:00
end)
end,
--[d]改变[a]属性[b]%,持续[c]秒
--a[属性],b[float],c[int],d[改变类型]
[4] = function(caster, target, args, interval)
local pro1 = args[1]
local f1 = args[2]
local f2 = args[3]
local ct = args[4]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro1], f1, ct))
end)
end,
--持续恢复[a]*[b]%生命,持续[c]秒
--a[属性],b[float],c[int]
[5] = function(caster, target, args, interval)
local pro1 = args[1]
local f1 = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.HOT, f2, 1, floor(caster:GetRoleData(propertyList[pro1]) * f1)))
end)
end,
--造成[a]到[b]次[c]%的[d]伤害
--a[int],b[int],c[float],d[伤害类型]
[6] = function(caster, target, args, interval)
local i1 = args[1]
local i2 = args[2]
local f1 = args[3]
local dt = args[4]
local count = Random.RangeInt(i1, i2)
local d = interval / count
if caster.camp == 0 and target.camp == 1 then
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, d)
end
for i=1, count do
BattleLogic.WaitForTrigger(d * (i-1), function ()
2019-04-20 13:02:14 +08:00
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(d, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end)
end
end,
--造成[a]到[b]次[c]%的[d]伤害【AOE】
--a[int],b[int],c[float],d[伤害类型]
[7] = function(caster, target, args, interval)
local i1 = args[1]
local i2 = args[2]
local f1 = args[3]
local dt = args[4]
local count = Random.RangeInt(i1, i2)
local d = interval / count
for i=1, count do
BattleLogic.WaitForTrigger(d * (i-1), function ()
BattleLogic.WaitForTrigger(d, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end)
end
end,
--[b]%改变[c]下次重击技能CD[a]秒
2019-04-16 14:32:11 +08:00
--a[float],b[float],c[改变类型]
2019-03-12 14:05:45 +08:00
[8] = function(caster, target, args, interval)
local f1 = args[1]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[2])
2019-03-12 14:05:45 +08:00
local ct = args[3]
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.RandomAction(f2, function ()
2019-06-06 17:23:18 +08:00
target:AddSkillCD(f1, ct)
2019-03-12 14:05:45 +08:00
end)
end)
end,
--添加[a]的[b]%护盾,持续[c]秒,盾消失的时候反射吸收伤害的[d]%
--a[属性],b[float],c[int],d[float]
[9] = function(caster, target, args, interval)
local pro1 = args[1]
local f1 = args[2]
local f2 = args[3]
local f3 = args[4]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.Shield, f2, floor(caster:GetRoleData(propertyList[pro1]) * f1), f3))
end)
end,
--造成[a]%的[b]伤害,自身恢复造成伤害[c]%的生命
--a[float],b[伤害类型],c[float]
[10] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local f2 = args[3]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
local dmg = BattleUtil.CalDamage(caster, target, dt, f1)
2019-05-07 20:01:07 +08:00
BattleUtil.CalTreat(caster, caster, floor(dmg * f2))
2019-03-12 14:05:45 +08:00
end)
end,
--造成[a]%的[b]伤害,对[c]造成额外[d]%伤害
--a[float],b[伤害类型,]c[职业],d[float]
[11] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local i1 = args[3]
local f2 = args[4]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
if target.professionId == i1 then
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
--每秒造成[a]的[b]的伤害,持续[c]秒
--a[float],b[伤害类型],c[int]
[12] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.DOT, f2, 1, 0, dt, f1))
end)
end,
2019-04-16 14:32:11 +08:00
--造成[a],每秒造成[b]的[c]的伤害,持续[d]秒
--a[持续伤害状态].b[float],c[伤害类型],d[int]
2019-03-12 14:05:45 +08:00
[13] = function(caster, target, args, interval)
local d1 = args[1]
local f1 = args[2]
local dt = args[3]
local f2 = args[4]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.DOT, f2, 1, d1, dt, f1))
end)
end,
2019-04-17 21:04:32 +08:00
--造成[a]%的[b]伤害,[c]%概率[d]专属伤害加深印记(如果有印记,[a]*1+印记数量*[e]),印记最多[f]层
--a[float],b[伤害类型],c[float],d[角色id],e[float],f[int]
2019-03-12 14:05:45 +08:00
[14] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[3])
2019-03-12 14:05:45 +08:00
local rid = args[4]
local f3 = args[5]
2019-04-17 21:04:32 +08:00
local i1 = args[6]
2019-04-20 13:02:14 +08:00
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
local layer
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff)
2019-03-12 14:05:45 +08:00
local b = buff.flag == rid
if b then
layer = buff.layer
end
return b
end) then
2019-04-17 21:04:32 +08:00
BattleUtil.CalDamage(caster, target, dt,f1 * (1 + min(layer, i1) * f3))
2019-03-12 14:05:45 +08:00
else
BattleUtil.CalDamage(caster, target, dt, f1)
end
2019-05-14 18:18:22 +08:00
buffRandomAction(f2, caster, target, BuffName.Brand, 0, rid)
2019-03-12 14:05:45 +08:00
end)
end,
--造成[a]%的[b]伤害,如果击杀,则其他人再受到此次伤害的[c]%的伤害
--a[float],b[伤害类型],c[float]
[15] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local f2 = args[3]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-03-22 18:36:24 +08:00
local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1)
2019-03-12 14:05:45 +08:00
if target.isDead then
local arr = BattleLogic.Query(function (r) return r.camp ~= caster.camp and r.uid ~= target.uid end)
for i=1, #arr do
BattleUtil.ApplyDamage(caster, arr[i], floor(dmg * f2))
end
end
end)
end,
2019-06-05 15:25:06 +08:00
--吸取[a]%的[b],持续[c]秒(属于增益),累积不高于自身该属性的[d]%
--a[float],b[属性],c[float],d[float]
2019-03-12 14:05:45 +08:00
[16] = function(caster, target, args, interval)
local f1 = args[1]
2019-06-05 15:25:06 +08:00
local pro = args[2]
2019-03-12 14:05:45 +08:00
local f2 = args[3]
2019-06-05 15:25:06 +08:00
local f3 = args[4]
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-06-05 15:25:06 +08:00
--计算上限值
local total = caster.data:GetOrginData(propertyList[pro]) * (1 + f3)
--计算预期吸取后的值
local targetValue = caster:GetRoleData(propertyList[pro]) + target:GetRoleData(propertyList[pro]) * f1
--计算有效吸收值
local delta = min(targetValue, total) - caster:GetRoleData(propertyList[pro])
if delta > 0 then
target:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro], delta, 3))
caster:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro], delta, 1))
end
2019-03-12 14:05:45 +08:00
end)
end,
--造成[a]%的[b]伤害,如果是[c],有[d]%必定暴击
--a[float],b[伤害类型],c[职业],d[float]
[17] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local i1 = args[3]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[4])
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
local dmg = floor(caster:GetRoleData(propertyList[dt]) * f1)
if target.professionId == i1 then
BattleUtil.RandomAction(f2, function ()
target.isFlagCrit = true
BattleUtil.CalDamage(caster, target, dmg)
target.isFlagCrit = false
end)
else
BattleUtil.CalDamage(caster, target, dmg)
end
end)
end,
--造成[a]%的[b]伤害若暴击则减少下次发动技能CD[c]秒。
--a[float],b[伤害类型],c[float]
[18] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local f2 = args[3]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
local d, crit = BattleUtil.CalDamage(caster, target, dt, f1)
if crit then
if target.skill then
target.skill.sp = target.skill.sp + floor(f2 * BattleLogic.GameFrameRate)
end
end
end)
end,
--造成[a]%的[b]伤害,有[c]%的概率追加伤害,最多可追加[d]次。(0无限追加)
--a[float],b[伤害类型],c[float],d[int]
[19] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local f2 = args[3]
local i1 = args[4]
if i1 == 0 then
i1 = floor(interval * BattleLogic.GameFrameRate)
end
local count = 1
while Random.Range01() <= f2 and count <= i1 do
count = count + 1
end
local d = interval / count
if caster.camp == 0 and target.camp == 1 then
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, d)
end
for i=1, count do
BattleLogic.WaitForTrigger(d * (i-1), function ()
2019-04-20 13:02:14 +08:00
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(d, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end)
end
end,
--造成[a]%的[b]伤害,对[c]造成额外[d]%伤害
--a[float],b[伤害类型,]c[控制状态],d[float]
[20] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local i1 = args[3]
local f2 = args[4]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return i1 == 0 or buff.ctrlType == i1 end) then
2019-03-12 14:05:45 +08:00
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
--造成[a]%的[b]伤害,对[c]有[d]%造成[e],持续[f]秒【AOE】
--a[float],b[伤害类型,]c[持续伤害状态],d[float],e[控制状态],f[int]
[21] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local dot = args[3]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[4])
2019-03-12 14:05:45 +08:00
local ct = args[5]
local f3 = args[6]
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.CalDamage(caster, target, dt, f1)
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
2019-05-14 18:18:22 +08:00
buffRandomAction(f2, caster, target, BuffName.Control, f3, ct)
2019-03-12 14:05:45 +08:00
end
end)
end,
--造成[a]%的[b]伤害,对[c]造成额外[d]%伤害【AOE】
--a[float],b[伤害类型,]c[持续伤害状态],d[float]
[22] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local dot = args[3]
local f2 = args[4]
BattleLogic.WaitForTrigger(interval, function ()
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
2019-03-12 14:05:45 +08:00
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
--造成[a]%的[b]伤害,对[c]造成额外[d]%伤害
--a[float],b[伤害类型,]c[持续回复状态],d[float]
[23] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local ht = args[3]
local f2 = args[4]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-12 14:05:45 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.HOT, function (buff) return true end) then
2019-03-12 14:05:45 +08:00
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
2019-03-21 14:33:56 +08:00
--瞬间恢复[a]*[b]%生命
--a[属性],b[float]
[24] = function(caster, target, args, interval)
local pro1 = args[1]
local f1 = args[2]
BattleLogic.WaitForTrigger(interval, function ()
2019-05-07 20:01:07 +08:00
BattleUtil.CalTreat(caster, target, floor(caster:GetRoleData(propertyList[pro1]) * f1))
2019-03-21 14:33:56 +08:00
end)
end,
--对[a]的伤害[b]%,持续[c]秒
--a[持续伤害状态],b[float],c[int]
[25] = function(caster, target, args, interval)
local dot = args[1]
local f1 = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
local func = function(damage)
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
2019-03-21 14:33:56 +08:00
damage = damage + floor(damage * f1)
end
return damage
end
target.exCalDmgList:Add(func)
if f2 > 0 then
BattleLogic.WaitForTrigger(f2, function ()
for i=1, target.exCalDmgList.size do
if target.exCalDmgList.buffer[i] == func then
target.exCalDmgList:Remove(i)
break
end
end
end)
end
end)
end,
--造成[a]的伤害【AOE】(真实伤害)
--a[int]
[26] = function(caster, target, args, interval)
local d = args[1]
BattleLogic.WaitForTrigger(interval, function ()
if not target.isDead then
BattleUtil.ApplyDamage(caster, target, d)
end
end)
end,
--每秒造成[d]的伤害,持续[f]秒【AOE】真实伤害
--d[float],f[int]
[27] = function(caster, target, args, interval)
local d1 = args[1]
local d2 = args[2]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.DOT, d2, 1, 0, d1, 1))
end)
end,
2019-03-22 15:00:06 +08:00
--造成[a]%的[b]伤害,对[c]造成额外[d]%伤害
--a[float],b[伤害类型,]c[持续伤害状态],d[float]
[28] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local dot = args[3]
local f2 = args[4]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-22 15:00:06 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
2019-03-22 15:00:06 +08:00
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end,
2019-03-25 19:41:30 +08:00
--造成[a]到[b]次[c]%的[d]伤害,对[e]造成额外[f]%伤害
--a[int],b[int],c[float],d[伤害类型],e[职业],f[float]
[29] = function(caster, target, args, interval)
local i1 = args[1]
local i2 = args[2]
local f1 = args[3]
local dt = args[4]
local pt = args[5]
local f2 = args[6]
local count = Random.RangeInt(i1, i2)
local d = interval / count
if caster.camp == 0 and target.camp == 1 then
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, d)
end
for i=1, count do
BattleLogic.WaitForTrigger(d * (i-1), function ()
2019-04-20 13:02:14 +08:00
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, d, target)
2019-03-25 19:41:30 +08:00
BattleLogic.WaitForTrigger(d, function ()
if target.professionId == pt then
f1 = f1 + f2
end
BattleUtil.CalDamage(caster, target, dt, f1)
end)
end)
end
end,
2019-03-26 15:11:47 +08:00
--造成[a]%的[b]伤害,若为[c],则无视敌人[d]%的防御
--a[float],b[伤害类型,]c[控制状态],d[float]
[30] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
local ct = args[3]
local f2 = args[4]
2019-05-29 17:55:32 +08:00
casterBulletEffect(caster, target, interval)
2019-03-26 15:11:47 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-04-16 14:32:11 +08:00
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then
2019-03-26 15:11:47 +08:00
BattleUtil.CalDamage(caster, target, dt, f1, f2)
else
BattleUtil.CalDamage(caster, target, dt, f1)
end
end)
end,
--[a]%概率[b],持续[c]秒
--a[float],b[免疫buff],c[int]
[31] = function(caster, target, args, interval)
2019-08-06 20:55:47 +08:00
local f1 = calBuffHit(caster, target, args[1])
2019-03-26 15:11:47 +08:00
local ib1 = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
2019-05-14 18:18:22 +08:00
buffRandomAction(f1, caster, target, BuffName.Immune, f2, ib1)
2019-03-26 15:11:47 +08:00
end)
end,
2019-04-16 14:32:11 +08:00
--[b]%改变[d]重击技能CD[a]秒 ,持续[c]秒 0代表清除所有
--a[float],b[float],c[改变类型]
[32] = function(caster, target, args, interval)
2019-04-17 21:04:32 +08:00
local f1 = args[1]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[2])
2019-04-17 21:04:32 +08:00
local ct = args[3]
local d = args[4]
2019-04-16 14:32:11 +08:00
BattleLogic.WaitForTrigger(interval, function ()
2019-04-17 21:04:32 +08:00
BattleUtil.RandomAction(f2, function ()
2019-06-06 17:23:18 +08:00
target:AddSkillCD(f1, ct)
2019-04-17 21:04:32 +08:00
local trigger = function(skill) --新增监听事件在印记技能结束回调时移除印记buff可覆盖旧buff
2019-06-06 17:23:18 +08:00
target:AddSkillCD(f1, ct)
2019-04-17 21:04:32 +08:00
end
target.Event:AddEvent(BattleEventName.SkillCast, trigger)
target:AddBuff(Buff.Create(caster, BuffName.Brand, d, "cd", function ()
target.Event:RemoveEvent(BattleEventName.SkillCast, trigger)
end))
2019-04-16 14:32:11 +08:00
end)
end)
end,
2019-05-24 15:05:00 +08:00
--造成[a]%的[b]伤害,[c]%概率添加[d]的印记,该角色在攻击拥有印记的目标时,额外获得(印记层数*[e])的暴击伤害,印记最多叠加[f]层。
--a[folat],b[伤害类型],c[float],d[角色id],e[float],f[float]
[33] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[3])
2019-05-24 15:05:00 +08:00
local rid = args[4]
local f3 = args[5]
local i1 = args[6]
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval, target)
BattleLogic.WaitForTrigger(interval, function ()
local layer
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Brand, function (buff)
local b = buff.flag == rid
if b then
layer = buff.layer
end
return b
end) then
local OnPassiveCriting = function(crit)
crit(min(layer, i1) * f3)
end
caster.Event:AddEvent(BattleEventName.PassiveCriting, OnPassiveCriting)
BattleUtil.CalDamage(caster, target, dt, f1)
caster.Event:RemoveEvent(BattleEventName.PassiveCriting, OnPassiveCriting)
else
BattleUtil.CalDamage(caster, target, dt, f1)
end
buffRandomAction(f2, caster, target, BuffName.Brand, 0, rid)
end)
end,
--对[a]职业,[e]改变目标的[b]属性[c]%,持续[d]秒
--a[职业],b[属性],c[float],d[int],e[改变类型]
[34] = function(caster, target, args, interval)
local pt = args[1]
local pro1 = args[2]
local f1 = args[3]
local f2 = args[4]
local ct = args[5]
BattleLogic.WaitForTrigger(interval, function ()
if target.professionId == pt then
target:AddBuff(Buff.Create(caster, BuffName.PropertyChange, f2, propertyList[pro1], f1, ct))
end
end)
end,
2019-05-28 16:03:14 +08:00
--对[a]的伤害[b]%,持续[c]秒
--a[控制状态],b[float],c[int]
[35] = function(caster, target, args, interval)
local ct = args[1]
local f1 = args[2]
local f2 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
local func = function(damage)
if BattleLogic.BuffMgr:HasBuff(target, BuffName.Control, function (buff) return ct == 0 or buff.ctrlType == ct end) then
damage = damage + floor(damage * f1)
end
return damage
end
target.exCalDmgList:Add(func)
if f2 > 0 then
BattleLogic.WaitForTrigger(f2, function ()
for i=1, target.exCalDmgList.size do
if target.exCalDmgList.buffer[i] == func then
target.exCalDmgList:Remove(i)
break
end
end
end)
end
end)
end,
--[d]改变[a]属性[b]%,最大叠加[c]层
--a[属性],b[float],c[int],d[改变类型]
[36] = function(caster, target, args, interval)
local pro1 = args[1]
local f1 = args[2]
local i1 = args[3]
local ct = args[4]
BattleLogic.WaitForTrigger(interval, function ()
local changeBuff = Buff.Create(caster, BuffName.PropertyChange, 0, propertyList[pro1], f1, ct)
changeBuff.cover = true
changeBuff.maxLayer = i1
target:AddBuff(changeBuff)
end)
end,
--清除[a]状态
--a[控制状态]
[37] = function(caster, target, args, interval)
local ct = args[1]
BattleLogic.WaitForTrigger(interval, function ()
BattleLogic.BuffMgr:ClearBuff(target, function (buff)
return buff.type == BuffName.Control and (ct == 0 or buff.ctrlType == ct)
end)
end)
end,
2019-05-29 17:55:32 +08:00
--造成[a]的伤害(真实伤害)
--a[int]
[38] = function(caster, target, args, interval)
local d = args[1]
casterBulletEffect(caster, target, interval)
BattleLogic.WaitForTrigger(interval, function ()
if not target.isDead then
BattleUtil.ApplyDamage(caster, target, d)
end
end)
end,
--每秒造成[d]的伤害,持续[f]秒(真实伤害)
--d[float],f[int]
[39] = function(caster, target, args, interval)
local d1 = args[1]
local d2 = args[2]
casterBulletEffect(caster, target, interval)
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.DOT, d2, 1, 0, d1, 1))
end)
end,
2019-06-04 17:48:01 +08:00
--添加[a]的伤害吸收护盾,持续[b]秒,盾消失的时候反射吸收伤害的[c]%
--a[int],b[int],c[float]
[40] = function(caster, target, args, interval)
local f1 = args[1]
local f2 = args[2]
local f3 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
target:AddBuff(Buff.Create(caster, BuffName.Shield, f2, f1, f3))
end)
end,
--造成[a]%的[b]伤害,同时有[c]%的概率对该敌人造成[d]%的伤害,若该技能造成击杀,则有[e]%的概率清除自身CD
--a[folat],b[伤害类型],c[float],d[float],e[float]
[41] = function(caster, target, args, interval)
local f1 = args[1]
local dt = args[2]
2019-08-06 20:55:47 +08:00
local f2 = calBuffHit(caster, target, args[3])
2019-06-04 17:48:01 +08:00
local f3 = args[4]
2019-08-06 20:55:47 +08:00
local f4 = calBuffHit(caster, target, args[5])
2019-06-04 17:48:01 +08:00
casterBulletEffect(caster, target, interval)
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.RandomAction(f2, function ()
f1 = f1 + f3
end)
BattleUtil.CalDamage(caster, target, dt, f1)
if target.isDead then
BattleUtil.RandomAction(f4, function ()
2019-06-06 17:23:18 +08:00
caster:AddSkillCD(0)
2019-06-04 17:48:01 +08:00
end)
end
end)
end,
--进入虚弱状态,有[a]%的概率受到额外[b]%的伤害,状态持续[c]秒
--a[folat],b[float],c[int]
[42] = function(caster, target, args, interval)
2019-08-06 20:55:47 +08:00
local f1 = calBuffHit(caster, target, args[1])
2019-06-04 17:48:01 +08:00
local f2 = args[2]
local f3 = args[3]
BattleLogic.WaitForTrigger(interval, function ()
2019-07-12 15:14:11 +08:00
local trigger = function(atkRole, damagingFunc, damageType)
2019-06-04 17:48:01 +08:00
BattleUtil.RandomAction(f1, function ()
damagingFunc(f2)
end)
end
target.Event:AddEvent(BattleEventName.RoleBeDamagedBefore, trigger)
2019-06-13 15:57:55 +08:00
target:AddBuff(Buff.Create(caster, BuffName.Brand, f3, "weak", function ()
2019-06-04 17:48:01 +08:00
target.Event:RemoveEvent(BattleEventName.RoleBeDamagedBefore, trigger)
end))
end)
end,
2019-06-20 15:47:36 +08:00
--瞬间恢复[a]的生命
--a[int]
[43] = function(caster, target, args, interval)
local i1 = args[1]
BattleLogic.WaitForTrigger(interval, function ()
BattleUtil.CalTreat(caster, target, i1)
end)
end,
2019-03-12 14:05:45 +08:00
}
return effectList