Крашается сервер из-за своего плагина

AD4M

Участник
Сообщения
373
Реакции
58
Публикация больших блоков текста/изображений
Здравствуйте, хотел поинтересоваться кодом своего плагина, он хорошо компилируется, вроде бы всё расставлено по полочкам, но всё равно, когда я заливаю его и загружаю на сервер, то сервер крашится, помогите пожалуйста.

PHP:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("player_team", view_as<EventHook>(OnChangeTeam), EventHookMode_Pre); //ловим смену команды
}

void OnChangeTeam(Event hEvent)
{
    if(!hEvent.GetBool("disconnect"))
    {
        hEvent.BroadcastDisabled = true;
        int iClient = GetClientOfUserId(hEvent.GetInt("userid")),
            iTeam = hEvent.GetInt("team");
     
        if(iClient && iTeam)
        {
            switch(iTeam)
            {
                case 1:
                    PrintToChatAll(" \x01\x10%N \x01зашёл за \x04наблюдателей\x01.", iClient);
             
                case 2:
                    PrintToChatAll(" \x01\x10%N \x01зашёл за \x02террористов\x01.", iClient);
         
                case 3:
                    PrintToChatAll(" \x01\x10%N \x01зашёл за \x0Cконтр-террористов\x01.", iClient);
            }
            hEvent.SetBool("silent", false);
        }
    }
}
 
Последнее редактирование модератором:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@XIM,попробуй вот так:
PHP:
#pragma semicolon 1
#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("player_team", Event_Team, EventHookMode_Pre); //ловим смену команды
}


public Action Event_Team(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(event.GetBool("disconnect") || !(client = GetClientOfUserId(event.GetInt("userid"))))
        return Plugin_Continue;

    switch(event.GetInt("team"))
    {
        case 1:    PrintToChatAll(" \x01\x10%N \x01зашёл за \x04наблюдателей\x01.", client);
        case 2:    PrintToChatAll(" \x01\x10%N \x01зашёл за \x02террористов\x01.", client);
        case 3:    PrintToChatAll(" \x01\x10%N \x01зашёл за \x0Cконтр-террористов\x01.", client);
        default:return Plugin_Continue;
    }

    event.SetBool("silent", true);
    event.BroadcastDisabled = true;

    return Plugin_Changed;
}
И впредь для кода плагина используй тег
HTML:
[PHP][/PHP]
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
event.BroadcastDisabled = true;
помоему это можно опустить, приводит к невозможности купить дифуза
 

AD4M

Участник
Сообщения
373
Реакции
58
Как я понимаю, то событие убирает стандартное вещание и его его опустить, то будет краш.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #5
@XIM, просто отмените отправку события, если это необходимо.
Для этого необходимо вернуть Plugin_Stop вместо Plugin_Changed.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@XIM, если ты хочешь менять значения передаваемые событием (hEvent.SetBool("silent", false);), то у тебя должен быть Action, а не void каллбэк
Потому как при изменении значения должно возвращаться Plugin_Changed.
Ru:Events (SourceMod Scripting) - AlliedModders Wiki
 

AD4M

Участник
Сообщения
373
Реакции
58
спасибо, грей, помог сильно
 
Сверху Снизу