/** * @brief Caches level data from file into arrays. **/ void LevelSystemOnCacheData(/*void*/) { // Gets config file path static char sPathLevels[PLATFORM_LINE_LENGTH]; ConfigGetConfigPath(File_Levels, sPathLevels, sizeof(sPathLevels)); // Validate levels config int iLevels = gServerData.Levels.Length; if(!iLevels) { LogEvent(false, LogType_Fatal, LOG_GAME_EVENTS, LogModule_Levels, "Config Validation", "No usable data found in levels config file: %s", sPathLevels); return; } // Initialize a level list array ArrayList hLevel = CreateArray(); // i = level array index for(int i = 0; i < iLevels; i++) { // Gets level index gServerData.Levels.GetString(i, sPathLevels, sizeof(sPathLevels)); // Validate unique integer int iLimit = StringToInt(sPathLevels); if(iLimit <= 0 || hLevel.FindValue(iLimit) != -1) { // Log level error info LogEvent(false, LogType_Error, LOG_GAME_EVENTS, LogModule_Levels, "Config Validation", "Incorrect level \"%s\"", sPathLevels); // Remove level from array gServerData.Levels.Erase(i); // Subtract one from count iLevels--; // Backtrack one index, because we deleted it out from under the loop i--; continue; } // Push data into array hLevel.Push(iLimit); } // Validate levels config (after converation) if(!iLevels) { LogEvent(false, LogType_Fatal, LOG_GAME_EVENTS, LogModule_Levels, "Config Validation", "No usable data found in levels config file: %s", sPathLevels); return; } /// Do quick sort! SortADTArray(hLevel, Sort_Ascending, Sort_Integer); // Replace with new array delete gServerData.Levels; gServerData.Levels = hLevel.Clone(); delete hLevel; }