HookEvent("mission_lost", OnReset, EventHookMode_Pre);
HookEvent("map_transition", OnReset, EventHookMode_Pre);
Зачем тут Pre перехват ? Так как в событии не берётся никаких данных то нужен EventHookMode_PostNoCopy
Да забыл исправить что перехватываем без каких либо данных, скопировал в чужом плагине и все. (лень было события искать)
public Action Event_Player_Spawn(Event event, const char[] name, bool dontBroadcast)
Тут нужен void,а не Action, так как мы ничего не блокируем (Plugin_Handled или не блокируем Plugin_Continue)
А вот про это я как то раз читал давненько и подзабыл, согласен полностью.
CreateTimer(5.0, MOVETYPENONE, GetClientOfUserId(GetEventInt(event, "userid")), TIMER_FLAG_NO_MAPCHANGE);
Простой передавай UserId, а в CallBack уже извлечешь ClientIndex с проверкой на валидность (писал же)
К тому же зачем вообще его передавать если у тебя в параметрах нету ClientIndex:
public Action MOVETYPENONE(Handle timer)
Да ну это надо "Handle" использовать с [MAXPLAYERS+1] потом еще передавать:
public Action Timer_Welcome(Handle hTimer, any UserId)
{
int iClient = GetClientOfUserId(UserId);
Хочешь исправляй мне лень =).
Меня интересует как "унхуке" сбрасывать если команда проиграла, break; с циклом не помогает, тебе про это что нибудь известно?
А это не дело, я не знаю почему ты на это внимание не обратил
public Action OnReset(Event event, const char[] name, bool dontBroadcast)
{
for (int i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i))
{
Player_Spawn_Stop = false;
ServerCommand("sm_rcon sm plugins reload l4d_move_type_none.smx");
}
}
}