Hi,
I'm trying to code a basic paged menu where people can choose a knife to play with. (no skins)
When I call the command the menu shows on, but when I select something, it just fades out. I can't even change the page.
PHP Code:
enum Slots
{
Slot_Primary,
Slot_Secondary,
Slot_Knife,
Slot_Grenade,
Slot_C4,
Slot_None
};
Menu g_KnifeMenu = null;
stock bool IsValidClient(int client)
{
return (client >= 1 && client <= MaxClients && !IsFakeClient(client) && IsClientConnected(client) && IsClientInGame(client) && !IsClientSourceTV(client));
}
stock bool RemoveWeaponBySlot(int client, Slots slot)
{
int entity_index = GetPlayerWeaponSlot(client, slot);
if(entity_index > 0)
{
RemovePlayerItem(client, entity_index);
AcceptEntityInput(entity_index, "Kill");
return true;
}
return false;
}
public void OnPluginStart()
{
RegConsoleCmd("sm_knife", cmd_knife);
}
public Action cmd_knife(int client, int args)
{
if(IsValidClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == CS_TEAM_CT)
{
g_KnifeMenu = BuildKnifeMenu();
g_KnifeMenu.Display(client, MENU_TIME_FOREVER);
}
delete g_KnifeMenu;
return Plugin_Handled;
}
Menu BuildKnifeMenu()
{
File file = OpenFile("knives.txt", "rt");
if(file == null)
{
return null;
}
Menu menu = new Menu(ChangeKnifeMenu);
char knifename[255];
while(!file.EndOfFile() && file.ReadLine(knifename, sizeof(knifename)))
{
if (knifename[0] == ';' || !IsCharAlpha(knifename[0]))
{
continue;
}
int len = strlen(knifename);
for (int i = 0; i < len; i++)
{
if (IsCharSpace(knifename[i]))
{
knifename[i] = '\0';
break;
}
}
menu.AddItem(knifename, knifename);
}
file.Close();
menu.SetTitle("Knife:");
return menu;
}
public int ChangeKnifeMenu(Menu menu, MenuAction action, int param1, int param2)
{
if (action == MenuAction_Select)
{
char info[32];
char knife[32];
char givestring[32];
bool found = menu.GetItem(param2, info, sizeof(info));
PrintToChat(param1, "\x01 \x0E%s \x08equipped", info);
RemoveWeaponBySlot(param1, Slot_Knife);
if(StrEqual(info,"CT"))
{
GivePlayerItem(param1, "weapon_knife");
}
else if(StrEqual(info,"T"))
{
GivePlayerItem(param1, "weapon_knife_t");
}
else if(StrEqual(info,"Classic"))
{
knife = "css";
}
else if(StrEqual(info,"m9 bayonet"))
{
knife = "m9_bayonet";
}
else if(StrEqual(info,"huntsman"))
{
knife = "tactical";
}
else if(StrEqual(info,"shadow daggers"))
{
knife = "push";
}
else if(StrEqual(info,"golden"))
{
knife = "knifegg";
}
else if(StrEqual(info,"bowie"))
{
knife = "survival_bowie";
}
else if(StrEqual(info,"navaja"))
{
knife = "gypsy_jackknife";
}
else if(StrEqual(info,"talon"))
{
knife = "widowmaker";
}
else if(StrEqual(info,"spectral"))
{
knife = "ghost";
}
else if(StrEqual(info,"survival"))
{
knife = "canis";
}
else if(StrEqual(info,"paracord"))
{
knife = "cord";
}
else if(StrEqual(info,"nomad"))
{
knife = "outdoor";
}
Format(givestring, sizeof(givestring), "weapon_knife_%s", knife);
if(!StrEqual(info,"CT") && !StrEqual(info,"T"))
{
GivePlayerItem(param1, givestring);
}
}
}