GammixSAMP

gmenus.inc R1 - By Gammix

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