diff --git a/Unity/Assets/Scripts/TH1_Data/MapData.cs b/Unity/Assets/Scripts/TH1_Data/MapData.cs index 2b40fb6eb..31cdfc8d2 100644 --- a/Unity/Assets/Scripts/TH1_Data/MapData.cs +++ b/Unity/Assets/Scripts/TH1_Data/MapData.cs @@ -2207,7 +2207,12 @@ namespace RuntimeData //避免在遍历的时候,直接改到了skillsList using var skillHandle = THCollectionPool.GetListHandle(out var copy); copy.AddRange(unit.Skills); - foreach (var skill in copy) skill.BeforeUnitDamaged(unit, this, info); + var isFrozen = unit.IsFrozen(); + foreach (var skill in copy) + { + if (isFrozen && unit.IsSkillFrozenFilter(skill)) continue; + skill.BeforeUnitDamaged(unit, this, info); + } } } @@ -2221,7 +2226,12 @@ namespace RuntimeData //避免在遍历的时候,直接改到了skillsList using var skillHandle = THCollectionPool.GetListHandle(out var copy); copy.AddRange(unit.Skills); - foreach (var skill in copy) skill.OnUnitDamaged(unit, this, info); + var isFrozen = unit.IsFrozen(); + foreach (var skill in copy) + { + if (isFrozen && unit.IsSkillFrozenFilter(skill)) continue; + skill.OnUnitDamaged(unit, this, info); + } } } @@ -2234,7 +2244,12 @@ namespace RuntimeData { using var skillHandle = THCollectionPool.GetListHandle(out var copy); copy.AddRange(unit.Skills); - foreach (var skill in copy) skill.OnAnyUnitMove(map, unit, moveUnit, target, moveType); + var isFrozen = unit.IsFrozen(); + foreach (var skill in copy) + { + if (isFrozen && unit.IsSkillFrozenFilter(skill)) continue; + skill.OnAnyUnitMove(map, unit, moveUnit, target, moveType); + } } if (target?.Skills == null) return; using var gridSkillHandle = THCollectionPool.GetListHandle(out var gridCopy); @@ -2251,7 +2266,12 @@ namespace RuntimeData { using var skillHandle = THCollectionPool.GetListHandle(out var copy); copy.AddRange(unit.Skills); - foreach (var skill in copy) skill.OnActionExecuted(logic, param, unit); + var isFrozen = unit.IsFrozen(); + foreach (var skill in copy) + { + if (isFrozen && unit.IsSkillFrozenFilter(skill)) continue; + skill.OnActionExecuted(logic, param, unit); + } } } @@ -2265,7 +2285,12 @@ namespace RuntimeData //避免在遍历的时候,直接改到了skillsList using var skillHandle = THCollectionPool.GetListHandle(out var copy); copy.AddRange(unit.Skills); - foreach (var skill in copy) skill.OnAnyUnitDie(map, unit, dieUnit); + var isFrozen = unit.IsFrozen(); + foreach (var skill in copy) + { + if (isFrozen && unit.IsSkillFrozenFilter(skill)) continue; + skill.OnAnyUnitDie(map, unit, dieUnit); + } } } @@ -2279,7 +2304,12 @@ namespace RuntimeData //避免在遍历的时候,直接改到了skillsList using var skillHandle = THCollectionPool.GetListHandle(out var copy); copy.AddRange(unit.Skills); - foreach (var skill in copy) skill.OnAnyUnitCreate(map, unit, newUnit); + var isFrozen = unit.IsFrozen(); + foreach (var skill in copy) + { + if (isFrozen && unit.IsSkillFrozenFilter(skill)) continue; + skill.OnAnyUnitCreate(map, unit, newUnit); + } } } diff --git a/Unity/Assets/Scripts/TH1_Logic/Action/UnitActionLogic.cs b/Unity/Assets/Scripts/TH1_Logic/Action/UnitActionLogic.cs index 3883d075a..5f106d71a 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Action/UnitActionLogic.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Action/UnitActionLogic.cs @@ -713,7 +713,7 @@ namespace Logic.Action { //将unitActionType转化为skillType if (!Enum.TryParse(_actionId.UnitActionType.ToString(), out SkillType skillType)) return false; - if (actionParam.UnitData == null || !actionParam.UnitData.GetSkill(skillType, out var _)) return false; + if (actionParam.UnitData == null || !actionParam.UnitData.HasEffectiveSkill(skillType, out var _)) return false; return true; }