Найти такой момент было принципиально важно, а так же было важно и само событие смены карты или конец работы плагина ( выключение сервера ). Разобравшись с этими двумя событиями, поделюсь полученной информацией с вами, и начнем мы с события, которое наступает раньше.
Событие «конец карты».
Не буду долго грузить как я отыскал это событие, сразу же покажу как это событие зарегистрировать и назначить функцию.
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. Она работает при смене карты (если она сама менялась или была выбрана голосованием) но если админ сам меняет карту то уже нет. Такая же фигня с plugin_end()