Умная команда sm_map как в CS1.6

Программирование, примеры собственного кода. Синтаксис, помощь новичкам и пр. примеры..
Ответить
Аватара пользователя
*** ROOT ***
Администратор
Администратор
Сообщения: 96
Зарегистрирован: 02 дек 2014, 12:38
Откуда: Шелехов
Возраст: 29
Контактная информация:
Статус: Не в сети

Умная команда sm_map как в CS1.6

Сообщение *** ROOT *** » 15 апр 2017, 17:01

При вводе параметра для команды amx_map <mapname> как части названия карты обычно аддон выдает ошибку что карта не найдена. Это всё потому что никто не собирался делать рекурсивный поиск подходящей по наименованию карты. Проблема решена, теперь если вводимая часть названия карты будет найдена в первом подходящем файле из каталога maps, карта будет менятся на неё.


Необходимый сток, вставить перед public cmdMap в admincmd.sma

  1. stock bool: MapWatch(map[])
  2. {
  3.     new s_fileName[32], i_Dir;
  4.     if((i_Dir = open_dir("/maps", s_fileName, charsmax(s_fileName)))) {
  5.         new LenfName = charsmax(s_fileName);
  6.         while(next_file(i_Dir, s_fileName, LenfName)) {
  7.             if(containi(s_fileName, map) != -1) {
  8.                 new buffers[2][32];
  9.                 explode_string(s_fileName, ".", buffers, sizeof(buffers), charsmax(buffers[]));
  10.                 if(containi(buffers[0], map) != -1) {
  11.                     set_task(1.0, "chMap", 0, buffers[0], LenfName);
  12.                     close_dir(i_Dir);
  13.                     return true;
  14.                 }
  15.             }
  16.         }
  17.         close_dir(i_Dir);
  18.     }
  19.     return false;
  20. }


Затем изменить конструкию if (!is_map_valid(arg)) на более подходящую

  1. new b_iSMapActivated = MapWatch(arg);
  2.  
  3. if (!is_map_valid(arg) && !b_iSMapActivated)
  4. {
  5.     console_print(id, "[AMXX] %L", id, "MAP_NOT_FOUND")
  6.     return PLUGIN_HANDLED
  7. }


И в конце перед return PLUGIN_HANDLED заблокировать task когда нужно,
хотя не обязательно, так как наша задача отработает быстрее, за 1.0 сек

  1. if(!b_iSMapActivated)
  2.     set_task(2.0, "chMap", 0, arg, arglen + 1)



Ответить