diff options
author | DDuarte <dnpd.dd@gmail.com> | 2014-09-02 00:49:17 +0100 |
---|---|---|
committer | DDuarte <dnpd.dd@gmail.com> | 2014-09-02 00:49:17 +0100 |
commit | e0f7cd151451863b29e800b10e5c5fe90f3627ef (patch) | |
tree | 2a956bf2b10bcbc21cffb211331feb510f44abe6 /src/server/game/Handlers/MiscHandler.cpp | |
parent | d05246f171546085f43bed877408c0db8233b8e3 (diff) |
Core/Misc: Send cemetery list when the client requests it
Implement CMSG_REQUEST_CEMETERY_LIST & SMSG_REQUEST_CEMETERY_LIST_RESPONSE
Sends up to 15 graveyard ids from the player zone (needs verification, *some* packets were seen with graveyards from the whole continent).
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 1162622af60..99cab39c241 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -508,6 +508,37 @@ void WorldSession::HandleReturnToGraveyard(WorldPacket& /*recvPacket*/) GetPlayer()->RepopAtGraveyard(); } +void WorldSession::HandleRequestCemeteryList(WorldPacket& /*recvPacket*/) +{ + uint32 zoneId = _player->GetZoneId(); + uint32 team = _player->GetTeam(); + + std::vector<uint32> graveyardIds; + auto range = sObjectMgr->GraveYardStore.equal_range(zoneId); + + for (auto it = range.first; it != range.second && graveyardIds.size() < 16; ++it) // client max + { + if (it->second.team == 0 || it->second.team == team) + graveyardIds.push_back(it->first); + } + + if (graveyardIds.empty()) + { + TC_LOG_DEBUG("network", "No graveyards found for zone %u for player %u (team %u) in CMSG_REQUEST_CEMETERY_LIST", + zoneId, m_GUIDLow, team); + return; + } + + WorldPacket data(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, 4 + 4 * graveyardIds.size()); + data.WriteBit(0); // Is MicroDungeon (WorldMapFrame.lua) + + data.WriteBits(graveyardIds.size(), 24); + for (int i = 0; i < graveyardIds.size(); ++i) + data << uint32(graveyardIds[i]); + + SendPacket(&data); +} + void WorldSession::HandleSetSelectionOpcode(WorldPacket& recvData) { uint64 guid; |