Using New Menu System

From AlliedModders Wiki
Revision as of 09:56, 2 April 2006 by Freecode (talk | contribs) (Menu Tutorial)
Jump to: navigation, search

Introduction

Write some intro here

Beginners Menu Tutorial

Now lets discuss how to use the new menu system. We will go through the basics in this tutorial and make a simple Change Level vote.

Includes

As always we will start out by adding the required includes

#include <amxmodx>

Global Variables

new g_Menu;	// Main Menu handler
new g_Votes[3];	// Store Yes votes at 1, No at 2

In here we created 2 global var's. One to hold our menu handle, and the other to store our menu votes. The 'Yes' votes will be stored in g_Votes[1] and the 'No' votes will be stored in g_Votes[2].

Registering Plugin and Menu

public plugin_init()
{
	// Register Our Plugin
	register_plugin("Vote Menu","1.0","Freecode");
 
	// Register our Change Level vote menu
	g_Menu = menu_create("Change Level?","menu_handle");
 
	register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
 
	// Now we need to build our menu
	build_menu();
}

Lets break this down.

  • Registers our plugin
register_plugin("Vote Menu","1.0","Freecode");
  • g_Menu - Our menu handle. It will be set after menu_create gets called.
g_Menu = menu_create("Change Level?","menu_handle");
 
//menu_create ( title[], handler[], ml=0 )
//title[] - Menu title
//handler[] - This is a function which will get called once someone presses a key on your menu.
  • We made this client command so we can start our vote.
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
  • This is a function call. build_menu() function will construct our vote menu.
build_menu();

Constructing Menu

Constructing the menu is just adding needed items to your menu. Before we go ahead with adding items we must look at menu_additem native.

menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )
  • menu - menu handle. This tells menu_additem the menu to which we are adding our item.
  • const name[] - the item name. This is what gets displayed into the menu.
  • const command[] - item info.

Now lets get into constructing our menu. As said, this is a simple vote for a Change of Level. So we will only need 2 items. A "Yes" and a "No".

build_menu()
{
	menu_additem(g_Menu, "Yes", "1");
	menu_additem(g_Menu, "No", "2");
 
	menu_setprop(g_Menu, MPROP_PERPAGE, 0);
}
  • Notes
    • As you can see i set the const command[] to numbers. This is for us to identify the item easier.
    • I have also added menu_setprop. This sets our menu to have no pages. For additional properties look int amxconst.inc

Displaying the Vote Menu

public startvote(id) { for(new i = 0; i < 33; i++) { if( is_user_alive(i) ) { menu_display(i, g_Menu, 0); } }

return PLUGIN_HANDLED; }


public menu_handle(id, menu, item) { if( item < 0 ) return PLUGIN_CONTINUE;

// Get item info new cmd[6], iName[64]; new access, callback;

menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback);

new iChoice = str_to_num(cmd);

g_Votes[iChoice]++;

return PLUGIN_HANDLED; } </pawn>