aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 76ead47fe5e..ad91cc9b8ae 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -6420,6 +6420,8 @@ void Unit::SetCharm(Unit* charm, bool apply)
}
else
{
+ charm->ClearUnitState(UNIT_STATE_CHARMED);
+
if (GetTypeId() == TYPEID_PLAYER)
{
if (GetCharmGUID() == charm->GetGUID())
@@ -11941,11 +11943,11 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
playerCharmer->VehicleSpellInitialize();
break;
case CHARM_TYPE_POSSESS:
- AddUnitState(UNIT_STATE_POSSESSED);
AddUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
charmer->AddUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL);
playerCharmer->SetClientControl(this, true);
playerCharmer->PossessSpellInitialize();
+ AddUnitState(UNIT_STATE_POSSESSED);
break;
case CHARM_TYPE_CHARM:
if (GetTypeId() == TYPEID_UNIT && charmer->getClass() == CLASS_WARLOCK)
@@ -12034,7 +12036,6 @@ void Unit::RemoveCharmedBy(Unit* charmer)
charmer->SetCharm(this, false);
Player* playerCharmer = charmer->ToPlayer();
-
if (playerCharmer)
{
switch (type)
@@ -12045,11 +12046,11 @@ void Unit::RemoveCharmedBy(Unit* charmer)
RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
break;
case CHARM_TYPE_POSSESS:
+ ClearUnitState(UNIT_STATE_POSSESSED);
playerCharmer->SetClientControl(this, false);
playerCharmer->SetClientControl(charmer, true);
charmer->RemoveUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL);
RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED);
- ClearUnitState(UNIT_STATE_POSSESSED);
break;
case CHARM_TYPE_CHARM:
if (GetTypeId() == TYPEID_UNIT && charmer->getClass() == CLASS_WARLOCK)
@@ -12091,7 +12092,6 @@ void Unit::RemoveCharmedBy(Unit* charmer)
// reset confused movement for example
ApplyControlStatesIfNeeded();
- ClearUnitState(UNIT_STATE_CHARMED);
}
void Unit::RestoreFaction()
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index eee89e86692..e164484ce00 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -281,7 +281,7 @@ enum UnitState : uint32
UNIT_STATE_UNATTACKABLE = UNIT_STATE_IN_FLIGHT,
UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE,
UNIT_STATE_CONTROLLED = UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING,
- UNIT_STATE_CANT_CLIENT_CONTROL = UNIT_STATE_CONFUSED | UNIT_STATE_CHARMED | UNIT_STATE_POSSESSED | UNIT_STATE_FLEEING | UNIT_STATE_POSSESSED,
+ UNIT_STATE_CANT_CLIENT_CONTROL = UNIT_STATE_CHARMED | UNIT_STATE_FLEEING | UNIT_STATE_CONFUSED | UNIT_STATE_POSSESSED,
UNIT_STATE_LOST_CONTROL = UNIT_STATE_CONTROLLED | UNIT_STATE_POSSESSED | UNIT_STATE_JUMPING | UNIT_STATE_CHARGING,
UNIT_STATE_CANNOT_AUTOATTACK = UNIT_STATE_CONTROLLED | UNIT_STATE_CHARGING | UNIT_STATE_CASTING,
UNIT_STATE_SIGHTLESS = UNIT_STATE_LOST_CONTROL | UNIT_STATE_EVADE,