ShowPlayerMenu(playerid, menuid[], caption[], type[] = "INTERACTION MENU", captionTextColor = 0xf7f7f7ff, captionBoxColor = 0xdb0dd0bb, captionSprite[] = "loadsc12:loadsc12");
AddPlayerMenuItem(playerid, text[], info[] = "");
HidePlayerMenu(playerid);
#define MENU_SOUND_UPDOWN \
1054 // the sound id which will be played when you go up/down listitems
#define MENU_SOUND_CLOSE \
1084 // the sound id which will be played when you close menu
#define MENU_SOUND_SELECT \
1083 // the sound id which will be played when you select a listitem
#define MENU_MAX_LISTITEMS \
24 // maximum listitems a menu can have, the array size holding menu information
#define MENU_MAX_LISTITEM_SIZE \
128 // maximum string size of a listitem
#define MENU_MAX_LISTITEMS_PERPAGE \
8 // how many lisitems you want to be shown in a page
MENU_RESPONSE_UP // used in callback (when player press UP key to go upwards in menu)
MENU_RESPONSE_DOWN // used in callback (when player press DOWN key to go downwards in menu)
MENU_RESPONSE_SELECT // used in callback (when player press SPACE key to select a listitem)
MENU_RESPONSE_CLOSE // used in callback (when player press ENTER key to close menu)
#define FILTERSCRIPT
#include <a_samp>
#include <gmenu>
public OnPlayerSpawn(playerid)
{
ShowPlayerMenu(playerid, WEAPONS, "Weapons Menu");
AddPlayerMenuItem(playerid, "Katana");
AddPlayerMenuItem(playerid, "Chainsaw");
AddPlayerMenuItem(playerid, "Grenade", "Lethal weapon, will cost you $5,000 per grenade!");
AddPlayerMenuItem(playerid, "Molotov Cocktail", "Lethal weapon, will cost you $5,000 per moltov!");
AddPlayerMenuItem(playerid, "Desert Eagle");
AddPlayerMenuItem(playerid, "RPG", "Lethal weapon, will cost you $10,000 per rocket!");
AddPlayerMenuItem(playerid, "Minigun", "Best weapon of game, this is surely worth $100,000!");
return 1;
}
Menu:WEAPONS(playerid, response, listitem)
{
if (response == MENU_RESPONSE_SELECT)
{
switch (listitem)
{
case 0:
{
GivePlayerWeapon(playerid, 8, 1);
}
case 1:
{
GivePlayerWeapon(playerid, 9, 1);
}
case 2:
{
if (GetPlayerMoney(playerid) < 5000)
{
return SendClientMessage(playerid, 0xFF0002FF, "You need $5,000 to purchase a Greande.");
}
GivePlayerMoney(playerid, -5000);
GivePlayerWeapon(playerid, 16, 1);
}
case 3:
{
if (GetPlayerMoney(playerid) < 5000)
{
return SendClientMessage(playerid, 0xFF0002FF, "You need $5,000 to purchase a Molotov Cocktail.");
}
GivePlayerMoney(playerid, -5000);
GivePlayerWeapon(playerid, 18, 1);
}
case 4:
{
GivePlayerWeapon(playerid, 24, 50);
}
case 5:
{
if (GetPlayerMoney(playerid) < 10000)
{
return SendClientMessage(playerid, 0xFF0002FF, "You need $10,000 to purchase a RPG.");
}
GivePlayerMoney(playerid, -10000);
GivePlayerWeapon(playerid, 35, 1);
}
case 6:
{
if (GetPlayerMoney(playerid) < 100000)
{
return SendClientMessage(playerid, 0xFF0002FF, "You need $100,000 to purchase a Minigun.");
}
GivePlayerMoney(playerid, -100000);
GivePlayerWeapon(playerid, 38, 1000);
}
}
}
return 1;
}
new index = (gMenu[menuid][M_LISTITEMS] + 1); if(index > MAX_MENU_ITEMS) return -1; index -= 1;
new index = (gMenu[menuid][M_LISTITEMS]); if(index >= MAX_MENU_ITEMS) return -1;
new keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
if(updown == KEY_DOWN)
{
if(GetPlayerMenuID(playerid) != INVALID_MENU_ID)
{
if(GetPlayerMenuID(playerid) != INVALID_MENU_ID) { new keys, updown, leftright; GetPlayerKeys(playerid, keys, updown, leftright); if(updown == KEY_DOWN) {
if(updown & KEY_DOWN)
Код:
new index = (gMenu[menuid][M_LISTITEMS] + 1); if(index > MAX_MENU_ITEMS) return -1; index -= 1; Код:
new index = (gMenu[menuid][M_LISTITEMS]); if(index >= MAX_MENU_ITEMS) return -1; |
The ordering in OnPlayerUpdate() could be done better for sure.
pawn Код:
Код:
if(GetPlayerMenuID(playerid) != INVALID_MENU_ID) { new keys, updown, leftright; GetPlayerKeys(playerid, keys, updown, leftright); if(updown == KEY_DOWN) { |
Another thing to keep in mind is you are using == to check for keys which will work but you can not be pressing any other keys! Usually keys are checked like below. I won't say this method as long as it was your intention for it to be that way.
Код:
if(updown & KEY_DOWN) |
#else #if defined _ALS_OnGameModeInit #undef OnGameModeInit #else #define _ALS_OnGameModeInit #endif #define OnFilterScriptInit GUIP_OnGameModeInit forward GUIP_OnGameModeInit(); #endif |
#define GUIValidIndex(%0) if(!GUIData[_:%0][GUIActive]) return 0
#define GUIValidElement(%0,%1) if(!GUIData[_:%0][GUIUsed][%1]) return 0
#define GUIValidIndex(%0) return GUIData[_:%0][GUIActive]
#define GUIValidElement(%0,%1) return GUIData[_:%0][GUIUsed][%1]
#if defined FILTERSCRIPT
public OnFilterScriptExit()
#else
public OnGameModeExit()
#endif
It's creative, nice work! I reckon if you removed the shadows on the list items it would balance well aesthetically.
|
native Menu_EditItem(menuid, itemid, itemtext[]);
native Menu_EditTitle(menuid, newtitle[]);
native Menu_Show(playerid, menuid, selectioncolor = 0x0000AAFF, bool:showitemid = true);