| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- #include <a_samp>
- #define MAX_CUSTOM_MENUS 64
- #define MAX_MENU_ITEMS 24
- enum custom_menu_enum
- {
- menuTitle[64],
- Float:menuX,
- Float:menuY,
- Text:menuTD
- };
- new stock CustomMenuEnum[MAX_CUSTOM_MENUS + 1][custom_menu_enum];
- new stock CustomMenuItems[MAX_CUSTOM_MENUS + 1][MAX_MENU_ITEMS + 1][32];
- new stock Text:CustomMenuItemTextdraw[MAX_CUSTOM_MENUS + 1][MAX_MENU_ITEMS + 1];
- new stock CustomMenuItemCount[MAX_CUSTOM_MENUS + 1];
- new stock Float:CustomMenuY[MAX_CUSTOM_MENUS + 1];
- new stock CustomMenuCount;
- new stock MenuItemHandle[MAX_PLAYERS];
- new stock MenuHandle[MAX_PLAYERS];
- forward MenuUpdate(playerid, menuid);
- forward OnPlayerSelectMenuItem(playerid, menuid, itemid);
- stock CreateCustomMenu(title[], Float:x, Float:y, color = -1347440641)
- {
- if (CustomMenuCount == MAX_CUSTOM_MENUS)
- return printf("The menu limit of %d has been reached. Please raise MAX_CUSTOM_MENUS to a higher number.", MAX_CUSTOM_MENUS);
-
- CustomMenuCount += 1;
-
- CustomMenuEnum[CustomMenuCount][menuTD] = TextDrawCreate(x, y, title);
- TextDrawBackgroundColor(CustomMenuEnum[CustomMenuCount][menuTD], 255);
- TextDrawFont(CustomMenuEnum[CustomMenuCount][menuTD], 3);
- TextDrawLetterSize(CustomMenuEnum[CustomMenuCount][menuTD], 0.430, 1.5);
- TextDrawColor(CustomMenuEnum[CustomMenuCount][menuTD], -1);
- TextDrawSetOutline(CustomMenuEnum[CustomMenuCount][menuTD], 1);
- TextDrawSetProportional(CustomMenuEnum[CustomMenuCount][menuTD], 1);
- TextDrawUseBox(CustomMenuEnum[CustomMenuCount][menuTD], 1);
- TextDrawBoxColor(CustomMenuEnum[CustomMenuCount][menuTD], color);
- TextDrawTextSize(CustomMenuEnum[CustomMenuCount][menuTD], 444.0, 0.0);
- format(CustomMenuEnum[CustomMenuCount][menuTitle], 64, title);
- CustomMenuEnum[CustomMenuCount][menuX] = x;
- CustomMenuEnum[CustomMenuCount][menuY] = y;
- CustomMenuY[CustomMenuCount] = 138.0;
- return CustomMenuCount;
- }
- stock AddCustomMenuItem(menuid, itemname[], color = -1347440641)
- {
- if (CustomMenuItemCount[menuid] == MAX_MENU_ITEMS)
- return printf("The menu item limit of %d has been reached. Please raise MAX_MENU_ITEMS to a higher number.", MAX_MENU_ITEMS);
-
- CustomMenuItemCount[menuid] += 1;
- CustomMenuY[menuid] += 15.0;
-
- CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]] = TextDrawCreate(CustomMenuEnum[menuid][menuX], CustomMenuY[menuid], itemname);
- TextDrawBackgroundColor(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 255);
- TextDrawFont(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 1);
- TextDrawLetterSize(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 0.469, 1.50);
- TextDrawColor(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], -1);
- TextDrawSetOutline(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 1);
- TextDrawSetProportional(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 1);
- TextDrawUseBox(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 1);
- TextDrawBoxColor(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], color);
- TextDrawTextSize(CustomMenuItemTextdraw[menuid][CustomMenuItemCount[menuid]], 444.0, 0.0);
-
- format(CustomMenuItems[menuid][CustomMenuItemCount[menuid]], 32, itemname);
- return 1;
- }
- stock ShowPlayerCustomMenu(playerid, menuid)
- {
- if (MenuHandle[playerid]) HidePlayerCustomMenu(playerid);
- TextDrawShowForPlayer(playerid, CustomMenuEnum[menuid][menuTD]);
- for (new i = 1; i <= CustomMenuItemCount[menuid]; i += 1)
- {
- if (i == 1)
- {
- TextDrawColor(CustomMenuItemTextdraw[menuid][i], 286392319);
- }
- else
- {
- TextDrawColor(CustomMenuItemTextdraw[menuid][i], -1);
- }
- TextDrawShowForPlayer(playerid, CustomMenuItemTextdraw[menuid][i]);
- }
- MenuItemHandle[playerid] = 1;
- MenuHandle[playerid] = menuid;
- TogglePlayerControllable(playerid, 0);
- return 1;
- }
- stock DestroyCustomMenu(menuid)
- {
- for (new i = 0; i < MAX_PLAYERS; i += 1)
- {
- if (MenuHandle[i] == menuid)
- {
- HidePlayerCustomMenu(i);
- }
- }
- TextDrawDestroy(CustomMenuEnum[menuid][menuTD]);
- for (new i = 1; i <= CustomMenuItemCount[menuid]; i += 1)
- {
- TextDrawDestroy(CustomMenuItemTextdraw[menuid][i]);
- }
- CustomMenuItemCount[menuid] = 0;
- CustomMenuCount -= 1;
- return 1;
- }
- stock menu_OnPlayerUpdate(playerid)
- {
- new
- keys,
- updown,
- leftright;
- GetPlayerKeys(playerid, keys, updown, leftright);
- if (updown > 0)
- {
- if (MenuItemHandle[playerid] == CustomMenuItemCount[MenuHandle[playerid]]) return 1;
- if (keys & KEY_SECONDARY_ATTACK) return 1;
- MenuItemHandle[playerid] += 1;
-
- TextDrawHideForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]-1]);
- TextDrawHideForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]]);
- TextDrawColor(CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]-1], -1);
- TextDrawColor(CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]], 286392319);
-
- TextDrawShowForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]-1]);
- TextDrawShowForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]]);
- }
- else if(updown < 0)
- {
- if (MenuItemHandle[playerid] == 1) return 1;
- if (keys & KEY_SECONDARY_ATTACK) return 1;
- MenuItemHandle[playerid] -= 1;
- TextDrawHideForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]+1]);
- TextDrawHideForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]]);
- TextDrawColor(CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]+1], -1);
- TextDrawColor(CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]], 286392319);
-
- TextDrawShowForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]+1]);
- TextDrawShowForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][MenuItemHandle[playerid]]);
- }
- return 1;
- }
- stock HidePlayerCustomMenu(playerid)
- {
- TextDrawHideForPlayer(playerid, CustomMenuEnum[MenuHandle[playerid]][menuTD]);
- for (new i = 1; i <= CustomMenuItemCount[MenuHandle[playerid]]; i += 1)
- {
- TextDrawHideForPlayer(playerid, CustomMenuItemTextdraw[MenuHandle[playerid]][i]);
- }
- MenuItemHandle[playerid] = 0;
- MenuHandle[playerid] = 0;
- TogglePlayerControllable(playerid, 1);
- return 1;
- }
- stock menu_OnPlayerDisconnect(playerid)
- {
- HidePlayerCustomMenu(playerid);
- return 1;
- }
- stock menu_OnFilterScriptExit()
- {
- for (new i = 1; i <= CustomMenuCount; i += 1)
- {
- DestroyCustomMenu(i);
- }
- return 1;
- }
- stock menu_OnGameModeExit()
- {
- return menu_OnFilterScriptExit();
- }
- stock menu_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- #pragma unused oldkeys
- if ((newkeys & KEY_SECONDARY_ATTACK) && (MenuHandle[playerid]))
- {
- if (funcidx("OnPlayerSelectMenuItem") != -1)
- {
- CallRemoteFunction("OnPlayerSelectMenuItem", "ddd", playerid, MenuHandle[playerid], MenuItemHandle[playerid]);
- }
- return 1;
- }
- return 1;
- }
- stock GetPlayerMenuID(playerid)
- {
- return MenuHandle[playerid];
- }
- stock GetPlayerItemID(playerid)
- {
- return MenuItemHandle[playerid];
- }
|