From 738ef0b1d54c06dd7a136bb7514758ecbc6bcca7 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 27 Feb 2022 23:22:55 -0500 Subject: [PATCH] Core/Gameobjects: Traps shouldn't ignore IsImmuneToNPC/IsImmuneToPC and IsInSanctuary rules if has owner Port From (https://github.com/TrinityCore/TrinityCore/commit/fb39553831936c589697390e4a1827c977103c22) --- Source/Game/Entities/Object/WorldObject.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 87f559667..663fbff8d 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -2449,21 +2449,27 @@ namespace Game.Entities if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.TaxiFlight | UnitFlags.NotAttackable1 | UnitFlags.NonAttackable2)) return false; + Unit unitOrOwner = unit; + GameObject go = ToGameObject(); + if (go != null) + if (go.GetGoType() == GameObjectTypes.Trap) + unitOrOwner = go.GetOwner(); + // 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; - if (!unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit.IsImmuneToNPC()) + if (!unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unitOrOwner.IsImmuneToNPC()) return false; if (bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag)) { - if (unit.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget.IsImmuneToPC()) + if (unitOrOwner.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget.IsImmuneToPC()) return false; - if (unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit.IsImmuneToPC()) + if (unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unitOrOwner.IsImmuneToPC()) return false; } } @@ -2519,7 +2525,7 @@ namespace Game.Entities // 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 - 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; // additional checks - only PvP case