Дата: Воскресенье, 28.08.2011, 20:03:23 | Сообщение # 1
С помощью функции HookEvent вы можете ловить любые нужные вам события, например player_death (смерть игрока), round_start (начало раунда) и др. Список всех событий и другую информацию можете найти здесь. Без событий сделать какой-то скрипт просто не получится, так как команды могут быть выполнены только внутри функций, которые вызываются этими событиями.
Существуют и встроенные в SourceMod события, такие как OnMapStart, OnPluginStart и др (смотрите в API). Если событие должно отлавливаться постоянно, то обычно HookEvent используют в OnPluginStart, но это можно делать внутри любой функции. Если вы хотите прекратить отлавливать событие, то используйте функцию UnhookEvent (синтаксис такой же, как и в HookEvent).
Код
HookEvent("имя события", <функция/блок для обработки события>, <метод>);
Есть три метода:
EventHookMode_Pre - вызываем функцию до того, как событие произошло EventHookMode_Post - после того, как оно произошло (по умолчанию) EventHookMode_PostNoCopy - после того, но без переменных
Пример скрипта, в начале раунда в чате напишет продолжительность раунда в секундах:
Код
#include <sourcemod>
public OnPluginStart() { HookEvent("round_start", round_start); }
В этом случае мы не сможем получать переменные события, так как указан метод EventHookMode_PostNoCopy. Так делать полезно только в тех случаях, когда нам просто нужно знать, что событие произошло и не нужно получать его переменные.
Метод EventHookMode_Pre:
Код
#include <sourcemod>
public OnPluginStart() { HookEvent("round_start", round_start, EventHookMode_Pre); }
Блок 'public Action:round_start' выполнится до того, как начнется раунд, но здесь нужно не забывать добавлять приставку Action: и возвращать return Plugin_Continue (продолжить нормальное выполнение) или return Plugin_Handled (заблокировать). На сколько я знаю, сами события заблокировать нельзя, хотя, если вы это сделаете, то не будет никаких уведомлений о том, что оно произошло, например иконка смерти, сообщение о заходе игрока и тд.
Получать переменные событий можно с помощью данных команд:
Код
GetEventBool - получить значение bool (true или false) GetEventInt - целое число GetEventFloat - с точкой GetEventString - строка
Когда плагин отключается, SM сам делает все UnhookEvent и CloseHandle.