From 42add47b2a9e21450e8fd7f1496765d4795b97cd Mon Sep 17 00:00:00 2001 From: kawagiri Date: Sun, 12 Apr 2026 16:45:30 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Unity/Assets/Scripts/TH1_Data/MapData.cs | 20 ++++++++++++++++++- .../Skill/AllSkill/GridRadiationSkill.cs | 2 +- .../Skill/AllSkill/KoishiDeathFearSkill.cs | 2 +- .../Skill/AllSkill/KomeijiFearSplashSkill.cs | 2 +- .../Skill/AllSkill/PathStompSkill.cs | 2 +- .../Skill/AllSkill/ReisenFrenchAttakSkill.cs | 2 +- .../TH1_Logic/Skill/AllSkill/SplashSkill.cs | 2 +- .../TH1_Logic/Skill/AllSkill/StompSkill.cs | 2 +- .../Skill/AllSkill/UtsuhoReadyMoveSkill.cs | 10 ++++++---- .../AllSkill/UtsuhoReadyMoveSuperSkill.cs | 8 +++++--- .../Skill/AllSkill/YuugiDashProSkill.cs | 2 +- 11 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Unity/Assets/Scripts/TH1_Data/MapData.cs b/Unity/Assets/Scripts/TH1_Data/MapData.cs index b18f66e39..3538d6467 100644 --- a/Unity/Assets/Scripts/TH1_Data/MapData.cs +++ b/Unity/Assets/Scripts/TH1_Data/MapData.cs @@ -697,7 +697,25 @@ namespace RuntimeData if (!GetPlayerIdByUnitId(uidB, out var pidB)) return false; return SameUnion(pidA, pidB); } - + + // 判断是否是友军(含刚背盟的盟友) + public bool IsLeagueOrJustBreakByUnit(uint uidA, uint uidB) + { + if (!GetPlayerIdByUnitId(uidA, out var pidA)) return false; + if (!GetPlayerIdByUnitId(uidB, out var pidB)) return false; + return SameUnionOrJustBreakUnion(pidA, pidB); + } + + // 判断格子是否为友方/刚背盟盟友的城市中心 + public bool IsLeagueOrJustBreakCityCenter(uint unitId, GridData grid) + { + if (grid.Resource != ResourceType.CityCenter) return false; + if (!GetCityDataByGid(grid.Id, out var city)) return false; + if (!GetPlayerIdByCityId(city.Id, out var cityPid)) return false; + if (!GetPlayerIdByUnitId(unitId, out var unitPid)) return false; + return SameUnionOrJustBreakUnion(unitPid, cityPid); + } + // 判断是否是友军 public bool IsLeagueUnitByPlayer(uint playerId, uint uidB) { diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/GridRadiationSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/GridRadiationSkill.cs index 1b13ecee3..bde6a2eef 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/GridRadiationSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/GridRadiationSkill.cs @@ -48,7 +48,7 @@ namespace Logic.Skill { if (target == null) return; if (!map.UnitMap.GetUnitDataByUnitId(OriginId, out var origin)) return; - if (map.IsLeagueUnitByUnit(origin.Id, target.Id)) return; + if (map.IsLeagueOrJustBreakByUnit(origin.Id, target.Id)) return; int dmg = Table.Instance.CalcDamage(map, origin, target); Main.UnitLogic.DamageSettlement(map, origin, target, dmg, DamageType.Splash); } diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KoishiDeathFearSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KoishiDeathFearSkill.cs index 82dd71208..00c8ea121 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KoishiDeathFearSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KoishiDeathFearSkill.cs @@ -38,7 +38,7 @@ namespace Logic.Skill if (around == grid) continue; around.RealUnit(mapData,out var target); if (target == null) continue; - if (mapData.IsLeagueUnitByUnit(self.Id, target.Id)) return; + if (mapData.IsLeagueOrJustBreakByUnit(self.Id, target.Id)) return; target.AddOrOverrideSkill(SkillType.KomeijiFear, mapData, self.Id); } } diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KomeijiFearSplashSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KomeijiFearSplashSkill.cs index db27408c8..048bc6623 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KomeijiFearSplashSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/KomeijiFearSplashSkill.cs @@ -40,7 +40,7 @@ namespace Logic.Skill if (unit.Id == attackInfo.DamageOrigin.Id) continue; // 跳过友军 if (selfUnitList.Contains(unit)) continue; - if (mapData.IsLeagueUnitByUnit(unit.Id, attackInfo.DamageOrigin.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(unit.Id, attackInfo.DamageOrigin.Id)) continue; // 跳过免疫恐惧的单位 if (unit.GetSkill(SkillType.KomeijiFearImmune, out _)) continue; diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/PathStompSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/PathStompSkill.cs index 6ac96c601..253d485ee 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/PathStompSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/PathStompSkill.cs @@ -46,7 +46,7 @@ namespace Logic.Skill roundGrid.RealUnit(mapData,out var unit); if (unit == null || !unit.IsAlive()) continue; if(!damaged.Add(unit)) continue; - if (mapData.IsLeagueUnitByUnit(unit.Id, self.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(unit.Id, self.Id)) continue; var dmg = Table.Instance.CalcDamage(mapData, self, unit); Main.UnitLogic.DamageSettlement(mapData, self, unit, Mathf.FloorToInt(dmg * 0.5f), DamageType.Splash); diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/ReisenFrenchAttakSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/ReisenFrenchAttakSkill.cs index 8b216262d..3cbba0976 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/ReisenFrenchAttakSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/ReisenFrenchAttakSkill.cs @@ -36,7 +36,7 @@ namespace Logic.Skill foreach (var unit in mapData.UnitMap.UnitList) { if (unit == origin || unit == target) continue; - if (mapData.IsLeagueUnitByUnit(unit.Id, target.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(unit.Id, target.Id)) continue; if (!unit.GetSkill(SkillType.REISENILLUSION, out _) && !unit.GetSkill(SkillType.REISENILLUSIONPRO, out _)) continue; if (!mapData.GetGridDataByUnitId(unit.Id, out var unitGrid)) continue; diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/SplashSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/SplashSkill.cs index ee5cbd51b..33b6fedc7 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/SplashSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/SplashSkill.cs @@ -53,7 +53,7 @@ namespace Logic.Skill if (!grid.RealUnit(mapData, out var unit)) continue; if (unit == info.DamageTarget) continue; if (selfUnitList.Contains(unit)) continue; - if (mapData.IsLeagueUnitByUnit(unit.Id, info.DamageOrigin.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(unit.Id, info.DamageOrigin.Id)) continue; // 计算攻击伤害 var damage = Table.Instance.CalcDamage(mapData, info.DamageOrigin, unit, damagePara:0.5f); unit.Renderer(mapData)?.InstantUpdateUnit(true); diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/StompSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/StompSkill.cs index 1df4b7185..4a316dfc3 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/StompSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/StompSkill.cs @@ -55,7 +55,7 @@ namespace Logic.Skill else { if (selfUnitList.Contains(unit)) continue; - if (mapData.IsLeagueUnitByUnit(unit.Id, self.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(unit.Id, self.Id)) continue; // 计算攻击伤害,执行伤害逻辑 var damage = Table.Instance.CalcDamage(mapData, self, unit, damagePara:0.5f); var targetGrid = unit.Grid(mapData); diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSkill.cs index 32217ab1b..426833c36 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSkill.cs @@ -64,8 +64,9 @@ namespace Logic.Skill for (int i = 1; i < path.Count; i++) { if (!mapData.GridMap.GetGridDataByV2(path[i], out var grid)) continue; + if (mapData.IsLeagueOrJustBreakCityCenter(selfUnit.Id, grid)) continue; if (!grid.RealUnit(mapData, out var targetUnit)) continue; - if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, targetUnit.Id)) continue; endIndex = i; hitAlive = true; break; @@ -82,7 +83,7 @@ namespace Logic.Skill { if (!aroundGrid.RealUnit(mapData, out var splashTarget)) continue; if (splashTarget.Id == selfUnit.Id) continue; - if (mapData.IsLeagueUnitByUnit(selfUnit.Id, splashTarget.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, splashTarget.Id)) continue; if (!splashedUnits.Add(splashTarget.Id)) continue; var splashDmg = Table.Instance.CalcDamage(mapData, selfUnit, splashTarget, damagePara: 0.5f); @@ -106,7 +107,7 @@ namespace Logic.Skill { if (mapData.GridMap.GetGridDataByV2(path[endIndex], out var hitGrid) && hitGrid.RealUnit(mapData, out var hitUnit) && - !mapData.IsLeagueUnitByUnit(selfUnit.Id, hitUnit.Id) && + !mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, hitUnit.Id) && hitUnit.IsAlive()) { var dmg = Table.Instance.CalcDamage(mapData, selfUnit, hitUnit); @@ -138,8 +139,9 @@ namespace Logic.Skill { var vec = path[i]; if (!mapData.GridMap.GetGridDataByV2(vec, out var grid)) continue; + if (mapData.IsLeagueOrJustBreakCityCenter(selfUnit.Id, grid)) continue; if (!grid.RealUnit(mapData, out var targetUnit)) continue; - if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, targetUnit.Id)) continue; var dmg = Table.Instance.CalcDamage(mapData, selfUnit, targetUnit); var targetGrid = targetUnit.Grid(mapData); diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSuperSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSuperSkill.cs index 67bf40299..f5cce1034 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSuperSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/UtsuhoReadyMoveSuperSkill.cs @@ -62,7 +62,7 @@ namespace Logic.Skill { if (!aroundGrid.RealUnit(mapData, out var splashTarget)) continue; if (splashTarget.Id == selfUnit.Id) continue; - if (mapData.IsLeagueUnitByUnit(selfUnit.Id, splashTarget.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, splashTarget.Id)) continue; if (!splashedUnits.Add(splashTarget.Id)) continue; var splashDmg = Table.Instance.CalcDamage(mapData, selfUnit, splashTarget, damagePara: 0.5f); @@ -87,6 +87,7 @@ namespace Logic.Skill for (int i = path.Count - 1; i >= 1; i--) { if (!mapData.GridMap.GetGridDataByV2(path[i], out var grid)) continue; + if (mapData.IsLeagueOrJustBreakCityCenter(selfUnit.Id, grid)) continue; if (!grid.RealUnit(mapData, out var occupant)) { finalIndex = i; @@ -99,7 +100,7 @@ namespace Logic.Skill break; } - if (mapData.IsLeagueUnitByUnit(selfUnit.Id, occupant.Id)) + if (mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, occupant.Id)) continue; // 敌方单位,造成DelayAttack伤害 @@ -116,9 +117,10 @@ namespace Logic.Skill for (int i = 1; i < finalIndex; i++) { if (!mapData.GridMap.GetGridDataByV2(path[i], out var grid)) continue; + if (mapData.IsLeagueOrJustBreakCityCenter(selfUnit.Id, grid)) continue; if (!grid.RealUnit(mapData, out var targetUnit)) continue; if (targetUnit.Id == selfUnit.Id) continue; - if (mapData.IsLeagueUnitByUnit(selfUnit.Id, targetUnit.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(selfUnit.Id, targetUnit.Id)) continue; DealDelayAttackDamage(mapData, selfUnit, targetUnit); } diff --git a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/YuugiDashProSkill.cs b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/YuugiDashProSkill.cs index 8bd397732..98c91578b 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/YuugiDashProSkill.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Skill/AllSkill/YuugiDashProSkill.cs @@ -50,7 +50,7 @@ namespace Logic.Skill continue; } - if (mapData.IsLeagueUnitByUnit(self.Id, targetUnit.Id)) continue; + if (mapData.IsLeagueOrJustBreakByUnit(self.Id, targetUnit.Id)) continue; var dmg = Table.Instance.CalcDamage(mapData,targetUnit,targetUnit); // 溅射伤害前缓存renderer,DamageSettlement可能导致单位死亡后无法获取 var targetRenderer = targetUnit.Renderer(mapData);