diff options
Diffstat (limited to 'src/server/game/Handlers/BattlePetHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/BattlePetHandler.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp index 581be775faa..4332931795c 100644 --- a/src/server/game/Handlers/BattlePetHandler.cpp +++ b/src/server/game/Handlers/BattlePetHandler.cpp @@ -18,7 +18,9 @@ #include "WorldSession.h" #include "BattlePetMgr.h" #include "BattlePetPackets.h" +#include "ObjectAccessor.h" #include "Player.h" +#include "TemporarySummon.h" void WorldSession::HandleBattlePetRequestJournal(WorldPackets::BattlePet::BattlePetRequestJournal& /*battlePetRequestJournal*/) { @@ -42,7 +44,47 @@ void WorldSession::HandleBattlePetSetBattleSlot(WorldPackets::BattlePet::BattleP void WorldSession::HandleBattlePetModifyName(WorldPackets::BattlePet::BattlePetModifyName& battlePetModifyName) { - GetBattlePetMgr()->ModifyName(battlePetModifyName.PetGuid, battlePetModifyName.Name, battlePetModifyName.DeclinedName.get_ptr()); + GetBattlePetMgr()->ModifyName(battlePetModifyName.PetGuid, battlePetModifyName.Name, battlePetModifyName.DeclinedNames.get_ptr()); +} + +void WorldSession::HandleQueryBattlePetName(WorldPackets::BattlePet::QueryBattlePetName& queryBattlePetName) +{ + WorldPackets::BattlePet::QueryBattlePetNameResponse response; + response.BattlePetID = queryBattlePetName.BattlePetID; + + Creature* summonedBattlePet = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, queryBattlePetName.UnitGUID); + if (!summonedBattlePet || !summonedBattlePet->IsSummon()) + { + SendPacket(response.Write()); + return; + } + + response.CreatureID = summonedBattlePet->GetEntry(); + response.Timestamp = summonedBattlePet->GetBattlePetCompanionNameTimestamp(); + + Unit* petOwner = summonedBattlePet->ToTempSummon()->GetSummoner(); + if (!petOwner->IsPlayer()) + { + SendPacket(response.Write()); + return; + } + + BattlePetMgr::BattlePet const* battlePet = petOwner->ToPlayer()->GetSession()->GetBattlePetMgr()->GetPet(queryBattlePetName.BattlePetID); + if (!battlePet) + { + SendPacket(response.Write()); + return; + } + + response.Allow = true; + response.Name = battlePet->PacketInfo.Name; + if (battlePet->DeclinedName) + { + response.HasDeclined = true; + response.DeclinedNames = *battlePet->DeclinedName; + } + + SendPacket(response.Write()); } void WorldSession::HandleBattlePetDeletePet(WorldPackets::BattlePet::BattlePetDeletePet& battlePetDeletePet) |