[SourcePawn] Урок 3 - События (Events)

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
не всегда в этой последовательности, он зависит от того как быстро бд отдаст ответ. иногда позже всех вызывается
Да, его может и не быть вовсе.
--- Добавлено позже ---
Но *AdminCheck и *AdminFilter похоже есть всегда, помню кто-то говорил что их может не быть. Или я не дошел до нужного расширения. Но насколько я понял они вызываются ядром SourceMod-а.
 
Последнее редактирование:

-Prokke

Участник
Сообщения
23
Реакции
1
хочу привязать к событию round_end, alert сообщение или же как-то изменить строку которая находиться под строкой MVP, не подскажите как это можно сделать?
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Но там нет переменных типа string, или ты имеешь в виду привязать alert к этому событию?
Формально ты можешь привязать алерт к любому событию


ывыф:
public void OnPluginStart()
{
    HookEvent("round_end", AlertMessage);
}

public void AlertMessage(Event event, const char[] name, bool dontBroadcast)
{
    ShowAlertTextAll("Любой текст");
}

void ShowAlertTextAll(const char[] sMessage, int iDuration = 5) // thanks advert fenix
{
    Event hEvent = CreateEvent("show_survival_respawn_status", true);
    
    hEvent.SetString("loc_token", sMessage);
    hEvent.SetInt("duration", iDuration);
    hEvent.SetInt("userid", -1);
    
    for (int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
    {
        hEvent.FireToClient(i);
    }
    
    hEvent.Cancel();
}
 

-Prokke

Участник
Сообщения
23
Реакции
1
не могу убрать панель funfact_player что не так?
C-подобный:
public void OnPluginStart()
{
    HookEvent("round_end", AlertMessage);
    HookEvent("cs_win_panel_round", Event_Cs_Win_Panel_Round);
}

public void AlertMessage(Event event, const char[] name, bool dontBroadcast)
{
    ShowAlertTextAll("<span class='fontSize-m mono-spaced-font-bold' color='#808080'> \n \n \n<span 'fontSize-xl' color='#FF0000'>Основные команды:\n</span><span color='#00FF00'>!ws</span> - скины на оружие <span color='#00FF00'>!knife</span> - выбор ножа\n<span color='#00FF00'>!shop</span> - магазин <span color='#00FF00'>!rules</span> - правила </span>");
}

void ShowAlertTextAll(const char[] sMessage, int iDuration = 5) // thanks advert fenix
{
    Event hEvent = CreateEvent("show_survival_respawn_status", true);
 
    hEvent.SetString("loc_token", sMessage);
    hEvent.SetInt("duration", iDuration);
    hEvent.SetInt("userid", -1);
 
    for (int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
    {
        hEvent.FireToClient(i);
    }
 
    hEvent.Cancel();
}
public Action Event_Cs_Win_Panel_Round(Event hEvent, const char[] name, bool dontBroadcast)
{
    hEvent.SetInt("funfact_player", 0);
    return Plugin_Changed;
}
C:\Users\pasha\Desktop\compiler\addons\sourcemod\scripting\alert.sp(4) : warning 217: loose indentation
C:\Users\pasha\Desktop\compiler\addons\sourcemod\scripting\alert.sp(30) : warning 217: loose indentation
Сообщения автоматически склеены:

Нашел хороший вариант изменить сообщение после раунда, но
alert2.sp(10) : warning 217: loose indentation
C-подобный:
public void OnPluginStart()
{
    HookEvent("cs_win_panel_round", Event_Cs_Win_Panel_Round);
}

public Action Event_Cs_Win_Panel_Round(Event hEvent, const char[] name, bool dontBroadcast)
{
   hEvent.SetString("funfact_token", "сообщение");

for(int z = 1; z <= MaxClients; z++)
  if(IsClientInGame(z) && !IsFakeClient(z))
    hEvent.FireToClient(z);

hEvent.Cancel();
return Plugin_Changed;
}
я не силен в написании плагинов, не могли бы указать на ошибку? А то я чет не вдупляю что не так сделал
 
Последнее редактирование:

xstage

🏹
Сообщения
726
Реакции
754
не могу убрать панель funfact_player что не так?
C-подобный:
public void OnPluginStart()
{
    HookEvent("round_end", AlertMessage);
    HookEvent("cs_win_panel_round", Event_Cs_Win_Panel_Round);
}

public void AlertMessage(Event event, const char[] name, bool dontBroadcast)
{
    ShowAlertTextAll("<span class='fontSize-m mono-spaced-font-bold' color='#808080'> \n \n \n<span 'fontSize-xl' color='#FF0000'>Основные команды:\n</span><span color='#00FF00'>!ws</span> - скины на оружие <span color='#00FF00'>!knife</span> - выбор ножа\n<span color='#00FF00'>!shop</span> - магазин <span color='#00FF00'>!rules</span> - правила </span>");
}

void ShowAlertTextAll(const char[] sMessage, int iDuration = 5) // thanks advert fenix
{
    Event hEvent = CreateEvent("show_survival_respawn_status", true);
 
    hEvent.SetString("loc_token", sMessage);
    hEvent.SetInt("duration", iDuration);
    hEvent.SetInt("userid", -1);
 
    for (int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
    {
        hEvent.FireToClient(i);
    }
 
    hEvent.Cancel();
}
public Action Event_Cs_Win_Panel_Round(Event hEvent, const char[] name, bool dontBroadcast)
{
    hEvent.SetInt("funfact_player", 0);
    return Plugin_Changed;
}
C:\Users\pasha\Desktop\compiler\addons\sourcemod\scripting\alert.sp(4) : warning 217: loose indentation
C:\Users\pasha\Desktop\compiler\addons\sourcemod\scripting\alert.sp(30) : warning 217: loose indentation
Сообщения автоматически склеены:

Нашел хороший вариант изменить сообщение после раунда, но
alert2.sp(10) : warning 217: loose indentation
C-подобный:
public void OnPluginStart()
{
    HookEvent("cs_win_panel_round", Event_Cs_Win_Panel_Round);
}

public Action Event_Cs_Win_Panel_Round(Event hEvent, const char[] name, bool dontBroadcast)
{
   hEvent.SetString("funfact_token", "сообщение");

for(int z = 1; z <= MaxClients; z++)
  if(IsClientInGame(z) && !IsFakeClient(z))
    hEvent.FireToClient(z);

hEvent.Cancel();
return Plugin_Changed;
}
я не силен в написании плагинов, не могли бы указать на ошибку? А то я чет не вдупляю что не так сделал
Не надо отправлять клиенту, ты перехватываешь событие, потом изменяешь его и возвращаешь Plugin_Changed, чтобы изменения сохранились. Плюс табуляцию поправь.
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Подскажите, пожалуйста, про событие OnMapEnd: оно вызывается при любой смене карты, в т.ч. и из админ меню, консольной командой, или же только когда текущая карта по времени, раундам или фрагам подошла к концу?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Ice_Sochi, это не событие (не Event) же.
Должно при любом завершении карты (ну кроме падения сервера).
Вообще в API описании должно же быть про это.
 
Сверху Снизу