Exemplo n.º 1
0
/**
 * @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;
}