miduo_client/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Weapon/WeaponTrigger.lua

343 lines
13 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.

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