diff options
Diffstat (limited to 'src/server/game/Handlers/BattlePetHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/BattlePetHandler.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp new file mode 100644 index 00000000000..bd44ab73791 --- /dev/null +++ b/src/server/game/Handlers/BattlePetHandler.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "WorldSession.h" +#include "BattlePetMgr.h" +#include "BattlePetPackets.h" +#include "Player.h" + +void WorldSession::HandleBattlePetRequestJournal(WorldPackets::BattlePet::BattlePetRequestJournal& /*battlePetRequestJournal*/) +{ + // TODO: Move this to BattlePetMgr::SendJournal() just to have all packets in one file + WorldPackets::BattlePet::BattlePetJournal battlePetJournal; + battlePetJournal.Trap = GetBattlePetMgr()->GetTrapLevel(); + + for (auto itr : GetBattlePetMgr()->GetLearnedPets()) + battlePetJournal.Pets.push_back(itr.PacketInfo); + + battlePetJournal.Slots = GetBattlePetMgr()->GetSlots(); + SendPacket(battlePetJournal.Write()); +} + +void WorldSession::HandleBattlePetSetBattleSlot(WorldPackets::BattlePet::BattlePetSetBattleSlot& battlePetSetBattleSlot) +{ + if (BattlePetMgr::BattlePet* pet = GetBattlePetMgr()->GetPet(battlePetSetBattleSlot.PetGuid)) + GetBattlePetMgr()->GetSlot(battlePetSetBattleSlot.Slot)->Pet = pet->PacketInfo; +} + +void WorldSession::HandleBattlePetModifyName(WorldPackets::BattlePet::BattlePetModifyName& battlePetModifyName) +{ + if (BattlePetMgr::BattlePet* pet = GetBattlePetMgr()->GetPet(battlePetModifyName.PetGuid)) + { + pet->PacketInfo.Name = battlePetModifyName.Name; + + if (pet->SaveInfo != BATTLE_PET_NEW) + pet->SaveInfo = BATTLE_PET_CHANGED; + } +} + +void WorldSession::HandleBattlePetDeletePet(WorldPackets::BattlePet::BattlePetDeletePet& battlePetDeletePet) +{ + GetBattlePetMgr()->RemovePet(battlePetDeletePet.PetGuid); +} + +void WorldSession::HandleBattlePetSetFlags(WorldPackets::BattlePet::BattlePetSetFlags& battlePetSetFlags) +{ + if (BattlePetMgr::BattlePet* pet = GetBattlePetMgr()->GetPet(battlePetSetFlags.PetGuid)) + { + if (battlePetSetFlags.ControlType == 2) // 2 - apply + pet->PacketInfo.Flags |= battlePetSetFlags.Flags; + else // 3 - remove + pet->PacketInfo.Flags &= ~battlePetSetFlags.Flags; + + if (pet->SaveInfo != BATTLE_PET_NEW) + pet->SaveInfo = BATTLE_PET_CHANGED; + } +} + +void WorldSession::HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet& cageBattlePet) +{ + GetBattlePetMgr()->CageBattlePet(cageBattlePet.PetGuid); +} + +void WorldSession::HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon& battlePetSummon) +{ + GetBattlePetMgr()->SummonPet(battlePetSummon.PetGuid); +} |