44 scenarioID = dbDataItr->second.Scenario_A;
47 scenarioID = dbDataItr->second.Scenario_H;
56 TC_LOG_ERROR(
"scenario",
"Table `scenarios` contained data linking scenario (Id: {}) to map (Id: {}), difficulty (Id: {}) but no scenario data was found related to that scenario Id.", scenarioID, map->
GetId(), map->
GetDifficultyID());
73 TC_LOG_INFO(
"server.loading",
">> Loaded 0 scenarios. DB table `scenarios` is empty!");
79 Field* fields = result->Fetch();
87 TC_LOG_ERROR(
"sql.sql",
"ScenarioMgr::LoadDBData: DB Table `scenarios`, column scenario_A contained an invalid scenario (Id: {})!", scenarioAllianceId);
94 TC_LOG_ERROR(
"sql.sql",
"ScenarioMgr::LoadDBData: DB Table `scenarios`, column scenario_H contained an invalid scenario (Id: {})!", scenarioHordeId);
98 if (scenarioHordeId == 0)
99 scenarioHordeId = scenarioAllianceId;
107 while (result->NextRow());
116 std::unordered_map<uint32, std::map<uint8, ScenarioStepEntry const*>> scenarioSteps;
117 uint32 deepestCriteriaTreeSize = 0;
121 scenarioSteps[step->ScenarioID][step->OrderIndex] = step;
124 uint32 criteriaTreeSize = 0;
129 deepestCriteriaTreeSize = std::max(deepestCriteriaTreeSize, criteriaTreeSize);
138 data.
Entry = scenario;
139 data.
Steps = std::move(scenarioSteps[scenario->ID]);
152 QueryResult result =
WorldDatabase.Query(
"SELECT CriteriaTreeID, BlobIndex, Idx1, MapID, UiMapID, Priority, Flags, WorldEffectID, PlayerConditionID, NavigationPlayerConditionID FROM scenario_poi ORDER BY CriteriaTreeID, Idx1");
155 TC_LOG_ERROR(
"server.loading",
">> Loaded 0 scenario POI definitions. DB table `scenario_poi` is empty.");
160 QueryResult pointsResult =
WorldDatabase.Query(
"SELECT CriteriaTreeID, Idx1, X, Y, Z FROM scenario_poi_points ORDER BY CriteriaTreeID DESC, Idx1, Idx2");
162 std::unordered_map<int32, std::map<int32, std::vector<ScenarioPOIPoint>>> allPoints;
166 Field* fields = pointsResult->Fetch();
170 fields = pointsResult->Fetch();
178 allPoints[CriteriaTreeID][Idx1].emplace_back(X, Y, Z);
179 }
while (pointsResult->NextRow());
184 Field* fields = result->Fetch();
198 TC_LOG_ERROR(
"sql.sql",
"`scenario_poi` CriteriaTreeID ({}) Idx1 ({}) does not correspond to a valid criteria tree", criteriaTreeID, idx1);
204 _scenarioPOIStore[criteriaTreeID].emplace_back(blobIndex, mapID, uiMapID, priority,
flags, worldEffectID, playerConditionID, navigationPlayerConditionID, std::move(*points));
210 TC_LOG_ERROR(
"server.loading",
"Table scenario_poi references unknown scenario poi points for criteria tree id {} POI id {}", criteriaTreeID, blobIndex);
212 }
while (result->NextRow());
DB2Storage< ScenarioEntry > sScenarioStore("Scenario.db2", &ScenarioLoadInfo::Instance)
DB2Storage< ScenarioStepEntry > sScenarioStepStore("ScenarioStep.db2", &ScenarioStepLoadInfo::Instance)
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
std::vector< ScenarioPOI > ScenarioPOIVector
#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
static void WalkCriteriaTree(CriteriaTree const *tree, Func const &func)
Class used to access individual fields of database query result.
Difficulty GetDifficultyID() const
ScenarioDataContainer _scenarioData
ScenarioDBDataContainer _scenarioDBData
ScenarioPOIVector const * GetScenarioPOIs(int32 criteriaTreeID) const
ScenarioPOIContainer _scenarioPOIStore
static ScenarioMgr * Instance()
InstanceScenario * CreateInstanceScenario(InstanceMap *map, TeamId team) const
auto MapGetValuePtr(M &map, typename M::key_type const &key)
std::map< uint8, ScenarioStepEntry const * > Steps
ScenarioEntry const * Entry