Главное меню





Главная страница Все файлы Полезные статьи Форум Новости Не нравитса сайт? CS:Source/CS:GO Готовые сервера для NEW css Готовые сервера old css v34 Звуки Карты css Карты CS:GO Плагины sourcemod Патчи Обновления Модели оружия Модели Игроков руки / перчатки Программы Фоны/ GUI Cкрипты спреи скачать CS Source читы ______________________________ Скины Админа Модели игроков (T+CT) Скины Zombie Заложники ______________________________









Мониторинг сервов





Мониторинг серверов









Чат















Связь с Гл.Админом





Выдыхай

Имя: дмитрий
скайп: awp-servers










Статистика
















HookEvent - Отлавливаем события - Форум - unicalsoft-css | сервер - Описание сайта



[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
HookEvent - Отлавливаем события
выдыхай
Offline
Дата: Суббота, 03.08.2013, 10:21 | Сообщение # 1
Постов: 64
С помощью функции HookEvent вы можете ловить любые нужные вам события, например player_death (смерть игрока), round_start (начало раунда) и др. Список всех событий и другую информацию можете найти здесь. Без событий сделать какой-то скрипт просто не получится, так как команды могут быть выполнены только внутри функций, которые вызываются этими событиями.

Существуют и встроенные в SourceMod события, такие как OnMapStartOnPluginStart и др (смотрите в API). Если событие должно отлавливаться постоянно, то обычноHookEvent используют в OnPluginStart, но это можно делать внутри любой функции. Если вы хотите прекратить отлавливать событие, то используйте функциюUnhookEvent (синтаксис такой же, как и в HookEvent).

КодHookEvent("имя события", <функция/блок для обработки события>, <метод>);

Есть три метода:

EventHookMode_Pre - вызываем функцию до того, как событие произошло
EventHookMode_Post - после того, как оно произошло (по умолчанию)
EventHookMode_PostNoCopy - после того, но без переменных

Пример скрипта, в начале раунда в чате напишет продолжительность раунда в секундах:

Код#include <sourcemod>

public OnPluginStart()
{
HookEvent("round_start", round_start);
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
PrintToChatAll("timelimit = %d", GetEventInt(event, "timelimit"));
}

В событии round_start доступны три переменные: [ timelimit, fraglimit, objective ].
Список событий и переменных можете найти здесь.

Теперь посмотрим такой вариант:

Код#include <sourcemod>

public OnPluginStart()
{
HookEvent("round_start", round_start, EventHookMode_PostNoCopy);
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
PrintToChatAll("timelimit = %d", GetEventInt(event, "timelimit"));
}

В этом случае мы не сможем получать переменные события, так как указан метод EventHookMode_PostNoCopy. Так делать полезно только в тех случаях, когда нам просто нужно знать, что событие произошло и не нужно получать его переменные.

Метод EventHookMode_Pre:

Код#include <sourcemod>

public OnPluginStart()
{
HookEvent("round_start", round_start, EventHookMode_Pre);
}

public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
PrintToChatAll("timelimit = %d", GetEventInt(event, "timelimit"));
return Plugin_Continue;
}

Блок 'public Action:round_start' выполнится до того, как начнется раунд, но здесь нужно не забывать добавлять приставку Action: и возвращать return Plugin_Continue(продолжить нормальное выполнение) или return Plugin_Handled (заблокировать). На сколько я знаю, сами события заблокировать нельзя, хотя, если вы это сделаете, то не будет никаких уведомлений о том, что оно произошло, например иконка смерти, сообщение о заходе игрока и тд.

Получать переменные событий можно с помощью данных команд:

КодGetEventBool - получить значение bool (true или false)
GetEventInt - целое число
GetEventFloat - с точкой
GetEventString - строка

Когда плагин отключается, SM сам делает все UnhookEvent и CloseHandle.
Прикрепления:




Сообщение отредактировал
[ (RU) ]
выдыхай
Offline
Дата: Суббота, 03.08.2013, 10:24 | Сообщение # 2
Постов: 64
Некоторые встроенные события (public):

Код
OnPluginStart - скрипт включился
OnPluginEnd - отключился
OnMapStart - карта сменилась
OnMapEnd - карта завершилась (вызывается перед OnMapStart)
OnGameFrame - каждый тик выполняем команды (66 раз в сек например)
OnConfigsExecuted
OnAutoConfigsBuffered
OnAllPluginsLoaded
OnLibraryAdded
OnLibraryRemoved
OnClientFloodCheck
OnClientFloodResult
OnAdminMenuCreated(Handle:topmenu)
OnAdminMenuReady(Handle:topmenu)

Action:OnBanClient(client, time, flags, const String:reason[], const String:kick_msg[], const String:cmd[], any:x)
Action:OnBanIdentity(const String:identity[], time, flags, const String:reason[], const String:cmd[], any:x)
Action:OnRemoveBan(const String:identity[], flags, const String:cmd[], any:x)

OnClientCookiesCached(client)
bool:OnClientConnect(client, String:rejectmsg[], maxlen)
OnClientConnected(client)
OnClientPutInServer(client) - игрок вошел на сервер
OnClientDisconnect(client) - покинул
OnClientDisconnect_Post(client)
Action:OnClientCommand(client, args)
OnClientSettingsChanged(client)
OnClientAuthorized(client, const String:auth[])
Action:OnClientPreAdminCheck(client)
OnClientPostAdminFilter(client)
OnClientPostAdminCheck(client)

Action:CS_OnBuyCommand(client, const String:weapon[]) - покупает оружие
Action:CS_OnCSWeaponDrop(client, weaponIndex) - выбрасывает
Action:CS_OnGetWeaponPrice(client, const String:weapon[], &price)
Action:CS_OnTerminateRound(&Float:delay, &CSRoundEndReason:reason)

OnNominationRemoved(const String:map[], owner)
OnMapVoteStarted() - mapchooser запускает гол
Например:  
Код
#include <sourcemod>   

public OnMapStart   
{   
       LogMessage("Сменилась карта");   
}   

public Action:CS_OnBuyCommand(client, const String:weapon[])   
{   
       PrintToChatAll("%N купил %s", client, weapon);   
       return Plugin_Continue;   
}
Прикрепления:




Сообщение отредактировал
[ (RU) ]
  • Страница 1 из 1
  • 1
Поиск:








Профиль















Время















CW





Победы(0)
Поражения (0)
Ничьи (0)

Забить CW










В команде:





-=AWP=-
ХŦŘẾŁŁÃ♫♫
IIIypuk
ТУТ ВАШ НИК
ТУТ ВАШ НИК
Заявка на вступление в команду











Поиск















Наш сервер:





Мониторинг серверов Counter-Strike: Source










                                                                                                                                 
                                                                                                                            Мы принимаем Perfect money
       
                                          
                     
              
Конструктор сайтовuCoz