#pragma semicolon 1
#include <sourcemod>
#include <adminmenu>
new bool:g_bShowConnect,
bool:g_bShowAdmins,
Handle:g_hMenu,
Handle:g_hKv;
public Plugin:myinfo =
{
name = "Rules",
author = "R1KO",
version = "1.2",
};
public OnPluginStart()
{
LoadTranslations("common.phrases");
RegConsoleCmd("sm_msc", RulesMenu_Func);
RegAdminCmd("sm_showmsc", ShowRules, ADMFLAG_GENERIC);
new Handle:hCvar;
HookConVarChange((hCvar = CreateConVar("sm_rules_show_connect", "1", "Показывать ли меню автоматически при подключении игрока.")), OnShowConnectChange);
g_bShowConnect = GetConVarBool(hCvar);
HookConVarChange((hCvar = CreateConVar("sm_rules_show_admins", "1", "Показывать ли меню админам.")), OnShowAdminsChange);
g_bShowAdmins = GetConVarBool(hCvar);
CloseHandle(hCvar);
AutoExecConfig(true, "Rules");
}
public OnShowConnectChange(Handle:hCvar, const String:oldValue[], const String:newValue[]) g_bShowConnect = GetConVarBool(hCvar);
public OnShowAdminsChange(Handle:hCvar, const String:oldValue[], const String:newValue[]) g_bShowAdmins = GetConVarBool(hCvar);
public OnMapStart()
{
decl String:sBuffer[PLATFORM_MAX_PATH];
BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "configs/comand.cfg");
if(g_hKv != INVALID_HANDLE) CloseHandle(g_hKv);
if(g_hMenu != INVALID_HANDLE) CloseHandle(g_hMenu);
g_hKv = CreateKeyValues("Comand);
if(FileToKeyValues(g_hKv, sBuffer))
{
g_hMenu = CreateMenu(RulesMenuHandler);
SetMenuExitButton(g_hMenu, true);
KvGetString(g_hKv, "Title", sBuffer, sizeof(sBuffer), "Команды сервера:");
ReplaceString(sBuffer, sizeof(sBuffer), "\\n", "\n", true);
SetMenuTitle(g_hMenu, sBuffer);
if (KvGotoFirstSubKey(g_hKv))
{
do
{
if(KvGetSectionName(g_hKv, sBuffer, sizeof(sBuffer)))
{
ReplaceString(sBuffer, sizeof(sBuffer), "\\n", "\n", true);
AddMenuItem(g_hMenu, sBuffer, sBuffer);
}
} while(KvGotoNextKey(g_hKv));
}
}
}
public OnClientPostAdminCheck(client)
{
if (client > 0 && !IsFakeClient(client))
{
if(g_bShowConnect)
{
if(g_bShowAdmins || (!g_bShowAdmins && GetUserAdmin(client) == INVALID_ADMIN_ID)) DisplayMenu(g_hMenu, client, 0);
}
}
}
public Action:RulesMenu_Func(client, args)
{
if (client > 0) DisplayMenu(g_hMenu, client, 0);
return Plugin_Handled;
}
public Action:ShowRules(client, args)
{
if(client > 0)
{
new Handle:PlayersMenu = CreateMenu(ShowRulesHandler);
SetMenuTitle(PlayersMenu, "Отправить список команд игроку:");
SetMenuExitButton(PlayersMenu, true);
AddTargetsToMenu2(PlayersMenu, client, COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_CONNECTED);
DisplayMenu(PlayersMenu, client, 15);
}
return Plugin_Handled;
}
public RulesMenuHandler(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_Select)
{
decl String:sItem[PLATFORM_MAX_PATH];
GetMenuItem(menu, param2, sItem, sizeof(sItem));
KvRewind(g_hKv);
if(KvJumpToKey(g_hKv, sItem, false))
{
new Handle:hMenu = CreateMenu(ShowRuleHandler);
SetMenuTitle(hMenu, sItem);
SetMenuExitBackButton(hMenu, true);
KvGetString(g_hKv, "Rule", sItem, sizeof(sItem));
ReplaceString(sItem, sizeof(sItem), "\\n", "\n", true);
AddMenuItem(hMenu, "", sItem, ITEMDRAW_DISABLED);
DisplayMenu(hMenu, param1, 0);
}
}
}
public ShowRulesHandler(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_Select)
{
decl String:UserId[64];
GetMenuItem(menu, param2, UserId, sizeof(UserId));
new target = GetClientOfUserId(StringToInt(UserId));
if (target == 0) PrintToChat(param1, "[SM] %t", "Player no longer available");
else DisplayMenu(g_hMenu, target, 0);
} else if (action == MenuAction_End) CloseHandle(menu);
}
public ShowRuleHandler(Handle:menu, MenuAction:action, param1, param2)
{
if (action == MenuAction_End) CloseHandle(menu);
else if (action == MenuAction_Cancel && param2 == MenuCancel_ExitBack && g_hMenu != INVALID_HANDLE) DisplayMenu(g_hMenu, param1, 0);
}