LoadMaps()
{
// Переменные для корректной работы функции
new buff[256], fp = fopen("addons/amxmodx/configs/maps.ini", "rt");
// Если файл отсутствует, блокируем плагин и выводим сообщение в консоль сервера
if(!fp) set_fail_state("File ^"addons/amxmodx/configs/maps.ini^" not found");
// [Если объявлена константа] Показывать карты в зависимости от онлайна
#if defined MAP_ON_PLAYERS
new minpl[3], maxpl[3];
#endif
// [Если объявлена константа] Режим выбора сценария игры (карты)
#if defined MODE_SCENARIES
new szMenuMulti[64]
formatex(szMenuMulti, 63, "%L", LANG_PLAYER, "TITLE_MENU");
// До тех пор, пока файл не будет прочитан до конца
while(!feof(fp))
{
// Читает строки из файла (файл, массив, куда будет помещена информация, максимальная длина массива)
fgets(fp, buff, charsmax(buff));
// Очистить пробелы; кавычки в полученных строках
trim(buff); remove_quotes(buff);
// Пропускаем строки с символами комментированиия или разделения
if(!buff[0] || buff[0] == ';') continue;
// Загружаем заголовки сценариев
if(buff[0] == '[')
{
// Обнуляем счетчик для записи карт в свой сценарий
g_iMapCount = 0;
// Записываем заголовки
parse(buff, g_sMapScenario[g_iMapScenarioCount], charsmax(g_sMapScenario[]));
// [Если объявлена константа] Команда /maps в чате.
#if defined MAPSMENU
// [Сценарии] Создать пункты меню со сценариями номинаций
menu_additem(g_iScenariesMenu, g_sMapScenario[g_iMapScenarioCount]);
// [Меню для сценариев карт] Создаем меню c картами под каждый конкретный сценарий
g_iMapsMenu[g_iMapScenarioCount] = menu_create(szMenuMulti, "mapsmenu_handler");
formatex(szMenuMulti, 63, "%L", LANG_PLAYER, "MENU_EXIT")
menu_setprop(g_iMapsMenu[g_iMapScenarioCount], MPROP_EXITNAME, szMenuMulti);
formatex(szMenuMulti, 63, "%L", LANG_PLAYER, "MENU_NEXT")
menu_setprop(g_iMapsMenu[g_iMapScenarioCount], MPROP_NEXTNAME, szMenuMulti);
formatex(szMenuMulti, 63, "%L", LANG_PLAYER, "MENU_PREV")
menu_setprop(g_iMapsMenu[g_iMapScenarioCount], MPROP_BACKNAME, szMenuMulti);
// С каждым проходом увеличиваем индекс g_sMapScenario[] на единицу
g_iMapScenarioCount++;
#endif
}else
{
// [Если объявлена константа] Показывать карты в зависимости от онлайна
#if defined MAP_ON_PLAYERS
// Получаем нужные аргументы с файла по отдельности (текст для разбивки по аргументам, первый оргумент, второй...)
parse(buff, g_sMapScenario[g_iMapScenarioCount][g_iMapCount], charsmax(g_sMapScenario[]), minpl, charsmax(minpl), maxpl, charsmax(maxpl));
#else
// Получаем нужные аргументы по отдельности (текст для разбивки по аргументам, первый оргумент, второй...)
parse(buff, g_sMapScenario[g_iMapScenarioCount][g_iMapCount], charsmax(g_sMapScenario[]));
// Если отсутствует карта на сервере или (функция ниже) была заблокирована, или не совпадает с ожидаемой - пропускаем
if(!is_map_valid(g_sMapScenario[g_iMapScenarioCount][g_iMapCount]) || _is_map_blocked(g_sMapScenario[g_iMapScenarioCount][g_iMapCount]) || !strcmp(g_sMapScenario[g_iMapScenarioCount][g_iMapCount], g_sCurMap)) continue;
#endif
// [Если объявлена константа] Показывать карты в зависимости от онлайна
#if defined MAP_ON_PLAYERS
// Записываем минимальный, максимальный порог карты (для показа игроку)
g_MapPlayerData[g_iMapScenarioCount][g_iMapCount][1] = str_to_num(minpl);
g_MapPlayerData[g_iMapScenarioCount][g_iMapCount][2] = str_to_num(maxpl);
#endif
// [Если объявлена константа] Команда /maps в чате.
#if defined MAPSMENU
/* [Карты] Создаем пункты меню
1. Идентификатор меню
2. Название пункта */
menu_additem(g_iMapsMenu[g_iMapScenarioCount -1], g_sMapScenario[g_iMapScenarioCount][g_iMapCount]);
#endif
server_print(g_sMapScenario[g_iMapScenarioCount][g_iMapCount]);
}
// Запоминает количество имеющихся карт в файле
g_iMapCount++;
}
#else
// До тех пор, пока файл не будет прочитан до конца
while(!feof(fp) && g_iMapCount < MAX_MAPS)
{
// Читает строки из файла (файл, массив, куда будет помещена информация, максимальная длина массива)
fgets(fp, buff, charsmax(buff));
// Очистить пробелы; кавычки в полученных строках
trim(buff); remove_quotes(buff);
// Пропускаем строки с символами комментированиия или разделения
if(!buff[0] || buff[0] == ';' || buff[0] == '[') continue;
// [Если объявлена константа] Показывать карты в зависимости от онлайна
#if defined MAP_ON_PLAYERS
// Получаем нужные аргументы по отдельности (текст для разбивки по аргументам, первый оргумент, второй...)
parse(buff, g_sMap[g_iMapCount], charsmax(g_sMap[]), minpl, charsmax(minpl), maxpl, charsmax(maxpl))
#else
// Получаем нужные аргументы по отдельности (текст для разбивки по аргументам, первый оргумент, второй...)
if(parse(buff, g_sMap[g_iMapCount], charsmax(g_sMap[])))
{
// Если отсутствует карта на сервере или (функция ниже) была заблокирована, или не совпадает с ожидаемой - пропускаем
if(!is_map_valid(g_sMap[g_iMapCount]) || _is_map_blocked(g_sMap[g_iMapCount]) || !strcmp(g_sMap[g_iMapCount], g_sCurMap)) continue;
}
#endif
// [Если объявлена константа] Показывать карты в зависимости от онлайна
#if defined MAP_ON_PLAYERS
// Записываем минимальный, максимальный порог карты (для показа игроку)
g_MapPlayerData[g_iMapCount][1] = str_to_num(minpl);
g_MapPlayerData[g_iMapCount][2] = str_to_num(maxpl);
#endif
// [Если объявлена константа] Команда /maps в чате.
#if defined MAPSMENU
// Создать пункт для меню номинации
menu_additem(g_iMapsMenu, g_sMap[g_iMapCount]);
#endif
// Запоминает количество имеющихся карт в файле
g_iMapCount++;
}
#endif
// Закрываем файл
fclose(fp);
// Если никаких данных обработано не было
if(!g_iMapCount)
// Блокируем плагин с сообщением в консоли сервера
set_fail_state("[Load Maps] Nothing loaded. Plugin stopped!");
// Иначе если в файле с картами была объявлена лишь одна карта
else if(g_iMapCount == 1)
// Блокируем плагин с сообщением в консоли сервера
set_fail_state("[Load Maps] Critical loaded maps. Add maps in ^"addons/amxmodx/configs/maps.ini^". Plugin stopped!");
// Иначе если количество объявленных карт меньше необходимого количества кандидатов для голосования
else if(g_iMapCount < SELECTMAPS)
// Отправляем заметку в указанный файл (отсутствует, автоматически создастся)
log_to_file("lite_mapchooser.log", "[Load Maps] WARNING! Too little maps for voting! [Load: %d / Min: %d]", g_iMapCount, SELECTMAPS);
}