Найти такой момент было принципиально важно, а так же было важно и само событие смены карты или конец работы плагина ( выключение сервера ). Разобравшись с этими двумя событиями, поделюсь полученной информацией с вами, и начнем мы с события, которое наступает раньше.
Событие «конец карты».
Не буду долго грузить как я отыскал это событие, сразу же покажу как это событие зарегистрировать и назначить функцию.
register_event("30", "ChangeMap", "a")Данное событие глобальное и ни каких полезных аргументов мы не получим.
По этому в исполняемой функции, если вы хотите произвести действие над игроками – используйте циклы. Если вы используете стандартный плагин nextmap, то он в этот момент меняет квар mp_chattime и не только, вот вся функция:
public changeMap()
{
new string[32]
new Float:chattime = get_cvar_float("mp_chattime")
set_cvar_float("mp_chattime", chattime + 2.0) // make sure mp_chattime is long
new len = getNextMapName(string, 31) + 1
set_task(chattime, "delayedChange", 0, string, len) // change with 1.5 sec. delay
}
А вот пример кода, который выведет текстовое сообщение в чат:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[amxmodx.inc] register event end map"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("30", "ChangeMap", "a")
// Add your code here...
}
public ChangeMap(){
client_print(0,print_chat,"End map")
}
Событие "конец плагина"
Данное событие актуально для тех кто использует базы данных или любое другое хранение данных, так как именно в этом момент очень удобно сохранить данные, а так же необходимо закрыть открытые соединения и тому подобное. Лично я в одном из своих плагинов в этот момент передавал в базу данных информацию что плагин завершил свою работу корректно и при следующей загрузке проверял эти данные и если они не были получены – значит сервер упал. Ах да. Самое событие даже отлавливать не придется, для этого есть форвард
plugin_end()
То есть эта функция вызывается всегда при выключении сервера или смене карты. Рабочий пример вы сможете посмотреть в описании к функции plugin_end.
Попробовал в данную функцию вставить команду на остановку записи HLTV. Она работает при смене карты (если она сама менялась или была выбрана голосованием) но если админ сам меняет карту то уже нет.