aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scenarios/ScenarioMgr.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-11-05 19:37:35 +0100
committerShauren <shauren.trinity@gmail.com>2020-12-08 18:16:46 +0100
commit4ca29f3cb050896a8a6c1fea5b2364b2b11c22cd (patch)
tree7508b9ea8fe5fc393c65bb207479f99e68182ebe /src/server/game/Scenarios/ScenarioMgr.cpp
parent56c097c12957b9f803b01b85a851aec0ae0761e2 (diff)
Core/Misc: First set of required db changes for 9.0
Diffstat (limited to 'src/server/game/Scenarios/ScenarioMgr.cpp')
-rw-r--r--src/server/game/Scenarios/ScenarioMgr.cpp46
1 files changed, 24 insertions, 22 deletions
diff --git a/src/server/game/Scenarios/ScenarioMgr.cpp b/src/server/game/Scenarios/ScenarioMgr.cpp
index e06315bf973..36152089b2a 100644
--- a/src/server/game/Scenarios/ScenarioMgr.cpp
+++ b/src/server/game/Scenarios/ScenarioMgr.cpp
@@ -16,6 +16,7 @@
*/
#include "ScenarioMgr.h"
+#include "Containers.h"
#include "DatabaseEnv.h"
#include "DB2Stores.h"
#include "InstanceScenario.h"
@@ -147,41 +148,35 @@ void ScenarioMgr::LoadScenarioPOI()
uint32 count = 0;
- // 0 1 2 3 4 5 6 7 8
- QueryResult result = WorldDatabase.Query("SELECT CriteriaTreeID, BlobIndex, Idx1, MapID, UiMapID, Priority, Flags, WorldEffectID, PlayerConditionID FROM scenario_poi ORDER BY CriteriaTreeID, Idx1");
+ // 0 1 2 3 4 5 6 7 8 9
+ QueryResult result = WorldDatabase.Query("SELECT CriteriaTreeID, BlobIndex, Idx1, MapID, UiMapID, Priority, Flags, WorldEffectID, PlayerConditionID, NavigationPlayerConditionID FROM scenario_poi ORDER BY CriteriaTreeID, Idx1");
if (!result)
{
TC_LOG_ERROR("server.loading", ">> Loaded 0 scenario POI definitions. DB table `scenario_poi` is empty.");
return;
}
- // 0 1 2 3
- QueryResult points = WorldDatabase.Query("SELECT CriteriaTreeID, Idx1, X, Y FROM scenario_poi_points ORDER BY CriteriaTreeID DESC, Idx1, Idx2");
+ // 0 1 2 3 4
+ QueryResult pointsResult = WorldDatabase.Query("SELECT CriteriaTreeID, Idx1, X, Y, Z FROM scenario_poi_points ORDER BY CriteriaTreeID DESC, Idx1, Idx2");
- std::vector<std::vector<std::vector<ScenarioPOIPoint>>> POIs;
+ std::unordered_map<int32, std::map<int32, std::vector<ScenarioPOIPoint>>> allPoints;
- if (points)
+ if (pointsResult)
{
- // The first result should have the highest criteriaTreeId
- Field* fields = points->Fetch();
- uint32 criteriaTreeIdMax = fields[0].GetInt32();
- POIs.resize(criteriaTreeIdMax + 1);
+ Field* fields = pointsResult->Fetch();
do
{
- fields = points->Fetch();
+ fields = pointsResult->Fetch();
int32 CriteriaTreeID = fields[0].GetInt32();
int32 Idx1 = fields[1].GetInt32();
int32 X = fields[2].GetInt32();
int32 Y = fields[3].GetInt32();
+ int32 Z = fields[4].GetInt32();
- if (int32(POIs[CriteriaTreeID].size()) <= Idx1 + 1)
- POIs[CriteriaTreeID].resize(Idx1 + 10);
-
- ScenarioPOIPoint point(X, Y);
- POIs[CriteriaTreeID][Idx1].push_back(point);
- } while (points->NextRow());
+ allPoints[CriteriaTreeID][Idx1].emplace_back(X, Y, Z);
+ } while (pointsResult->NextRow());
}
do
@@ -197,16 +192,23 @@ void ScenarioMgr::LoadScenarioPOI()
int32 flags = fields[6].GetInt32();
int32 worldEffectID = fields[7].GetInt32();
int32 playerConditionID = fields[8].GetInt32();
+ int32 navigationPlayerConditionID = fields[9].GetInt32();
if (!sCriteriaMgr->GetCriteriaTree(criteriaTreeID))
TC_LOG_ERROR("sql.sql", "`scenario_poi` CriteriaTreeID (%u) Idx1 (%u) does not correspond to a valid criteria tree", criteriaTreeID, idx1);
- if (criteriaTreeID < int32(POIs.size()) && idx1 < int32(POIs[criteriaTreeID].size()))
- _scenarioPOIStore[criteriaTreeID].emplace_back(blobIndex, mapID, uiMapID, priority, flags, worldEffectID, playerConditionID, POIs[criteriaTreeID][idx1]);
- else
- TC_LOG_ERROR("server.loading", "Table scenario_poi references unknown scenario poi points for criteria tree id %i POI id %i", criteriaTreeID, blobIndex);
+ if (std::map<int32, std::vector<ScenarioPOIPoint>>* blobs = Trinity::Containers::MapGetValuePtr(allPoints, criteriaTreeID))
+ {
+ if (std::vector<ScenarioPOIPoint>* points = Trinity::Containers::MapGetValuePtr(*blobs, idx1))
+ {
+ _scenarioPOIStore[criteriaTreeID].emplace_back(blobIndex, mapID, uiMapID, priority, flags, worldEffectID, playerConditionID, navigationPlayerConditionID, std::move(*points));
+ ++count;
+ continue;
+ }
+ }
+
+ TC_LOG_ERROR("server.loading", "Table scenario_poi references unknown scenario poi points for criteria tree id %i POI id %i", criteriaTreeID, blobIndex);
- ++count;
} while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u scenario POI definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));