Заблочить/хукнуть/изменить открытие меню выбора команды Т/CT

BlackPro

Участник
Сообщения
75
Реакции
11
Игра: CSGO
Не пинайте за заголовок, не знал как точнее выразится вообщем нашёл код:
C-подобный:
public OnPluginStart()
{
    AddCommandListener(Command_CheckJoin, "jointeam");
}

public Action:Command_CheckJoin(client, const String:command[], args)
{
    if(GetClientTeam(client))
    {
        PrintToChat(client, " \x07Запрещено менять команду на сервере!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
Запрещает игрокам менять команду(любую), очень хорошо мне подходит, но...
Я хочу что-бы меню выбора команды вообще не открывалось, а в идеале при нажатии кнопки смены команды, открывалась кастомная менюшка, ну например меню сервера.
Это реально?

P.S: Тоесть я хочу вообще забрать у игроков возможность выбора команды, при коннекте их рандомно кидает в одну из команд(mp_force_pick_time "0"), но в игре меню можно открыть, и сменить команду, удалось блокнуть смену кодом выше в любом её проявлении, но менюшка открывается, хотелось бы что бы не открывалась(ну и кастомное меню по возможности, припилить, но это уже не точно).
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Игра: CSGO
Не пинайте за заголовок, не знал как точнее выразится вообщем нашёл код:
C-подобный:
public OnPluginStart()
{
    AddCommandListener(Command_CheckJoin, "jointeam");
}

public Action:Command_CheckJoin(client, const String:command[], args)
{
    if(GetClientTeam(client))
    {
        PrintToChat(client, " \x07Запрещено менять команду на сервере!");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
Запрещает игрокам менять команду(любую), очень хорошо мне подходит, но...
Я хочу что-бы меню выбора команды вообще не открывалось, а в идеале при нажатии кнопки смены команды, открывалась кастомная менюшка, ну например меню сервера.
Это реально?

P.S: Тоесть я хочу вообще забрать у игроков возможность выбора команды, при коннекте их рандомно кидает в одну из команд(mp_force_pick_time "0"), но в игре меню можно открыть, и сменить команду, удалось блокнуть смену кодом выше в любом её проявлении, но менюшка открывается, хотелось бы что бы не открывалась(ну и кастомное меню по возможности, припилить, но это уже не точно).
Скорее всего это невозможно т.к это на стороне клиента и это никак не изменить.
 

BlackPro

Участник
Сообщения
75
Реакции
11
можешь попробовать через сендпрокси отправить клиентам m_bIsQueuedMatchmaking=true из таблицы CCSGameRules
Если можно поподробней??? Я так понял это расширение, а что за таблица CCSGameRules как к ней обратится, и т.д и т.п...
P.S: Кодер из меня если честно сказать нулёвый, нужны примеры, и т.д...
 

Deff

Участник
Сообщения
350
Реакции
137
Если можно поподробней??? Я так понял это расширение, а что за таблица CCSGameRules как к ней обратится, и т.д и т.п...
P.S: Кодер из меня если честно сказать нулёвый, нужны примеры, и т.д...
Может кому то пригодится, можно засунуть в OnMapStart, это именно то что говорил в своем сообщении @Reg1oxeN

C-подобный:
 GameRules_SetProp("m_bIsQueuedMatchmaking", 1);
 

Вложения

  • block_teammenu_example.sp
    144 байт · Просмотры: 101
Последнее редактирование:

anonim8

Участник
Сообщения
26
Реакции
7
А для ксс есть аналогии?
C-подобный:
#include <sourcemod>

#pragma newdecls required
#pragma semicolon 1

public Plugin myinfo =
{
    name = "block_join_class",
    author = "",
    description = "",
    version = "1.0.0",
    url = ""
};


public void OnPluginStart()
{
    HookUserMessage(GetUserMessageId("VGUIMenu"), Hook_VGUIMenu, true);
}

public Action Hook_VGUIMenu(UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init)
{
    char szPanelName[32];
    msg.ReadString(szPanelName, sizeof(szPanelName));
    
    if(StrEqual(szPanelName, "team"))
    {
        return Plugin_Handled;
    }
    if(StrEqual(szPanelName, "class_ct"))
    {
        for(int i = 0; i < playersNum; ++i)
        {
            SetEntProp(players[i], Prop_Send, "m_iClass", GetRandomInt(5, 8));
        }

        return Plugin_Handled;
    }
    else if(StrEqual(szPanelName, "class_ter"))
    {
        for(int i = 0; i < playersNum; ++i)
        {
            SetEntProp(players[i], Prop_Send, "m_iClass", GetRandomInt(1, 4));
        }

        return Plugin_Handled;
    }

    return Plugin_Continue;
}
 
Сверху Снизу