aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorfunjoker <torti-esser@web.de>2019-07-27 02:52:13 +0200
committerShauren <shauren.trinity@gmail.com>2019-08-17 20:04:14 +0200
commitb4d30bb92cbfc8411d8d91b0f4f2981f2cecc148 (patch)
treee799515c3341aae73e47f080a71c39fcb371e905 /src/server/game/Server
parent4380fe2751869e7a011d51ee9449e8723b00067f (diff)
QueryCache port
partial port of: (ae9d01a3245c59a8a8d50516a79b79250337450d) (dd1aa64563bfb726e1132a135927a02fbb765454)
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp69
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h33
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__