This is just a copy/paste from one of my plugins that uses keyvalues, but hopefully you can figure it out. Menu_Campaign creates the main menu then the MenuHandler_Campaign creates the sub menu based off of the selection from the main menu which is stored as a global string, campaign_selected.
PHP Code:
/**
* Creates the ZA campaign menu
*
* @param: Client - The Client that is using the menu
* @param: args - The clients choice
*
*/
public Action: Menu_Campaign(Client, args)
{
// Create campaign menu handle
new Handle: CampaignMenu = CreateMenu(MenuHandler_Campaign);
// Set menu title
SetMenuTitle(CampaignMenu, "%T:", "L_CHANGE_CAMPAIGN", LANG_SERVER);
new Handle: campaigns = CreateKeyValues("ZA_CampaignsMenu");
FileToKeyValues(campaigns, "addons/sourcemod/configs/l4d_zombie_apocalypse_campaigns_menu.txt");
// Get correct maps based on game
if (game_l4d)
{
KvJumpToKey(campaigns, "L4D", false);
if (KvGotoFirstSubKey(campaigns))
{
LoadCampaignValues(campaigns, CampaignMenu);
}
}
else if (game_l4d2)
{
KvJumpToKey(campaigns, "L4D2", false);
if (KvGotoFirstSubKey(campaigns))
{
LoadCampaignValues(campaigns, CampaignMenu);
}
}
// Always close this to prevent memory errors
CloseHandle(campaigns);
DisplayMenu(CampaignMenu, Client, 20);
return Plugin_Handled;
}
/**
* ZA campaign menu handler
*
* @handle: CampaignMenu - The campaign menu handle
* @menuaction: action - The action the user has taken on the menu
* @param: Client - The Client using the menu
* @param: position - The name of the campaign chosen
*
*/
public MenuHandler_Campaign(Handle: CampaignMenu, MenuAction: action, Client, position)
{
if (action == MenuAction_Select)
{
// Get the chosen campaign name
GetMenuItem(CampaignMenu, position, campaign_selected, sizeof(campaign_selected));
new Handle: MapMenu = CreateMenu(MenuHandler_Map);
SetMenuTitle(MapMenu, "%T:", campaign_selected, LANG_SERVER);
new Handle: maps = CreateKeyValues("ZA_CampaignsMenu");
FileToKeyValues(maps, "addons/sourcemod/configs/l4d_zombie_apocalypse_campaigns_menu.txt");
// Get to the correct position based on game
if (game_l4d)
{
KvJumpToKey(maps, "L4D", false);
}
else if (game_l4d2)
{
KvJumpToKey(maps, "L4D2", false);
}
// Get the maps
if(KvJumpToKey(maps, campaign_selected, false))
{
if (KvGotoFirstSubKey(maps))
{
LoadCampaignValues(maps, MapMenu);
}
}
// Always close this to prevent memory errors
CloseHandle(maps);
DisplayMenu(MapMenu, Client, 20);
}
}