aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-08-25 00:27:37 +0200
committerTreeston <treeston.mmoc@gmail.com>2018-08-25 00:44:33 +0200
commitd4ef2529e91043bc719c3238714413fd21c9005c (patch)
tree08385d090a0ece4bd08fb5062be912cca63b7cc4
parentcdf4040f4fce4f1e5ebb33525c4618845605081c (diff)
Core/Unit: Store charmer and charmed pointers on Unit directly, no more map lookups for Unit::GetCharmer and Unit::GetCharmed
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp2
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp10
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp76
-rw-r--r--src/server/game/Entities/Unit/Unit.h43
-rw-r--r--src/server/game/Handlers/PetHandler.cpp10
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp2
-rw-r--r--src/server/game/Handlers/VehicleHandler.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp8
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp2
10 files changed, 82 insertions, 75 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 5aca850f4d1..37fd98570e4 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -1324,7 +1324,7 @@ void LFGMgr::TeleportPlayer(Player* player, bool out, bool fromOpcode /*= false*
error = LFG_TELEPORTERROR_FATIGUE;
else if (player->GetVehicle())
error = LFG_TELEPORTERROR_IN_VEHICLE;
- else if (player->GetCharmGUID())
+ else if (player->GetCharmedGUID())
error = LFG_TELEPORTERROR_CHARMING;
else if (player->HasAura(9454)) // check Freeze debuff
error = LFG_TELEPORTERROR_INVALID_LOCATION;
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index 0f92d0e29aa..3bdb5e68271 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -335,7 +335,7 @@ void Guardian::InitSummon()
if (GetOwner()->GetTypeId() == TYPEID_PLAYER
&& GetOwner()->GetMinionGUID() == GetGUID()
- && !GetOwner()->GetCharmGUID())
+ && !GetOwner()->GetCharmedGUID())
{
GetOwner()->ToPlayer()->CharmSpellInitialize();
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 14492cb203b..381e0c29618 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -20544,7 +20544,7 @@ void Player::StopCastingCharm()
return;
}
- Unit* charm = GetCharm();
+ Unit* charm = GetCharmed();
if (!charm)
return;
@@ -20555,12 +20555,12 @@ void Player::StopCastingCharm()
else if (charm->IsVehicle())
ExitVehicle();
}
- if (GetCharmGUID())
+ if (GetCharmedGUID())
charm->RemoveCharmAuras();
- if (GetCharmGUID())
+ if (GetCharmedGUID())
{
- TC_LOG_FATAL("entities.player", "Player::StopCastingCharm: Player '%s' (%s) is not able to uncharm unit (%s)", GetName().c_str(), GetGUID().ToString().c_str(), GetCharmGUID().ToString().c_str());
+ TC_LOG_FATAL("entities.player", "Player::StopCastingCharm: Player '%s' (%s) is not able to uncharm unit (%s)", GetName().c_str(), GetGUID().ToString().c_str(), GetCharmedGUID().ToString().c_str());
if (!charm->GetCharmerGUID().IsEmpty())
{
TC_LOG_FATAL("entities.player", "Player::StopCastingCharm: Charmed unit has charmer %s", charm->GetCharmerGUID().ToString().c_str());
@@ -20745,7 +20745,7 @@ void Player::PetSpellInitialize()
void Player::PossessSpellInitialize()
{
- Unit* charm = GetCharm();
+ Unit* charm = GetCharmed();
if (!charm)
return;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b91796f9b8a..08eb02c427e 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -291,6 +291,7 @@ Unit::Unit(bool isWorldObject) :
WorldObject(isWorldObject), m_playerMovingMe(nullptr), m_lastSanctuaryTime(0),
LastCharmerGUID(), m_ControlledByPlayer(false),
movespline(new Movement::MoveSpline()), m_AutoRepeatFirstCast(false), m_procDeep(0), m_removedAurasCount(0),
+ m_charmer(nullptr), m_charmed(nullptr),
i_motionMaster(new MotionMaster(this)), m_regenTimer(0), m_vehicle(nullptr), m_vehicleKit(nullptr),
m_unitTypeMask(UNIT_MASK_NONE), m_Diminishing(), m_combatManager(this), m_threatManager(this),
m_comboTarget(nullptr), m_comboPoints(0), m_spellHistory(new SpellHistory(this))
@@ -5791,14 +5792,6 @@ Player* Unit::GetControllingPlayer() const
return const_cast<Player*>(ToPlayer());
}
-Unit* Unit::GetCharmer() const
-{
- if (ObjectGuid charmerGUID = GetCharmerGUID())
- return ObjectAccessor::GetUnit(*this, charmerGUID);
-
- return nullptr;
-}
-
Minion* Unit::GetFirstMinion() const
{
if (ObjectGuid pet_guid = GetMinionGUID())
@@ -5829,25 +5822,6 @@ Guardian* Unit::GetGuardianPet() const
return nullptr;
}
-Unit* Unit::GetCharm() const
-{
- if (ObjectGuid charm_guid = GetCharmGUID())
- {
- if (Unit* pet = ObjectAccessor::GetUnit(*this, charm_guid))
- return pet;
-
- TC_LOG_ERROR("entities.unit", "Unit::GetCharm: Charmed creature %s not exist.", charm_guid.ToString().c_str());
- const_cast<Unit*>(this)->SetGuidValue(UNIT_FIELD_CHARM, ObjectGuid::Empty);
- }
-
- return nullptr;
-}
-
-Unit* Unit::GetCharmerOrOwner() const
-{
- return GetCharmerGUID() ? GetCharmer() : GetOwner();
-}
-
void Unit::SetMinion(Minion *minion, bool apply)
{
TC_LOG_DEBUG("entities.unit", "SetMinion %u for %u, apply %u", minion->GetEntry(), GetEntry(), apply);
@@ -5961,7 +5935,7 @@ void Unit::SetMinion(Minion *minion, bool apply)
for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
{
// do not use this check, creature do not have charm guid
- //if (GetCharmGUID() == (*itr)->GetGUID())
+ //if (GetCharmedGUID() == (*itr)->GetGUID())
if (GetGUID() == (*itr)->GetCharmerGUID())
continue;
@@ -5980,7 +5954,7 @@ void Unit::SetMinion(Minion *minion, bool apply)
if (AddGuidValue(UNIT_FIELD_SUMMON, (*itr)->GetGUID()))
{
// show another pet bar if there is no charm bar
- if (GetTypeId() == TYPEID_PLAYER && !GetCharmGUID())
+ if (GetTypeId() == TYPEID_PLAYER && !GetCharmedGUID())
{
if ((*itr)->IsPet())
ToPlayer()->PetSpellInitialize();
@@ -6027,8 +6001,8 @@ void Unit::SetCharm(Unit* charm, bool apply)
{
if (GetTypeId() == TYPEID_PLAYER)
{
- if (!AddGuidValue(UNIT_FIELD_CHARM, charm->GetGUID()))
- TC_LOG_FATAL("entities.unit", "Player %s is trying to charm unit %u, but it already has a charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmGUID().ToString().c_str());
+ if (!SetCharmedData(charm))
+ TC_LOG_FATAL("entities.unit", "Player %s is trying to charm unit %u, but it already has a charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmedGUID().ToString().c_str());
charm->m_ControlledByPlayer = true;
/// @todo maybe we can use this flag to check if controlled by player
@@ -6040,7 +6014,7 @@ void Unit::SetCharm(Unit* charm, bool apply)
// PvP, FFAPvP
charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
- if (!charm->AddGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
+ if (!charm->SetCharmerData(this))
TC_LOG_FATAL("entities.unit", "Unit %u is being charmed, but it already has a charmer %s", charm->GetEntry(), charm->GetCharmerGUID().ToString().c_str());
_isWalkingBeforeCharm = charm->IsWalking();
@@ -6058,11 +6032,11 @@ void Unit::SetCharm(Unit* charm, bool apply)
if (GetTypeId() == TYPEID_PLAYER)
{
- if (!RemoveGuidValue(UNIT_FIELD_CHARM, charm->GetGUID()))
- TC_LOG_FATAL("entities.unit", "Player %s is trying to uncharm unit %u, but it has another charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmGUID().ToString().c_str());
+ if (!ClearCharmedData(charm))
+ TC_LOG_FATAL("entities.unit", "Player %s is trying to uncharm unit %u, but it has another charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmedGUID().ToString().c_str());
}
- if (!charm->RemoveGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID()))
+ if (!charm->ClearCharmerData(this))
TC_LOG_FATAL("entities.unit", "Unit %u is being uncharmed, but it has another charmer %s", charm->GetEntry(), charm->GetCharmerGUID().ToString().c_str());
if (charm->GetTypeId() == TYPEID_PLAYER)
@@ -6178,7 +6152,7 @@ Unit* Unit::GetMeleeHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
Unit* Unit::GetFirstControlled() const
{
// Sequence: charmed, pet, other guardians
- Unit* unit = GetCharm();
+ Unit* unit = GetCharmed();
if (!unit)
if (ObjectGuid guid = GetMinionGUID())
unit = ObjectAccessor::GetUnit(*this, guid);
@@ -6207,8 +6181,8 @@ void Unit::RemoveAllControlled()
TC_LOG_FATAL("entities.unit", "Unit %u is not able to release its pet %s", GetEntry(), GetPetGUID().ToString().c_str());
if (GetMinionGUID())
TC_LOG_FATAL("entities.unit", "Unit %u is not able to release its minion %s", GetEntry(), GetMinionGUID().ToString().c_str());
- if (GetCharmGUID())
- TC_LOG_FATAL("entities.unit", "Unit %u is not able to release its charm %s", GetEntry(), GetCharmGUID().ToString().c_str());
+ if (GetCharmedGUID())
+ TC_LOG_FATAL("entities.unit", "Unit %u is not able to release its charm %s", GetEntry(), GetCharmedGUID().ToString().c_str());
if (!IsPet()) // pets don't use the flag for this
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT); // m_controlled is now empty, so we know none of our minions are in combat
}
@@ -6220,12 +6194,12 @@ bool Unit::isPossessedByPlayer() const
bool Unit::isPossessing(Unit* u) const
{
- return u->isPossessed() && GetCharmGUID() == u->GetGUID();
+ return u->isPossessed() && GetCharmedGUID() == u->GetGUID();
}
bool Unit::isPossessing() const
{
- if (Unit* u = GetCharm())
+ if (Unit* u = GetCharmed())
return u->isPossessed();
else
return false;
@@ -8087,7 +8061,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
}
// if we have charmed npc, stun him also (everywhere)
- if (Unit* charm = player->GetCharm())
+ if (Unit* charm = player->GetCharmed())
if (charm->GetTypeId() == TYPEID_UNIT)
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
@@ -8150,7 +8124,7 @@ void Unit::Dismount()
player->ResummonPetTemporaryUnSummonedIfAny();
// if we have charmed npc, remove stun also
- if (Unit* charm = player->GetCharm())
+ if (Unit* charm = player->GetCharmed())
if (charm->GetTypeId() == TYPEID_UNIT && charm->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && !charm->HasUnitState(UNIT_STATE_STUNNED))
charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
@@ -9494,12 +9468,9 @@ void Unit::RemoveFromWorld()
if (IsCharmed())
RemoveCharmedBy(nullptr);
-
- if (GetCharmerGUID())
- {
- TC_LOG_FATAL("entities.unit", "Unit %u has charmer guid when removed from world", GetEntry());
- ABORT();
- }
+
+ ASSERT(!GetCharmedGUID(), "Unit %u has charmed guid when removed from world", GetEntry());
+ ASSERT(!GetCharmerGUID(), "Unit %u has charmer guid when removed from world", GetEntry());
if (Unit* owner = GetOwner())
{
@@ -11575,7 +11546,12 @@ void Unit::RemoveCharmedBy(Unit* charmer)
}
if (GetTypeId() != TYPEID_PLAYER || charmer->GetTypeId() == TYPEID_UNIT)
- GetAI()->OnCharmed(false); // AI will potentially schedule a charm ai update
+ {
+ if (UnitAI* charmedAI = GetAI())
+ charmedAI->OnCharmed(false); // AI will potentially schedule a charm ai update
+ else
+ ScheduleAIChange();
+ }
if (Player* player = ToPlayer())
player->SetClientControl(this, true);
@@ -12890,7 +12866,7 @@ void Unit::OutDebugInfo() const
{
TC_LOG_ERROR("entities.unit", "Unit::OutDebugInfo");
TC_LOG_DEBUG("entities.unit", "%s name %s", GetGUID().ToString().c_str(), GetName().c_str());
- TC_LOG_DEBUG("entities.unit", "Owner %s, Minion %s, Charmer %s, Charmed %s", GetOwnerGUID().ToString().c_str(), GetMinionGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str(), GetCharmGUID().ToString().c_str());
+ TC_LOG_DEBUG("entities.unit", "Owner %s, Minion %s, Charmer %s, Charmed %s", GetOwnerGUID().ToString().c_str(), GetMinionGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str(), GetCharmedGUID().ToString().c_str());
TC_LOG_DEBUG("entities.unit", "In world %u, unit type mask %u", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask);
if (IsInWorld())
TC_LOG_DEBUG("entities.unit", "Mapid %u", GetMapId());
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index ad11d9708cc..df6fd428290 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1144,14 +1144,45 @@ class TC_GAME_API Unit : public WorldObject
void SetCreatorGUID(ObjectGuid creator) { SetGuidValue(UNIT_FIELD_CREATEDBY, creator); }
ObjectGuid GetMinionGUID() const { return GetGuidValue(UNIT_FIELD_SUMMON); }
void SetMinionGUID(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_SUMMON, guid); }
- ObjectGuid GetCharmerGUID() const { return GetGuidValue(UNIT_FIELD_CHARMEDBY); }
- void SetCharmerGUID(ObjectGuid owner) { SetGuidValue(UNIT_FIELD_CHARMEDBY, owner); }
- ObjectGuid GetCharmGUID() const { return GetGuidValue(UNIT_FIELD_CHARM); }
void SetPetGUID(ObjectGuid guid) { m_SummonSlot[SUMMON_SLOT_PET] = guid; }
ObjectGuid GetPetGUID() const { return m_SummonSlot[SUMMON_SLOT_PET]; }
void SetCritterGUID(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_CRITTER, guid); }
ObjectGuid GetCritterGUID() const { return GetGuidValue(UNIT_FIELD_CRITTER); }
+ bool SetCharmerData(Unit const* unit)
+ {
+ if (!AddGuidValue(UNIT_FIELD_CHARMEDBY, unit->GetGUID()))
+ return false;
+ m_charmer = const_cast<Unit*>(unit);
+ return true;
+ }
+ bool ClearCharmerData(Unit const* verify)
+ {
+ if (!RemoveGuidValue(UNIT_FIELD_CHARMEDBY, verify->GetGUID()))
+ return false;
+ m_charmer = nullptr;
+ return true;
+ }
+ ObjectGuid GetCharmerGUID() const { return GetGuidValue(UNIT_FIELD_CHARMEDBY); }
+ Unit* GetCharmer() const { return m_charmer; }
+
+ bool SetCharmedData(Unit const* unit)
+ {
+ if (!AddGuidValue(UNIT_FIELD_CHARM, unit->GetGUID()))
+ return false;
+ m_charmed = const_cast<Unit*>(unit);
+ return true;
+ }
+ bool ClearCharmedData(Unit const* verify)
+ {
+ if (!RemoveGuidValue(UNIT_FIELD_CHARM, verify->GetGUID()))
+ return false;
+ m_charmed = nullptr;
+ return true;
+ }
+ ObjectGuid GetCharmedGUID() const { return GetGuidValue(UNIT_FIELD_CHARM); }
+ Unit* GetCharmed() const { return m_charmed; }
+
bool IsControlledByPlayer() const { return m_ControlledByPlayer; }
Player* GetControllingPlayer() const;
ObjectGuid GetCharmerOrOwnerGUID() const override { return IsCharmed() ? GetCharmerGUID() : GetOwnerGUID(); }
@@ -1159,9 +1190,7 @@ class TC_GAME_API Unit : public WorldObject
Guardian* GetGuardianPet() const;
Minion* GetFirstMinion() const;
- Unit* GetCharmer() const;
- Unit* GetCharm() const;
- Unit* GetCharmerOrOwner() const;
+ Unit* GetCharmerOrOwner() const { return IsCharmed() ? GetCharmer() : GetOwner(); }
void SetMinion(Minion *minion, bool apply);
void GetAllMinionsByEntry(std::list<Creature*>& Minions, uint32 entry);
@@ -1732,6 +1761,8 @@ class TC_GAME_API Unit : public WorldObject
float m_speed_rate[MAX_MOVE_TYPE];
+ Unit* m_charmer; // Unit that is charming ME
+ Unit* m_charmed; // Unit that is being charmed BY ME
CharmInfo* m_charmInfo;
SharedVisionList m_sharedVision;
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 3ef03ffc80b..87c12e95943 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -130,7 +130,7 @@ void WorldSession::HandlePetStopAttack(WorldPacket &recvData)
return;
}
- if (pet != GetPlayer()->GetPet() && pet != GetPlayer()->GetCharm())
+ if (pet != GetPlayer()->GetPet() && pet != GetPlayer()->GetCharmed())
{
TC_LOG_ERROR("entities.pet", "HandlePetStopAttack: %s isn't a pet or charmed creature of player %s",
guid.ToString().c_str(), GetPlayer()->GetName().c_str());
@@ -705,7 +705,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket)
uint8 state; //1 for on, 0 for off
recvPacket >> guid >> spellid >> state;
- if (!_player->GetGuardianPet() && !_player->GetCharm())
+ if (!_player->GetGuardianPet() && !_player->GetCharmed())
return;
if (guid.IsPlayer())
@@ -713,7 +713,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket)
Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, guid);
- if (!pet || (pet != _player->GetGuardianPet() && pet != _player->GetCharm()))
+ if (!pet || (pet != _player->GetGuardianPet() && pet != _player->GetCharmed()))
{
TC_LOG_ERROR("entities.pet", "HandlePetSpellAutocastOpcode. %s isn't pet of player %s (%s).", guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().ToString().c_str());
return;
@@ -759,12 +759,12 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket)
TC_LOG_DEBUG("entities.pet", "WORLD: CMSG_PET_CAST_SPELL, %s, castCount: %u, spellId %u, castFlags %u", guid.ToString().c_str(), castCount, spellId, castFlags);
// This opcode is also sent from charmed and possessed units (players and creatures)
- if (!_player->GetGuardianPet() && !_player->GetCharm())
+ if (!_player->GetGuardianPet() && !_player->GetCharmed())
return;
Unit* caster = ObjectAccessor::GetUnit(*_player, guid);
- if (!caster || (caster != _player->GetGuardianPet() && caster != _player->GetCharm()))
+ if (!caster || (caster != _player->GetGuardianPet() && caster != _player->GetCharmed()))
{
TC_LOG_ERROR("entities.pet", "HandlePetCastSpellOpcode: %s isn't pet of player %s (%s).", guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().ToString().c_str());
return;
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index f1637e4e39a..a26574d787f 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -505,7 +505,7 @@ void WorldSession::HandlePetCancelAuraOpcode(WorldPacket& recvPacket)
return;
}
- if (pet != GetPlayer()->GetGuardianPet() && pet != GetPlayer()->GetCharm())
+ if (pet != GetPlayer()->GetGuardianPet() && pet != GetPlayer()->GetCharmed())
{
TC_LOG_ERROR("network", "HandlePetCancelAura: %s is not a pet of player '%s'", guid.ToString().c_str(), GetPlayer()->GetName().c_str());
return;
diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp
index 339631f283a..5b5d2697b80 100644
--- a/src/server/game/Handlers/VehicleHandler.cpp
+++ b/src/server/game/Handlers/VehicleHandler.cpp
@@ -28,7 +28,7 @@ void WorldSession::HandleDismissControlledVehicle(WorldPacket &recvData)
{
TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_DISMISS_CONTROLLED_VEHICLE");
- ObjectGuid vehicleGUID = _player->GetCharmGUID();
+ ObjectGuid vehicleGUID = _player->GetCharmedGUID();
if (!vehicleGUID) // something wrong here...
{
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index ec8b1202208..5329bee5c37 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3789,7 +3789,7 @@ void Spell::finish(bool ok)
// Unsummon summon as possessed creatures on spell cancel
if (m_spellInfo->IsChanneled() && unitCaster->GetTypeId() == TYPEID_PLAYER)
{
- if (Unit* charm = unitCaster->GetCharm())
+ if (Unit* charm = unitCaster->GetCharmed())
if (charm->GetTypeId() == TYPEID_UNIT
&& charm->ToCreature()->HasUnitTypeMask(UNIT_MASK_PUPPET)
&& charm->GetUInt32Value(UNIT_CREATED_BY_SPELL) == m_spellInfo->Id)
@@ -5616,7 +5616,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
// intentional missing break, check both GetPetGUID() and GetCharmGUID for SUMMON_CATEGORY_PET
case SUMMON_CATEGORY_PUPPET:
- if (unitCaster->GetCharmGUID())
+ if (unitCaster->GetCharmedGUID())
return SPELL_FAILED_ALREADY_HAVE_CHARM;
break;
}
@@ -5651,7 +5651,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
}
- if (unitCaster->GetCharmGUID())
+ if (unitCaster->GetCharmedGUID())
return SPELL_FAILED_ALREADY_HAVE_CHARM;
break;
}
@@ -5817,7 +5817,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
if (!m_spellInfo->HasAttribute(SPELL_ATTR1_DISMISS_PET) && unitCaster->GetPetGUID())
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
- if (unitCaster->GetCharmGUID())
+ if (unitCaster->GetCharmedGUID())
return SPELL_FAILED_ALREADY_HAVE_CHARM;
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 69b48fde85d..d97e13df132 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -1428,7 +1428,7 @@ class spell_hun_tame_beast : public SpellScriptLoader
if (caster->GetPetGUID())
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
- if (caster->GetCharmGUID())
+ if (caster->GetCharmedGUID())
return SPELL_FAILED_ALREADY_HAVE_CHARM;
}
else