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:
@@ -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,
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user