From 6f1b2f5cd5fda504934fed29eba33db99460ffb8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 1 Mar 2022 17:38:12 -0500 Subject: [PATCH] Core/Combat: Disable triggers entering combat Port From (https://github.com/TrinityCore/TrinityCore/commit/1dfcb7086e17902f0904ee6c09bc55a229b65cc1) --- Source/Framework/Constants/CreatureConst.cs | 5 +++-- Source/Game/Combat/CombatManager.cs | 6 ++++++ Source/Game/Entities/Creature/Creature.cs | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Source/Framework/Constants/CreatureConst.cs b/Source/Framework/Constants/CreatureConst.cs index a3778f057..3cfb74605 100644 --- a/Source/Framework/Constants/CreatureConst.cs +++ b/Source/Framework/Constants/CreatureConst.cs @@ -210,6 +210,7 @@ namespace Framework.Constants UnitIsQuestBoss = 0x80000000 // Not verified } + [Flags] public enum CreatureFlagsExtra : uint { InstanceBind = 0x01, // Creature Kill Bind Instance With Killer And Killer'S Group @@ -225,7 +226,7 @@ namespace Framework.Constants GhostVisibility = 0x400, // creature will be only visible for dead players UseOffhandAttack = 0x800, // creature will use offhand attacks NoSellVendor = 0x1000, // players can't sell items to this vendor - Unused13 = 0x2000, + NoCombat = 0x2000, // creature is not allowed to enter combat Worldevent = 0x4000, // Custom Flag For World Event Creatures (Left Room For Merging) Guard = 0x8000, // Creature Is Guard Unused16 = 0x00010000, @@ -246,7 +247,7 @@ namespace Framework.Constants Unused31 = 0x80000000, // Masks - AllUnused = (Unused13 | Unused16 | Unused22 | Unused23 | Unused24 | Unused25 | Unused26 | Unused27 | Unused31), + AllUnused = (Unused16 | Unused22 | Unused23 | Unused24 | Unused25 | Unused26 | Unused27 | Unused31), DBAllowed = (0xFFFFFFFF & ~(AllUnused | DungeonBoss)) } diff --git a/Source/Game/Combat/CombatManager.cs b/Source/Game/Combat/CombatManager.cs index 4bf84695c..acf27cfca 100644 --- a/Source/Game/Combat/CombatManager.cs +++ b/Source/Game/Combat/CombatManager.cs @@ -57,6 +57,12 @@ namespace Game.Combat return false; if (a.HasUnitState(UnitState.InFlight) || b.HasUnitState(UnitState.InFlight)) return false; + Creature aCreature = a.ToCreature(); + if (aCreature?.IsCombatDisallowed()) + return false; + Creature bCreature = b.ToCreature(); + if (bCreature?.IsCombatDisallowed()) + return false; if (a.IsFriendlyTo(b) || b.IsFriendlyTo(a)) return false; Player playerA = a.GetCharmerOrOwnerPlayerOrPlayerItself(); diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index c6bfaf4fe..8ea460c72 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -3098,7 +3098,11 @@ namespace Game.Entities { return GetCreatureTemplate().FlagsExtra.HasAnyFlag(CreatureFlagsExtra.Guard); } - + bool IsCombatDisallowed() + { + return GetCreatureTemplate().FlagsExtra.HasFlag(CreatureFlagsExtra.NoCombat); + } + public bool CanWalk() { return GetMovementTemplate().IsGroundAllowed(); } public override bool CanSwim() { return GetMovementTemplate().IsSwimAllowed() || IsPet();} public override bool CanFly() { return GetMovementTemplate().IsFlightAllowed() || IsFlying(); }