WeaponCondition = {} local this = WeaponCondition local skillRound={} local enSkillRound={} local _ConditionConfig = { [0] = function(skill, condition) --0:无限制条件 return true end, [1] = function(skill, condition) --1:我方任意神将生命百分比 【比较类型】 N(万分比) local conId = condition[1] local comType = condition[2] local comValue = condition[3] -- 获取该技能相同阵营人物 local roleList = RoleManager.Query(function(role) return role.camp == skill.owner.camp end) -- 判断 for _, role in ipairs(roleList) do local hpf = role:GetRoleData(RoleDataName.Hp) / role:GetRoleData(RoleDataName.MaxHp) if BattleUtil.CompareValue(hpf, comValue/10000, comType) then return true end end return false end, [2] = function(skill, condition) --2:回合数 【比较类型】 N local conId = condition[1] local comType = condition[2] local comValue = condition[3] -- 获取当前回合 local curRound = BattleLogic.GetCurRound() return BattleUtil.CompareValue(curRound, comValue, comType) end, [3] = function(skill, condition) --2:回合数 【比较类型】 N 且 概率为 N local conId = condition[1] local comType = condition[2] local comValue = condition[3] local rand = condition[4] -- 获取当前回合 local curRound = BattleLogic.GetCurRound() local isRoundOk = BattleUtil.CompareValue(curRound, comValue, comType) -- 判断概率 local r = Random.Range01() local isRandomOk = r <= rand/10000 return isRoundOk and isRandomOk end, [4] = function(skill, condition) --4:场上燃烧目标的数量 【比较类型】 N local conId = condition[1] local comType = condition[2] local comValue = condition[3] -- 当前释放技能的单位的职业 local professionId = skill.owner.professionId local list = RoleManager.Query(function(role) return role.camp ~= skill.owner.camp end) if not list then return false end local num=0 for key, value in pairs(list) do local isHave=BattleLogic.BuffMgr:HasBuff(value, BuffName.DOT, function(buff) return buff.damageType == 1 end) if isHave then num=num+1 end end return BattleUtil.CompareValue(num, comValue, comType) end, [5] = function(skill, condition) --5:敌方上场神将数量 且概率(万分比) local conId = condition[1] local comType = condition[2] local comValue = condition[3] local rand = condition[4] local roleList = RoleManager.Query(function(role) return role.camp ~= skill.owner.camp end) local isEnough=BattleUtil.CompareValue(#roleList, comValue, comType) local r = Random.Range01() -- 判断概率 if isEnough then return rand/10000>r end return false end, [6] = function(skill, condition) --6:敌方任意神将生命百分比 【比较类型】 N(万分比) local conId = condition[1] local comType = condition[2] local comValue = condition[3] local round = condition[4] -- 获取该技能相同阵营人物 local roleList = RoleManager.Query(function(role) return role.camp ~= skill.owner.camp end) -- 判断 local r = Random.Range01() for _, role in ipairs(roleList) do local hpf = role:GetRoleData(RoleDataName.Hp) / role:GetRoleData(RoleDataName.MaxHp) if BattleUtil.CompareValue(hpf, comValue/10000, comType) then return round/10000>r end end return false end, [7] = function(skill, condition) --7:敌方上场神将数量 且概率(万分比)(检测放逐) local conId = condition[1] local comType = condition[2] local comValue = condition[3] local rand = condition[4] local roleList = RoleManager.QueryIncludeExile(function(role) return role.camp ~= skill.owner.camp end) --判断场上敌方数量是否足够 local isEnough=BattleUtil.CompareValue(#roleList, comValue, comType) if isEnough then local ishave=false --是否有没被放逐的目标 local list=skill.owner.exileTargets for key, value in pairs(roleList) do if not BattleUtil.ChecklistIsContainValue(list,value) then ishave=true break end end if ishave then local r = Random.Range01() -- 判断概率 if isEnough then return rand/10000>r end end return false end return false end, [8] = function(skill, condition) --6:回合cd数限制 local conId = condition[1] local comType = condition[2] local comValue = condition[3] -- 获取当前回合 local curRound = BattleLogic.GetCurRound() --我方主角技能计算回合 if skill.owner.camp==0 then if not skillRound[skill.id] then skillRound[skill.id]=curRound return true else if curRound==skillRound[skill.id]+comValue then skillRound[skill.id]=curRound return true end end else --敌方主角技能计算回合 if not enSkillRound[skill.id] then enSkillRound[skill.id]=curRound return true else if curRound==enSkillRound[skill.id]+comValue then enSkillRound[skill.id]=curRound return true end end end return false end, [9] = function(skill, condition) --6:我方道系非治疗数量 local conId = condition[1] local comType = condition[2] local comValue = condition[3] local list=RoleManager.Query(function(role) return role.camp==skill.owner.camp and role.element==BattleRoleElementType.DAO and role.job~=1 end) return BattleUtil.CompareValue(#list, comValue, comType) end, [10] = function(skill, condition) --10:神兵所属神将生命百分比 【比较类型】 N(万分比) local conId = condition[1] local comType = condition[2] local comValue = condition[3] if skill.ownHero==nil or skill.ownHero:IsDead() then --LogError("没有持有者") return false end -- 判断 local hpf = skill.ownHero:GetRoleData(RoleDataName.Hp) / skill.ownHero:GetRoleData(RoleDataName.MaxHp) --LogError("hpf==="..hpf) if BattleUtil.CompareValue(hpf, comValue/10000, comType) then --LogError("触发技能"..hpf) return true end return false end, } -- 条件检测 function WeaponCondition.CheckCondition(skill, condition) if not condition then --LogError("condition==") return true end local conId = condition[1] local comType = condition[2] local comValue = condition[3] --LogError("conid=="..conId.." comtype=="..comType.." comvalue=="..comValue) return _ConditionConfig[conId](skill, condition) end -- 清除缓存 function WeaponCondition.ClearCache() if skillRound then skillRound={} end if enSkillRound then enSkillRound={} end end return WeaponCondition