PHP Code:
#include <sourcemod>
int g_iChoosenInMenu[MAXPLAYERS + 1];
public void OnPluginStart()
{
RegConsoleCmd("sm_menu", Cmd_menu);
}
public Action Cmd_menu(int client, int args)
{
FormMainMenu(client);
return Plugin_Handled;
}
void FormMainMenu(int client) //main menu
{
if(ValidPlayer(client))
{
Menu menu = new Menu(gChooseMainMenu);
menu.SetTitle("Choose player:");
for(int i = 1; i<=MaxClients; ++i)
{
if(ValidPlayer(i))
{
char str_i[3];
IntToString(i, str_i, sizeof(str_i));
char name[64];
GetClientName(i, name, sizeof(name));
menu.AddItem(str_i, name, ITEMDRAW_DEFAULT);
}
}
menu.ExitButton = true;
menu.Display(client, 0);
}
}
public int gChooseMainMenu(Menu menu, MenuAction action, int client, int param2)
{
switch(action)
{
case MenuAction_Select:
{
char choosenClient[3];
menu.GetItem(param2, choosenClient, sizeof(choosenClient));
int target = StringToInt(choosenClient);
if(ValidPlayer(target))
{
FormParamMenu(client, target);
}
else
{
FormMainMenu(client);
}
}
case MenuAction_End:
{
delete menu;
}
}
}
void FormParamMenu(int client, int target)
{
g_iChoosenInMenu[client] = target;
Menu menu = new Menu(gChoosenParamMenu);
menu.SetTitle("Choose option:");
menu.AddItem("0", "Null");
menu.AddItem("1", "One");
menu.ExitButton = true;
menu.Display(client, 0);
}
public int gChoosenParamMenu(Menu menu, MenuAction action, int client, int param2)
{
switch(action)
{
case MenuAction_Select:
{
if(ValidPlayer(client))
{
int target = g_iChoosenInMenu[client];
if(ValidPlayer(target))
{
int userid = GetClientUserId(target);
char info[32];
menu.GetItem(param2, info, sizeof(info));
if(StrEqual(info, "0"))
{
// You choosed 0.
// В первом меню выбран игрок target, во втором меню выбран ноль
PrintToChat(client, "You have choosen player (userid): %i, param: 0", userid);
//Просто для примера вывожу в чат игроку, который вызывал меню, userid выбранного игрока и параметр из второго меню
}
if(StrEqual(info, "1"))
{
// You choosed 1
// В первом меню выбран игрок target, во втором меню выбрана единица
PrintToChat(client, "You have choosen player (userid): %i, param: 1", userid);
//Просто для примера вывожу в чат игроку, который вызывал меню, userid выбранного игрока и параметр из второго меню
}
}
else
{
//Choosen target is not valid anymore
FormMainMenu(client);
}
}
}
case MenuAction_End:
{
delete menu;
}
}
}
stock bool ValidPlayer(int client, bool check_alive = false)
{
return client>0 && client<=MaxClients && IsClientConnected(client) && IsClientInGame(client) && (!check_alive || IsPlayerAlive(client));
}
__________________