110 lines
3.3 KiB
PHP
110 lines
3.3 KiB
PHP
|
/*
|
||
|
* ============================================================================
|
||
|
*
|
||
|
* Zombie:Reloaded
|
||
|
*
|
||
|
* File: downloads.inc
|
||
|
* Type: Core
|
||
|
* Description: Download validation.
|
||
|
*
|
||
|
* ============================================================================
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Array that stores a list of downloadable files.
|
||
|
*
|
||
|
* @redir config.inc
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Prepare all model/download data.
|
||
|
*/
|
||
|
DownloadsLoad()
|
||
|
{
|
||
|
// Get downloads file path.
|
||
|
decl String:pathdownloads[PLATFORM_MAX_PATH];
|
||
|
new bool:exists = ConfigGetCvarFilePath(CVAR_CONFIG_PATH_DOWNLOADS, pathdownloads);
|
||
|
|
||
|
// Register config info.
|
||
|
ConfigRegisterConfig(ConfigDownloads, false, GetFunctionByName(GetMyHandle(), "DownloadsOnConfigReload"), _, pathdownloads, CONFIG_FILE_ALIAS_DOWNLOADS);
|
||
|
|
||
|
// If file doesn't exist, then log.
|
||
|
if (!exists)
|
||
|
{
|
||
|
// Log error, then stop.
|
||
|
LogPrintToLog(LOG_FORMAT_TYPE_ERROR, "Downloads", "Config Validation", "Missing downloads file: \"%s\"", pathdownloads);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// If download array exists, then destroy it.
|
||
|
if (arrayDownloadsList != INVALID_HANDLE)
|
||
|
{
|
||
|
CloseHandle(arrayDownloadsList);
|
||
|
}
|
||
|
|
||
|
arrayDownloadsList = ConfigLinesToArray(pathdownloads);
|
||
|
|
||
|
// If array couldn't be created, then fail.
|
||
|
if (arrayDownloadsList == INVALID_HANDLE)
|
||
|
{
|
||
|
LogPrintToLog(LOG_FORMAT_TYPE_ERROR, "Downloads", "Config Validation", "Error parsing \"%s\"", pathdownloads);
|
||
|
}
|
||
|
|
||
|
new downloadcount;
|
||
|
new downloadvalidcount;
|
||
|
|
||
|
decl String:downloadpath[PLATFORM_MAX_PATH];
|
||
|
|
||
|
new downloads = downloadcount = GetArraySize(arrayDownloadsList);
|
||
|
|
||
|
// x = download array index.
|
||
|
for (new x = 0; x < downloads; x++)
|
||
|
{
|
||
|
// Get base model path (rawline in models.txt)
|
||
|
GetArrayString(arrayDownloadsList, x, downloadpath, sizeof(downloadpath));
|
||
|
|
||
|
// If file doesn't exist, then remove, log, and stop.
|
||
|
if (!FileExists(downloadpath))
|
||
|
{
|
||
|
// Remove client from array.
|
||
|
RemoveFromArray(arrayDownloadsList, x);
|
||
|
|
||
|
// Subtract one from count.
|
||
|
downloads--;
|
||
|
|
||
|
// Backtrack one index, because we deleted it out from under the loop.
|
||
|
x--;
|
||
|
|
||
|
LogPrintToLog(LOG_FORMAT_TYPE_ERROR, "Downloads", "Config Validation", "Missing file \"%s\"", downloadpath);
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// Increment downloadvalidcount
|
||
|
downloadvalidcount++;
|
||
|
|
||
|
// Precache model file and add to downloads table.
|
||
|
AddFileToDownloadsTable(downloadpath);
|
||
|
}
|
||
|
|
||
|
// Log model validation info.
|
||
|
LogPrintToLog(LOG_FORMAT_TYPE_NORMAL, "Downloads", "Config Validation", "Total: %d | Successful: %d | Unsuccessful: %d", downloadcount, downloadvalidcount, downloadcount - downloadvalidcount);
|
||
|
|
||
|
// Set config data.
|
||
|
ConfigSetConfigLoaded(ConfigDownloads, true);
|
||
|
ConfigSetConfigHandle(ConfigDownloads, arrayDownloadsList);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Called when configs are being reloaded.
|
||
|
*
|
||
|
* @param config The config being reloaded. (only if 'all' is false)
|
||
|
*/
|
||
|
public DownloadsOnConfigReload(ConfigFile:config)
|
||
|
{
|
||
|
// Reload download config.
|
||
|
if (config == ConfigDownloads)
|
||
|
{
|
||
|
DownloadsLoad();
|
||
|
}
|
||
|
}
|