Вот один из примеров: В моде Predaotor, хищник может двигаться сразу после события начала нового раунда, а все игроки только с момента старта раунда. Правда в данном моде допущена еще более серьезная ошибка с этим моментом, что дает возможность хищнику использовать баг и пополнять запасы жизней и плазмы бесконечное количество раз. Но мы не об этом, вернемся к событиям нового раунда и его старта.
Событие нового раунда.
Верный способ отловить событие начало нового раунда
register_event("HLTV", "Function", "a", "1=0", "2=0")
Функция "Function" будет вызываться каждый раз когда будет начинаться новый уровень.
Ни каких полезных для нас параметров в обработчик не поступает, по этому если вы хотите что либо сделать для какого то конкретного игрока или сразу же всех игроков, в большинстве случаев придется применять циклы. Но хочу обратить внимание, что если в нутрии цикла будет большой или долго выполнимый код, то это может вызвать лаги на сервере. А так же не рекомендую вставлять какое либо логирование в цикл, так как это тоже вызовет ощутимые задержки в работе.
Пример отлова начало нового раунда:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[register_event] New Round"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "NewRound", "a", "1=0", "2=0")
}
public NewRound(){
client_print(0,print_chat,"Event New Round")
}
Событие старта раунда
Я смотрю вы правильно думаете и уже сами хотите мне сказать, что событие старта раунда происходит в момент когда закончиться mp_freezetime. И вы абсолютно правы. Вот только отлавливается это событие немного по другому:
register_logevent("Startround", 2, "1=Round_Start")
Рабочий пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[register_logevent] Round_Start"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("StartRound", 2, "1=Round_Start")
}
public StartRound(){
client_print(0,print_chat,"Event Start Round")
}
Если вы объедините два этих примера, то вы получите 2 сообщения, одно при событии нового раунда, второе при его старте. Я бы вам рекомендовал это проделать, что бы боле четко уяснить для себя эту принципиальную разницу.
Пара слов о событии ResetHUD.
Это событие не старта раунда или спавна игрока, как многие считают, а событие которое вызывается при обресечивании HUD экрана игрока. Например при начале записи демки.
Можете проверить это на серверах с предатор модом, когда станете хищником и истратите свои 3 плазмы, просто начните записывать и остановите запись демки и у вас пополняться жизни и количество плазм, так как автор мода допустил ошибку с выбором момента когда нужно обновлять количество жизней и плазм у игроков.
Надеюсь вы теперь понимаете разницу между этими событиями и научились их отлавливать.