local floor = math.floor local max = math.max --local RoleDataName = RoleDataName --local BattleLogic = BattleLogic --local BattleUtil = BattleUtil --local BattleEventName = BattleEventName --local BuffName = BuffName local function queryAllies(role) return function (r) return r.camp == role.camp end end local function queryEnemy(role) return function (r) return r.camp ~= role.camp end end --被动技能表 local passivityList = { --受到暴击伤害时,有(a%)的概率发动一次反击,对敌人造成【b*c+d】的【e】伤害 [201011] = function(role, args) local f1 = args[1]/100 local pro1 = args[2] local f2 = args[3] local pro2 = args[4] local dt = args[5] local OnCrit = function(atkRole) BattleUtil.RandomAction(f1, function () local value = role:GetRoleData(BattleUtil.GetPropertyName(pro1)) * f2 + role:GetRoleData(BattleUtil.GetPropertyName(pro2)) BattleUtil.CalDamage(role, atkRole, value, 1, dt) end) end role.Event:AddEvent(BattleEventName.RoleBeCrit, OnCrit) end, --生命低于(a%)的时候,提升自身减伤率(b%),持续(c)秒。每场战斗只能触发一次。 [201021] = function(role, args) local f1 = args[1] local f2 = args[2] local f3 = args[3] local buffId1 = BattleUtil.CreateBuffId(role, 1) local triggerCount = 0 local OnDamaged = function(atkRole) if BattleUtil.GetHPPencent(role) < f1 then if triggerCount < 1 then local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, f3, RoleDataName.DamageReduceFactor, f2, 1) role:AddBuff(buff) triggerCount = triggerCount + 1 end end end role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) end, --开场降低敌方全体(a%)的【c】,持续(bs)。 [202011] = function(role, args) local f1 = args[1]/100 local f2 = args[2] local pro1 = args[3] local buffId1 = BattleUtil.CreateBuffId(role, 1) local arr = BattleLogic.Query(queryEnemy(role)) local v for i=1, #arr do v = arr[i] local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, f2, BattleUtil.GetPropertyName(pro1), f1, 2) v:AddBuff(buff) end end, --开场增加增加全队暴击率(a%),持续(b)秒。 [202021] = function(role, args) local f1 = args[1]/100 local f2 = args[2] local buffId1 = BattleUtil.CreateBuffId(role, 1) local arr = BattleLogic.Query(queryAllies(role)) local v for i=1, #arr do v = arr[i] local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, f2, RoleDataName.Crit, f1, 2) v:AddBuff(buff) end end, --场上每有1个流血目标,GCD降低(a)秒。最高降低(b)秒。 [203011] = function(role, args) local f1 = args[1] local f2 = args[2] local buffId1 = BattleUtil.CreateBuffId(role, 1) local originGcd = role:GetRoleData(RoleDataName.GCD) local aurabuff = Buff.Create(role, BuffName.Aura, buffId1, 0, function (role) local arr = BattleLogic.Query(queryEnemy(role)) local count = 0 local v for i=1, #arr do v = arr[i] if v.BuffMgr:HasBuff(BuffName.Bleed) then count = count + 1 end end role.data:SetValue(RoleDataName.GCD, max(originGcd - count * f1, f2)) end) aurabuff.interval = 0 role:AddBuff(aurabuff) end, --每次受到伤害,额外提升伤害(a%)(最多b%)。 [203021] = function(role, args) local f1 = args[1]/100 local f2 = args[2]/100 local buffId1 = BattleUtil.CreateBuffId(role, 1) local totalFactor = 0 local OnDamaged = function(atkRole) if totalFactor <= f2 then local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, 0, RoleDataName.DamageBocusFactor, f2, 1) role:AddBuff(buff) totalFactor = totalFactor + f1 end end role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) end, --开场额外增加暴击率(a%)。 [204011] = function(role, args) local f1 = args[1]/100 local buffId1 = BattleUtil.CreateBuffId(role, 1) local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, 0, RoleDataName.Crit, f1, 1) role:AddBuff(buff) end, --受到攻击时,攻击者有(a%)的概率被附加1个印记。 [204021] = function(role, args) local f1 = args[1]/100 local buffId1 = BattleUtil.CreateBuffId(role, 1) local OnDamaged = function(atkRole) BattleUtil.RandomAction(f1, function () local buff = Buff.Create(role, BuffName.Brand, buffId1, 0, "咒术师印记") atkRole:AddBuff(buff) end) end role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) end, --生命低于(a%),治疗量增加(b%),持续(c)秒。每场战斗只能触发一次。 [205011] = function(role, args) local f1 = args[1] local f2 = args[2]/100 local f3 = args[3] local buffId1 = BattleUtil.CreateBuffId(role, 1) local triggerCount = 0 local OnDamaged = function(atkRole) if BattleUtil.GetHPPencent(role) < f1 then if triggerCount < 1 then local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, f3, RoleDataName.TreatFacter, f2, 1) role:AddBuff(buff) triggerCount = triggerCount + 1 end end end role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) end, --生命低于(a%),提升友军(b%)的【e】,并且(d%)概率眩晕对方全体(c)秒,每场战斗只能触发一次。 [205021] = function(role, args) local f1 = args[1] local f2 = args[2]/100 local f3 = args[3] local f4 = args[4]/100 local pro1 = args[5] local f5 = args[6] local buffId1 = BattleUtil.CreateBuffId(role, 1) local buffId2 = BattleUtil.CreateBuffId(role, 2) local triggerCount = 0 local OnDamaged = function(atkRole) if BattleUtil.GetHPPencent(role) < f1 then if triggerCount < 1 then local arr = BattleLogic.Query(queryAllies(role)) local v for i=1, #arr do v = arr[i] local buff = Buff.Create(role, BuffName.PropertyChange, buffId1, f5, BattleUtil.GetPropertyName(pro1), f2, 1) v:AddBuff(buff) end BattleUtil.RandomAction(f4, function () local arr = BattleLogic.Query(queryEnemy(role)) local v for i=1, #arr do v = arr[i] local stun = Buff.Create(role, BuffName.Stun, buffId2, f3) v:AddBuff(stun) end end) triggerCount = triggerCount + 1 end end end role.Event:AddEvent(BattleEventName.RoleBeDamaged, OnDamaged) end, --每(a)秒恢复(b)魂能 [206021] = function(role, args) local f1 = args[1] local i1 = args[2] local buffId1 = BattleUtil.CreateBuffId(role, 1) local aurabuff = Buff.Create(role, BuffName.Aura, buffId1, 0, function (role) BattleLogic.AddMP(role.camp, i1) end) aurabuff.interval = f1 role:AddBuff(aurabuff) end, --自身生命高于(a%),暴击率提高(b%) [207011] = function(role, args) local f1 = args[1] local f2 = args[2]/100 local buffId1 = BattleUtil.CreateBuffId(role, 1) local buffId2 = BattleUtil.CreateBuffId(role, 2) local buff = Buff.Create(role, BuffName.PropertyChange, buffId2, 0, RoleDataName.Crit, f2, 1) local active = BattleUtil.GetHPPencent(role) > f1 if active then role:AddBuff(buff) end local aurabuff = Buff.Create(role, BuffName.Aura, buffId1, 0, function (role) local curActive = BattleUtil.GetHPPencent(role) > f1 if active ~= curActive then active = curActive if active then buff.disperse = false role:AddBuff(buff) else buff.disperse = true end end end) aurabuff.interval = 0 role:AddBuff(aurabuff) end, --召唤物存在期间,场上伙伴阵亡超过2名时,冰雪皇后会牺牲并复活所有已阵亡的队友,保留其(a%)的生命,全场只可触发1次 [208011] = function(role, args) local f1 = args[1]/100 local deadCount = 0 local triggerCount = 0 local OnDead = function(role) if role.camp == role.camp and role.roleType ~= 3 then deadCount = deadCount + 1 if deadCount > 2 and role.summon and triggerCount < 1 then BattleLogic.RemoveSummon(role.summon) local arr = BattleLogic.Query(function (r) return r.camp == role.camp and r.roleType ~= 3 end, true) local v for i=1, #arr do v = arr[i] local hp = v:GetRoleData(RoleDataName.MaxHp) v.data:AddValue(RoleDataName.Hp, floor(hp*f1)) v.Event:DispatchEvent(BattleEventName.RoleRevive) end triggerCount = triggerCount + 1 end end end BattleLogic.Event:AddEvent(BattleEventName.BattleRoleDead, OnDead) end, } return passivityList