require("Modules.Battle.Logic.Weapon.WeaponCondition") WeaponTrigger = {} local this = WeaponTrigger -- local _TriggerConfig = { -- [1] = { --1:敌方单位行动前 -- event = BattleEventName.RoleTurnStart, -- triggerFunc = function(skill, ...) -- local args = {...} -- local role = args[1] -- return role.camp ~= skill.owner.camp -- end -- }, -- [2] = {--2:敌方单位行动后 -- event = BattleEventName.RoleTurnEnd, -- triggerFunc = function(skill, ...) -- local args = {...} -- local role = args[1] -- return role.camp ~= skill.owner.camp -- end -- }, -- [3] = {--3:我方单位行动前 -- event = BattleEventName.RoleTurnStart, -- triggerFunc = function(skill, ...) -- local args = {...} -- local role = args[1] -- return role.camp == skill.owner.camp -- end -- }, -- [4] = {--4:我方单位行动后 -- event = BattleEventName.RoleTurnEnd, -- triggerFunc = function(skill, ...) -- local args = {...} -- local role = args[1] -- return role.camp == skill.owner.camp -- end -- }, -- [5] = {--5:战前 -- event = BattleEventName.BattleStart, -- triggerFunc = function(skill, ...) -- return true -- end -- }, -- [6] = {--6:奇数回合开始前 -- event = BattleEventName.BattleRoundStart, -- triggerFunc = function(skill, ...) -- local args = {...} -- local curRound = args[1] -- return curRound%2 == 1 -- end -- }, -- [7] = {--7:偶数回合开始前 -- event = BattleEventName.BattleRoundStart, -- triggerFunc = function(skill, ...) -- local args = {...} -- local curRound = args[1] -- return curRound%2 == 0 -- end -- }, -- [8] = {--8:奇数回合结束后 -- event = BattleEventName.BattleRoundEnd, -- triggerFunc = function(skill, ...) -- local args = {...} -- local curRound = args[1] -- return curRound%2 == 1 -- end -- }, -- [9] = {--9:偶数回合结束后 -- event = BattleEventName.BattleRoundEnd, -- triggerFunc = function(skill, ...) -- local args = {...} -- local curRound = args[1] -- return curRound%2 == 0 -- end -- }, -- [10] = {--10:回合开始前 -- event = BattleEventName.BattleRoundStart, -- triggerFunc = function(skill, ...) -- return true -- end -- }, -- [11] = {--11:回合结束后 -- event = BattleEventName.BattleRoundEnd, -- triggerFunc = function(skill, ...) -- return true -- end -- }, -- [12] = {--12:我方单位释放技能后 -- event = BattleEventName.SkillCastEnd, -- triggerFunc = function(skill, ...) -- local args = {...} -- local castSkill = args[1] -- return castSkill.owner.camp == skill.owner.camp and castSkill.owner.job==2 and (castSkill.type==BattleSkillType.DeadSkill or castSkill.type==BattleSkillType.Extra or castSkill.type==BattleSkillType.Special) -- end -- }, -- } local _TriggerConfig = { [BattleEventName.RoleTurnStart] = { [1] = function(skill, ...) --1:敌方单位行动前 local args = {...} local role = args[1] return role.camp ~= skill.owner.camp end, [3] = function(skill, ...) --3:我方单位行动前 local args = {...} local role = args[1] return role.camp == skill.owner.camp end }, [BattleEventName.RoleTurnEnd] = { [2] = function(skill, ...)--2:敌方单位行动后 local args = {...} local role = args[1] if skill.ownHero==nil then return end return role.camp ~= skill.owner.camp end, [4] = function(skill, ...)--4:我方单位行动后 local args = {...} local role = args[1] if skill.ownHero==nil then return end return role.camp == skill.owner.camp end, [13] = function(skill, ...)--13:敌方攻击最高单位行动后 local args = {...} local caster = args[1] local cam=skill.owner.camp if caster.camp==cam then return false end local list = RoleManager.Query(function(v) return v.camp~=cam end) if list and #list>0 then BattleUtil.SortByProp(list,RoleDataName.Attack,0) if caster==list[1] then return true end end return false end }, [BattleEventName.BattleStart] = { [5] = function(skill, ...)--5:战前 return true end }, [BattleEventName.BattleRoundStart] = { [6] = function(skill, ...)--6:奇数回合开始前 local args = {...} local curRound = args[1] return curRound%2 == 1 end, [7] = function(skill, ...)--7:偶数回合开始前 local args = {...} local curRound = args[1] return curRound%2 == 0 end, [10] = function(skill, ...)--10:回合开始前 return true end }, [BattleEventName.BattleRoundEnd] = { [8] = function(skill, ...)--8:奇数回合结束后 local args = {...} local curRound = args[1] return curRound%2 == 1 end, [9] = function(skill, ...)--9:偶数回合结束后 local args = {...} local curRound = args[1] return curRound%2 == 0 end, [11] = function(skill, ...)--11:回合结束后 return true end }, [BattleEventName.SkillCastEnd] = { [12] = function(skill, ...)--12:我方单位释放技能后 local args = {...} local castSkill = args[1] return castSkill.owner.camp == skill.owner.camp and castSkill.owner.job==2 and (castSkill.type==BattleSkillType.DeadSkill or castSkill.type==BattleSkillType.Extra or castSkill.type==BattleSkillType.Special) end, [14] =function(skill,...) --14:我方金乌释放技能后 local args = {...} local castSkill = args[1] return castSkill.owner.camp == skill.owner.camp and castSkill.owner.type==BattleUnitType.Monster and castSkill.owner.uid==20008 end, [16] =function(skill,...) --16:神兵所属者释放技能活普攻 local args = {...} local castSkill = args[1] if skill.ownHero==nil then return end --LogError("castSkill.owner=="..castSkill.owner.uid.." skill.ownHero=="..skill.ownHero.uid) return castSkill.owner == skill.ownHero and not castSkill.isAdd and (castSkill.type==BattleSkillType.Normal or castSkill.type==BattleSkillType.Special) end, [17] =function(skill,...) --17:神兵所属者释放普攻 local args = {...} local castSkill = args[1] if skill.ownHero==nil then return end --LogError("============================17") return castSkill.owner == skill.ownHero and castSkill.type==BattleSkillType.Normal end, [19] =function(skill,...) --19:神兵所属者释放技能(不包含追加技能) local args = {...} local castSkill = args[1] if skill.ownHero==nil then return end return castSkill.owner == skill.ownHero and not castSkill.isAdd and (castSkill.type==BattleSkillType.Special or castSkill.type==BattleSkillType.Extra ) end, }, [BattleEventName.RoleIsVanish]={ [15]=function(skill, ...) local args={...} local role=RoleManager.GetDeadRole(skill.owner.camp) if role and role:IsRealDead() and not BattleUtil.CheckIsNoDead(role) then return true end return false end, }, [BattleEventName.BattleRoleDead]={ [18]=function(skill, ...) local args={...} local defRole=args[1] local atkRole=args[2] local deadSkill=args[3] if skill.ownHero==nil then return end if skill==deadSkill then defRole:GetRoleData(RoleDataName.MaxHp) end end, }, } function WeaponTrigger.Init() this.TriggerList ={} this.InitListener() end -- 初始化事件监听 function this.InitListener() --每次初始化时间监听前 清除下缓存数据 WeaponCondition.ClearCache() --LogError("初始u啊神兵技能监听-------") for event, list in pairs(_TriggerConfig) do BattleLogic.Event:AddEvent(event, function(...) -- 用于排序 local firstList = {} -- 用于排序 local sortList = {} for triggerId, triggerFunc in pairs(list) do -- 判断是否有需要触发的技能 --LogError("判断是否有需要触发的技能") local triggerSkill = this.TriggerList[triggerId] if triggerSkill then for _, trigger in ipairs(triggerSkill) do local skill = trigger.skill local condition = trigger.condition --LogError("判断技能是否可以释放") -- 判断技能是否可以释放 if skill:canCastSkill() then -- 判断是否符合触发类型条件 --LogError("判断是否符合触发类型条件") if triggerFunc(skill, ... ) then -- 检测是否符合子条件 if WeaponCondition.CheckCondition(skill, condition) then -- 加入技能排序对列 --LogError("-- 加入技能排序对列") if skill.owner.position == 100 then table.insert(firstList, skill) else table.insert(sortList, skill) end end end end end end end -- 对技能进行排序 table.sort(firstList, function(a, b) -- 同阵营按位置排序 if a.owner.camp == b.owner.camp then if a.owner.position == b.owner.position then return a.id < b.id else return a.owner.position < b.owner.position end else -- 不同阵营的根据先手阵营排序 return a.owner.camp == BattleLogic.FirstCamp end end) -- 对技能进行排序 table.sort(sortList, function(a, b) -- 同阵营按位置排序 if a.owner.camp == b.owner.camp then if a.owner.position == b.owner.position then return a.id < b.id else return a.owner.position < b.owner.position end else -- 不同阵营的根据先手阵营排序 return a.owner.camp == BattleLogic.FirstCamp end end) --依次加入技能管理 for _, skill in ipairs(firstList) do SkillManager.AddMonsterSkill(skill) end for _, skill in ipairs(sortList) do --LogError("添加技能到skillmanager") SkillManager.AddMonsterSkill(skill) end end) end end -- 技能加入检测 function WeaponTrigger.AddSkill(triggerId, condition, skill) if not this.TriggerList then this.TriggerList = {} end if not this.TriggerList[triggerId] then this.TriggerList[triggerId] = {} end table.insert(this.TriggerList[triggerId], {condition = condition, skill = skill,trigger= triggerId}) end return WeaponTrigger