diff options
author | Meji <alvaromegias_46@hotmail.com> | 2021-11-20 19:06:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-20 19:06:14 +0100 |
commit | 8614690e27df8197586cc702760409293f3f6c3d (patch) | |
tree | eb95f093b283d9bb728e3e26800240dda462b137 /src | |
parent | b1eb4c2b3e0745e0d801bfa4111c692cc3bb00a1 (diff) |
Core/BattlePets: Implemented battle pet name query packet (#27294)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/server/database/Database/Implementation/LoginDatabase.cpp | 6 | ||||
-rw-r--r-- | src/server/game/BattlePets/BattlePetMgr.cpp | 41 | ||||
-rw-r--r-- | src/server/game/BattlePets/BattlePetMgr.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/BattlePetHandler.cpp | 44 | ||||
-rw-r--r-- | src/server/game/Server/Packets/BattlePetPackets.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Server/Packets/BattlePetPackets.h | 31 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
11 files changed, 153 insertions, 27 deletions
diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index 26399cae226..c31e8363c46 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -155,10 +155,10 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_REP_ACCOUNT_TOYS, "REPLACE INTO battlenet_account_toys (accountId, itemId, isFavourite, hasFanfare) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); // Battle Pets - PrepareStatement(LOGIN_SEL_BATTLE_PETS, "SELECT bp.guid, bp.species, bp.breed, bp.displayId, bp.level, bp.exp, bp.health, bp.quality, bp.flags, bp.name, dn.genitive, dn.dative, dn.accusative, dn.instrumental, dn.prepositional FROM battle_pets bp LEFT JOIN battle_pet_declinedname dn ON bp.guid = dn.guid WHERE bp.battlenetAccountId = ?", CONNECTION_ASYNC); - PrepareStatement(LOGIN_INS_BATTLE_PETS, "INSERT INTO battle_pets (guid, battlenetAccountId, species, breed, displayId, level, exp, health, quality, flags, name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(LOGIN_SEL_BATTLE_PETS, "SELECT bp.guid, bp.species, bp.breed, bp.displayId, bp.level, bp.exp, bp.health, bp.quality, bp.flags, bp.name, bp.nameTimestamp, dn.genitive, dn.dative, dn.accusative, dn.instrumental, dn.prepositional FROM battle_pets bp LEFT JOIN battle_pet_declinedname dn ON bp.guid = dn.guid WHERE bp.battlenetAccountId = ?", CONNECTION_ASYNC); + PrepareStatement(LOGIN_INS_BATTLE_PETS, "INSERT INTO battle_pets (guid, battlenetAccountId, species, breed, displayId, level, exp, health, quality, flags, name, nameTimestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_BATTLE_PETS, "DELETE FROM battle_pets WHERE battlenetAccountId = ? AND guid = ?", CONNECTION_ASYNC); - PrepareStatement(LOGIN_UPD_BATTLE_PETS, "UPDATE battle_pets SET level = ?, exp = ?, health = ?, quality = ?, flags = ?, name = ? WHERE battlenetAccountId = ? AND guid = ?", CONNECTION_ASYNC); + PrepareStatement(LOGIN_UPD_BATTLE_PETS, "UPDATE battle_pets SET level = ?, exp = ?, health = ?, quality = ?, flags = ?, name = ?, nameTimestamp = ? WHERE battlenetAccountId = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_BATTLE_PET_SLOTS, "SELECT id, battlePetGuid, locked FROM battle_pet_slots WHERE battlenetAccountId = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_BATTLE_PET_SLOTS, "INSERT INTO battle_pet_slots (id, battlenetAccountId, battlePetGuid, locked) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_BATTLE_PET_SLOTS, "DELETE FROM battle_pet_slots WHERE battlenetAccountId = ?", CONNECTION_ASYNC); diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp index 9ff67a33d1e..54b4282e40e 100644 --- a/src/server/game/BattlePets/BattlePetMgr.cpp +++ b/src/server/game/BattlePets/BattlePetMgr.cpp @@ -20,6 +20,7 @@ #include "Containers.h" #include "Creature.h" #include "DatabaseEnv.h" +#include "GameTime.h" #include "Item.h" #include "Log.h" #include "ObjectAccessor.h" @@ -235,13 +236,14 @@ void BattlePetMgr::LoadFromDB(PreparedQueryResult pets, PreparedQueryResult slot pet.PacketInfo.Quality = fields[7].GetUInt8(); pet.PacketInfo.Flags = fields[8].GetUInt16(); pet.PacketInfo.Name = fields[9].GetString(); + pet.NameTimestamp = fields[10].GetInt64(); pet.PacketInfo.CreatureID = speciesEntry->CreatureID; - if (!fields[10].IsNull()) + if (!fields[11].IsNull()) { - pet.DeclinedName.reset(new DeclinedName); + pet.DeclinedName = std::make_unique<DeclinedName>(); for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i) - pet.DeclinedName->name[i] = fields[10 + i].GetString(); + pet.DeclinedName->name[i] = fields[11 + i].GetString(); } pet.SaveInfo = BATTLE_PET_UNCHANGED; @@ -289,6 +291,7 @@ void BattlePetMgr::SaveToDB(LoginDatabaseTransaction& trans) stmt->setUInt8(8, itr->second.PacketInfo.Quality); stmt->setUInt16(9, itr->second.PacketInfo.Flags); stmt->setString(10, itr->second.PacketInfo.Name); + stmt->setInt64(11, itr->second.NameTimestamp); trans->Append(stmt); if (itr->second.DeclinedName) @@ -313,8 +316,9 @@ void BattlePetMgr::SaveToDB(LoginDatabaseTransaction& trans) stmt->setUInt8(3, itr->second.PacketInfo.Quality); stmt->setUInt16(4, itr->second.PacketInfo.Flags); stmt->setString(5, itr->second.PacketInfo.Name); - stmt->setUInt32(6, _owner->GetBattlenetAccountId()); - stmt->setUInt64(7, itr->first); + stmt->setInt64(6, itr->second.NameTimestamp); + stmt->setUInt32(7, _owner->GetBattlenetAccountId()); + stmt->setUInt64(8, itr->first); trans->Append(stmt); stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BATTLE_PET_DECLINED_NAME); @@ -395,6 +399,7 @@ void BattlePetMgr::AddPet(uint32 species, uint32 display, uint16 breed, BattlePe pet.PacketInfo.Name = ""; pet.CalculateStats(); pet.PacketInfo.Health = pet.PacketInfo.MaxHealth; + pet.NameTimestamp = 0; pet.SaveInfo = BATTLE_PET_NEW; _pets[pet.PacketInfo.Guid.GetCounter()] = std::move(pet); @@ -441,6 +446,7 @@ void BattlePetMgr::ModifyName(ObjectGuid guid, std::string const& name, Declined return; pet->PacketInfo.Name = name; + pet->NameTimestamp = !pet->PacketInfo.Name.empty() ? GameTime::GetGameTime() : time_t(0); pet->DeclinedName.reset(); if (declinedName) @@ -448,6 +454,14 @@ void BattlePetMgr::ModifyName(ObjectGuid guid, std::string const& name, Declined if (pet->SaveInfo != BATTLE_PET_NEW) 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); } bool BattlePetMgr::IsPetInSlot(ObjectGuid guid) @@ -581,20 +595,21 @@ void BattlePetMgr::SummonPet(ObjectGuid guid) return; // TODO: set proper CreatureID for spell DEFAULT_SUMMON_BATTLE_PET_SPELL (default EffectMiscValueA is 40721 - Murkimus the Gladiator) - _owner->GetPlayer()->SetSummonedBattlePetGUID(guid); - _owner->GetPlayer()->SetCurrentBattlePetBreedQuality(pet->PacketInfo.Quality); - _owner->GetPlayer()->CastSpell(_owner->GetPlayer(), speciesEntry->SummonSpellID ? speciesEntry->SummonSpellID : uint32(DEFAULT_SUMMON_BATTLE_PET_SPELL)); + Player* player = _owner->GetPlayer(); + player->SetSummonedBattlePetGUID(guid); + player->SetCurrentBattlePetBreedQuality(pet->PacketInfo.Quality); + player->CastSpell(player, speciesEntry->SummonSpellID ? speciesEntry->SummonSpellID : uint32(DEFAULT_SUMMON_BATTLE_PET_SPELL)); } void BattlePetMgr::DismissPet() { - Player* ownerPlayer = _owner->GetPlayer(); - Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*ownerPlayer, ownerPlayer->GetCritterGUID()); - if (pet && *ownerPlayer->m_activePlayerData->SummonedBattlePetGUID == pet->GetBattlePetCompanionGUID()) + Player* player = _owner->GetPlayer(); + Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*player, player->GetCritterGUID()); + if (pet && player->GetSummonedBattlePetGUID() == pet->GetBattlePetCompanionGUID()) { pet->DespawnOrUnsummon(); - ownerPlayer->SetSummonedBattlePetGUID(ObjectGuid::Empty); - ownerPlayer->SetCurrentBattlePetBreedQuality(AsUnderlyingType(BattlePetBreedQuality::Poor)); + player->SetSummonedBattlePetGUID(ObjectGuid::Empty); + player->SetCurrentBattlePetBreedQuality(AsUnderlyingType(BattlePetBreedQuality::Poor)); } } diff --git a/src/server/game/BattlePets/BattlePetMgr.h b/src/server/game/BattlePets/BattlePetMgr.h index 7ad31f71db7..61da473d7e8 100644 --- a/src/server/game/BattlePets/BattlePetMgr.h +++ b/src/server/game/BattlePets/BattlePetMgr.h @@ -118,6 +118,7 @@ public: void CalculateStats(); WorldPackets::BattlePet::BattlePet PacketInfo; + time_t NameTimestamp = time_t(0); std::unique_ptr<::DeclinedName> DeclinedName; BattlePetSaveInfo SaveInfo = BATTLE_PET_UNCHANGED; }; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 27d0be2f250..bf3598c8acf 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2690,7 +2690,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> } void ClearSelfResSpell() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)); } - void SetSummonedBattlePetGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SummonedBattlePetGUID), guid); } + ObjectGuid GetSummonedBattlePetGUID() const { return m_activePlayerData->SummonedBattlePetGUID; } + void SetSummonedBattlePetGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SummonedBattlePetGUID), guid); } void AddTrackCreatureFlag(uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); } void RemoveTrackCreatureFlag(uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); } @@ -2709,7 +2710,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint8 GetNumRespecs() const { return m_activePlayerData->NumRespecs; } void SetNumRespecs(uint8 numRespecs) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumRespecs), numRespecs); } - void SetWatchedFactionIndex(int32 index) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WatchedFactionIndex), index); } + void SetWatchedFactionIndex(int32 index) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WatchedFactionIndex), index); } void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); } void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c1939255f75..1c9545f05c2 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5836,9 +5836,10 @@ void Unit::SetMinion(Minion *minion, bool apply) SetCritterGUID(minion->GetGUID()); if (Player const* thisPlayer = ToPlayer()) { - if (BattlePetMgr::BattlePet const* pet = thisPlayer->GetSession()->GetBattlePetMgr()->GetPet(thisPlayer->m_activePlayerData->SummonedBattlePetGUID)) + if (BattlePetMgr::BattlePet const* pet = thisPlayer->GetSession()->GetBattlePetMgr()->GetPet(thisPlayer->GetSummonedBattlePetGUID())) { - minion->SetBattlePetCompanionGUID(thisPlayer->m_activePlayerData->SummonedBattlePetGUID); + minion->SetBattlePetCompanionGUID(thisPlayer->GetSummonedBattlePetGUID()); + minion->SetBattlePetCompanionNameTimestamp(pet->NameTimestamp); minion->SetWildBattlePetLevel(pet->PacketInfo.Level); } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index e48319bde83..d12d19c556f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1300,8 +1300,10 @@ class TC_GAME_API Unit : public WorldObject Pet* CreateTamedPetFrom(uint32 creatureEntry, uint32 spell_id = 0); bool InitTamedPet(Pet* pet, uint8 level, uint32 spell_id); - void SetWildBattlePetLevel(uint32 wildBattlePetLevel) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WildBattlePetLevel), wildBattlePetLevel); } + uint32 GetBattlePetCompanionNameTimestamp() const { return m_unitData->BattlePetCompanionNameTimestamp; } + void SetBattlePetCompanionNameTimestamp(uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionNameTimestamp), timestamp); } uint32 GetWildBattlePetLevel() const { return m_unitData->WildBattlePetLevel; } + void SetWildBattlePetLevel(uint32 wildBattlePetLevel) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::WildBattlePetLevel), wildBattlePetLevel); } // aura apply/remove helpers - you should better not use these Aura* _TryStackingOrRefreshingExistingAura(AuraCreateInfo& createInfo); 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) diff --git a/src/server/game/Server/Packets/BattlePetPackets.cpp b/src/server/game/Server/Packets/BattlePetPackets.cpp index 3c3f4da0b2c..a9de1e154a0 100644 --- a/src/server/game/Server/Packets/BattlePetPackets.cpp +++ b/src/server/game/Server/Packets/BattlePetPackets.cpp @@ -116,19 +116,52 @@ void WorldPackets::BattlePet::BattlePetModifyName::Read() if (hasDeclinedNames) { - DeclinedName.emplace(); + DeclinedNames.emplace(); uint8 declinedNameLengths[MAX_DECLINED_NAME_CASES]; for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i) declinedNameLengths[i] = _worldPacket.ReadBits(7); for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i) - DeclinedName->name[i] = _worldPacket.ReadString(declinedNameLengths[i]); + DeclinedNames->name[i] = _worldPacket.ReadString(declinedNameLengths[i]); } Name = _worldPacket.ReadString(nameLength); } +void WorldPackets::BattlePet::QueryBattlePetName::Read() +{ + _worldPacket >> BattlePetID; + _worldPacket >> UnitGUID; +} + +WorldPacket const* WorldPackets::BattlePet::QueryBattlePetNameResponse::Write() +{ + _worldPacket << BattlePetID; + _worldPacket << int32(CreatureID); + _worldPacket << Timestamp; + + _worldPacket.WriteBit(Allow); + + if (Allow) + { + _worldPacket.WriteBits(Name.length(), 8); + _worldPacket.WriteBit(HasDeclined); + + for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i) + _worldPacket.WriteBits(DeclinedNames.name[i].length(), 7); + + for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i) + _worldPacket.WriteString(DeclinedNames.name[i]); + + _worldPacket.WriteString(Name); + } + + _worldPacket.FlushBits(); + + return &_worldPacket; +} + void WorldPackets::BattlePet::BattlePetDeletePet::Read() { _worldPacket >> PetGuid; diff --git a/src/server/game/Server/Packets/BattlePetPackets.h b/src/server/game/Server/Packets/BattlePetPackets.h index 5cd161045f4..240b62750ed 100644 --- a/src/server/game/Server/Packets/BattlePetPackets.h +++ b/src/server/game/Server/Packets/BattlePetPackets.h @@ -19,6 +19,7 @@ #define BattlePetPackets_h__ #include "Packet.h" +#include "PacketUtilities.h" #include "ObjectGuid.h" #include "Optional.h" #include "UnitDefines.h" @@ -149,7 +150,35 @@ namespace WorldPackets ObjectGuid PetGuid; std::string Name; - Optional<::DeclinedName> DeclinedName; + Optional<DeclinedName> DeclinedNames; + }; + + class QueryBattlePetName final : public ClientPacket + { + public: + QueryBattlePetName(WorldPacket&& packet) : ClientPacket(CMSG_QUERY_BATTLE_PET_NAME, std::move(packet)) { } + + void Read() override; + + ObjectGuid BattlePetID; + ObjectGuid UnitGUID; + }; + + class QueryBattlePetNameResponse final : public ServerPacket + { + public: + QueryBattlePetNameResponse() : ServerPacket(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE) { } + + WorldPacket const* Write() override; + + ObjectGuid BattlePetID; + int32 CreatureID = 0; + WorldPackets::Timestamp<> Timestamp; + bool Allow = false; + + bool HasDeclined = false; + DeclinedName DeclinedNames; + std::string Name; }; class BattlePetDeletePet final : public ClientPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index b036b6f8515..ebc5440fc07 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -666,7 +666,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_PLAYER_LOGIN, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandlePlayerLoginOpcode); DEFINE_HANDLER(CMSG_PUSH_QUEST_TO_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty); DEFINE_HANDLER(CMSG_PVP_LOG_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePVPLogDataOpcode); - DEFINE_HANDLER(CMSG_QUERY_BATTLE_PET_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_QUERY_BATTLE_PET_NAME, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryBattlePetName); DEFINE_HANDLER(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryCorpseLocation); DEFINE_HANDLER(CMSG_QUERY_CORPSE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryCorpseTransport); DEFINE_HANDLER(CMSG_QUERY_COUNTDOWN_TIMER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -1743,7 +1743,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_MATCH_STATISTICS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_TIER_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GARRISON_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 439ad78f70a..a5bb23c7549 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -193,6 +193,7 @@ namespace WorldPackets class BattlePetRequestJournalLock; class BattlePetSetBattleSlot; class BattlePetModifyName; + class QueryBattlePetName; class BattlePetDeletePet; class BattlePetSetFlags; class BattlePetClearFanfare; @@ -1748,6 +1749,7 @@ class TC_GAME_API WorldSession void HandleBattlePetRequestJournalLock(WorldPackets::BattlePet::BattlePetRequestJournalLock& battlePetRequestJournalLock); void HandleBattlePetSetBattleSlot(WorldPackets::BattlePet::BattlePetSetBattleSlot& battlePetSetBattleSlot); void HandleBattlePetModifyName(WorldPackets::BattlePet::BattlePetModifyName& battlePetModifyName); + void HandleQueryBattlePetName(WorldPackets::BattlePet::QueryBattlePetName& queryBattlePetName); void HandleBattlePetDeletePet(WorldPackets::BattlePet::BattlePetDeletePet& battlePetDeletePet); void HandleBattlePetSetFlags(WorldPackets::BattlePet::BattlePetSetFlags& battlePetSetFlags); void HandleBattlePetClearFanfare(WorldPackets::BattlePet::BattlePetClearFanfare& battlePetClearFanfare); |