aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MiscHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp76
1 files changed, 27 insertions, 49 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index a0a721c8971..2d454dae927 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -1865,6 +1865,14 @@ void WorldSession::HandleRequestHotfix(WorldPacket& recvPacket)
uint32 type, count;
recvPacket >> type;
+ DB2StorageBase const* store = GetDB2Storage(type);
+ if (!store)
+ {
+ sLog->outError(LOG_FILTER_NETWORKIO, "CMSG_REQUEST_HOTFIX: Received unknown hotfix type: %u", type);
+ recvPacket.rfinish();
+ return;
+ }
+
count = recvPacket.ReadBits(23);
ObjectGuid* guids = new ObjectGuid[count];
@@ -1893,61 +1901,31 @@ void WorldSession::HandleRequestHotfix(WorldPacket& recvPacket)
recvPacket >> entry;
recvPacket.ReadByteSeq(guids[i][2]);
- switch (type)
+ if (!store->HasRecord(entry))
{
- case DB2_HASH_ITEM:
- SendItemDb2Reply(entry);
- break;
- case DB2_HASH_ITEM_SPARSE:
- SendItemSparseDb2Reply(entry);
- break;
- case DB2_HASH_KEYCHAIN:
- SendKeyChainDb2Reply(entry);
- break;
- default:
- {
- WorldPacket data(SMSG_DB_REPLY, 4 * 4);
- data << -int32(entry);
- data << uint32(type);
- data << uint32(time(NULL));
- data << uint32(0);
- SendPacket(&data);
-
- sLog->outError(LOG_FILTER_NETWORKIO, "CMSG_REQUEST_HOTFIX: Received unknown hotfix type: %u, entry %u", type, entry);
- recvPacket.rfinish();
- break;
- }
+ WorldPacket data(SMSG_DB_REPLY, 4 * 4);
+ data << -int32(entry);
+ data << uint32(store->GetHash());
+ data << uint32(time(NULL));
+ data << uint32(0);
+ SendPacket(&data);
+ continue;
}
- }
- delete[] guids;
-}
-
-void WorldSession::SendKeyChainDb2Reply(uint32 entry)
-{
- WorldPacket data(SMSG_DB_REPLY, 44);
- KeyChainEntry const* keyChain = sKeyChainStore.LookupEntry(entry);
- if (!keyChain)
- {
- data << -int32(entry); // entry
- data << uint32(DB2_HASH_KEYCHAIN);
- data << uint32(time(NULL)); // hotfix date
- data << uint32(0); // size of next block
- return;
- }
-
- data << uint32(entry);
- data << uint32(DB2_HASH_KEYCHAIN);
- data << uint32(sObjectMgr->GetHotfixDate(entry, DB2_HASH_KEYCHAIN));
+ WorldPacket data(SMSG_DB_REPLY);
+ data << int32(entry);
+ data << uint32(store->GetHash());
+ data << uint32(sObjectMgr->GetHotfixDate(entry, store->GetHash()));
- ByteBuffer buff;
- buff << uint32(entry);
- buff.append(keyChain->Key, KEYCHAIN_SIZE);
+ size_t sizePos = data.wpos();
+ data << uint32(0); // size of next block
+ store->WriteRecord(entry, data);
+ data.put<uint32>(sizePos, data.wpos() - sizePos - 4);
- data << uint32(buff.size());
- data.append(buff);
+ SendPacket(&data);
+ }
- SendPacket(&data);
+ delete[] guids;
}
void WorldSession::HandleUpdateMissileTrajectory(WorldPacket& recvPacket)