bug修复
This commit is contained in:
parent
1d4c2c1284
commit
42add47b2a
@ -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)
|
||||
{
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user