Core/Unit: clear charmed/possessed state before returning client control. Works like a charm

Port From (https://github.com/TrinityCore/TrinityCore/commit/b1a76fc7569ab7338730d680e7b0c703fa6b1003)
This commit is contained in:
hondacrx
2021-08-09 09:24:38 -04:00
parent 2196616dc0
commit 7501866e11
2 changed files with 5 additions and 4 deletions
+1 -1
View File
@@ -486,7 +486,7 @@ namespace Framework.Constants
Unattackable = InFlight, Unattackable = InFlight,
Moving = RoamingMove | ConfusedMove | FleeingMove | ChaseMove | FollowMove, Moving = RoamingMove | ConfusedMove | FleeingMove | ChaseMove | FollowMove,
Controlled = Confused | Stunned | Fleeing, Controlled = Confused | Stunned | Fleeing,
CantClientControl = Confused | Charmed | Possessed | Fleeing, CantClientControl = Charmed | Fleeing | Confused | Possessed,
LostControl = Controlled | Possessed | Jumping | Charging, LostControl = Controlled | Possessed | Jumping | Charging,
CannotAutoattack = Controlled | Charging | Casting, CannotAutoattack = Controlled | Charging | Casting,
Sightless = LostControl | Evade, Sightless = LostControl | Evade,
+4 -3
View File
@@ -411,11 +411,11 @@ namespace Game.Entities
playerCharmer.VehicleSpellInitialize(); playerCharmer.VehicleSpellInitialize();
break; break;
case CharmType.Possess: case CharmType.Possess:
AddUnitState(UnitState.Possessed);
AddUnitFlag(UnitFlags.PlayerControlled); AddUnitFlag(UnitFlags.PlayerControlled);
charmer.AddUnitFlag(UnitFlags.RemoveClientControl); charmer.AddUnitFlag(UnitFlags.RemoveClientControl);
playerCharmer.SetClientControl(this, true); playerCharmer.SetClientControl(this, true);
playerCharmer.PossessSpellInitialize(); playerCharmer.PossessSpellInitialize();
AddUnitState(UnitState.Possessed);
break; break;
case CharmType.Charm: case CharmType.Charm:
if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock) if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock)
@@ -510,11 +510,11 @@ namespace Game.Entities
RemoveUnitFlag(UnitFlags.PlayerControlled); RemoveUnitFlag(UnitFlags.PlayerControlled);
break; break;
case CharmType.Possess: case CharmType.Possess:
ClearUnitState(UnitState.Possessed);
playerCharmer.SetClientControl(this, false); playerCharmer.SetClientControl(this, false);
playerCharmer.SetClientControl(charmer, true); playerCharmer.SetClientControl(charmer, true);
charmer.RemoveUnitFlag(UnitFlags.RemoveClientControl); charmer.RemoveUnitFlag(UnitFlags.RemoveClientControl);
RemoveUnitFlag(UnitFlags.PlayerControlled); RemoveUnitFlag(UnitFlags.PlayerControlled);
ClearUnitState(UnitState.Possessed);
break; break;
case CharmType.Charm: case CharmType.Charm:
if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock) if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock)
@@ -557,7 +557,6 @@ namespace Game.Entities
// reset confused movement for example // reset confused movement for example
ApplyControlStatesIfNeeded(); ApplyControlStatesIfNeeded();
ClearUnitState(UnitState.Charmed);
} }
public void GetAllMinionsByEntry(List<TempSummon> Minions, uint entry) public void GetAllMinionsByEntry(List<TempSummon> Minions, uint entry)
@@ -617,6 +616,8 @@ namespace Game.Entities
} }
else else
{ {
charm.ClearUnitState(UnitState.Charmed);
if (IsTypeId(TypeId.Player)) if (IsTypeId(TypeId.Player))
{ {
if (GetCharmGUID() == charm.GetGUID()) if (GetCharmGUID() == charm.GetGUID())