Русское сообщество по скриптингу

Отловить рестарт в CS:GO

Все вопросы по скриптингу для SourceMod, помощь в редактировании плагинов.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптингу для SourceMod.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sp плагина.

Отловить рестарт в CS:GO

Сообщение Zer0CooL » 05 дек 2014, 13:01

Собственно нужно отловить событие рестарта, которое срабатывает при вводе команды mp_restartgame или после разминочного раунда и т.п. В AMXX, например, это делается так:

Код: Выделить всё
register_event("TextMsg", "event_restart", "a", "2&#Game_C", "2&#Game_w")

Как сделать это в SourceMod?
Аватара пользователя
Zer0CooL
 
Сообщения: 10
Зарегистрирован: 10 янв 2012, 18:49
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: Отловить рестарт в CS:GO

Сообщение maks » 06 дек 2014, 09:29

Хук эвенты CS:GO смотри на: Вы должны зарегистрироваться, чтобы видеть ссылки. ... ive_Events

Образец:

Код: Выделить всё
#pragma semicolon 1
#include <sourcemod>

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

public 
Action:Event_RoundStart(Handle:hEvent, const String:strName[], bool:DontBroadcast)
{
    
/*
    место для кода который нужно выполнить
    
    */
    
return Plugin_Continue;
Аватара пользователя
maks
 
Сообщения: 44
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 11 раз.
Опыт программирования: Около года
Языки программирования: SourcePawn

Re: Отловить рестарт в CS:GO

Сообщение Zer0CooL » 07 дек 2014, 22:56

maks, я говорю про рестарт, а не про начало раунда.
Аватара пользователя
Zer0CooL
 
Сообщения: 10
Зарегистрирован: 10 янв 2012, 18:49
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: Отловить рестарт в CS:GO

Сообщение maks » 08 дек 2014, 05:26

Настолько туп что не можеш посмотреть название нужного хука из приведенной ссылки и подставить его в шаблон.
Аватара пользователя
maks
 
Сообщения: 44
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 11 раз.
Опыт программирования: Около года
Языки программирования: SourcePawn

Re: Отловить рестарт в CS:GO

Сообщение Zer0CooL » 09 дек 2014, 07:19

maks, а на сколько ты туп, что бы понять, что там нет нужного ивента? Та ссылка для меня не новость. Я там каждый ивент рассмотрел. Если бы все было так просто, я бы тему тут не создавал.
Аватара пользователя
Zer0CooL
 
Сообщения: 10
Зарегистрирован: 10 янв 2012, 18:49
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: Отловить рестарт в CS:GO

Сообщение maks » 09 дек 2014, 21:31

Включай логику и придумывай обходными способами получить то что нужно.

С ходу пришло несколько способов

Код: Выделить всё
#pragma semicolon 1
#include <sourcemod>

public OnPluginStart()
{
   
RegConsoleCmd("mp_restartgame"CMD_restartgame""); 
}

public 
Action:CMD_restartgame(clientargs)
{
   
/*
   место для кода который нужно выполнить
   */
       
return Plugin_Continue;

И с таймером. В хук эвенте который срабатывает незадолго до нужного момента ставим таймер на нужное количество секунд и после уже делаем то что нужно.

Если это как в л4д2 смена карты то присмотрись к данным функциям.

Код: Выделить всё
public OnMapStart()
{
    
LogMessage("OnMapStart()");
    
LogMessage("___________");
}

public 
OnMapEnd()
{
    
LogMessage("OnMapEnd()");
    
LogMessage("___________");

При логическом подходе и простым логированием нужных хук эвентов можно решить большинство непонятных моментов.
Не удивлюсь если потом окажется что разминочный раунд это тот который через 10 секунд после раунд старта и и первый по счету после подгрузки карты и решается банальным десятком строчек кода. Но посетитель будет все что угодно делать, ждать недели, кроме того чтобы подробно описать нужный момент который хочет хукнуть (контрой не увлекаюсь и назначение консольной команды mp_restartgame мне ничего не говорит).
Остальные скриптеры в соурсмод разделе не обитают.
Аватара пользователя
maks
 
Сообщения: 44
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 11 раз.
Опыт программирования: Около года
Языки программирования: SourcePawn

Re: Отловить рестарт в CS:GO

Сообщение Zer0CooL » 10 дек 2014, 09:43

OnMapStart и OnMapEnd не подходят. mp_restartgame так и сделал уже давно. И разминочный раунд хукнул. Я просто надеялся что есть более простой способ сделать это (как на АМКС), а не писать индусский код.
Аватара пользователя
Zer0CooL
 
Сообщения: 10
Зарегистрирован: 10 янв 2012, 18:49
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4