aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp70
1 files changed, 69 insertions, 1 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 62df5d7e63d..1c2ae545ef3 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -7387,7 +7387,11 @@ void ObjectMgr::LoadQuestPOI()
if (questId < POIs.size() && id < POIs[questId].size())
{
POI.points = POIs[questId][id];
- _questPOIStore[questId].push_back(POI);
+ QuestPOIContainer::iterator itr = _questPOIStore.find(questId);
+ if (itr == _questPOIStore.end())
+ _questPOIStore[questId] = QuestPOIWrapper();
+
+ _questPOIStore[questId].DataVector.push_back(POI);
}
else
TC_LOG_ERROR("server.loading", "Table quest_poi references unknown quest points for quest %u POI id %u", questId, id);
@@ -9325,3 +9329,67 @@ void ObjectMgr::LoadCreatureQuestItems()
TC_LOG_INFO("server.loading", ">> Loaded %u creature quest items in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+
+void ObjectMgr::InitializeQueriesData(QueryDataGroup mask)
+{
+ // cache disabled
+ if (!sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES))
+ return;
+
+ // Initialize Query data for creatures
+ if (mask & QUERY_DATA_CREATURES)
+ for (auto& creaturePair : _creatureTemplateStore)
+ creaturePair.second.InitializeQueryData();
+
+ // Initialize Query Data for gameobjects
+ if (mask & QUERY_DATA_GAMEOBJECTS)
+ for (auto& gameobjectPair : _gameObjectTemplateStore)
+ gameobjectPair.second.InitializeQueryData();
+
+ // Initialize Query Data for items
+ if (mask & QUERY_DATA_ITEMS)
+ for (auto& itemPair : _itemTemplateStore)
+ itemPair.second.InitializeQueryData();
+
+ // Initialize Query Data for quests
+ if (mask & QUERY_DATA_QUESTS)
+ for (auto& questPair : _questTemplates)
+ questPair.second->InitializeQueryData();
+
+ // Initialize Quest POI data
+ if (mask & QUERY_DATA_POIS)
+ for (auto& poiPair : _questPOIStore)
+ poiPair.second.InitializeQueryData(poiPair.first);
+}
+
+void QuestPOIWrapper::InitializeQueryData(uint32 questId)
+{
+ QueryDataBuffer = BuildQueryData(questId);
+}
+
+ByteBuffer QuestPOIWrapper::BuildQueryData(uint32 questId) const
+{
+ ByteBuffer tempBuffer;
+ tempBuffer << uint32(questId); // quest ID
+ tempBuffer << uint32(DataVector.size()); // POI count
+
+ for (QuestPOIVector::const_iterator itr = DataVector.begin(); itr != DataVector.end(); ++itr)
+ {
+ tempBuffer << uint32(itr->Id); // POI index
+ tempBuffer << int32(itr->ObjectiveIndex); // objective index
+ tempBuffer << uint32(itr->MapId); // mapid
+ tempBuffer << uint32(itr->AreaId); // areaid
+ tempBuffer << uint32(itr->FloorId); // floorid
+ tempBuffer << uint32(itr->Unk3); // unknown
+ tempBuffer << uint32(itr->Unk4); // unknown
+ tempBuffer << uint32(itr->points.size()); // POI points count
+
+ for (std::vector<QuestPOIPoint>::const_iterator itr2 = itr->points.begin(); itr2 != itr->points.end(); ++itr2)
+ {
+ tempBuffer << int32(itr2->x); // POI point x
+ tempBuffer << int32(itr2->y); // POI point y
+ }
+ }
+
+ return tempBuffer;
+}