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);
}
}
}
Последнее редактирование: