diff options
| author | funjoker <torti-esser@web.de> | 2019-07-27 02:52:13 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2019-08-17 20:04:14 +0200 |
| commit | b4d30bb92cbfc8411d8d91b0f4f2981f2cecc148 (patch) | |
| tree | e799515c3341aae73e47f080a71c39fcb371e905 /src/server/game/Server | |
| parent | 4380fe2751869e7a011d51ee9449e8723b00067f (diff) | |
QueryCache port
partial port of:
(ae9d01a3245c59a8a8d50516a79b79250337450d)
(dd1aa64563bfb726e1132a135927a02fbb765454)
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.cpp | 69 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.h | 33 |
2 files changed, 43 insertions, 59 deletions
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 6433b62d2ea..20e7be03d42 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -351,41 +351,52 @@ void WorldPackets::Query::QuestPOIQuery::Read() _worldPacket >> MissingQuestPOIs[i]; } +ByteBuffer& operator<<(ByteBuffer& data, QuestPOIData const& questPOIData) +{ + data << int32(questPOIData.QuestID); + data << int32(questPOIData.QuestPOIBlobDataStats.size()); + + for (QuestPOIBlobData const& questPOIBlobData : questPOIData.QuestPOIBlobDataStats) + { + data << int32(questPOIBlobData.BlobIndex); + data << int32(questPOIBlobData.ObjectiveIndex); + data << int32(questPOIBlobData.QuestObjectiveID); + data << int32(questPOIBlobData.QuestObjectID); + data << int32(questPOIBlobData.MapID); + data << int32(questPOIBlobData.UiMapID); + data << int32(questPOIBlobData.Priority); + data << int32(questPOIBlobData.Flags); + data << int32(questPOIBlobData.WorldEffectID); + data << int32(questPOIBlobData.PlayerConditionID); + data << int32(questPOIBlobData.SpawnTrackingID); + data << int32(questPOIBlobData.QuestPOIBlobPointStats.size()); + + for (QuestPOIBlobPoint const& questPOIBlobPoint : questPOIBlobData.QuestPOIBlobPointStats) + { + data << int32(questPOIBlobPoint.X); + data << int32(questPOIBlobPoint.Y); + } + + data.WriteBit(questPOIBlobData.AlwaysAllowMergingBlobs); + data.FlushBits(); + } + + return data; +} + WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write() { _worldPacket << int32(QuestPOIDataStats.size()); _worldPacket << int32(QuestPOIDataStats.size()); - for (QuestPOIData const& questPOIData : QuestPOIDataStats) - { - _worldPacket << int32(questPOIData.QuestID); - - _worldPacket << int32(questPOIData.QuestPOIBlobDataStats.size()); + bool useCache = sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES); - for (QuestPOIBlobData const& questPOIBlobData : questPOIData.QuestPOIBlobDataStats) - { - _worldPacket << int32(questPOIBlobData.BlobIndex); - _worldPacket << int32(questPOIBlobData.ObjectiveIndex); - _worldPacket << int32(questPOIBlobData.QuestObjectiveID); - _worldPacket << int32(questPOIBlobData.QuestObjectID); - _worldPacket << int32(questPOIBlobData.MapID); - _worldPacket << int32(questPOIBlobData.UiMapID); - _worldPacket << int32(questPOIBlobData.Priority); - _worldPacket << int32(questPOIBlobData.Flags); - _worldPacket << int32(questPOIBlobData.WorldEffectID); - _worldPacket << int32(questPOIBlobData.PlayerConditionID); - _worldPacket << int32(questPOIBlobData.SpawnTrackingID); - _worldPacket << int32(questPOIBlobData.QuestPOIBlobPointStats.size()); - - for (QuestPOIBlobPoint const& questPOIBlobPoint : questPOIBlobData.QuestPOIBlobPointStats) - { - _worldPacket << int32(questPOIBlobPoint.X); - _worldPacket << int32(questPOIBlobPoint.Y); - } - - _worldPacket.WriteBit(questPOIBlobData.AlwaysAllowMergingBlobs); - _worldPacket.FlushBits(); - } + for (QuestPOIData const* questPOIData : QuestPOIDataStats) + { + if (useCache) + _worldPacket.append(questPOIData->QueryDataBuffer); + else + _worldPacket << *questPOIData; } return &_worldPacket; diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 4331df38c85..c1c138ce0b4 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -30,6 +30,7 @@ #include <array> class Player; +struct QuestPOIData; namespace WorldPackets { @@ -319,35 +320,6 @@ namespace WorldPackets std::array<int32, 100> MissingQuestPOIs; }; - struct QuestPOIBlobPoint - { - int32 X = 0; - int32 Y = 0; - }; - - struct QuestPOIBlobData - { - int32 BlobIndex = 0; - int32 ObjectiveIndex = 0; - int32 QuestObjectiveID = 0; - int32 QuestObjectID = 0; - int32 MapID = 0; - int32 UiMapID = 0; - int32 Priority = 0; - int32 Flags = 0; - int32 WorldEffectID = 0; - int32 PlayerConditionID = 0; - int32 SpawnTrackingID = 0; - std::vector<QuestPOIBlobPoint> QuestPOIBlobPointStats; - bool AlwaysAllowMergingBlobs = false; - }; - - struct QuestPOIData - { - int32 QuestID = 0; - std::vector<QuestPOIBlobData> QuestPOIBlobDataStats; - }; - class QuestPOIQueryResponse final : public ServerPacket { public: @@ -355,7 +327,7 @@ namespace WorldPackets WorldPacket const* Write() override; - std::vector<QuestPOIData> QuestPOIDataStats; + std::vector<QuestPOIData const*> QuestPOIDataStats; }; class QueryQuestCompletionNPCs final : public ClientPacket @@ -463,5 +435,6 @@ namespace WorldPackets ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupHint const& lookupHint); ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupData const& lookupData); +ByteBuffer& operator<<(ByteBuffer& data, QuestPOIData const& questPOIData); #endif // QueryPackets_h__ |
