Core/Gameobjects: Traps shouldn't ignore IsImmuneToNPC/IsImmuneToPC and IsInSanctuary rules if has owner

Port From (https://github.com/TrinityCore/TrinityCore/commit/fb39553831936c589697390e4a1827c977103c22)
This commit is contained in:
hondacrx
2022-02-27 23:22:55 -05:00
parent 05c61d9bd5
commit 738ef0b1d5
+12 -6
View File
@@ -2449,21 +2449,27 @@ namespace Game.Entities
if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.TaxiFlight | UnitFlags.NotAttackable1 | UnitFlags.NonAttackable2)) if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.TaxiFlight | UnitFlags.NotAttackable1 | UnitFlags.NonAttackable2))
return false; return false;
Unit unitOrOwner = unit;
GameObject go = ToGameObject();
if (go != null)
if (go.GetGoType() == GameObjectTypes.Trap)
unitOrOwner = go.GetOwner();
// ignore immunity flags when assisting // ignore immunity flags when assisting
if (unit != null && unitTarget != null && !(isPositiveSpell && bySpell.HasAttribute(SpellAttr6.AssistIgnoreImmuneFlag))) if (unitOrOwner != null && unitTarget != null && !(isPositiveSpell && bySpell.HasAttribute(SpellAttr6.AssistIgnoreImmuneFlag)))
{ {
if (!unit.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget.IsImmuneToNPC()) if (!unitOrOwner.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget.IsImmuneToNPC())
return false; return false;
if (!unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit.IsImmuneToNPC()) if (!unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unitOrOwner.IsImmuneToNPC())
return false; return false;
if (bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag)) if (bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag))
{ {
if (unit.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget.IsImmuneToPC()) if (unitOrOwner.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget.IsImmuneToPC())
return false; return false;
if (unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit.IsImmuneToPC()) if (unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unitOrOwner.IsImmuneToPC())
return false; return false;
} }
} }
@@ -2519,7 +2525,7 @@ namespace Game.Entities
// PvP case - can't attack when attacker or target are in sanctuary // PvP case - can't attack when attacker or target are in sanctuary
// however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp // however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp
if (unitTarget && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit && unit.HasUnitFlag(UnitFlags.PlayerControlled) && (unitTarget.IsInSanctuary() || unit.IsInSanctuary())) if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unitOrOwner != null && unitOrOwner.HasUnitFlag(UnitFlags.PlayerControlled) && (unitTarget.IsInSanctuary() || unitOrOwner.IsInSanctuary()))
return false; return false;
// additional checks - only PvP case // additional checks - only PvP case