PreviewModelDialog.inc 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260
  1. #if defined previewmodel_dialog_included
  2. #endinput
  3. #endif
  4. #define previewmodel_dialog_included
  5. /**************************************/
  6. // PreviewModelDialog.inc - v4.4 - Last Updated: 8 Feb, 2018 - By Gammix
  7. /***************************************/
  8. // by BigETI
  9. #include <memory.inc>
  10. // definitions
  11. #if !defined MAX_DIALOG_PREVIEW_MODELS
  12. #define MAX_DIALOG_PREVIEW_MODELS 350
  13. #endif
  14. #if !defined MAX_DIALOG_PREVIEW_TEXTSIZE
  15. #define MAX_DIALOG_PREVIEW_TEXTSIZE 128
  16. #endif
  17. #define DIALOG_STYLE_PREVIEW_MODEL 6 // new dialog id definition
  18. #define DIALOG_STYLE_PREVMODEL DIALOG_STYLE_PREVIEW_MODEL
  19. #define MAX_DIALOG_PREVIEW_ROWS 2
  20. #define MAX_DIALOG_PREVIEW_COLUMNS 6
  21. #define DIALOG_PREVIEW_HORIZONTAL_GAP 56.5
  22. #define DIALOG_PREVIEW_VERTICAL_GAP 63.5
  23. #define DIALOG_PREVIEW_SELECT_COLOR 0xFF0000FF
  24. #define DIALOG_PREVIEW_UNSELECT_COLOR 0x464646FF
  25. #define SCROLL_BAR_UP_TEXTDRAW Prev@FrameTD[4]
  26. #define SCROLL_BAR_DOWN_TEXTDRAW Prev@FrameTD[6]
  27. #define LEFT_BUTTON_TEXTDRAW Prev@LeftButtonTD[0]
  28. #define RIGHT_BUTTON_TEXTDRAW Prev@RightButtonTD[0]
  29. #define CENTER_BUTTON_TEXTDRAW Prev@CenterButtonTD[0]
  30. #define LISTITEM_TEXTDRAW<%0> Prev@ModelTD[%0][0]
  31. #define LISTITEM_ROTATE_LEFT_TEXTDRAW<%0> Prev@ModelTD[%0][2]
  32. #define LISTITEM_ROTATE_RIGHT_TEXTDRAW<%0> Prev@ModelTD[%0][3]
  33. // variables
  34. static Text:Prev@FrameTD[8];
  35. static Text:Prev@LeftButtonTD[2];
  36. static Text:Prev@RightButtonTD[2];
  37. static Text:Prev@CenterButtonTD[2];
  38. static Text:Prev@ModelTD[MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS][4];
  39. static PlayerText:Prev@HeaderPTD[MAX_PLAYERS];
  40. static PlayerText:Prev@LeftButtonPTD[MAX_PLAYERS];
  41. static PlayerText:Prev@RightButtonPTD[MAX_PLAYERS];
  42. static PlayerText:Prev@CenterButtonPTD[MAX_PLAYERS];
  43. static PlayerText:Prev@PageNumberPTD[MAX_PLAYERS];
  44. static PlayerText:Prev@ScrollBarPTD[MAX_PLAYERS];
  45. static PlayerText:Prev@ModelTextPTD[MAX_PLAYERS][MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS][2];
  46. static bool:Prev@CancelSelection[MAX_PLAYERS];
  47. static Prev@PlayerDialogID[MAX_PLAYERS];
  48. static Prev@PlayerDialogListitem[MAX_PLAYERS];
  49. static Prev@PlayerDialogNumListitems[MAX_PLAYERS];
  50. static Prev@PlayerDialogPage[MAX_PLAYERS];
  51. static Prev@PlayerDialogTickCount[MAX_PLAYERS];
  52. static Pointer:Prev@PlayerModelsPointer[MAX_PLAYERS];
  53. static Pointer:Prev@PlayerModelRotsPointer[MAX_PLAYERS][4];
  54. static Pointer:Prev@PlayerModelNamesPointer[MAX_PLAYERS][MAX_DIALOG_PREVIEW_MODELS];
  55. // public function decleration
  56. ShowPreviewModelDialog(playerid, dialogid, caption[], models[], labels[][], button1[], button2[], size = sizeof models);
  57. SetDialogPreviewRotation(playerid, listitem, Float:rx, Float:ry, Float:rz, Float:zoom);
  58. // internal functions
  59. static Prev_GetNumPages(playerid) {
  60. new SIZE = Prev@PlayerDialogNumListitems[playerid];
  61. new PAGESIZE = (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS);
  62. return ((SIZE / PAGESIZE) + ((SIZE % PAGESIZE) ? 1 : 0));
  63. }
  64. static Prev_CancelSelectTextDraw(playerid) {
  65. Prev@CancelSelection[playerid] = true;
  66. return CancelSelectTextDraw(playerid);
  67. }
  68. static Prev_CreateTextDraws() {
  69. /*
  70. * FRAME
  71. */
  72. Prev@FrameTD[0] = TextDrawCreate(144.0000, 154.0000, "CONTENT_BOX");
  73. TextDrawFont(Prev@FrameTD[0], 2);
  74. TextDrawLetterSize(Prev@FrameTD[0], 0.0000, 18.2000);
  75. TextDrawColor(Prev@FrameTD[0], -1);
  76. TextDrawSetShadow(Prev@FrameTD[0], 0);
  77. TextDrawSetOutline(Prev@FrameTD[0], 0);
  78. TextDrawBackgroundColor(Prev@FrameTD[0], 255);
  79. TextDrawSetProportional(Prev@FrameTD[0], 1);
  80. TextDrawUseBox(Prev@FrameTD[0], 1);
  81. TextDrawBoxColor(Prev@FrameTD[0], 150);
  82. TextDrawTextSize(Prev@FrameTD[0], 501.0000, 0.0000);
  83. Prev@FrameTD[1] = TextDrawCreate(146.5000, 155.5000, "LD_SPAC:WHITE");
  84. TextDrawFont(Prev@FrameTD[1], 4);
  85. TextDrawLetterSize(Prev@FrameTD[1], 0.0000, 18.2000);
  86. TextDrawColor(Prev@FrameTD[1], -1);
  87. TextDrawSetShadow(Prev@FrameTD[1], 0);
  88. TextDrawSetOutline(Prev@FrameTD[1], 0);
  89. TextDrawBackgroundColor(Prev@FrameTD[1], 255);
  90. TextDrawSetProportional(Prev@FrameTD[1], 1);
  91. TextDrawUseBox(Prev@FrameTD[1], 1);
  92. TextDrawBoxColor(Prev@FrameTD[1], 150);
  93. TextDrawTextSize(Prev@FrameTD[1], 351.5000, 130.0000);
  94. Prev@FrameTD[2] = TextDrawCreate(147.0000, 156.0000, "LD_SPAC:BLACK");
  95. TextDrawFont(Prev@FrameTD[2], 4);
  96. TextDrawLetterSize(Prev@FrameTD[2], 0.0000, 18.2000);
  97. TextDrawColor(Prev@FrameTD[2], -1);
  98. TextDrawSetShadow(Prev@FrameTD[2], 0);
  99. TextDrawSetOutline(Prev@FrameTD[2], 0);
  100. TextDrawBackgroundColor(Prev@FrameTD[2], 255);
  101. TextDrawSetProportional(Prev@FrameTD[2], 1);
  102. TextDrawUseBox(Prev@FrameTD[2], 1);
  103. TextDrawBoxColor(Prev@FrameTD[2], 150);
  104. TextDrawTextSize(Prev@FrameTD[2], 340.5000, 129.0000);
  105. Prev@FrameTD[3] = TextDrawCreate(488.0000, 156.0000, "LD_SPAC:BLACK");
  106. TextDrawFont(Prev@FrameTD[3], 4);
  107. TextDrawLetterSize(Prev@FrameTD[3], 0.0000, 18.2000);
  108. TextDrawColor(Prev@FrameTD[3], -1);
  109. TextDrawSetShadow(Prev@FrameTD[3], 0);
  110. TextDrawSetOutline(Prev@FrameTD[3], 0);
  111. TextDrawBackgroundColor(Prev@FrameTD[3], 255);
  112. TextDrawSetProportional(Prev@FrameTD[3], 1);
  113. TextDrawUseBox(Prev@FrameTD[3], 1);
  114. TextDrawBoxColor(Prev@FrameTD[3], 150);
  115. TextDrawTextSize(Prev@FrameTD[3], 9.5000, 129.0000);
  116. // button for scrolling up
  117. Prev@FrameTD[4] = TextDrawCreate(488.0000, 156.0000, "LD_POOL:BALL");
  118. TextDrawFont(Prev@FrameTD[4], 4);
  119. TextDrawLetterSize(Prev@FrameTD[4], 0.0000, 18.2000);
  120. TextDrawColor(Prev@FrameTD[4], -1);
  121. TextDrawSetShadow(Prev@FrameTD[4], 0);
  122. TextDrawSetOutline(Prev@FrameTD[4], 0);
  123. TextDrawBackgroundColor(Prev@FrameTD[4], 255);
  124. TextDrawSetProportional(Prev@FrameTD[4], 1);
  125. TextDrawUseBox(Prev@FrameTD[4], 1);
  126. TextDrawBoxColor(Prev@FrameTD[4], 150);
  127. TextDrawTextSize(Prev@FrameTD[4], 9.5000, 9.5000);
  128. TextDrawSetSelectable(Prev@FrameTD[4], 1);
  129. //
  130. Prev@FrameTD[5] = TextDrawCreate(489.0000, 156.5000, "LD_BEAT:UP");
  131. TextDrawFont(Prev@FrameTD[5], 4);
  132. TextDrawLetterSize(Prev@FrameTD[5], 0.0000, 18.2000);
  133. TextDrawColor(Prev@FrameTD[5], 255);
  134. TextDrawSetShadow(Prev@FrameTD[5], 0);
  135. TextDrawSetOutline(Prev@FrameTD[5], 0);
  136. TextDrawBackgroundColor(Prev@FrameTD[5], 255);
  137. TextDrawSetProportional(Prev@FrameTD[5], 1);
  138. TextDrawUseBox(Prev@FrameTD[5], 1);
  139. TextDrawBoxColor(Prev@FrameTD[5], 150);
  140. TextDrawTextSize(Prev@FrameTD[5], 7.5000, 7.5000);
  141. // button for scrolling down
  142. Prev@FrameTD[6] = TextDrawCreate(488.0000, 275.5000, "LD_POOL:BALL");
  143. TextDrawFont(Prev@FrameTD[6], 4);
  144. TextDrawLetterSize(Prev@FrameTD[6], 0.0000, 18.2000);
  145. TextDrawColor(Prev@FrameTD[6], -1);
  146. TextDrawSetShadow(Prev@FrameTD[6], 0);
  147. TextDrawSetOutline(Prev@FrameTD[6], 0);
  148. TextDrawBackgroundColor(Prev@FrameTD[6], 255);
  149. TextDrawSetProportional(Prev@FrameTD[6], 1);
  150. TextDrawUseBox(Prev@FrameTD[6], 1);
  151. TextDrawBoxColor(Prev@FrameTD[6], 150);
  152. TextDrawTextSize(Prev@FrameTD[6], 9.5000, 9.5000);
  153. TextDrawSetSelectable(Prev@FrameTD[6], 1);
  154. //
  155. Prev@FrameTD[7] = TextDrawCreate(489.0000, 277.0000, "LD_BEAT:DOWN");
  156. TextDrawFont(Prev@FrameTD[7], 4);
  157. TextDrawLetterSize(Prev@FrameTD[7], 0.0000, 18.2000);
  158. TextDrawColor(Prev@FrameTD[7], 255);
  159. TextDrawSetShadow(Prev@FrameTD[7], 0);
  160. TextDrawSetOutline(Prev@FrameTD[7], 0);
  161. TextDrawBackgroundColor(Prev@FrameTD[7], 255);
  162. TextDrawSetProportional(Prev@FrameTD[7], 1);
  163. TextDrawUseBox(Prev@FrameTD[7], 1);
  164. TextDrawBoxColor(Prev@FrameTD[7], 150);
  165. TextDrawTextSize(Prev@FrameTD[7], 7.5000, 7.5000);
  166. /*
  167. * LEFT BUTTON (button1)
  168. */
  169. // left button for response type "1"
  170. Prev@LeftButtonTD[0] = TextDrawCreate(260.0000, 293.0000, "LD_SPAC:WHITE");
  171. TextDrawFont(Prev@LeftButtonTD[0], 4);
  172. TextDrawLetterSize(Prev@LeftButtonTD[0], 0.5000, 1.0000);
  173. TextDrawColor(Prev@LeftButtonTD[0], -1);
  174. TextDrawSetShadow(Prev@LeftButtonTD[0], 0);
  175. TextDrawSetOutline(Prev@LeftButtonTD[0], 0);
  176. TextDrawBackgroundColor(Prev@LeftButtonTD[0], 255);
  177. TextDrawSetProportional(Prev@LeftButtonTD[0], 1);
  178. TextDrawTextSize(Prev@LeftButtonTD[0], 55.0000, 18.0000);
  179. TextDrawSetSelectable(Prev@LeftButtonTD[0], 1);
  180. //
  181. Prev@LeftButtonTD[1] = TextDrawCreate(260.5000, 293.5000, "LD_SPAC:BLACK");
  182. TextDrawFont(Prev@LeftButtonTD[1], 4);
  183. TextDrawLetterSize(Prev@LeftButtonTD[1], 0.5000, 1.0000);
  184. TextDrawColor(Prev@LeftButtonTD[1], -1);
  185. TextDrawSetShadow(Prev@LeftButtonTD[1], 0);
  186. TextDrawSetOutline(Prev@LeftButtonTD[1], 0);
  187. TextDrawBackgroundColor(Prev@LeftButtonTD[1], 255);
  188. TextDrawSetProportional(Prev@LeftButtonTD[1], 1);
  189. TextDrawTextSize(Prev@LeftButtonTD[1], 54.0000, 17.0000);
  190. /*
  191. * RIGHT BUTTON (button2)
  192. */
  193. // right button for response type "0"
  194. Prev@RightButtonTD[0] = TextDrawCreate(325.0000, 293.0000, "LD_SPAC:WHITE");
  195. TextDrawFont(Prev@RightButtonTD[0], 4);
  196. TextDrawLetterSize(Prev@RightButtonTD[0], 0.5000, 1.0000);
  197. TextDrawColor(Prev@RightButtonTD[0], -1);
  198. TextDrawSetShadow(Prev@RightButtonTD[0], 0);
  199. TextDrawSetOutline(Prev@RightButtonTD[0], 0);
  200. TextDrawBackgroundColor(Prev@RightButtonTD[0], 255);
  201. TextDrawSetProportional(Prev@RightButtonTD[0], 1);
  202. TextDrawTextSize(Prev@RightButtonTD[0], 55.0000, 18.0000);
  203. TextDrawSetSelectable(Prev@RightButtonTD[0], 1);
  204. //
  205. Prev@RightButtonTD[1] = TextDrawCreate(325.5000, 293.5000, "LD_SPAC:BLACK");
  206. TextDrawFont(Prev@RightButtonTD[1], 4);
  207. TextDrawLetterSize(Prev@RightButtonTD[1], 0.5000, 1.0000);
  208. TextDrawColor(Prev@RightButtonTD[1], -1);
  209. TextDrawSetShadow(Prev@RightButtonTD[1], 0);
  210. TextDrawSetOutline(Prev@RightButtonTD[1], 0);
  211. TextDrawBackgroundColor(Prev@RightButtonTD[1], 255);
  212. TextDrawSetProportional(Prev@RightButtonTD[1], 1);
  213. TextDrawTextSize(Prev@RightButtonTD[1], 54.0000, 17.0000);
  214. /*
  215. * CENTER BUTTON (button3)
  216. */
  217. // right button for response type "0"
  218. Prev@CenterButtonTD[0] = TextDrawCreate(290.5000, 293.0000, "LD_SPAC:WHITE");
  219. TextDrawFont(Prev@CenterButtonTD[0], 4);
  220. TextDrawLetterSize(Prev@CenterButtonTD[0], 0.5000, 1.0000);
  221. TextDrawColor(Prev@CenterButtonTD[0], -1);
  222. TextDrawSetShadow(Prev@CenterButtonTD[0], 0);
  223. TextDrawSetOutline(Prev@CenterButtonTD[0], 0);
  224. TextDrawBackgroundColor(Prev@CenterButtonTD[0], 255);
  225. TextDrawSetProportional(Prev@CenterButtonTD[0], 1);
  226. TextDrawTextSize(Prev@CenterButtonTD[0], 55.0000, 18.0000);
  227. TextDrawSetSelectable(Prev@CenterButtonTD[0], 1);
  228. //
  229. Prev@CenterButtonTD[1] = TextDrawCreate(291.0000, 293.5000, "LD_SPAC:BLACK");
  230. TextDrawFont(Prev@CenterButtonTD[1], 4);
  231. TextDrawLetterSize(Prev@CenterButtonTD[1], 0.5000, 1.0000);
  232. TextDrawColor(Prev@CenterButtonTD[1], -1);
  233. TextDrawSetShadow(Prev@CenterButtonTD[1], 0);
  234. TextDrawSetOutline(Prev@CenterButtonTD[1], 0);
  235. TextDrawBackgroundColor(Prev@CenterButtonTD[1], 255);
  236. TextDrawSetProportional(Prev@CenterButtonTD[1], 1);
  237. TextDrawTextSize(Prev@CenterButtonTD[1], 54.0000, 17.0000);
  238. /*
  239. * PREVIEW MODEL LISTITEMS
  240. */
  241. new textdrawid;
  242. for (new a = 0; a < MAX_DIALOG_PREVIEW_ROWS; a++) {
  243. for (new b = 0; b < MAX_DIALOG_PREVIEW_COLUMNS; b++) {
  244. textdrawid = ((a * MAX_DIALOG_PREVIEW_COLUMNS) + b);
  245. // listitem border button to select item
  246. Prev@ModelTD[textdrawid][0] = TextDrawCreate((148.5000 + (b * DIALOG_PREVIEW_HORIZONTAL_GAP)), (157.5000 + (a * DIALOG_PREVIEW_VERTICAL_GAP)), "LD_SPAC:WHITE");
  247. TextDrawFont(Prev@ModelTD[textdrawid][0], 4);
  248. TextDrawLetterSize(Prev@ModelTD[textdrawid][0], 0.5000, 1.0000);
  249. TextDrawColor(Prev@ModelTD[textdrawid][0], -16776961);
  250. TextDrawSetShadow(Prev@ModelTD[textdrawid][0], 0);
  251. TextDrawSetOutline(Prev@ModelTD[textdrawid][0], 0);
  252. TextDrawBackgroundColor(Prev@ModelTD[textdrawid][0], 255);
  253. TextDrawSetProportional(Prev@ModelTD[textdrawid][0], 1);
  254. TextDrawTextSize(Prev@ModelTD[textdrawid][0], 55.0000, 62.0000);
  255. TextDrawSetSelectable(Prev@ModelTD[textdrawid][0], 1);
  256. //
  257. Prev@ModelTD[textdrawid][1] = TextDrawCreate((149.0000 + (b * DIALOG_PREVIEW_HORIZONTAL_GAP)), (158.0000 + (a * DIALOG_PREVIEW_VERTICAL_GAP)), "MODEL");
  258. TextDrawFont(Prev@ModelTD[textdrawid][1], 5);
  259. TextDrawLetterSize(Prev@ModelTD[textdrawid][1], 0.5000, 1.0000);
  260. TextDrawColor(Prev@ModelTD[textdrawid][1], -1);
  261. TextDrawSetShadow(Prev@ModelTD[textdrawid][1], 0);
  262. TextDrawSetOutline(Prev@ModelTD[textdrawid][1], 0);
  263. TextDrawBackgroundColor(Prev@ModelTD[textdrawid][1], 842150655);
  264. TextDrawSetProportional(Prev@ModelTD[textdrawid][1], 1);
  265. TextDrawTextSize(Prev@ModelTD[textdrawid][1], 54.0000, 61.0000);
  266. TextDrawSetPreviewModel(Prev@ModelTD[textdrawid][1], 132);
  267. TextDrawSetPreviewRot(Prev@ModelTD[textdrawid][1], 0.0000, 0.0000, -50.0000, 1.0000);
  268. // listitem rotation button (left)
  269. Prev@ModelTD[textdrawid][2] = TextDrawCreate((151.5000 + (b * DIALOG_PREVIEW_HORIZONTAL_GAP)), (181.5000 + (a * DIALOG_PREVIEW_VERTICAL_GAP)), "LD_BEAT:LEFT");
  270. TextDrawFont(Prev@ModelTD[textdrawid][2], 4);
  271. TextDrawLetterSize(Prev@ModelTD[textdrawid][2], 0.5000, 1.0000);
  272. TextDrawColor(Prev@ModelTD[textdrawid][2], -156);
  273. TextDrawSetShadow(Prev@ModelTD[textdrawid][2], 0);
  274. TextDrawSetOutline(Prev@ModelTD[textdrawid][2], 0);
  275. TextDrawBackgroundColor(Prev@ModelTD[textdrawid][2], 255);
  276. TextDrawSetProportional(Prev@ModelTD[textdrawid][2], 1);
  277. TextDrawTextSize(Prev@ModelTD[textdrawid][2], 15.0000, 15.0000);
  278. TextDrawSetSelectable(Prev@ModelTD[textdrawid][2], 1);
  279. //
  280. // listitem rotation button (right)
  281. Prev@ModelTD[textdrawid][3] = TextDrawCreate((185.0000 + (b * DIALOG_PREVIEW_HORIZONTAL_GAP)), (181.5000 + (a * DIALOG_PREVIEW_VERTICAL_GAP)), "LD_BEAT:RIGHT");
  282. TextDrawFont(Prev@ModelTD[textdrawid][3], 4);
  283. TextDrawLetterSize(Prev@ModelTD[textdrawid][3], 0.5000, 1.0000);
  284. TextDrawColor(Prev@ModelTD[textdrawid][3], -156);
  285. TextDrawSetShadow(Prev@ModelTD[textdrawid][3], 0);
  286. TextDrawSetOutline(Prev@ModelTD[textdrawid][3], 0);
  287. TextDrawBackgroundColor(Prev@ModelTD[textdrawid][3], 255);
  288. TextDrawSetProportional(Prev@ModelTD[textdrawid][3], 1);
  289. TextDrawTextSize(Prev@ModelTD[textdrawid][3], 15.0000, 15.0000);
  290. TextDrawSetSelectable(Prev@ModelTD[textdrawid][3], 1);
  291. //
  292. }
  293. }
  294. }
  295. static Prev_DestroyTextDraws() {
  296. /*
  297. * FRAME
  298. */
  299. for (new i = 0; i < sizeof Prev@FrameTD; i++) {
  300. TextDrawDestroy(Prev@FrameTD[i]);
  301. }
  302. /*
  303. * LEFT BUTTON (button1)
  304. */
  305. TextDrawDestroy(Prev@LeftButtonTD[0]);
  306. TextDrawDestroy(Prev@LeftButtonTD[1]);
  307. /*
  308. * RIGHT BUTTON (button2)
  309. */
  310. TextDrawDestroy(Prev@RightButtonTD[0]);
  311. TextDrawDestroy(Prev@RightButtonTD[1]);
  312. /*
  313. * CENTER BUTTON (button1)
  314. */
  315. TextDrawDestroy(Prev@CenterButtonTD[0]);
  316. TextDrawDestroy(Prev@CenterButtonTD[1]);
  317. /*
  318. * PREVIEW MODEL LISTITEMS
  319. */
  320. for (new i = 0; i < (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS); i++) {
  321. TextDrawDestroy(Prev@ModelTD[i][0]);
  322. TextDrawDestroy(Prev@ModelTD[i][1]);
  323. TextDrawDestroy(Prev@ModelTD[i][2]);
  324. TextDrawDestroy(Prev@ModelTD[i][3]);
  325. }
  326. }
  327. static Prev_CreatePlayerTextDraws(playerid, header[], button1[], button2[], button3[], totalItems) {
  328. /*
  329. * HEADER
  330. */
  331. Prev@HeaderPTD[playerid] = CreatePlayerTextDraw(playerid, 144.0000, 143.0000, header);
  332. PlayerTextDrawFont(playerid, Prev@HeaderPTD[playerid], 2);
  333. PlayerTextDrawLetterSize(playerid, Prev@HeaderPTD[playerid], 0.1399, 0.8999);
  334. PlayerTextDrawColor(playerid, Prev@HeaderPTD[playerid], -1);
  335. PlayerTextDrawSetShadow(playerid, Prev@HeaderPTD[playerid], 0);
  336. PlayerTextDrawSetOutline(playerid, Prev@HeaderPTD[playerid], 0);
  337. PlayerTextDrawBackgroundColor(playerid, Prev@HeaderPTD[playerid], 255);
  338. PlayerTextDrawSetProportional(playerid, Prev@HeaderPTD[playerid], 1);
  339. PlayerTextDrawUseBox(playerid, Prev@HeaderPTD[playerid], 1);
  340. PlayerTextDrawBoxColor(playerid, Prev@HeaderPTD[playerid], 255);
  341. PlayerTextDrawTextSize(playerid, Prev@HeaderPTD[playerid], 501.0000, 0.0000);
  342. /*
  343. * LEFT BUTTON (button1)
  344. */
  345. if (button1[0] != EOS) {
  346. Prev@LeftButtonPTD[playerid] = CreatePlayerTextDraw(playerid, 287.5000, 297.0000, button1);
  347. PlayerTextDrawFont(playerid, Prev@LeftButtonPTD[playerid], 2);
  348. PlayerTextDrawLetterSize(playerid, Prev@LeftButtonPTD[playerid], 0.1399, 0.8999);
  349. PlayerTextDrawAlignment(playerid, Prev@LeftButtonPTD[playerid], 2);
  350. PlayerTextDrawColor(playerid, Prev@LeftButtonPTD[playerid], -1);
  351. PlayerTextDrawSetShadow(playerid, Prev@LeftButtonPTD[playerid], 0);
  352. PlayerTextDrawSetOutline(playerid, Prev@LeftButtonPTD[playerid], 0);
  353. PlayerTextDrawBackgroundColor(playerid, Prev@LeftButtonPTD[playerid], 255);
  354. PlayerTextDrawSetProportional(playerid, Prev@LeftButtonPTD[playerid], 1);
  355. PlayerTextDrawTextSize(playerid, Prev@LeftButtonPTD[playerid], 0.0000, 480.0000);
  356. } else {
  357. Prev@LeftButtonPTD[playerid] = PlayerText:INVALID_TEXT_DRAW;
  358. }
  359. /*
  360. * RIGHT BUTTON (button2)
  361. */
  362. if (button2[0] != EOS) {
  363. Prev@RightButtonPTD[playerid] = CreatePlayerTextDraw(playerid, 352.5000, 297.0000, button2);
  364. PlayerTextDrawFont(playerid, Prev@RightButtonPTD[playerid], 2);
  365. PlayerTextDrawLetterSize(playerid, Prev@RightButtonPTD[playerid], 0.1399, 0.8999);
  366. PlayerTextDrawAlignment(playerid, Prev@RightButtonPTD[playerid], 2);
  367. PlayerTextDrawColor(playerid, Prev@RightButtonPTD[playerid], -1);
  368. PlayerTextDrawSetShadow(playerid, Prev@RightButtonPTD[playerid], 0);
  369. PlayerTextDrawSetOutline(playerid, Prev@RightButtonPTD[playerid], 0);
  370. PlayerTextDrawBackgroundColor(playerid, Prev@RightButtonPTD[playerid], 255);
  371. PlayerTextDrawSetProportional(playerid, Prev@RightButtonPTD[playerid], 1);
  372. PlayerTextDrawTextSize(playerid, Prev@RightButtonPTD[playerid], 0.0000, 480.0000);
  373. } else {
  374. Prev@RightButtonPTD[playerid] = PlayerText:INVALID_TEXT_DRAW;
  375. }
  376. /*
  377. * CENTER BUTTON (button3)
  378. */
  379. if (button3[0] != EOS) {
  380. Prev@CenterButtonPTD[playerid] = CreatePlayerTextDraw(playerid, 318.0000, 297.0000, button3);
  381. PlayerTextDrawFont(playerid, Prev@CenterButtonPTD[playerid], 2);
  382. PlayerTextDrawLetterSize(playerid, Prev@CenterButtonPTD[playerid], 0.1399, 0.8999);
  383. PlayerTextDrawAlignment(playerid, Prev@CenterButtonPTD[playerid], 2);
  384. PlayerTextDrawColor(playerid, Prev@CenterButtonPTD[playerid], -1);
  385. PlayerTextDrawSetShadow(playerid, Prev@CenterButtonPTD[playerid], 0);
  386. PlayerTextDrawSetOutline(playerid, Prev@CenterButtonPTD[playerid], 0);
  387. PlayerTextDrawBackgroundColor(playerid, Prev@CenterButtonPTD[playerid], 255);
  388. PlayerTextDrawSetProportional(playerid, Prev@CenterButtonPTD[playerid], 1);
  389. PlayerTextDrawTextSize(playerid, Prev@CenterButtonPTD[playerid], 0.0000, 480.0000);
  390. } else {
  391. Prev@CenterButtonPTD[playerid] = PlayerText:INVALID_TEXT_DRAW;
  392. }
  393. /*
  394. * PAGE NUMBER
  395. */
  396. if (totalItems > (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) { // if there are more than "12" listitems, create page textdraw
  397. Prev@PageNumberPTD[playerid] = CreatePlayerTextDraw(playerid, 501.5000, 143.0000, "Page: 1");
  398. PlayerTextDrawFont(playerid, Prev@PageNumberPTD[playerid], 2);
  399. PlayerTextDrawLetterSize(playerid, Prev@PageNumberPTD[playerid], 0.1399, 0.8999);
  400. PlayerTextDrawAlignment(playerid, Prev@PageNumberPTD[playerid], 3);
  401. PlayerTextDrawColor(playerid, Prev@PageNumberPTD[playerid], -1);
  402. PlayerTextDrawSetShadow(playerid, Prev@PageNumberPTD[playerid], 0);
  403. PlayerTextDrawSetOutline(playerid, Prev@PageNumberPTD[playerid], 0);
  404. PlayerTextDrawBackgroundColor(playerid, Prev@PageNumberPTD[playerid], 255);
  405. PlayerTextDrawSetProportional(playerid, Prev@PageNumberPTD[playerid], 1);
  406. PlayerTextDrawTextSize(playerid, Prev@PageNumberPTD[playerid], 501.0000, 0.0000);
  407. } else {
  408. Prev@PageNumberPTD[playerid] = PlayerText:INVALID_TEXT_DRAW;
  409. }
  410. /*
  411. * PREVIEW MODEL LISTITEMS
  412. */
  413. new textdrawid;
  414. for (new a = 0; a < MAX_DIALOG_PREVIEW_ROWS; a++) {
  415. for (new b = 0; b < MAX_DIALOG_PREVIEW_COLUMNS; b++) {
  416. textdrawid = ((a * MAX_DIALOG_PREVIEW_COLUMNS) + b);
  417. if (textdrawid >= totalItems) {
  418. Prev@ModelTextPTD[playerid][textdrawid][0] = PlayerText:INVALID_TEXT_DRAW;
  419. Prev@ModelTextPTD[playerid][textdrawid][1] = PlayerText:INVALID_TEXT_DRAW;
  420. continue;
  421. }
  422. Prev@ModelTextPTD[playerid][textdrawid][0] = CreatePlayerTextDraw(playerid, (153.5000 + (b * DIALOG_PREVIEW_HORIZONTAL_GAP)), (161.5000 + (a * DIALOG_PREVIEW_VERTICAL_GAP)), "");
  423. PlayerTextDrawFont(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 2);
  424. PlayerTextDrawLetterSize(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 0.1399, 0.8999);
  425. PlayerTextDrawColor(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], -1);
  426. PlayerTextDrawSetShadow(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 0);
  427. PlayerTextDrawSetOutline(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 0);
  428. PlayerTextDrawBackgroundColor(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 255);
  429. PlayerTextDrawSetProportional(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 1);
  430. PlayerTextDrawTextSize(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], 640.0000, 480.0000);
  431. Prev@ModelTextPTD[playerid][textdrawid][1] = CreatePlayerTextDraw(playerid, (176.5000 + (b * DIALOG_PREVIEW_HORIZONTAL_GAP)), (204.5000 + (a * DIALOG_PREVIEW_VERTICAL_GAP)), "0.0");
  432. PlayerTextDrawFont(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 2);
  433. PlayerTextDrawLetterSize(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 0.1399, 0.8999);
  434. PlayerTextDrawAlignment(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 2);
  435. PlayerTextDrawColor(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], -156);
  436. PlayerTextDrawSetShadow(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 0);
  437. PlayerTextDrawSetOutline(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 0);
  438. PlayerTextDrawBackgroundColor(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 255);
  439. PlayerTextDrawSetProportional(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 1);
  440. PlayerTextDrawTextSize(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], 640.0000, 480.0000);
  441. }
  442. }
  443. /*
  444. * SCROLLBAR
  445. */
  446. Prev@ScrollBarPTD[playerid] = PlayerText:INVALID_TEXT_DRAW; // we will create this later if needed in dialog
  447. }
  448. static Prev_DestroyPlayerTextDraws(playerid) {
  449. /*
  450. * HEADER
  451. */
  452. PlayerTextDrawDestroy(playerid, Prev@HeaderPTD[playerid]);
  453. /*
  454. * LEFT BUTTON (button1)
  455. */
  456. PlayerTextDrawDestroy(playerid, Prev@LeftButtonPTD[playerid]);
  457. /*
  458. * RIGHT BUTTON (button2)
  459. */
  460. PlayerTextDrawDestroy(playerid, Prev@RightButtonPTD[playerid]);
  461. /*
  462. * CENTER BUTTON (button3)
  463. */
  464. PlayerTextDrawDestroy(playerid, Prev@CenterButtonPTD[playerid]);
  465. /*
  466. * PAGE NUMBER
  467. */
  468. PlayerTextDrawDestroy(playerid, Prev@PageNumberPTD[playerid]);
  469. /*
  470. * SCROLLBAR
  471. */
  472. PlayerTextDrawDestroy(playerid, Prev@ScrollBarPTD[playerid]);
  473. /*
  474. * PREVIEW MODEL LISTITEMS
  475. */
  476. for (new i = 0; i < (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS); i++) {
  477. PlayerTextDrawDestroy(playerid, Prev@ModelTextPTD[playerid][i][0]);
  478. PlayerTextDrawDestroy(playerid, Prev@ModelTextPTD[playerid][i][1]);
  479. }
  480. }
  481. static Prev_UpdateScrollBar(playerid, page, totalPages) {
  482. PlayerTextDrawDestroy(playerid, Prev@ScrollBarPTD[playerid]);
  483. const Float:MAX_HEIGHT = 108.0000;
  484. new Float:height = (MAX_HEIGHT / totalPages);
  485. new Float:y = 166.5000;
  486. y += (height * page);
  487. Prev@ScrollBarPTD[playerid] = CreatePlayerTextDraw(playerid, 489.0000, y, "LD_SPAC:WHITE");
  488. PlayerTextDrawFont(playerid, Prev@ScrollBarPTD[playerid], 4);
  489. PlayerTextDrawLetterSize(playerid, Prev@ScrollBarPTD[playerid], 0.0000, 18.2000);
  490. PlayerTextDrawColor(playerid, Prev@ScrollBarPTD[playerid], -16776961);
  491. PlayerTextDrawSetShadow(playerid, Prev@ScrollBarPTD[playerid], 0);
  492. PlayerTextDrawSetOutline(playerid, Prev@ScrollBarPTD[playerid], 0);
  493. PlayerTextDrawBackgroundColor(playerid, Prev@ScrollBarPTD[playerid], 255);
  494. PlayerTextDrawSetProportional(playerid, Prev@ScrollBarPTD[playerid], 1);
  495. PlayerTextDrawUseBox(playerid, Prev@ScrollBarPTD[playerid], 1);
  496. PlayerTextDrawBoxColor(playerid, Prev@ScrollBarPTD[playerid], 150);
  497. PlayerTextDrawTextSize(playerid, Prev@ScrollBarPTD[playerid], 7.5000, height);
  498. PlayerTextDrawShow(playerid, Prev@ScrollBarPTD[playerid]);
  499. }
  500. static Prev_UpdateListitems(playerid, page, selected, totalItems) {
  501. new textdrawid;
  502. new listitem;
  503. new name[MAX_DIALOG_PREVIEW_TEXTSIZE];
  504. for (new a = 0; a < MAX_DIALOG_PREVIEW_ROWS; a++) {
  505. for (new b = 0; b < MAX_DIALOG_PREVIEW_COLUMNS; b++) {
  506. textdrawid = ((a * MAX_DIALOG_PREVIEW_COLUMNS) + b);
  507. listitem = ((page * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + textdrawid);
  508. if (listitem >= totalItems) {
  509. TextDrawHideForPlayer(playerid, Prev@ModelTD[textdrawid][0]);
  510. TextDrawHideForPlayer(playerid, Prev@ModelTD[textdrawid][1]);
  511. TextDrawHideForPlayer(playerid, Prev@ModelTD[textdrawid][2]);
  512. TextDrawHideForPlayer(playerid, Prev@ModelTD[textdrawid][3]);
  513. PlayerTextDrawHide(playerid, Prev@ModelTextPTD[playerid][textdrawid][0]);
  514. PlayerTextDrawHide(playerid, Prev@ModelTextPTD[playerid][textdrawid][1]);
  515. continue;
  516. }
  517. TextDrawSetPreviewModel(Prev@ModelTD[textdrawid][1], MEM_get_val(Prev@PlayerModelsPointer[playerid], listitem));
  518. TextDrawSetPreviewRot(Prev@ModelTD[textdrawid][1], Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][0], listitem), Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][1], listitem), Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][2], listitem), Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][3], listitem));
  519. TextDrawShowForPlayer(playerid, Prev@ModelTD[textdrawid][1]);
  520. if (textdrawid == selected) {
  521. TextDrawColor(Prev@ModelTD[textdrawid][0], DIALOG_PREVIEW_SELECT_COLOR);
  522. TextDrawShowForPlayer(playerid, Prev@ModelTD[textdrawid][0]);
  523. TextDrawShowForPlayer(playerid, Prev@ModelTD[textdrawid][2]);
  524. TextDrawShowForPlayer(playerid, Prev@ModelTD[textdrawid][3]);
  525. new string[16];
  526. format(string, sizeof string, "%0.1f", Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][3], listitem));
  527. PlayerTextDrawSetString(playerid, Prev@ModelTextPTD[playerid][textdrawid][1], string);
  528. PlayerTextDrawShow(playerid, Prev@ModelTextPTD[playerid][textdrawid][1]);
  529. } else {
  530. TextDrawColor(Prev@ModelTD[textdrawid][0], DIALOG_PREVIEW_UNSELECT_COLOR);
  531. TextDrawShowForPlayer(playerid, Prev@ModelTD[textdrawid][0]);
  532. TextDrawHideForPlayer(playerid, Prev@ModelTD[textdrawid][2]);
  533. TextDrawHideForPlayer(playerid, Prev@ModelTD[textdrawid][3]);
  534. PlayerTextDrawHide(playerid, Prev@ModelTextPTD[playerid][textdrawid][1]);
  535. }
  536. if (MEM_get_arr(Prev@PlayerModelNamesPointer[playerid][listitem], 0, name, MEM_get_size(Prev@PlayerModelNamesPointer[playerid][listitem])) != MEM_NULLFEPTR) {
  537. PlayerTextDrawSetString(playerid, Prev@ModelTextPTD[playerid][textdrawid][0], name);
  538. PlayerTextDrawShow(playerid, Prev@ModelTextPTD[playerid][textdrawid][0]);
  539. } else {
  540. PlayerTextDrawHide(playerid, Prev@ModelTextPTD[playerid][textdrawid][0]);
  541. }
  542. }
  543. }
  544. new string[16];
  545. format(string, sizeof string, "PAGE: %i/%i", (page + 1), Prev_GetNumPages(playerid));
  546. PlayerTextDrawSetString(playerid, Prev@PageNumberPTD[playerid], string);
  547. }
  548. static Prev_HidePlayerDialog(playerid) {
  549. /*
  550. * FRAME
  551. */
  552. for (new i = 0; i < sizeof Prev@FrameTD; i++) {
  553. TextDrawHideForPlayer(playerid, Prev@FrameTD[i]);
  554. }
  555. /*
  556. * LEFT BUTTON
  557. */
  558. TextDrawHideForPlayer(playerid, Prev@LeftButtonTD[0]);
  559. TextDrawHideForPlayer(playerid, Prev@LeftButtonTD[1]);
  560. /*
  561. * RIGHT BUTTON
  562. */
  563. TextDrawHideForPlayer(playerid, Prev@RightButtonTD[0]);
  564. TextDrawHideForPlayer(playerid, Prev@RightButtonTD[1]);
  565. /*
  566. * CENTER BUTTON
  567. */
  568. TextDrawHideForPlayer(playerid, Prev@CenterButtonTD[0]);
  569. TextDrawHideForPlayer(playerid, Prev@CenterButtonTD[1]);
  570. /*
  571. * PREVIEW MODEL LISTITEMS
  572. */
  573. for (new i = 0; i < (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS); i++) {
  574. TextDrawHideForPlayer(playerid, Prev@ModelTD[i][0]);
  575. TextDrawHideForPlayer(playerid, Prev@ModelTD[i][1]);
  576. TextDrawHideForPlayer(playerid, Prev@ModelTD[i][2]);
  577. TextDrawHideForPlayer(playerid, Prev@ModelTD[i][3]);
  578. }
  579. /*
  580. * DESTROY DIALOG PLAYER TEXTDRAWS
  581. */
  582. Prev_DestroyPlayerTextDraws(playerid);
  583. // reset player data
  584. MEM_delete(Prev@PlayerModelsPointer[playerid]);
  585. Prev@PlayerModelsPointer[playerid] = MEM_NULLPTR;
  586. for (new i = 0; i < Prev@PlayerDialogNumListitems[playerid]; i++) {
  587. MEM_delete(Prev@PlayerModelNamesPointer[playerid][i]);
  588. Prev@PlayerModelNamesPointer[playerid][i] = MEM_NULLPTR;
  589. }
  590. Prev@PlayerDialogID[playerid] = -1;
  591. return Prev_CancelSelectTextDraw(playerid);
  592. }
  593. // hooked methods
  594. public OnGameModeInit() {
  595. Prev_CreateTextDraws();
  596. #if defined PDialog_OnGameModeInit
  597. return PDialog_OnGameModeInit();
  598. #else
  599. return 1;
  600. #endif
  601. }
  602. #if defined _ALS_OnGameModeInit
  603. #undef OnGameModeInit
  604. #else
  605. #define _ALS_OnGameModeInit
  606. #endif
  607. #define OnGameModeInit PDialog_OnGameModeInit
  608. #if defined PDialog_OnGameModeInit
  609. forward PDialog_OnGameModeInit();
  610. #endif
  611. public OnGameModeExit() {
  612. Prev_DestroyTextDraws();
  613. #if defined PDialog_OnGameModeExit
  614. return PDialog_OnGameModeExit();
  615. #else
  616. return 1;
  617. #endif
  618. }
  619. #if defined _ALS_OnGameModeExit
  620. #undef OnGameModeExit
  621. #else
  622. #define _ALS_OnGameModeExit
  623. #endif
  624. #define OnGameModeExit PDialog_OnGameModeExit
  625. #if defined PDialog_OnGameModeExit
  626. forward PDialog_OnGameModeExit();
  627. #endif
  628. public OnFilterScriptInit() {
  629. Prev_CreateTextDraws();
  630. #if defined PDialog_OnFilterScriptInit
  631. return PDialog_OnFilterScriptInit();
  632. #else
  633. return 1;
  634. #endif
  635. }
  636. #if defined _ALS_OnFilterScriptInit
  637. #undef OnFilterScriptInit
  638. #else
  639. #define _ALS_OnFilterScriptInit
  640. #endif
  641. #define OnFilterScriptInit PDialog_OnFilterScriptInit
  642. #if defined PDialog_OnFilterScriptInit
  643. forward PDialog_OnFilterScriptInit();
  644. #endif
  645. public OnFilterScriptExit() {
  646. Prev_DestroyTextDraws();
  647. #if defined PDialog_OnFilterScriptExit
  648. return PDialog_OnFilterScriptExit();
  649. #else
  650. return 1;
  651. #endif
  652. }
  653. #if defined _ALS_OnFilterScriptExit
  654. #undef OnFilterScriptExit
  655. #else
  656. #define _ALS_OnFilterScriptExit
  657. #endif
  658. #define OnFilterScriptExit PDialog_OnFilterScriptExit
  659. #if defined PDialog_OnFilterScriptExit
  660. forward PDialog_OnFilterScriptExit();
  661. #endif
  662. public OnPlayerConnect(playerid) {
  663. Prev@CancelSelection[playerid] = false;
  664. Prev@PlayerDialogID[playerid] = -1;
  665. static const Float:__ROTATIONS[MAX_DIALOG_PREVIEW_MODELS] = {0.0, ...};
  666. Prev@PlayerModelRotsPointer[playerid][0] = MEM_new_arr(_:__ROTATIONS, MAX_DIALOG_PREVIEW_MODELS);
  667. Prev@PlayerModelRotsPointer[playerid][1] = MEM_new_arr(_:__ROTATIONS, MAX_DIALOG_PREVIEW_MODELS);
  668. Prev@PlayerModelRotsPointer[playerid][2] = MEM_new_arr(_:__ROTATIONS, MAX_DIALOG_PREVIEW_MODELS);
  669. static const Float:__ZOOM[MAX_DIALOG_PREVIEW_MODELS] = {1.0, ...};
  670. Prev@PlayerModelRotsPointer[playerid][3] = MEM_new_arr(_:__ZOOM, MAX_DIALOG_PREVIEW_MODELS);
  671. #if defined PDialog_OnPlayerConnect
  672. return PDialog_OnPlayerConnect(playerid);
  673. #else
  674. return 1;
  675. #endif
  676. }
  677. #if defined _ALS_OnPlayerConnect
  678. #undef OnPlayerConnect
  679. #else
  680. #define _ALS_OnPlayerConnect
  681. #endif
  682. #define OnPlayerConnect PDialog_OnPlayerConnect
  683. #if defined PDialog_OnPlayerConnect
  684. forward PDialog_OnPlayerConnect(playerid);
  685. #endif
  686. public OnPlayerDisconnect(playerid, reason) {
  687. MEM_delete(Prev@PlayerModelsPointer[playerid]);
  688. Prev@PlayerModelsPointer[playerid] = MEM_NULLPTR;
  689. MEM_delete(Prev@PlayerModelRotsPointer[playerid][0]);
  690. MEM_delete(Prev@PlayerModelRotsPointer[playerid][1]);
  691. MEM_delete(Prev@PlayerModelRotsPointer[playerid][2]);
  692. MEM_delete(Prev@PlayerModelRotsPointer[playerid][3]);
  693. Prev@PlayerModelRotsPointer[playerid][0] = MEM_NULLPTR;
  694. Prev@PlayerModelRotsPointer[playerid][1] = MEM_NULLPTR;
  695. Prev@PlayerModelRotsPointer[playerid][2] = MEM_NULLPTR;
  696. Prev@PlayerModelRotsPointer[playerid][3] = MEM_NULLPTR;
  697. for (new i = 0; i < Prev@PlayerDialogNumListitems[playerid]; i++) {
  698. MEM_delete(Prev@PlayerModelNamesPointer[playerid][i]);
  699. Prev@PlayerModelNamesPointer[playerid][i] = MEM_NULLPTR;
  700. }
  701. #if defined PDialog_OnPlayerDisconnect
  702. return PDialog_OnPlayerDisconnect(playerid, reason);
  703. #else
  704. return 1;
  705. #endif
  706. }
  707. #if defined _ALS_OnPlayerDisconnect
  708. #undef OnPlayerDisconnect
  709. #else
  710. #define _ALS_OnPlayerDisconnect
  711. #endif
  712. #define OnPlayerDisconnect PDialog_OnPlayerDisconnect
  713. #if defined PDialog_OnPlayerDisconnect
  714. forward PDialog_OnPlayerDisconnect(playerid, reason);
  715. #endif
  716. public OnPlayerClickTextDraw(playerid, Text:clickedid) {
  717. if (Prev@CancelSelection[playerid]) {
  718. Prev@CancelSelection[playerid] = false;
  719. #if defined PDialog_OnPlayerClickTextDraw
  720. return PDialog_OnPlayerClickTextDraw(playerid, Text:clickedid);
  721. #else
  722. return 1;
  723. #endif
  724. }
  725. if (Prev@PlayerDialogID[playerid] != -1) {
  726. if (clickedid == Text:INVALID_TEXT_DRAW || clickedid == RIGHT_BUTTON_TEXTDRAW) {
  727. new dialogid = Prev@PlayerDialogID[playerid];
  728. new listitem = ((Prev@PlayerDialogPage[playerid] * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + Prev@PlayerDialogListitem[playerid]);
  729. new inputtext[16];
  730. valstr(inputtext, MEM_get_val(Prev@PlayerModelsPointer[playerid], listitem));
  731. Prev_HidePlayerDialog(playerid);
  732. CallLocalFunction("OnDialogResponse", "iiiis", playerid, dialogid, 0, listitem, inputtext);
  733. } else if (clickedid == SCROLL_BAR_UP_TEXTDRAW) {
  734. if (Prev@PlayerDialogPage[playerid] > 0) {
  735. Prev_UpdateListitems(playerid, --Prev@PlayerDialogPage[playerid], 0, Prev@PlayerDialogNumListitems[playerid]);
  736. Prev_UpdateScrollBar(playerid, Prev@PlayerDialogPage[playerid], Prev_GetNumPages(playerid));
  737. Prev@PlayerDialogListitem[playerid] = 0;
  738. }
  739. } else if (clickedid == SCROLL_BAR_DOWN_TEXTDRAW) {
  740. if ((Prev@PlayerDialogPage[playerid] + 1) < Prev_GetNumPages(playerid)) {
  741. Prev_UpdateListitems(playerid, ++Prev@PlayerDialogPage[playerid], 0, Prev@PlayerDialogNumListitems[playerid]);
  742. Prev_UpdateScrollBar(playerid, Prev@PlayerDialogPage[playerid], Prev_GetNumPages(playerid));
  743. Prev@PlayerDialogListitem[playerid] = 0;
  744. }
  745. } else if (clickedid == LEFT_BUTTON_TEXTDRAW || clickedid == CENTER_BUTTON_TEXTDRAW) {
  746. new dialogid = Prev@PlayerDialogID[playerid];
  747. new listitem = ((Prev@PlayerDialogPage[playerid] * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + Prev@PlayerDialogListitem[playerid]);
  748. new inputtext[16];
  749. valstr(inputtext, MEM_get_val(Prev@PlayerModelsPointer[playerid], listitem));
  750. Prev_HidePlayerDialog(playerid);
  751. CallLocalFunction("OnDialogResponse", "iiiis", playerid, dialogid, 1, listitem, inputtext);
  752. } else if (clickedid == LISTITEM_ROTATE_LEFT_TEXTDRAW<Prev@PlayerDialogListitem[playerid]>) {
  753. new listitem = ((Prev@PlayerDialogPage[playerid] * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + Prev@PlayerDialogListitem[playerid]);
  754. new Float:rx, Float:ry, Float:rz, Float:rzoom;
  755. rx = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][0], listitem);
  756. ry = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][1], listitem);
  757. rz = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][2], listitem);
  758. rzoom = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][3], listitem);
  759. rz -= 10.0;
  760. MEM_set_val(Prev@PlayerModelRotsPointer[playerid][2], listitem, _:rz);
  761. TextDrawSetPreviewRot(Prev@ModelTD[Prev@PlayerDialogListitem[playerid]][1], rx, ry, rz, rzoom);
  762. TextDrawShowForPlayer(playerid, Prev@ModelTD[Prev@PlayerDialogListitem[playerid]][1]);
  763. new string[16];
  764. format(string, sizeof string, "%0.1f", rz);
  765. PlayerTextDrawSetString(playerid, Prev@ModelTextPTD[playerid][Prev@PlayerDialogListitem[playerid]][1], string);
  766. PlayerTextDrawShow(playerid, Prev@ModelTextPTD[playerid][Prev@PlayerDialogListitem[playerid]][1]);
  767. } else if (clickedid == LISTITEM_ROTATE_RIGHT_TEXTDRAW<Prev@PlayerDialogListitem[playerid]>) {
  768. new listitem = ((Prev@PlayerDialogPage[playerid] * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + Prev@PlayerDialogListitem[playerid]);
  769. new Float:rx, Float:ry, Float:rz, Float:rzoom;
  770. rx = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][0], listitem);
  771. ry = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][1], listitem);
  772. rz = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][2], listitem);
  773. rzoom = Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][3], listitem);
  774. rz += 10.0;
  775. MEM_set_val(Prev@PlayerModelRotsPointer[playerid][2], listitem, _:rz);
  776. TextDrawSetPreviewRot(Prev@ModelTD[Prev@PlayerDialogListitem[playerid]][1], rx, ry, rz, rzoom);
  777. TextDrawShowForPlayer(playerid, Prev@ModelTD[Prev@PlayerDialogListitem[playerid]][1]);
  778. new string[16];
  779. format(string, sizeof string, "%0.1f", rz);
  780. PlayerTextDrawSetString(playerid, Prev@ModelTextPTD[playerid][Prev@PlayerDialogListitem[playerid]][1], string);
  781. PlayerTextDrawShow(playerid, Prev@ModelTextPTD[playerid][Prev@PlayerDialogListitem[playerid]][1]);
  782. } else {
  783. for (new i = 0; i < (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS); i++) {
  784. if (clickedid == LISTITEM_TEXTDRAW<i>) {
  785. if (Prev@PlayerDialogListitem[playerid] == i && (GetTickCount() - Prev@PlayerDialogTickCount[playerid]) <= 200) {
  786. new dialogid = Prev@PlayerDialogID[playerid];
  787. new listitem = ((Prev@PlayerDialogPage[playerid] * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + Prev@PlayerDialogListitem[playerid]);
  788. new inputtext[16];
  789. valstr(inputtext, MEM_get_val(Prev@PlayerModelsPointer[playerid], listitem));
  790. Prev_HidePlayerDialog(playerid);
  791. CallLocalFunction("OnDialogResponse", "iiiis", playerid, dialogid, 1, listitem, inputtext);
  792. } else {
  793. // reset previous listitem
  794. new previous = Prev@PlayerDialogListitem[playerid];
  795. TextDrawColor(Prev@ModelTD[previous][0], DIALOG_PREVIEW_UNSELECT_COLOR);
  796. TextDrawShowForPlayer(playerid, Prev@ModelTD[previous][0]);
  797. TextDrawHideForPlayer(playerid, Prev@ModelTD[previous][2]);
  798. TextDrawHideForPlayer(playerid, Prev@ModelTD[previous][3]);
  799. PlayerTextDrawHide(playerid, Prev@ModelTextPTD[playerid][previous][1]);
  800. // update new selected listitem
  801. TextDrawColor(Prev@ModelTD[i][0], DIALOG_PREVIEW_SELECT_COLOR);
  802. TextDrawShowForPlayer(playerid, Prev@ModelTD[i][0]);
  803. TextDrawShowForPlayer(playerid, Prev@ModelTD[i][2]);
  804. TextDrawShowForPlayer(playerid, Prev@ModelTD[i][3]);
  805. new string[16];
  806. format(string, sizeof string, "%0.1f", Float:MEM_get_val(Prev@PlayerModelRotsPointer[playerid][2], ((Prev@PlayerDialogPage[playerid] * (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) + i)));
  807. PlayerTextDrawSetString(playerid, Prev@ModelTextPTD[playerid][i][1], string);
  808. PlayerTextDrawShow(playerid, Prev@ModelTextPTD[playerid][i][1]);
  809. Prev@PlayerDialogListitem[playerid] = i;
  810. Prev@PlayerDialogTickCount[playerid] = GetTickCount();
  811. }
  812. break;
  813. }
  814. }
  815. }
  816. }
  817. #if defined PDialog_OnPlayerClickTextDraw
  818. return PDialog_OnPlayerClickTextDraw(playerid, Text:clickedid);
  819. #else
  820. return 1;
  821. #endif
  822. }
  823. #if defined _ALS_OnPlayerClickTextDraw
  824. #undef OnPlayerClickTextDraw
  825. #else
  826. #define _ALS_OnPlayerClickTextDraw
  827. #endif
  828. #define OnPlayerClickTextDraw PDialog_OnPlayerClickTextDraw
  829. #if defined PDialog_OnPlayerClickTextDraw
  830. forward PDialog_OnPlayerClickTextDraw(playerid, Text:clickedid);
  831. #endif
  832. stock Prev_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]) {
  833. if (playerid < 0 || playerid >= MAX_PLAYERS) {
  834. return 0;
  835. }
  836. if (Prev@PlayerDialogID[playerid] != -1) {
  837. Prev_HidePlayerDialog(playerid);
  838. }
  839. if (style != DIALOG_STYLE_PREVIEW_MODEL) {
  840. return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
  841. }
  842. if (dialogid < 0) {
  843. if (style == DIALOG_STYLE_PREVIEW_MODEL) {
  844. return 1;
  845. }
  846. return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
  847. }
  848. new modelstr[8];
  849. new listitem[sizeof(modelstr) + 2 + MAX_DIALOG_PREVIEW_TEXTSIZE];
  850. new pos = 0;
  851. new next;
  852. new end;
  853. new count = 0;
  854. new bool:valid;
  855. new models[MAX_DIALOG_PREVIEW_MODELS];
  856. do {
  857. // split "info" to indvidual listitems
  858. next = strfind(info, "\n", false, pos);
  859. end = (next == -1) ? strlen(info) : next;
  860. strmid(listitem, info, pos, end, sizeof(listitem));
  861. pos = (next == -1) ? -1 : (next + 1);
  862. // split "listitem" from '\t' delim
  863. next = strfind(listitem, "\t");
  864. if (next == -1) {
  865. modelstr[0] = EOS;
  866. strcat(modelstr, listitem);
  867. }
  868. else {
  869. strmid(modelstr, listitem, 0, pos);
  870. }
  871. // model validity check
  872. valid = false;
  873. for (new i = 0; modelstr[i] != EOS; i++) {
  874. if (modelstr[i] >= '0' && modelstr[i] <= '9') {
  875. valid = true;
  876. break;
  877. }
  878. }
  879. if (!valid)
  880. continue;
  881. models[count] = strval(modelstr);
  882. // listitem text validity check
  883. valid = false;
  884. for (new i = next + 1; listitem[i] != EOS; i++) {
  885. if (listitem[i] != ' ') {
  886. valid = true;
  887. break;
  888. }
  889. }
  890. Prev@PlayerModelNamesPointer[playerid][count] = valid ? MEM_new_arr(listitem[next + 1], strlen(listitem[next + 1])) : MEM_NULLPTR;
  891. // check if number of models doesnt exceed the array size
  892. if (++count == MAX_DIALOG_PREVIEW_MODELS) {
  893. printf("[PreviewModelDialog.inc] - Warning: You have more than \"MAX_DIALOG_PREVIEW_MODELS\" ("#MAX_DIALOG_PREVIEW_MODELS") listitems in your dialog, only the first "#MAX_DIALOG_PREVIEW_MODELS" listitems were loaded.");
  894. break;
  895. }
  896. } while (pos != -1);
  897. if (count == 0) {
  898. return 0;
  899. }
  900. // set player data
  901. Prev@PlayerDialogID[playerid] = dialogid;
  902. Prev@PlayerDialogListitem[playerid] = 0;
  903. Prev@PlayerDialogNumListitems[playerid] = count;
  904. Prev@PlayerDialogPage[playerid] = 0;
  905. Prev@PlayerDialogTickCount[playerid] = 0;
  906. Prev@PlayerModelsPointer[playerid] = MEM_new_arr(models, Prev@PlayerDialogNumListitems[playerid]);
  907. /*
  908. * FRAME
  909. */
  910. for (new i = 0; i < sizeof Prev@FrameTD; i++) {
  911. TextDrawShowForPlayer(playerid, Prev@FrameTD[i]);
  912. }
  913. /*
  914. * BUTTONS AND PLAYER DIALOG TEXTDRAWS
  915. */
  916. if (button2[0] == EOS) { // only one center button
  917. TextDrawHideForPlayer(playerid, Prev@LeftButtonTD[0]);
  918. TextDrawHideForPlayer(playerid, Prev@LeftButtonTD[1]);
  919. TextDrawHideForPlayer(playerid, Prev@RightButtonTD[0]);
  920. TextDrawHideForPlayer(playerid, Prev@RightButtonTD[1]);
  921. TextDrawShowForPlayer(playerid, Prev@CenterButtonTD[0]);
  922. TextDrawShowForPlayer(playerid, Prev@CenterButtonTD[1]);
  923. Prev_CreatePlayerTextDraws(playerid, caption, "", "", button1, Prev@PlayerDialogNumListitems[playerid]);
  924. PlayerTextDrawShow(playerid, Prev@CenterButtonPTD[playerid]);
  925. } else { // dual buttons
  926. TextDrawShowForPlayer(playerid, Prev@LeftButtonTD[0]);
  927. TextDrawShowForPlayer(playerid, Prev@LeftButtonTD[1]);
  928. TextDrawShowForPlayer(playerid, Prev@RightButtonTD[0]);
  929. TextDrawShowForPlayer(playerid, Prev@RightButtonTD[1]);
  930. TextDrawHideForPlayer(playerid, Prev@CenterButtonTD[0]);
  931. TextDrawHideForPlayer(playerid, Prev@CenterButtonTD[1]);
  932. Prev_CreatePlayerTextDraws(playerid, caption, button1, button2, "", Prev@PlayerDialogNumListitems[playerid]);
  933. PlayerTextDrawShow(playerid, Prev@LeftButtonPTD[playerid]);
  934. PlayerTextDrawShow(playerid, Prev@RightButtonPTD[playerid]);
  935. }
  936. /*
  937. * HEADER
  938. */
  939. PlayerTextDrawShow(playerid, Prev@HeaderPTD[playerid]);
  940. /*
  941. * PAGE NUMBER
  942. */
  943. PlayerTextDrawShow(playerid, Prev@PageNumberPTD[playerid]);
  944. /*
  945. * SCROLLBAR
  946. */
  947. Prev@ScrollBarPTD[playerid] = PlayerText:INVALID_TEXT_DRAW;
  948. if (Prev@PlayerDialogNumListitems[playerid] > (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) {
  949. Prev_UpdateScrollBar(playerid, 0, Prev_GetNumPages(playerid));
  950. }
  951. /*
  952. * PREVIEW MODEL LISTITEMS
  953. */
  954. Prev_UpdateListitems(playerid, 0, 0, Prev@PlayerDialogNumListitems[playerid]);
  955. return SelectTextDraw(playerid, DIALOG_PREVIEW_SELECT_COLOR);
  956. }
  957. #if defined _ALS_ShowPlayerDialog
  958. #undef ShowPlayerDialog
  959. #else
  960. #define _ALS_ShowPlayerDialog
  961. #endif
  962. #define ShowPlayerDialog Prev_ShowPlayerDialog
  963. stock ShowPreviewModelDialog(playerid, dialogid, caption[], models[], labels[][], button1[], button2[], size = sizeof models) {
  964. if (playerid < 0 || playerid >= MAX_PLAYERS) {
  965. return 0;
  966. }
  967. if (Prev@PlayerDialogID[playerid] != -1) {
  968. Prev_HidePlayerDialog(playerid);
  969. }
  970. if (dialogid < 0 || size <= 0) {
  971. return 0;
  972. }
  973. if (size >= MAX_DIALOG_PREVIEW_MODELS) {
  974. size = MAX_DIALOG_PREVIEW_MODELS;
  975. printf("[PreviewModelDialog.inc] - Warning: You have more than \"MAX_DIALOG_PREVIEW_MODELS\" ("#MAX_DIALOG_PREVIEW_MODELS") listitems in your dialog, only the first "#MAX_DIALOG_PREVIEW_MODELS" listitems were loaded.");
  976. }
  977. Prev@PlayerModelsPointer[playerid] = MEM_new_arr(models, size);
  978. for (new i = 0; i < size; i++) {
  979. Prev@PlayerModelNamesPointer[playerid][i] = MEM_new_arr(labels[i], strlen(labels[i]));
  980. }
  981. /*
  982. * FRAME
  983. */
  984. for (new i = 0; i < sizeof Prev@FrameTD; i++) {
  985. TextDrawShowForPlayer(playerid, Prev@FrameTD[i]);
  986. }
  987. // set player data
  988. Prev@PlayerDialogID[playerid] = dialogid;
  989. Prev@PlayerDialogListitem[playerid] = 0;
  990. Prev@PlayerDialogNumListitems[playerid] = size;
  991. Prev@PlayerDialogPage[playerid] = 0;
  992. Prev@PlayerDialogTickCount[playerid] = 0;
  993. /*
  994. * BUTTONS AND PLAYER DIALOG TEXTDRAWS
  995. */
  996. if (button2[0] == EOS) { // only one center button
  997. TextDrawHideForPlayer(playerid, Prev@LeftButtonTD[0]);
  998. TextDrawHideForPlayer(playerid, Prev@LeftButtonTD[1]);
  999. TextDrawHideForPlayer(playerid, Prev@RightButtonTD[0]);
  1000. TextDrawHideForPlayer(playerid, Prev@RightButtonTD[1]);
  1001. TextDrawShowForPlayer(playerid, Prev@CenterButtonTD[0]);
  1002. TextDrawShowForPlayer(playerid, Prev@CenterButtonTD[1]);
  1003. Prev_CreatePlayerTextDraws(playerid, caption, "", "", button1, Prev@PlayerDialogNumListitems[playerid]);
  1004. PlayerTextDrawShow(playerid, Prev@CenterButtonPTD[playerid]);
  1005. } else { // dual buttons
  1006. TextDrawShowForPlayer(playerid, Prev@LeftButtonTD[0]);
  1007. TextDrawShowForPlayer(playerid, Prev@LeftButtonTD[1]);
  1008. TextDrawShowForPlayer(playerid, Prev@RightButtonTD[0]);
  1009. TextDrawShowForPlayer(playerid, Prev@RightButtonTD[1]);
  1010. TextDrawHideForPlayer(playerid, Prev@CenterButtonTD[0]);
  1011. TextDrawHideForPlayer(playerid, Prev@CenterButtonTD[1]);
  1012. Prev_CreatePlayerTextDraws(playerid, caption, button1, button2, "", Prev@PlayerDialogNumListitems[playerid]);
  1013. PlayerTextDrawShow(playerid, Prev@LeftButtonPTD[playerid]);
  1014. PlayerTextDrawShow(playerid, Prev@RightButtonPTD[playerid]);
  1015. }
  1016. /*
  1017. * HEADER
  1018. */
  1019. PlayerTextDrawShow(playerid, Prev@HeaderPTD[playerid]);
  1020. /*
  1021. * PAGE NUMBER
  1022. */
  1023. PlayerTextDrawShow(playerid, Prev@PageNumberPTD[playerid]);
  1024. /*
  1025. * SCROLLBAR
  1026. */
  1027. Prev@ScrollBarPTD[playerid] = PlayerText:INVALID_TEXT_DRAW;
  1028. if (Prev@PlayerDialogNumListitems[playerid] > (MAX_DIALOG_PREVIEW_ROWS * MAX_DIALOG_PREVIEW_COLUMNS)) {
  1029. Prev_UpdateScrollBar(playerid, 0, Prev_GetNumPages(playerid));
  1030. }
  1031. /*
  1032. * PREVIEW MODEL LISTITEMS
  1033. */
  1034. Prev_UpdateListitems(playerid, 0, 0, Prev@PlayerDialogNumListitems[playerid]);
  1035. return SelectTextDraw(playerid, DIALOG_PREVIEW_SELECT_COLOR);
  1036. }
  1037. #define Dialog_ShowPreviewModelDialog \
  1038. ShowPreviewModelDialog
  1039. #define ShowPlayerPreviewModelDialog \
  1040. ShowPreviewModelDialog
  1041. stock SetDialogPreviewRotation(playerid, listitem, Float:rx, Float:ry, Float:rz, Float:zoom) {
  1042. if (playerid < 0 || playerid >= MAX_PLAYERS) {
  1043. return 0;
  1044. }
  1045. if (listitem < 0 || listitem >= MAX_DIALOG_PREVIEW_MODELS) {
  1046. return 0;
  1047. }
  1048. MEM_set_val(Prev@PlayerModelRotsPointer[playerid][0], listitem, _:rx);
  1049. MEM_set_val(Prev@PlayerModelRotsPointer[playerid][1], listitem, _:ry);
  1050. MEM_set_val(Prev@PlayerModelRotsPointer[playerid][2], listitem, _:rz);
  1051. MEM_set_val(Prev@PlayerModelRotsPointer[playerid][3], listitem, _:zoom);
  1052. return 1;
  1053. }
  1054. #define Dialog_SetListitemPreviewRot \
  1055. SetDialogPreviewRotation
  1056. #define Dialog_SetModelRot \
  1057. Dialog_SetListitemPreviewRot