Не много отредактировать

  • Автор темы ...aDDidas...
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.

DeathScore13

пирожок. пирожочек.
Сообщения
740
Реакции
409
Я знаю что тема уже неактуальна, но т.к. я и не нашёл тут нормальный ответ объясню:
C-подобный:
#include <sourcemod>
#pragma semicolon 1

public Plugin:myinfo =
{
    name = "Ban CFG",
    author = "unknown",
    version = "1.0",
};

new bool:g_bActivated;
new bool:g_bBanned[65];

public OnPluginStart()
{
    RegAdminCmd("sm_bancfg", Command_Bancfg, ADMFLAG_BAN);
    g_bActivated = true;
}

public OnClientAuthorized(iClient, const String:auth[])
{
    QueryClientConVar(iClient, "xbox_throttlebias", Query_Func); //не знаю суть, но судя по исходнику она тут нужна
    QueryClientConVar(iClient, "joy_forwardthreshold", Query_Func2); //не знаю суть, но судя по исходнику она тут нужна
    QueryClientConVar(iClient, "joy_yawthreshold", Query_Func3); //не знаю суть, но судя по исходнику она тут нужна
}

public Action:Command_Bancfg(iClient, szArgs)
{
    Send_MainMenu(iClient);
    return Plugin_Handled;
}

public Query_Func(QueryCookie:cookie, iClient, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) //проверка xbox_throttlebias
{
    if (StringToInt(cvarValue) == 3)
    {
        g_bBanned[iClient] = true;
        if (g_bActivated)
        {
            KickClient(iClient, "Вы были забанены!\nЗабанен на: Навсегда\nРазбан: vk.com/deathscore13"); //кикает пользователя в причиной, указанной вами здесь
        }
    }
    else
    {
        g_bBanned[iClient] = false;
    }
}
public Query_Func2(QueryCookie:cookie, iClient, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) //проверка joy_forwardthreshold
{
    if (StringToInt(cvarValue) == 3)
    {
        g_bBanned[iClient] = true;
        if (g_bActivated)
        {
            KickClient(iClient, "Вы были забанены!\nЗабанен на: Навсегда\nРазбан: vk.com/deathscore13"); //кикает пользователя в причиной, указанной вами здесь
        }
    }
    else
    {
        g_bBanned[iClient] = false;
    }
}
public Query_Func3(QueryCookie:cookie, iClient, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) //проверка joy_yawthreshold
{
    if (StringToInt(cvarValue) == 3)
    {
        g_bBanned[iClient] = true;
        if (g_bActivated)
        {
            KickClient(iClient, "Вы были забанены!\nЗабанен на: Навсегда\nРазбан: vk.com/deathscore13"); //кикает пользователя в причиной, указанной вами здесь
        }
    }
    else
    {
        g_bBanned[iClient] = false;
    }
}

Send_MainMenu(iClient)
{
    new Handle:hPanel = CreatePanel();
    SetPanelTitle(hPanel, "Бан по CFG\n \n", false);
    if (g_bActivated)
    {
        DrawPanelItem(hPanel, "Забанить игрока", 0);
        DrawPanelItem(hPanel, "Защита: включена\n \n", 2);
        DrawPanelItem(hPanel, "Выключить защиту\n \n", 0);
        DrawPanelItem(hPanel, "Выход", 0);
    }
    else
    {
        DrawPanelItem(hPanel, "Разбанить игрока", 0);
        DrawPanelItem(hPanel, "Защита: выключена\n \n", 2);
        DrawPanelItem(hPanel, "Включить защиту\n \n", 0);
        DrawPanelItem(hPanel, "Выход", 0);
    }
    SendPanelToClient(hPanel, iClient, Handle_MainMenu, 0);
    CloseHandle(hPanel);
}

Send_PlayerMenu(iClient)
{
    new Handle:hMenu = CreateMenu(Handle_PlayerMenu);
    if (g_bActivated)
    {
        SetMenuTitle(hMenu, "Забанить игрока:\n \n");
    }
    else
    {
        SetMenuTitle(hMenu, "Разбанить игрока:\n \n");
    }
    decl String:szName[64];
    decl String:szClient[8];
    for (new i = 1; i < MaxClients; i++)
    {
        if (IsClientConnected(i))
        {
            QueryClientConVar(i, "xbox_throttlebias", Query_Func);
            QueryClientConVar(i, "joy_forwardthreshold", Query_Func2); //об этом писалось в посте выше
            QueryClientConVar(i, "joy_yawthreshold", Query_Func3); //об этом писалось в посте выше
            if (g_bActivated && !g_bBanned[i])
            {
                GetClientName(i, szName, 64);
                IntToString(i, szClient, 8);
                AddMenuItem(hMenu, szClient, szName, 0);
            }
            else if (!g_bActivated && g_bBanned[i])
            {
                GetClientName(i, szName, 64);
                IntToString(i, szClient, 8);
                AddMenuItem(hMenu, szClient, szName, 0);
            }
        }
    }
    SetMenuExitButton(hMenu, true);
    DisplayMenu(hMenu, iClient, 0);
}

public Handle_MainMenu(Handle:menu, MenuAction:action, iClient, iInfo)
{
    if (action == MenuAction_Select)
    {
        if (iInfo == 1)
        {
            Send_PlayerMenu(iClient);
        }
        if (iInfo == 2)
        {
            g_bActivated = !g_bActivated;
            Send_MainMenu(iClient);
        }
    }
}

public Handle_PlayerMenu(Handle:menu, MenuAction:action, iClient, iInfo)
{
    if (action == MenuAction_End)
    {
        CloseHandle(menu);
    }
    else
    {
        if (action == MenuAction_Cancel)
        {
            Send_MainMenu(iClient);
        }
        if (action == MenuAction_Select)
        {
            decl String:szInfo[8];
            GetMenuItem(menu, iInfo, szInfo, 8);
            new iTarget = StringToInt(szInfo, 10);
            if (!IsClientConnected(iTarget))
            {
                PrintToChat(iClient, "\x04[BC] \x01Игрок вышел с сервера!");
            }
            decl iRate;
            if (g_bActivated)
            {
                iRate = 3; //значение при бане
            }
            else
            {
                iRate = 1; //значение при разбане
            }
            decl String:szCmd[128];
            Format(szCmd, 128, "xbox_throttlebias %d;joy_forwardthreshold %d;joy_yawthreshold %d;retry", iRate, iRate, iRate); //сколько комманд с %d, столько iRate и приписываем
            new Handle:data = CreateKeyValues("data");
            KvSetString(data, "type", "2");
            KvSetString(data, "cmd", szCmd);
            ShowVGUIPanel(iTarget, "info", data, true);
            CloseHandle(data);
        }
    }
}
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу