GammixSAMP

gmenus.inc R2 - By Gammix

May 24th, 2015
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.29 KB | None | 0 0
  1. /*
  2. GMenus Include (gmenus.inc)
  3. * I am good in textdraws and here i represent you my unique menus include.
  4. * Scheme similar to GTA SA menus but design relevant to GTA V!
  5. * And customizable per player!
  6.  
  7. Author: (creator)
  8. * Gammix
  9.  
  10. (c) Copyright 2015
  11. * This file is provided as is (no warranties).
  12. */
  13.  
  14. /*
  15. FUNCTIONS:
  16. native Menu_Create(title[], headercolor = -1);
  17. native Menu_IsValid(menuid);
  18. native Menu_Destroy(menuid);
  19. native Menu_AddItem(menuid, itemtext[]);
  20. native Menu_EditItem(menuid, itemid, itemtext[]);
  21. native Menu_EditTitle(menuid, newtitle[]);
  22. native Menu_Show(playerid, menuid, selectioncolor = 0x0000AAFF, bool:showitemid = true);
  23. native Menu_Hide(playerid);
  24. native _
  25. native GetPlayerMenuID(playerid);
  26. native GetPlayerMenuLisitemID(playerid);
  27.  
  28. CALLBACKS:
  29. public OnMenuResponse(playerid, menuid, response, listitem)
  30. */
  31.  
  32. #define MAX_G_MENUS 10 //maximum menus your script can have
  33. #define MAX_MENU_ITEMS 25 //maximum listitems a menu can have
  34. #define MAX_MENU_PAGE_ITEMS 10 //maximum lines/lisitems shown in a menu's single page
  35. #define INVALID_MENU_ID -1 //not to change
  36.  
  37. #define MENU_RESPONSE_UP 0 //when a player press KEY_UP and select the previous item
  38. #define MENU_RESPONSE_DOWN 1 //when a player press KEY_DOWN and select the next item
  39. #define MENU_RESPONSE_CLOSE 2 //when a player press KEY_SECONDARY_ATTACK or KEY_ENTER to exit the menu
  40. #define MENU_RESPONSE_SELECT 3 //when a player press KEY_SPRINT ot KEY_SPACE to select the respected item
  41.  
  42. #define MENU_SOUND_UP 1054 //sound heard when player go UP
  43. #define MENU_SOUND_DOWN 1054 //sound heard when player go DOWN
  44. #define MENU_SOUND_CLOSE 1084 //sound heard when player close menu
  45. #define MENU_SOUND_SELECT 1083 //sound heard when player select an item
  46.  
  47. enum PlayerMenuEnum
  48. {
  49. PM_MENUID,
  50. PM_LISTITEM,
  51. PM_LISTITEM_FIRST,
  52. PM_LISTITEM_LAST,
  53. PM_SELECTION_COLOR,
  54. PM_TICK,
  55. bool:PM_SHOW_ITEM_ID
  56. }
  57. static gPlayerMenu[MAX_PLAYERS][PlayerMenuEnum];
  58.  
  59. enum MenuEnum
  60. {
  61. bool:M_EXIST,
  62. M_HEADER[18],
  63. M_LISTITEMS,
  64. M_HEADER_COLOR,
  65. }
  66. static gMenu[MAX_G_MENUS][MenuEnum];
  67. static gMenuItems[MAX_G_MENUS][MAX_MENU_ITEMS][35];
  68.  
  69. static Text:gMenuGlobalTD[2];
  70. static PlayerText:gMenuPlayerItemsTD[MAX_PLAYERS][MAX_MENU_PAGE_ITEMS];
  71. static PlayerText:gMenuPlayerTD[MAX_PLAYERS][2];
  72.  
  73. //internal functions
  74. stock static MENU_iseven(num)
  75. {
  76. new r = (num % 2);
  77. if(r > 0) return true;
  78. return false;
  79. }
  80.  
  81. stock static MENU_isnegative(num)
  82. {
  83. if(num < 0) return true;
  84. return false;
  85. }
  86.  
  87. stock static MENU_SetTransparency(color, alpha = 0xFF)
  88. {
  89. static newcolor;
  90.  
  91. alpha = clamp(alpha, 0x00, 0xFF);
  92.  
  93. newcolor = (color & ~0xFF) | alpha;
  94. return newcolor;
  95. }
  96.  
  97. stock static Text:MENU_TextDrawAdd(Float:posX, Float:posY, string[], bgcolor, font, Float:lettersizeX, Float:lettersizeY, textcolor, allign = 0, outline = 1, bool:proportional = true, shadow = 1, bool:usebox = false, boxcolor = 0, Float:textsizeX = -1.0, Float:textsizeY = -1.0, model = 0, Float:rotX = 0.0, Float:rotY = 0.0, Float:rotZ = 0.0, Float:zoom = 1.0)
  98. {
  99. static Text:gTextDraw;
  100. gTextDraw = TextDrawCreate(posX, posY, string);
  101. TextDrawBackgroundColor(gTextDraw, bgcolor);
  102. TextDrawFont(gTextDraw, font);
  103. TextDrawLetterSize(gTextDraw, lettersizeX, lettersizeY);
  104. TextDrawColor(gTextDraw, textcolor);
  105. TextDrawAlignment(gTextDraw, allign);
  106. TextDrawSetOutline(gTextDraw, outline);
  107. TextDrawSetProportional(gTextDraw, proportional);
  108. TextDrawSetShadow(gTextDraw, shadow);
  109. TextDrawUseBox(gTextDraw, usebox);
  110. if(usebox) TextDrawBoxColor(gTextDraw, boxcolor);
  111. if(textsizeX != -1.0 && textsizeY != -1.0) TextDrawTextSize(gTextDraw, textsizeX, textsizeY);
  112. if(font == 5)
  113. {
  114. TextDrawSetPreviewModel(gTextDraw, model);
  115. TextDrawSetPreviewRot(gTextDraw, rotX, rotY, rotZ, zoom);
  116. }
  117. return gTextDraw;
  118. }
  119.  
  120. stock static PlayerText:MENU_PlayerTextDrawAdd(playerid, Float:posX, Float:posY, string[], bgcolor, font, Float:lettersizeX, Float:lettersizeY, textcolor, allign = 0, outline = 1, bool:proportional = true, shadow = 1, bool:usebox = false, boxcolor = 0, Float:textsizeX = -1.0, Float:textsizeY = -1.0, model = 0, Float:rotX = 0.0, Float:rotY = 0.0, Float:rotZ = 0.0, Float:zoom = 1.0, selectable = 0)
  121. {
  122. static PlayerText:gTextDraw;
  123. gTextDraw = CreatePlayerTextDraw(playerid, posX, posY, string);
  124. PlayerTextDrawBackgroundColor(playerid, gTextDraw, bgcolor);
  125. PlayerTextDrawFont(playerid, gTextDraw, font);
  126. PlayerTextDrawLetterSize(playerid, gTextDraw, lettersizeX, lettersizeY);
  127. PlayerTextDrawColor(playerid, gTextDraw, textcolor);
  128. PlayerTextDrawAlignment(playerid, gTextDraw, allign);
  129. PlayerTextDrawSetOutline(playerid, gTextDraw, outline);
  130. PlayerTextDrawSetProportional(playerid, gTextDraw, proportional);
  131. PlayerTextDrawSetShadow(playerid, gTextDraw, shadow);
  132. PlayerTextDrawUseBox(playerid, gTextDraw, usebox);
  133. if(usebox) PlayerTextDrawBoxColor(playerid, gTextDraw, boxcolor);
  134. if(textsizeX != -1.0 && textsizeY != -1.0) PlayerTextDrawTextSize(playerid, gTextDraw, textsizeX, textsizeY);
  135. if(font == 5)
  136. {
  137. PlayerTextDrawSetPreviewModel(playerid, gTextDraw, model);
  138. PlayerTextDrawSetPreviewRot(playerid, gTextDraw, rotX, rotY, rotZ, zoom);
  139. }
  140. PlayerTextDrawSetSelectable(playerid, gTextDraw, selectable);
  141. return gTextDraw;
  142. }
  143.  
  144. static Menu_CreateGlobalTDs()
  145. {
  146. gMenuGlobalTD[0] = MENU_TextDrawAdd(20.000000, 158.000000, "header", 255, 1, 0.000000, 3.000000, -1, 1, 0, true, 1, true, 1678379670, 150.000000, 0.000000);
  147. gMenuGlobalTD[1] = MENU_TextDrawAdd(20.000000, 191.000000, "Interaction Menu", 255, 1, 0.150000, 0.599999, -1, 1, 0, true, 1, true, 169090710, 150.000000, 0.000000);
  148. return true;
  149. }
  150.  
  151. static Menu_DestroyGlobalTDs()
  152. {
  153. TextDrawDestroy(gMenuGlobalTD[0]);
  154. TextDrawDestroy(gMenuGlobalTD[1]);
  155. return true;
  156. }
  157.  
  158. //Note: if you use this in a filterscript, please define "FILTERSCRIPT" in your script
  159. #if defined FILTERSCRIPT// if used in a filterscript
  160.  
  161. public OnFilterScriptInit()
  162. {
  163. Menu_CreateGlobalTDs();
  164. for(new i; i < MAX_G_MENUS; i++) gMenu[i][M_EXIST] = false;
  165.  
  166. return CallLocalFunction("MENU_OnFilterScriptInit", "");
  167. }
  168. #if defined _ALS_OnFilterScriptInit
  169. #undef OnFilterScriptInit
  170. #else
  171. #define _ALS_OnFilterScriptInit
  172. #endif
  173. #define OnFilterScriptInit MENU_OnFilterScriptInit
  174. forward MENU_OnFilterScriptInit();
  175.  
  176. public OnFilterScriptExit()
  177. {
  178. Menu_DestroyGlobalTDs();
  179.  
  180. return CallLocalFunction("MENU_OnFilterScriptExit", "");
  181. }
  182. #if defined _ALS_OnFilterScriptExit
  183. #undef OnFilterScriptExit
  184. #else
  185. #define _ALS_OnFilterScriptExit
  186. #endif
  187. #define OnFilterScriptExit MENU_OnFilterScriptExit
  188. forward MENU_OnFilterScriptExit();
  189.  
  190. #else// if used in a gamemode
  191.  
  192. public OnGameModeInit()
  193. {
  194. Menu_CreateGlobalTDs();
  195. for(new i; i < MAX_G_MENUS; i++) gMenu[i][M_EXIST] = false;
  196.  
  197. return CallLocalFunction("MENU_OnGameModeInit", "");
  198. }
  199. #if defined _ALS_OnGameModeInit
  200. #undef OnGameModeInit
  201. #else
  202. #define _ALS_OnGameModeInit
  203. #endif
  204. #define OnGameModeInit MENU_OnGameModeInit
  205. forward MENU_OnGameModeInit();
  206.  
  207. public OnGameModeExit()
  208. {
  209. Menu_DestroyGlobalTDs();
  210.  
  211. return CallLocalFunction("MENU_OnGameModeExit", "");
  212. }
  213. #if defined _ALS_OnGameModeExit
  214. #undef OnGameModeExit
  215. #else
  216. #define _ALS_OnGameModeExit
  217. #endif
  218. #define OnGameModeExit MENU_OnGameModeExit
  219. forward MENU_OnGameModeExit();
  220.  
  221. #endif
  222.  
  223. stock Menu_Create(title[], headercolor = -1)
  224. {
  225. for(new i; i < MAX_G_MENUS; i++)
  226. {
  227. if(! gMenu[i][M_EXIST])
  228. {
  229. gMenu[i][M_EXIST] = true;
  230. format(gMenu[i][M_HEADER], 18, title);
  231. gMenu[i][M_LISTITEMS] = 0;
  232. gMenu[i][M_HEADER_COLOR] = headercolor;
  233.  
  234. for(new x; x < MAX_MENU_ITEMS; x++) format(gMenuItems[i][x], 35, "");
  235. return i;
  236. }
  237. }
  238. return -1;
  239. }
  240.  
  241. stock Menu_IsValid(menuid)
  242. {
  243. return gMenu[menuid][M_EXIST];
  244. }
  245.  
  246. stock Menu_Destroy(menuid)
  247. {
  248. gMenu[menuid][M_EXIST] = false;
  249. for(new i; i < MAX_PLAYERS; i++)
  250. {
  251. if( IsPlayerConnected(i) &&
  252. GetPlayerMenuID(i) == menuid)
  253. {
  254. Menu_Hide(i);
  255. }
  256. }
  257. return true;
  258. }
  259.  
  260. stock Menu_AddItem(menuid, itemtext[])
  261. {
  262. new index = (gMenu[menuid][M_LISTITEMS] + 1);
  263.  
  264. if(index > MAX_MENU_ITEMS) return -1;
  265.  
  266. index -= 1;
  267. format(gMenuItems[menuid][index], 35, itemtext);
  268. gMenu[menuid][M_LISTITEMS] += 1;
  269. return index;
  270. }
  271.  
  272. stock Menu_EditItem(menuid, itemid, itemtext[])
  273. {
  274. if(itemid > MAX_MENU_ITEMS) return false;
  275.  
  276. format(gMenuItems[menuid][itemid], 35, itemtext);
  277. for(new i; i < MAX_PLAYERS; i++)
  278. {
  279. if( IsPlayerConnected(i) &&
  280. GetPlayerMenuID(i) == menuid)
  281. {
  282. if(gPlayerMenu[i][PM_LISTITEM_FIRST] <= itemid <= gPlayerMenu[i][PM_LISTITEM_LAST])
  283. {
  284. new index = (itemid - gPlayerMenu[i][PM_LISTITEM_FIRST]);
  285. PlayerTextDrawSetString(i, gMenuPlayerItemsTD[i][index], itemtext);
  286. }
  287. }
  288. }
  289. return true;
  290. }
  291.  
  292. stock Menu_EditTitle(menuid, newtitle[])
  293. {
  294. format(gMenu[menuid][M_HEADER], 18, newtitle);
  295. for(new i; i < MAX_PLAYERS; i++)
  296. {
  297. if( IsPlayerConnected(i) &&
  298. GetPlayerMenuID(i) == menuid)
  299. {
  300. PlayerTextDrawSetString(i, gMenuPlayerTD[i][0], newtitle);
  301. }
  302. }
  303. return true;
  304. }
  305.  
  306. stock Menu_Show(playerid, menuid, selectioncolor = 0x0000AAFF, bool:showitemid = true)
  307. {
  308. if(! Menu_IsValid(menuid)) return false;
  309.  
  310. if(gMenu[menuid][M_LISTITEMS] < 1) return false;
  311.  
  312. if(GetPlayerMenuID(playerid) != INVALID_MENU_ID) Menu_Hide(playerid);
  313.  
  314. gPlayerMenu[playerid][PM_MENUID] = menuid;
  315. gPlayerMenu[playerid][PM_LISTITEM] = 0;
  316. gPlayerMenu[playerid][PM_LISTITEM_FIRST] = 0;
  317. gPlayerMenu[playerid][PM_SELECTION_COLOR] = selectioncolor;
  318. gPlayerMenu[playerid][PM_SHOW_ITEM_ID] = showitemid;
  319.  
  320. TextDrawColor(gMenuGlobalTD[0], gMenu[menuid][M_HEADER_COLOR]);
  321. TextDrawShowForPlayer(playerid, gMenuGlobalTD[0]);
  322.  
  323. new Float:MENU_BASE_X = 20.000000;
  324. new Float:MENU_BASE_Y = 202.000000;
  325. if(! showitemid)
  326. {
  327. MENU_BASE_X = 20.000000;
  328. MENU_BASE_Y = 191.000000;
  329. }
  330.  
  331. for(new i = 0; i < MAX_MENU_PAGE_ITEMS; i++)
  332. {
  333. if(i > gMenu[menuid][M_LISTITEMS]) break;
  334. if(! strlen(gMenuItems[menuid][i])) continue;
  335. if(MENU_iseven(i))
  336. {
  337. gMenuPlayerItemsTD[playerid][i] = MENU_PlayerTextDrawAdd(playerid, MENU_BASE_X, MENU_BASE_Y + (i * 10), gMenuItems[menuid][i], 255, 1, 0.150000, 0.599999, -1, 1, 0, true, 1, true, 150, 150.000000, 0.000000);
  338. if(i == 0) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][i], MENU_SetTransparency(selectioncolor, 150));
  339. }
  340. else
  341. {
  342. gMenuPlayerItemsTD[playerid][i] = MENU_PlayerTextDrawAdd(playerid, MENU_BASE_X, MENU_BASE_Y + (i * 10), gMenuItems[menuid][i], 255, 1, 0.150000, 0.599999, -1, 1, 0, true, 1, true, 100, 150.000000, 0.000000);
  343. if(i == 0) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][i], MENU_SetTransparency(selectioncolor, 100));
  344. }
  345. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][i]);
  346. gPlayerMenu[playerid][PM_LISTITEM_LAST] = i;
  347. }
  348.  
  349. gMenuPlayerTD[playerid][0] = MENU_PlayerTextDrawAdd(playerid, 83.000000, 162.000000, gMenu[menuid][M_HEADER], 0, 1, 0.470000, 1.900000, -1, 2, 1, true);
  350. PlayerTextDrawShow(playerid, gMenuPlayerTD[playerid][0]);
  351.  
  352. if(showitemid)
  353. {
  354. TextDrawShowForPlayer(playerid, gMenuGlobalTD[1]);
  355.  
  356. new menustr[10];
  357. format(menustr, sizeof(menustr), "1/%i", gMenu[menuid][M_LISTITEMS]);
  358. gMenuPlayerTD[playerid][1] = MENU_PlayerTextDrawAdd(playerid, 149.000000, 189.000000, menustr, 255, 1, 0.170000, 0.800000, -1, 3, 0, true);
  359. PlayerTextDrawShow(playerid, gMenuPlayerTD[playerid][1]);
  360. }
  361. return true;
  362. }
  363.  
  364. stock Menu_Hide(playerid)
  365. {
  366. if(GetPlayerMenuID(playerid) == INVALID_MENU_ID) return false;
  367.  
  368. TextDrawHideForPlayer(playerid, gMenuGlobalTD[0]);
  369.  
  370. for(new i = 0; i < MAX_MENU_PAGE_ITEMS; i++) PlayerTextDrawHide(playerid, gMenuPlayerItemsTD[playerid][i]), PlayerTextDrawDestroy(playerid, gMenuPlayerItemsTD[playerid][i]);
  371.  
  372. PlayerTextDrawHide(playerid, gMenuPlayerTD[playerid][0]);
  373. PlayerTextDrawDestroy(playerid, gMenuPlayerTD[playerid][0]);
  374.  
  375. if(gPlayerMenu[playerid][PM_SHOW_ITEM_ID])
  376. {
  377. TextDrawHideForPlayer(playerid, gMenuGlobalTD[1]);
  378.  
  379. PlayerTextDrawHide(playerid, gMenuPlayerTD[playerid][1]);
  380. PlayerTextDrawDestroy(playerid, gMenuPlayerTD[playerid][1]);
  381. }
  382.  
  383. gPlayerMenu[playerid][PM_MENUID] = INVALID_MENU_ID;
  384. gPlayerMenu[playerid][PM_LISTITEM] = 0;
  385. gPlayerMenu[playerid][PM_LISTITEM_FIRST] = 0;
  386. gPlayerMenu[playerid][PM_LISTITEM_LAST] = 0;
  387. gPlayerMenu[playerid][PM_SELECTION_COLOR] = -1;
  388. gPlayerMenu[playerid][PM_TICK] = 0;
  389. gPlayerMenu[playerid][PM_SHOW_ITEM_ID] = false;
  390. return true;
  391. }
  392.  
  393. stock GetPlayerMenuID(playerid)
  394. {
  395. return gPlayerMenu[playerid][PM_MENUID];
  396. }
  397.  
  398. stock GetPlayerMenuLisitemID(playerid)
  399. {
  400. return gPlayerMenu[playerid][PM_LISTITEM];
  401. }
  402.  
  403. public OnPlayerConnect(playerid)
  404. {
  405. gPlayerMenu[playerid][PM_MENUID] = INVALID_MENU_ID;
  406. gPlayerMenu[playerid][PM_LISTITEM] = 0;
  407. gPlayerMenu[playerid][PM_LISTITEM_FIRST] = 0;
  408. gPlayerMenu[playerid][PM_LISTITEM_LAST] = 0;
  409. gPlayerMenu[playerid][PM_SELECTION_COLOR] = -1;
  410. gPlayerMenu[playerid][PM_TICK] = GetTickCount();
  411.  
  412. return CallLocalFunction("MENU_OnPlayerConnect", "i", playerid);
  413. }
  414. #if defined _ALS_OnPlayerConnect
  415. #undef OnPlayerConnect
  416. #else
  417. #define _ALS_OnPlayerConnect
  418. #endif
  419. #define OnPlayerConnect MENU_OnPlayerConnect
  420. forward MENU_OnPlayerConnect(playerid);
  421.  
  422. public OnPlayerUpdate(playerid)
  423. {
  424. if(GetPlayerMenuID(playerid) != INVALID_MENU_ID)
  425. {
  426. new keys, updown, leftright;
  427. GetPlayerKeys(playerid, keys, updown, leftright);
  428.  
  429. if(updown == KEY_DOWN)
  430. {
  431. // only allow new selection every ~200 ms
  432. if((GetTickCount() - gPlayerMenu[playerid][PM_TICK]) < 200) return 1;
  433. gPlayerMenu[playerid][PM_TICK] = GetTickCount();
  434.  
  435. new index = (gPlayerMenu[playerid][PM_LISTITEM] + 1);
  436.  
  437. //if the player have reached the end of list/menu; Push the selection from begining
  438. if(index > (gMenu[GetPlayerMenuID(playerid)][M_LISTITEMS] - 1))
  439. {
  440. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_DOWN, 0))
  441. {
  442. gPlayerMenu[playerid][PM_LISTITEM] = 0;
  443. gPlayerMenu[playerid][PM_LISTITEM_FIRST] = 0;
  444. gPlayerMenu[playerid][PM_LISTITEM_LAST] = (0 + MAX_MENU_PAGE_ITEMS);
  445.  
  446. PlayerPlaySound(playerid, MENU_SOUND_UP, 0.0, 0.0, 0.0);
  447. }
  448. else return 1;
  449. }
  450. //if the player have reached the end of page; push the player to next page!
  451. else if(index > gPlayerMenu[playerid][PM_LISTITEM_LAST])
  452. {
  453. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_DOWN, (gPlayerMenu[playerid][PM_LISTITEM_LAST] + 1)))
  454. {
  455. gPlayerMenu[playerid][PM_LISTITEM] = (gPlayerMenu[playerid][PM_LISTITEM_LAST] + 1);
  456. gPlayerMenu[playerid][PM_LISTITEM_FIRST] = gPlayerMenu[playerid][PM_LISTITEM];
  457. gPlayerMenu[playerid][PM_LISTITEM_LAST] = (gPlayerMenu[playerid][PM_LISTITEM_FIRST] + MAX_MENU_PAGE_ITEMS);
  458.  
  459. PlayerPlaySound(playerid, MENU_SOUND_UP, 0.0, 0.0, 0.0);
  460. }
  461. else return 1;
  462. }
  463. //if on the same list but requesting for next item; then highlight the next item !
  464. else
  465. {
  466. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_DOWN, (gPlayerMenu[playerid][PM_LISTITEM] + 1)))
  467. {
  468. index = (gPlayerMenu[playerid][PM_LISTITEM] - gPlayerMenu[playerid][PM_LISTITEM_FIRST]);
  469.  
  470. if(MENU_iseven(index)) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 150);
  471. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 100);
  472. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][index]);
  473.  
  474. gPlayerMenu[playerid][PM_LISTITEM] += 1;//+
  475.  
  476. index = (gPlayerMenu[playerid][PM_LISTITEM] - gPlayerMenu[playerid][PM_LISTITEM_FIRST]);
  477.  
  478. if(gPlayerMenu[playerid][PM_SHOW_ITEM_ID])
  479. {
  480. new menustr[10];
  481. format(menustr, sizeof(menustr), "%i/%i", (gPlayerMenu[playerid][PM_LISTITEM] + 1), gMenu[GetPlayerMenuID(playerid)][M_LISTITEMS]);
  482. PlayerTextDrawSetString(playerid, gMenuPlayerTD[playerid][1], menustr);
  483. }
  484.  
  485. if(MENU_iseven(index)) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 150));
  486. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 100));
  487. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][index]);
  488.  
  489. PlayerPlaySound(playerid, MENU_SOUND_UP, 0.0, 0.0, 0.0);
  490. }
  491. //end
  492. return 1;
  493. }
  494.  
  495. //if the first 2 conditons apply (any one)
  496. for(new i = gPlayerMenu[playerid][PM_LISTITEM]; i < (gPlayerMenu[playerid][PM_LISTITEM] + MAX_MENU_PAGE_ITEMS); i++)
  497. {
  498. index = (i - gPlayerMenu[playerid][PM_LISTITEM_FIRST]);
  499.  
  500. if(i > gMenu[GetPlayerMenuID(playerid)][M_LISTITEMS]) PlayerTextDrawHide(playerid, gMenuPlayerItemsTD[playerid][index]);
  501. else
  502. {
  503. PlayerTextDrawSetString(playerid, gMenuPlayerItemsTD[playerid][index], gMenuItems[GetPlayerMenuID(playerid)][i]);
  504. if(MENU_iseven(index))
  505. {
  506. if(i == gPlayerMenu[playerid][PM_LISTITEM]) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 150));
  507. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 150);
  508. }
  509. else
  510. {
  511. if(i == gPlayerMenu[playerid][PM_LISTITEM]) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 100));
  512. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 100);
  513. }
  514. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][index]);
  515.  
  516. if(gPlayerMenu[playerid][PM_SHOW_ITEM_ID])
  517. {
  518. new menustr[10];
  519. format(menustr, sizeof(menustr), "%i/%i", (gPlayerMenu[playerid][PM_LISTITEM] + 1), gMenu[GetPlayerMenuID(playerid)][M_LISTITEMS]);
  520. PlayerTextDrawSetString(playerid, gMenuPlayerTD[playerid][1], menustr);
  521. }
  522.  
  523. gPlayerMenu[playerid][PM_LISTITEM_LAST] = i;
  524. }
  525. }
  526. }
  527. else if(updown == KEY_UP)
  528. {
  529. // only allow new selection every ~200 ms
  530. if((GetTickCount() - gPlayerMenu[playerid][PM_TICK]) < 200) return 1;
  531. gPlayerMenu[playerid][PM_TICK] = GetTickCount();
  532.  
  533. new index = (gPlayerMenu[playerid][PM_LISTITEM] - 1);
  534.  
  535. //if the player have reached the first item of first page, then stop updating menu!
  536. if(MENU_isnegative(index))
  537. {
  538. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_UP, gPlayerMenu[playerid][PM_LISTITEM]))
  539. {
  540. PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
  541. }
  542. else return 1;
  543. return 1;
  544. }
  545. //if the player have reached the first item of page; push the player to previous page!
  546. else if(index < gPlayerMenu[playerid][PM_LISTITEM_FIRST])
  547. {
  548. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_UP, (gPlayerMenu[playerid][PM_LISTITEM_FIRST] - 1)))
  549. {
  550. gPlayerMenu[playerid][PM_LISTITEM] = (gPlayerMenu[playerid][PM_LISTITEM_FIRST] - 1);
  551. gPlayerMenu[playerid][PM_LISTITEM_FIRST] = ((gPlayerMenu[playerid][PM_LISTITEM] + 1) - MAX_MENU_PAGE_ITEMS);
  552. gPlayerMenu[playerid][PM_LISTITEM_LAST] = gPlayerMenu[playerid][PM_LISTITEM];
  553.  
  554. PlayerPlaySound(playerid, MENU_SOUND_DOWN, 0.0, 0.0, 0.0);
  555. }
  556. }
  557. //if on the same list but requesting for next item; then highlight the next item !
  558. else
  559. {
  560. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_UP, (gPlayerMenu[playerid][PM_LISTITEM] - 1)))
  561. {
  562. index = (gPlayerMenu[playerid][PM_LISTITEM] - gPlayerMenu[playerid][PM_LISTITEM_FIRST]);
  563.  
  564. if(MENU_iseven(index)) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 150);
  565. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 100);
  566. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][index]);
  567.  
  568. gPlayerMenu[playerid][PM_LISTITEM] -= 1;//-
  569.  
  570. index = (gPlayerMenu[playerid][PM_LISTITEM] - gPlayerMenu[playerid][PM_LISTITEM_FIRST]);
  571.  
  572. if(gPlayerMenu[playerid][PM_SHOW_ITEM_ID])
  573. {
  574. new menustr[10];
  575. format(menustr, sizeof(menustr), "%i/%i", (gPlayerMenu[playerid][PM_LISTITEM] + 1), gMenu[GetPlayerMenuID(playerid)][M_LISTITEMS]);
  576. PlayerTextDrawSetString(playerid, gMenuPlayerTD[playerid][1], menustr);
  577. }
  578.  
  579. if(MENU_iseven(index)) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 150));
  580. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 100));
  581. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][index]);
  582.  
  583. PlayerPlaySound(playerid, MENU_SOUND_DOWN, 0.0, 0.0, 0.0);
  584. }
  585. //end
  586. return 1;
  587. }
  588.  
  589. //if the first conditon apply (any one)
  590. for(new i = gPlayerMenu[playerid][PM_LISTITEM]; i > (gPlayerMenu[playerid][PM_LISTITEM] - MAX_MENU_PAGE_ITEMS); i--)
  591. {
  592. index = (i - gPlayerMenu[playerid][PM_LISTITEM_FIRST]);
  593.  
  594. PlayerTextDrawSetString(playerid, gMenuPlayerItemsTD[playerid][index], gMenuItems[GetPlayerMenuID(playerid)][i]);
  595. if(MENU_iseven(index))
  596. {
  597. if(i == gPlayerMenu[playerid][PM_LISTITEM]) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 150));
  598. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 150);
  599. }
  600. else
  601. {
  602. if(i == gPlayerMenu[playerid][PM_LISTITEM]) PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], MENU_SetTransparency(gPlayerMenu[playerid][PM_SELECTION_COLOR], 100));
  603. else PlayerTextDrawBoxColor(playerid, gMenuPlayerItemsTD[playerid][index], 100);
  604. }
  605. PlayerTextDrawShow(playerid, gMenuPlayerItemsTD[playerid][index]);
  606.  
  607. if(gPlayerMenu[playerid][PM_SHOW_ITEM_ID])
  608. {
  609. new menustr[10];
  610. format(menustr, sizeof(menustr), "%i/%i", (gPlayerMenu[playerid][PM_LISTITEM] + 1), gMenu[GetPlayerMenuID(playerid)][M_LISTITEMS]);
  611. PlayerTextDrawSetString(playerid, gMenuPlayerTD[playerid][1], menustr);
  612. }
  613. }
  614. }
  615.  
  616. if(keys == KEY_SECONDARY_ATTACK)
  617. {
  618. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_CLOSE, gPlayerMenu[playerid][PM_LISTITEM]))
  619. {
  620. Menu_Hide(playerid);
  621. PlayerPlaySound(playerid, MENU_SOUND_CLOSE, 0.0, 0.0, 0.0);
  622. }
  623. }
  624. else if(keys == KEY_SPRINT)
  625. {
  626. if(CallLocalFunction("OnMenuResponse", "iiii", playerid, GetPlayerMenuID(playerid), MENU_RESPONSE_SELECT, gPlayerMenu[playerid][PM_LISTITEM]))
  627. {
  628. Menu_Hide(playerid);
  629. PlayerPlaySound(playerid, MENU_SOUND_SELECT, 0.0, 0.0, 0.0);
  630. }
  631. }
  632. }
  633. return CallLocalFunction("MENU_OnPlayerUpdate", "i", playerid);
  634. }
  635. #if defined _ALS_OnPlayerUpdate
  636. #undef OnPlayerUpdate
  637. #else
  638. #define _ALS_OnPlayerUpdate
  639. #endif
  640. #define OnPlayerUpdate MENU_OnPlayerUpdate
  641. forward MENU_OnPlayerUpdate(playerid);
  642.  
  643. forward OnMenuResponse(playerid, menuid, response, listitem);
Advertisement
Add Comment
Please, Sign In to add comment