miduo_server/luafight/Modules/Battle/Logic/Monster/MonsterSkill/MTrigger.lua

145 lines
4.4 KiB
Lua
Raw Normal View History

2020-10-29 16:36:10 +08:00
require("Modules.Battle.Logic.Monster.MonsterSkill.MCondition")
MTrigger = {}
local this = MTrigger
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.BattleRoundEnd,
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
end
},
}
function MTrigger.Init()
this.TriggerList ={}
this.InitListener()
end
-- 初始化事件监听
function this.InitListener()
for triggerId, config in pairs(_TriggerConfig) do
BattleLogic.Event:AddEvent(config.event, function(...)
-- 判断是否有需要触发的技能
local triggerSkill = this.TriggerList[triggerId]
if not triggerSkill then
return
end
for _, trigger in ipairs(triggerSkill) do
local skill = trigger.skill
local condition = trigger.condition
-- 判断技能是否可以释放
if skill:canCastSkill() then
-- 判断是否符合触发类型条件
if config.triggerFunc(skill, ... ) then
-- 检测是否符合子条件
if MCondition.CheckCondition(skill, condition) then
-- 加入技能释放对列
SkillManager.AddMonsterSkill(skill)
end
end
end
end
end)
end
end
-- 技能加入检测
function MTrigger.AddSkill(triggerId, condition, skill)
LogBattle("AddSkill "..triggerId)
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})
end
return MTrigger