aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/BattlePets/BattlePetMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/BattlePets/BattlePetMgr.cpp')
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp
index 0b6f2ebeef7..dbb408325dc 100644
--- a/src/server/game/BattlePets/BattlePetMgr.cpp
+++ b/src/server/game/BattlePets/BattlePetMgr.cpp
@@ -506,12 +506,9 @@ void BattlePetMgr::ModifyName(ObjectGuid guid, std::string const& name, Declined
pet->SaveInfo = BATTLE_PET_CHANGED;
// Update the timestamp if the battle pet is summoned
- Player* player = _owner->GetPlayer();
- Creature* summonedBattlePet = ObjectAccessor::GetCreatureOrPetOrVehicle(*player, player->GetCritterGUID());
- if (summonedBattlePet)
- if (player->GetSummonedBattlePetGUID() == summonedBattlePet->GetBattlePetCompanionGUID())
- if (summonedBattlePet->GetBattlePetCompanionGUID() == guid)
- summonedBattlePet->SetBattlePetCompanionNameTimestamp(pet->NameTimestamp);
+ if (Creature* summonedBattlePet = _owner->GetPlayer()->GetSummonedBattlePet())
+ if (summonedBattlePet->GetBattlePetCompanionGUID() == guid)
+ summonedBattlePet->SetBattlePetCompanionNameTimestamp(pet->NameTimestamp);
}
bool BattlePetMgr::IsPetInSlot(ObjectGuid guid)
@@ -627,6 +624,17 @@ void BattlePetMgr::CageBattlePet(ObjectGuid guid)
WorldPackets::BattlePet::BattlePetDeleted deletePet;
deletePet.PetGuid = guid;
_owner->SendPacket(deletePet.Write());
+
+ // Battle pet despawns if it's summoned
+ Player* player = _owner->GetPlayer();
+ if (Creature* summonedBattlePet = player->GetSummonedBattlePet())
+ {
+ if (summonedBattlePet->GetBattlePetCompanionGUID() == guid)
+ {
+ summonedBattlePet->DespawnOrUnsummon();
+ player->SetBattlePetData(nullptr);
+ }
+ }
}
void BattlePetMgr::HealBattlePetsPct(uint8 pct)
@@ -661,20 +669,17 @@ void BattlePetMgr::SummonPet(ObjectGuid guid)
// TODO: set proper CreatureID for spell SPELL_SUMMON_BATTLE_PET (default EffectMiscValueA is 40721 - Murkimus the Gladiator)
Player* player = _owner->GetPlayer();
- player->SetSummonedBattlePetGUID(guid);
- player->SetCurrentBattlePetBreedQuality(pet->PacketInfo.Quality);
+ player->SetBattlePetData(pet);
player->CastSpell(player, speciesEntry->SummonSpellID ? speciesEntry->SummonSpellID : uint32(SPELL_SUMMON_BATTLE_PET));
}
void BattlePetMgr::DismissPet()
{
Player* player = _owner->GetPlayer();
- Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*player, player->GetCritterGUID());
- if (pet && player->GetSummonedBattlePetGUID() == pet->GetBattlePetCompanionGUID())
+ if (Creature* summonedBattlePet = player->GetSummonedBattlePet())
{
- pet->DespawnOrUnsummon();
- player->SetSummonedBattlePetGUID(ObjectGuid::Empty);
- player->SetCurrentBattlePetBreedQuality(AsUnderlyingType(BattlePetBreedQuality::Poor));
+ summonedBattlePet->DespawnOrUnsummon();
+ player->SetBattlePetData(nullptr);
}
}