TrinityCore
BattlePetHandler.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "WorldSession.h"
19#include "BattlePetMgr.h"
20#include "BattlePetPackets.h"
21#include "ObjectAccessor.h"
22#include "Player.h"
23#include "TemporarySummon.h"
24
26{
28}
29
31{
33
34 if (GetBattlePetMgr()->HasJournalLock())
36}
37
39{
40 if (BattlePets::BattlePet* pet = GetBattlePetMgr()->GetPet(battlePetSetBattleSlot.PetGuid))
41 if (WorldPackets::BattlePet::BattlePetSlot* slot = GetBattlePetMgr()->GetSlot(BattlePets::BattlePetSlot(battlePetSetBattleSlot.Slot)))
42 slot->Pet = pet->PacketInfo;
43}
44
46{
47 GetBattlePetMgr()->ModifyName(battlePetModifyName.PetGuid, battlePetModifyName.Name, std::move(battlePetModifyName.DeclinedNames));
48}
49
51{
53 response.BattlePetID = queryBattlePetName.BattlePetID;
54
55 Creature* summonedBattlePet = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, queryBattlePetName.UnitGUID);
56 if (!summonedBattlePet || !summonedBattlePet->IsSummon())
57 {
58 SendPacket(response.Write());
59 return;
60 }
61
62 response.CreatureID = summonedBattlePet->GetEntry();
63 response.Timestamp = summonedBattlePet->GetBattlePetCompanionNameTimestamp();
64
65 Unit* petOwner = summonedBattlePet->ToTempSummon()->GetSummonerUnit();
66 if (!petOwner->IsPlayer())
67 {
68 SendPacket(response.Write());
69 return;
70 }
71
72 BattlePets::BattlePet const* battlePet = petOwner->ToPlayer()->GetSession()->GetBattlePetMgr()->GetPet(queryBattlePetName.BattlePetID);
73 if (!battlePet)
74 {
75 SendPacket(response.Write());
76 return;
77 }
78
79 response.Name = battlePet->PacketInfo.Name;
80 if (battlePet->DeclinedName)
81 {
82 response.HasDeclined = true;
83 response.DeclinedNames = *battlePet->DeclinedName;
84 }
85
86 response.Allow = !response.Name.empty();
87
88 SendPacket(response.Write());
89}
90
92{
93 GetBattlePetMgr()->RemovePet(battlePetDeletePet.PetGuid);
94}
95
97{
98 if (!GetBattlePetMgr()->HasJournalLock())
99 return;
100
101 if (BattlePets::BattlePet* pet = GetBattlePetMgr()->GetPet(battlePetSetFlags.PetGuid))
102 {
103 if (battlePetSetFlags.ControlType == BattlePets::FLAGS_CONTROL_TYPE_APPLY)
104 pet->PacketInfo.Flags |= battlePetSetFlags.Flags;
105 else // FLAGS_CONTROL_TYPE_REMOVE
106 pet->PacketInfo.Flags &= ~battlePetSetFlags.Flags;
107
108 if (pet->SaveInfo != BattlePets::BATTLE_PET_NEW)
109 pet->SaveInfo = BattlePets::BATTLE_PET_CHANGED;
110 }
111}
112
114{
115 GetBattlePetMgr()->ClearFanfare(battlePetClearFanfare.PetGuid);
116}
117
119{
120 GetBattlePetMgr()->CageBattlePet(cageBattlePet.PetGuid);
121}
122
124{
125 if (*_player->m_activePlayerData->SummonedBattlePetGUID != battlePetSummon.PetGuid)
126 GetBattlePetMgr()->SummonPet(battlePetSummon.PetGuid);
127 else
129}
130
132{
133 GetBattlePetMgr()->UpdateBattlePetData(battlePetUpdateNotify.PetGuid);
134}
void RemovePet(ObjectGuid guid)
void ClearFanfare(ObjectGuid guid)
void SummonPet(ObjectGuid guid)
void ModifyName(ObjectGuid guid, std::string const &name, std::unique_ptr< DeclinedName > declinedName)
void UpdateBattlePetData(ObjectGuid guid)
BattlePet * GetPet(ObjectGuid guid)
void CageBattlePet(ObjectGuid guid)
bool IsPlayer() const
Definition: Object.h:212
uint32 GetEntry() const
Definition: Object.h:161
static Player * ToPlayer(Object *o)
Definition: Object.h:213
WorldSession * GetSession() const
Definition: Player.h:2101
UF::UpdateField< UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER > m_activePlayerData
Definition: Player.h:2864
Unit * GetSummonerUnit() const
Definition: Unit.h:627
TempSummon * ToTempSummon()
Definition: Unit.h:1756
bool IsSummon() const
Definition: Unit.h:738
uint32 GetBattlePetCompanionNameTimestamp() const
Definition: Unit.h:1245
std::unique_ptr< DeclinedName > DeclinedNames
void HandleQueryBattlePetName(WorldPackets::BattlePet::QueryBattlePetName &queryBattlePetName)
void HandleBattlePetRequestJournalLock(WorldPackets::BattlePet::BattlePetRequestJournalLock &battlePetRequestJournalLock)
void HandleBattlePetModifyName(WorldPackets::BattlePet::BattlePetModifyName &battlePetModifyName)
void HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon &battlePetSummon)
void HandleBattlePetClearFanfare(WorldPackets::BattlePet::BattlePetClearFanfare &battlePetClearFanfare)
void HandleBattlePetRequestJournal(WorldPackets::BattlePet::BattlePetRequestJournal &battlePetRequestJournal)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleBattlePetSetBattleSlot(WorldPackets::BattlePet::BattlePetSetBattleSlot &battlePetSetBattleSlot)
Player * _player
void HandleBattlePetDeletePet(WorldPackets::BattlePet::BattlePetDeletePet &battlePetDeletePet)
void HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet &cageBattlePet)
void HandleBattlePetSetFlags(WorldPackets::BattlePet::BattlePetSetFlags &battlePetSetFlags)
BattlePets::BattlePetMgr * GetBattlePetMgr() const
void HandleBattlePetUpdateNotify(WorldPackets::BattlePet::BattlePetUpdateNotify &battlePetUpdateNotify)
@ FLAGS_CONTROL_TYPE_APPLY
Definition: BattlePetMgr.h:98
@ BATTLE_PET_CHANGED
Definition: BattlePetMgr.h:131
TC_GAME_API Pet * GetPet(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreatureOrPetOrVehicle(WorldObject const &, ObjectGuid const &)
WorldPackets::BattlePet::BattlePet PacketInfo
Definition: BattlePetMgr.h:140
std::unique_ptr<::DeclinedName > DeclinedName
Definition: BattlePetMgr.h:142