diff --git a/Assets/ManagedResources/Icon/Item/icon_jiuweihu.png b/Assets/ManagedResources/Icon/Item/icon_jiuweihu.png new file mode 100644 index 0000000000..3c22666ec7 Binary files /dev/null and b/Assets/ManagedResources/Icon/Item/icon_jiuweihu.png differ diff --git a/Assets/ManagedResources/Icon/Item/icon_sibuxiang.png b/Assets/ManagedResources/Icon/Item/icon_sibuxiang.png new file mode 100644 index 0000000000..373cae32ad Binary files /dev/null and b/Assets/ManagedResources/Icon/Item/icon_sibuxiang.png differ diff --git a/Assets/ManagedResources/Icon/Item/r_Resource_jiuweihu.png b/Assets/ManagedResources/Icon/Item/r_Resource_jiuweihu.png new file mode 100644 index 0000000000..44f29e7bed Binary files /dev/null and b/Assets/ManagedResources/Icon/Item/r_Resource_jiuweihu.png differ diff --git a/Assets/ManagedResources/Icon/Item/r_Resource_sibuxiang.png b/Assets/ManagedResources/Icon/Item/r_Resource_sibuxiang.png new file mode 100644 index 0000000000..9dc3bd1326 Binary files /dev/null and b/Assets/ManagedResources/Icon/Item/r_Resource_sibuxiang.png differ diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Monster/MonsterSkill/MTrigger.lua b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Monster/MonsterSkill/MTrigger.lua index 4a0f578ff3..b8e7928ee2 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Monster/MonsterSkill/MTrigger.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Monster/MonsterSkill/MTrigger.lua @@ -2,92 +2,161 @@ 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.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 = { - [1] = { --1:敌方单位行动前 - event = BattleEventName.RoleTurnStart, - triggerFunc = function(skill, ...) + [BattleEventName.RoleTurnStart] = { + [1] = function(skill, ...) --1:敌方单位行动前 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, ...) + end, + [3] = function(skill, ...) --3:我方单位行动前 local args = {...} local role = args[1] return role.camp == skill.owner.camp end }, - [4] = {--4:我方单位行动后 - event = BattleEventName.RoleTurnEnd, - triggerFunc = function(skill, ...) + [BattleEventName.RoleTurnEnd] = { + [2] = function(skill, ...)--2:敌方单位行动后 + local args = {...} + local role = args[1] + return role.camp ~= skill.owner.camp + end, + [4] = function(skill, ...)--4:我方单位行动后 local args = {...} local role = args[1] return role.camp == skill.owner.camp end }, - [5] = {--5:战前 - event = BattleEventName.BattleStart, - triggerFunc = function(skill, ...) + [BattleEventName.BattleStart] = { + [5] = function(skill, ...)--5:战前 return true end }, - [6] = {--6:奇数回合开始前 - event = BattleEventName.BattleRoundStart, - triggerFunc = function(skill, ...) + [BattleEventName.BattleRoundStart] = { + [6] = function(skill, ...)--6:奇数回合开始前 local args = {...} local curRound = args[1] return curRound%2 == 1 - end - }, - [7] = {--7:偶数回合开始前 - event = BattleEventName.BattleRoundStart, - triggerFunc = function(skill, ...) + end, + [7] = function(skill, ...)--7:偶数回合开始前 local args = {...} local curRound = args[1] return curRound%2 == 0 + end, + [10] = function(skill, ...)--10:回合开始前 + return true end }, - [8] = {--8:奇数回合结束后 - event = BattleEventName.BattleRoundEnd, - triggerFunc = function(skill, ...) + [BattleEventName.BattleRoundEnd] = { + [8] = function(skill, ...)--8:奇数回合结束后 local args = {...} local curRound = args[1] return curRound%2 == 1 - end - }, - [9] = {--9:偶数回合结束后 - event = BattleEventName.BattleRoundEnd, - triggerFunc = function(skill, ...) + end, + [9] = function(skill, ...)--9:偶数回合结束后 local args = {...} local curRound = args[1] return curRound%2 == 0 - end - }, - [10] = {--10:回合开始前 - event = BattleEventName.BattleRoundStart, - triggerFunc = function(skill, ...) + end, + [11] = function(skill, ...)--11:回合结束后 return true end }, - [11] = {--11:回合结束后 - event = BattleEventName.BattleRoundEnd, - triggerFunc = function(skill, ...) - return true - end - }, - [12] = {--12:我方单位释放技能后 - event = BattleEventName.SkillCastEnd, - triggerFunc = function(skill, ...) + [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) @@ -104,32 +173,48 @@ end function this.InitListener() --每次初始化时间监听前 清除下缓存数据 MCondition.ClearCache() - for triggerId, config in pairs(_TriggerConfig) do - BattleLogic.Event:AddEvent(config.event, function(...) + for event, list in pairs(_TriggerConfig) do + BattleLogic.Event:AddEvent(event, function(...) + -- 用于排序 + local firstList = {} -- 用于排序 local sortList = {} - -- 判断是否有需要触发的技能 - - 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 - -- 加入技能排序对列 - table.insert(sortList, skill) + for triggerId, triggerFunc in pairs(list) do + -- 判断是否有需要触发的技能 + local triggerSkill = this.TriggerList[triggerId] + if triggerSkill then + for _, trigger in ipairs(triggerSkill) do + local skill = trigger.skill + local condition = trigger.condition + -- 判断技能是否可以释放 + if skill:canCastSkill() then + -- 判断是否符合触发类型条件 + if triggerFunc(skill, ... ) then + -- 检测是否符合子条件 + if MCondition.CheckCondition(skill, condition) then + -- 加入技能排序对列 + if skill.owner.position == 100 then + table.insert(firstList, skill) + else + table.insert(sortList, skill) + end + end + end end - end + end end end -- 对技能进行排序 + table.sort(firstList, function(a, b) + -- 同阵营按位置排序 + if a.owner.camp == b.owner.camp then + return a.owner.position < b.owner.position + else + -- 不同阵营的根据先手阵营排序 + return a.owner.camp == BattleLogic.FirstCamp + end + end) + -- 对技能进行排序 table.sort(sortList, function(a, b) -- 同阵营按位置排序 if a.owner.camp == b.owner.camp then @@ -140,6 +225,9 @@ function this.InitListener() end end) -- 依次加入技能管理 + for _, skill in ipairs(firstList) do + SkillManager.AddMonsterSkill(skill) + end for _, skill in ipairs(sortList) do SkillManager.AddMonsterSkill(skill) end