bug修复

This commit is contained in:
kawagiri 2026-04-12 16:45:30 +08:00
parent 1d4c2c1284
commit 42add47b2a
11 changed files with 38 additions and 16 deletions

View File

@ -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)
{

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
// 溅射伤害前缓存rendererDamageSettlement可能导致单位死亡后无法获取
var targetRenderer = targetUnit.Renderer(mapData);