sm-plugins/VIP_Menu/scripting/VIP_Menu.sp
2019-01-15 22:22:14 +01:00

141 lines
3.3 KiB
SourcePawn

#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#define MAXCOMMANDS 20
/* STRINGS */
char g_sDataFile[128];
char g_sVIPCommands[MAXCOMMANDS][2][128];
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
name = "UNLOZE_VIP_Menu",
author = "Neon",
description = "",
version = "1.0",
url = "https://steamcommunity.com/id/n3ontm"
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart()
{
BuildPath(Path_SM, g_sDataFile, sizeof(g_sDataFile), "configs/vip_menu.cfg");
RegAdminCmd("sm_vip", Command_VIP, ADMFLAG_CUSTOM1, "Open VIP Menu.");
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnMapStart()
{
for (int i = 0; i < MAXCOMMANDS; i++)
{
for (int j = 0; j < 2; j++)
g_sVIPCommands[i][j] = "";
}
int k = 0;
if(!FileExists(g_sDataFile))
{
SetFailState("Config file missing!");
return;
}
KeyValues hKvConfig = new KeyValues("vip_menu");
if (!(hKvConfig.ImportFromFile(g_sDataFile)))
{
SetFailState("ImportFromFile() failed!");
return;
}
hKvConfig.Rewind();
if(!hKvConfig.GotoFirstSubKey())
{
SetFailState("GotoFirstSubKey() failed!");
return;
}
do
{
char sSection[64];
hKvConfig.GetSectionName(sSection, sizeof(sSection));
char sCommand[64];
hKvConfig.GetString("command", sCommand, sizeof(sCommand));
if(!sCommand[0])
{
SetFailState("Could not find \"command\" in \"%s\"", sSection);
return;
}
char sDescription[64];
hKvConfig.GetString("description", sDescription, sizeof(sDescription));
if(!sDescription[0])
{
SetFailState("Could not find \"description\" in \"%s\"", sSection);
return;
}
g_sVIPCommands[k][0] = sCommand;
g_sVIPCommands[k][1] = sDescription;
k++;
} while(hKvConfig.GotoNextKey(false));
delete hKvConfig;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action Command_VIP(int client, int iArgs)
{
Menu menu = new Menu(MenuHandler_VIPMenu);
menu.SetTitle("VIP Menu");
for (int i = 0; i < MAXCOMMANDS; i++)
{
if(!g_sVIPCommands[i][0][0])
break;
menu.AddItem(g_sVIPCommands[i][0], g_sVIPCommands[i][1]);
}
menu.Display(client, MENU_TIME_FOREVER);
return Plugin_Handled;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public int MenuHandler_VIPMenu(Menu menu, MenuAction action, int param1, int param2)
{
switch(action)
{
case MenuAction_Select:
{
char sInfo[128];
menu.GetItem(param2, sInfo, sizeof(sInfo));
FakeClientCommandEx(param1, sInfo);
}
case MenuAction_End:
{
delete menu;
}
}
return 0;
}