diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Base/EffectCaster.lua b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Base/EffectCaster.lua index 392ae55ecf..5228d326ac 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Base/EffectCaster.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Base/EffectCaster.lua @@ -174,6 +174,19 @@ function EffectCaster:GetDirectTargetsNoMiss() return list end +-- 获取直接目标和没有被放逐的目标,不包含miss的目标,可能为空 +function EffectCaster:GetDirectTargetsNoExile() + local list = {} + for _, role in ipairs(self.effectTargets[1]) do + if not role.isExile then + table.insert(list, role) + end + end + return list +end + + + -- 获取技能目标最大人数 function EffectCaster:GetMaxTargetNum() local mainEffect = self.effectList[1] diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua index b81eb6e7be..e4db578d20 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -380,7 +380,7 @@ function BattleUtil.ChooseTarget(role, chooseId) local team = RoleManager.Query(function (r) return r.camp ~= role.camp end) if list then for key, value in pairs(team) do - if not value:IsDead() and not BattleUtil.ChecklistIsContainValue(role.exileTargets,value) then + if not value:IsRealDead() and not BattleUtil.ChecklistIsContainValue(role.exileTargets,value) then --return arr[i] table.insert(tempArr,value) end diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/Skill.lua b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/Skill.lua index 012db7b807..b2689b83d6 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/Skill.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/Skill.lua @@ -64,6 +64,15 @@ function Skill:Cast(func) -- 技能效果生效 if self.effectCaster then + --放技能前判断是否有目标,没有就不会放技能,直接执行技能回调 by 王振兴 2021/03/26 + --为解决攻击目标只剩被放逐的单位导致技能播放异常 + self.effectCaster:ChooseTarget() + local targets=LengthOfTable(self:GetDirectTargetsNoExile()) + if targets==0 and self.castDoneFunc then + self.castDoneFunc() + return + end + --end self.effectCaster:Cast() end @@ -106,6 +115,11 @@ end function Skill:GetDirectTargetsNoMiss() return self.effectCaster:GetDirectTargetsNoMiss() end + +-- 获取直接目标,不包含miss的目标,可能为空 +function Skill:GetDirectTargetsNoExile() + return self.effectCaster:GetDirectTargetsNoExile() +end -- 获取技能目标最大人数 function Skill:GetMaxTargetNum() return self.effectCaster:GetMaxTargetNum()