From 7501866e11d79649693b925edc40c09ce3a885ef Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 9 Aug 2021 09:24:38 -0400 Subject: [PATCH] Core/Unit: clear charmed/possessed state before returning client control. Works like a charm Port From (https://github.com/TrinityCore/TrinityCore/commit/b1a76fc7569ab7338730d680e7b0c703fa6b1003) --- Source/Framework/Constants/UnitConst.cs | 2 +- Source/Game/Entities/Unit/Unit.Pets.cs | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/Framework/Constants/UnitConst.cs b/Source/Framework/Constants/UnitConst.cs index 9244c8526..6758722e8 100644 --- a/Source/Framework/Constants/UnitConst.cs +++ b/Source/Framework/Constants/UnitConst.cs @@ -486,7 +486,7 @@ namespace Framework.Constants Unattackable = InFlight, Moving = RoamingMove | ConfusedMove | FleeingMove | ChaseMove | FollowMove, Controlled = Confused | Stunned | Fleeing, - CantClientControl = Confused | Charmed | Possessed | Fleeing, + CantClientControl = Charmed | Fleeing | Confused | Possessed, LostControl = Controlled | Possessed | Jumping | Charging, CannotAutoattack = Controlled | Charging | Casting, Sightless = LostControl | Evade, diff --git a/Source/Game/Entities/Unit/Unit.Pets.cs b/Source/Game/Entities/Unit/Unit.Pets.cs index 08f3d8eca..040acfc30 100644 --- a/Source/Game/Entities/Unit/Unit.Pets.cs +++ b/Source/Game/Entities/Unit/Unit.Pets.cs @@ -411,11 +411,11 @@ namespace Game.Entities playerCharmer.VehicleSpellInitialize(); break; case CharmType.Possess: - AddUnitState(UnitState.Possessed); AddUnitFlag(UnitFlags.PlayerControlled); charmer.AddUnitFlag(UnitFlags.RemoveClientControl); playerCharmer.SetClientControl(this, true); playerCharmer.PossessSpellInitialize(); + AddUnitState(UnitState.Possessed); break; case CharmType.Charm: if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock) @@ -510,11 +510,11 @@ namespace Game.Entities RemoveUnitFlag(UnitFlags.PlayerControlled); break; case CharmType.Possess: + ClearUnitState(UnitState.Possessed); playerCharmer.SetClientControl(this, false); playerCharmer.SetClientControl(charmer, true); charmer.RemoveUnitFlag(UnitFlags.RemoveClientControl); RemoveUnitFlag(UnitFlags.PlayerControlled); - ClearUnitState(UnitState.Possessed); break; case CharmType.Charm: if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock) @@ -557,7 +557,6 @@ namespace Game.Entities // reset confused movement for example ApplyControlStatesIfNeeded(); - ClearUnitState(UnitState.Charmed); } public void GetAllMinionsByEntry(List Minions, uint entry) @@ -617,6 +616,8 @@ namespace Game.Entities } else { + charm.ClearUnitState(UnitState.Charmed); + if (IsTypeId(TypeId.Player)) { if (GetCharmGUID() == charm.GetGUID())