aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r--src/game/Player.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 12d1dd99941..9ef583416c6 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -18660,6 +18660,8 @@ void Player::Possess(Unit *target)
// Update the proper unit fields
SetPossessedTarget(target);
+ uint32 flags1 = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+
target->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, getFaction());
target->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
@@ -18667,6 +18669,8 @@ void Player::Possess(Unit *target)
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
SetUInt64Value(PLAYER_FARSIGHT, target->GetGUID());
+ uint32 flags2 = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+
if(target->GetTypeId() == TYPEID_UNIT)
{
// Set target to active in the grid and place it in the world container to be picked up by all regular player cell visits
@@ -18720,6 +18724,10 @@ void Player::RemovePossess(bool attack)
++itr;
}
+ // Interrupt any current casting of the target
+ if(target->IsNonMeleeSpellCasted(true))
+ target->InterruptNonMeleeSpells(true);
+
RemovePossessedTarget();
if(target->GetTypeId() == TYPEID_PLAYER)
@@ -18743,7 +18751,6 @@ void Player::RemovePossess(bool attack)
}
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
SetUInt64Value(PLAYER_FARSIGHT, 0);
@@ -18758,18 +18765,14 @@ void Player::RemovePossess(bool attack)
((Player*)target)->SetViewport(target->GetGUID(), true);
else
{
+ target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
if(((Creature*)target)->isPet())
- {
- ((Pet*)target)->InitPetCreateSpells();
PetSpellInitialize();
- }
-
- if (target->isAlive())
+ else if (target->isAlive())
{
// If we're still hostile to our target, continue attacking otherwise reset threat and go home
- if (target->getVictim())
+ if (Unit* victim = target->getVictim())
{
- Unit* victim = target->getVictim();
FactionTemplateEntry const* t_faction = target->getFactionTemplateEntry();
FactionTemplateEntry const* v_faction = victim->getFactionTemplateEntry();
// Unit::IsHostileTo will always return true since the unit is always hostile to its victim
@@ -18783,14 +18786,14 @@ void Player::RemovePossess(bool attack)
target->GetMotionMaster()->MoveTargetedHome();
}
}
- else if (target->GetTypeId() == TYPEID_UNIT)
+ else
{
target->GetMotionMaster()->Clear();
target->GetMotionMaster()->MoveTargetedHome();
}
// Add high amount of threat on the player
- if(target != GetPet() && attack)
+ if(attack)
target->AddThreat(this, 1000000.0f);
}
// Delete the assigned possessed AI