objectviewer.inc 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. static str[128];
  2. #define _SELECTION_ITEMS 21
  3. #define _ITEMS_PER_LINE 7
  4. #define HEADER_TEXT "Objects"
  5. #define _DIALOG_BASE_X 81.0
  6. #define _DIALOG_BASE_Y 84.0
  7. #define _DIALOG_WIDTH 550.0
  8. #define _DIALOG_HEIGHT 180.0
  9. #define _SPRITE_DIM_X 60.0
  10. #define _SPRITE_DIM_Y 70.0
  11. #define BUY_FURNITURE_CATEGORY_DECO 1
  12. #define BUY_FURNITURE_CATEGORY_OFFICE 2
  13. #define BUY_FURNITURE_CATEGORY_HOBBY 3
  14. #define BUY_FURNITURE_CATEGORY_LOUNGE 4
  15. #define BUY_FURNITURE_CATEGORY_BEDROOM 5
  16. #define BUY_FURNITURE_CATEGORY_KITCHEN 6
  17. #define BUY_FURNITURE_CATEGORY_DINING 7
  18. #define BUY_FURNITURE_CATEGORY_BATHROOM 8
  19. #define BUY_FURNITURE_CATEGORY_LAUNDRY 9
  20. #define BUY_FURNITURE_CATEGORY_ELECTRONICS 10
  21. #define BUY_FURNITURE_CATEGORY_LIGHTS 11
  22. #define BUY_FURNITURE_CATEGORY_OUTDOOR 12
  23. #define BUY_FURNITURE_CATEGORY_STRUCTURE 13
  24. new MAXIMUM_OBJECTS = 904;
  25. new PlayerText:_gBackgroundTextDrawId[MAX_PLAYERS];
  26. new PlayerText:prev_topbar[MAX_PLAYERS];
  27. new PlayerText:prev_bottombar[MAX_PLAYERS];
  28. new PlayerText:prev_topbar_line[MAX_PLAYERS];
  29. new PlayerText:prev_houseicon[MAX_PLAYERS];
  30. new PlayerText:prev_bottombar_line[MAX_PLAYERS];
  31. new PlayerText:_gNextButtonTextDrawId[MAX_PLAYERS];
  32. new PlayerText:_gPrevButtonTextDrawId[MAX_PLAYERS];
  33. new PlayerText:_gSelectionItems[MAX_PLAYERS][_SELECTION_ITEMS];
  34. new PlayerText:_gSelectionItemName[MAX_PLAYERS][_SELECTION_ITEMS];
  35. new PlayerText:_gSelectionItemPrice[MAX_PLAYERS][_SELECTION_ITEMS];
  36. new PlayerText:_gCurrentPageTextDrawId[MAX_PLAYERS];
  37. new PlayerText:_gHeaderTextDrawId[MAX_PLAYERS];
  38. new _gSelectionItemsTag[MAX_PLAYERS][_SELECTION_ITEMS];
  39. new _gItemAt[MAX_PLAYERS];
  40. //------------------------------------------------
  41. _GetNumberOfPages(category)
  42. {
  43. new total_pages = 0;
  44. switch(category) {
  45. case BUY_FURNITURE_CATEGORY_DECO: //Decorations
  46. {
  47. total_pages = 5;
  48. }
  49. case BUY_FURNITURE_CATEGORY_OFFICE: //Office
  50. {
  51. total_pages = 3;
  52. }
  53. case BUY_FURNITURE_CATEGORY_HOBBY: //Hobby
  54. {
  55. total_pages = 3;
  56. }
  57. case BUY_FURNITURE_CATEGORY_LOUNGE: //Lounge
  58. {
  59. total_pages = 3;
  60. }
  61. case BUY_FURNITURE_CATEGORY_BEDROOM: //Bedroom
  62. {
  63. total_pages = 3;
  64. }
  65. case BUY_FURNITURE_CATEGORY_KITCHEN: //Kitchen
  66. {
  67. total_pages = 7;
  68. }
  69. case BUY_FURNITURE_CATEGORY_DINING: //Dining
  70. {
  71. total_pages = 2;
  72. }
  73. case BUY_FURNITURE_CATEGORY_BATHROOM: //Bathroom
  74. {
  75. total_pages = 2;
  76. }
  77. case BUY_FURNITURE_CATEGORY_LAUNDRY: //Laundry
  78. {
  79. total_pages = 1;
  80. }
  81. case BUY_FURNITURE_CATEGORY_ELECTRONICS: //Electronics
  82. {
  83. total_pages = 3;
  84. }
  85. case BUY_FURNITURE_CATEGORY_LIGHTS: //Lights
  86. {
  87. total_pages = 1;
  88. }
  89. case BUY_FURNITURE_CATEGORY_OUTDOOR: //Outdoor
  90. {
  91. total_pages = 4;
  92. }
  93. case BUY_FURNITURE_CATEGORY_STRUCTURE: //Structure
  94. {
  95. total_pages = 4;
  96. }
  97. }
  98. return total_pages;
  99. }
  100. //------------------------------------------------
  101. // Creates a model preview sprite
  102. PlayerText:CreateModelPreviewTextDraw(playerid, modelindex, Float:Xpos, Float:Ypos, Float:width, Float:height, Float:rotX, Float:rotY)
  103. {
  104. new PlayerText:txtPlayerSprite = CreatePlayerTextDraw(playerid, Xpos, Ypos, ""); // it has to be set with SetText later
  105. PlayerTextDrawFont(playerid, txtPlayerSprite, TEXT_DRAW_FONT_MODEL_PREVIEW);
  106. PlayerTextDrawColor(playerid, txtPlayerSprite, 0xFFFFFFFF);
  107. PlayerTextDrawBackgroundColor(playerid, txtPlayerSprite, 0x2E2E2E70);
  108. PlayerTextDrawTextSize(playerid, txtPlayerSprite, width, height); // Text size is the Width:Height
  109. PlayerTextDrawSetPreviewModel(playerid, txtPlayerSprite, modelindex);
  110. PlayerTextDrawSetSelectable(playerid, txtPlayerSprite, 1);
  111. PlayerTextDrawSetPreviewRot(playerid, txtPlayerSprite, rotX, rotY, 0.0, 1.0);
  112. PlayerTextDrawShow(playerid,txtPlayerSprite);
  113. return txtPlayerSprite;
  114. }
  115. PlayerText:CreateModelPreviewNameTextDraw(playerid, Float:Xpos, Float:Ypos, Float:Width, Float:Height, button_text[])
  116. {
  117. new PlayerText:txtInit;
  118. txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, button_text);
  119. PlayerTextDrawUseBox(playerid, txtInit, 1);
  120. PlayerTextDrawBoxColor(playerid, txtInit, 0x00000000);
  121. //PlayerTextDrawBackgroundColor(playerid, txtInit, 0x000000FF);
  122. PlayerTextDrawLetterSize(playerid, txtInit, 0.15, 0.65);
  123. PlayerTextDrawFont(playerid, txtInit, 1);
  124. PlayerTextDrawSetShadow(playerid, txtInit, 0); // no shadow
  125. PlayerTextDrawSetOutline(playerid, txtInit, 0);
  126. PlayerTextDrawColor(playerid, txtInit, 0xD3AA29FF);
  127. PlayerTextDrawAlignment(playerid, txtInit, 2);
  128. PlayerTextDrawTextSize(playerid, txtInit, Height, Width); // The width and height are reversed for centering.. something the game does <g>
  129. PlayerTextDrawShow(playerid, txtInit);
  130. return txtInit;
  131. }
  132. PlayerText:CreateModelPreviewPriceTextDraw(playerid, Float:Xpos, Float:Ypos, Float:Width, Float:Height, button_text[])
  133. {
  134. new PlayerText:txtInit;
  135. txtInit = CreatePlayerTextDraw(playerid, Xpos, Ypos, button_text);
  136. PlayerTextDrawUseBox(playerid, txtInit, 1);
  137. PlayerTextDrawBoxColor(playerid, txtInit, 0x00000000);
  138. //PlayerTextDrawBackgroundColor(playerid, txtInit, 0x000000FF);
  139. PlayerTextDrawLetterSize(playerid, txtInit, 0.15, 0.65);
  140. PlayerTextDrawFont(playerid, txtInit, 1);
  141. PlayerTextDrawSetShadow(playerid, txtInit, 0); // no shadow
  142. PlayerTextDrawSetOutline(playerid, txtInit, 0);
  143. PlayerTextDrawColor(playerid, txtInit, 0x1A7E1CFF);
  144. PlayerTextDrawAlignment(playerid, txtInit, 2);
  145. PlayerTextDrawTextSize(playerid, txtInit, Height, Width); // The width and height are reversed for centering.. something the game does <g>
  146. PlayerTextDrawShow(playerid, txtInit);
  147. return txtInit;
  148. }
  149. //------------------------------------------------
  150. _DestroyPlayerModelPreviews(playerid)
  151. {
  152. new x=0;
  153. while(x != _SELECTION_ITEMS) {
  154. if(_gSelectionItems[playerid][x] != PlayerText:INVALID_TEXT_DRAW) {
  155. PlayerTextDrawDestroy(playerid, _gSelectionItems[playerid][x]);
  156. _gSelectionItems[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
  157. //destroy nametag
  158. PlayerTextDrawDestroy(playerid, _gSelectionItemName[playerid][x]);
  159. _gSelectionItemName[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
  160. //destroy price
  161. PlayerTextDrawDestroy(playerid, _gSelectionItemPrice[playerid][x]);
  162. _gSelectionItemPrice[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
  163. }
  164. x++;
  165. }
  166. }
  167. //------------------------------------------------
  168. _ShowPlayerModelPreviews(playerid, category)
  169. {
  170. new x=0;
  171. new Float:BaseX = _DIALOG_BASE_X;
  172. new Float:BaseY = _DIALOG_BASE_Y - (_SPRITE_DIM_Y * 0.33); // down a bit
  173. new linetracker = 0;
  174. new itemat = GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  175. /*
  176. //DEBUG
  177. new dbstr[128];
  178. format(dbstr, sizeof(dbstr), "itemat is %d", itemat);
  179. SendClientMessage(playerid, -1, dbstr);
  180. format(dbstr, sizeof(dbstr), "_SELECTION_ITEMS is %d", _SELECTION_ITEMS);
  181. SendClientMessage(playerid, -1, dbstr);
  182. format(dbstr, sizeof(dbstr), "MAXIMUM_OBJECTS is %d", MAXIMUM_OBJECTS);
  183. SendClientMessage(playerid, -1, dbstr);
  184. */
  185. // Destroy any previous ones created
  186. _DestroyPlayerModelPreviews(playerid);
  187. switch(category)
  188. {
  189. case BUY_FURNITURE_CATEGORY_DECO: //Decor
  190. {
  191. itemat = 0 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  192. MAXIMUM_OBJECTS = 88;
  193. }
  194. case BUY_FURNITURE_CATEGORY_OFFICE: //Office
  195. {
  196. itemat = 88 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  197. MAXIMUM_OBJECTS = 132;
  198. }
  199. case BUY_FURNITURE_CATEGORY_HOBBY: //Hobby
  200. {
  201. itemat = 132 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  202. MAXIMUM_OBJECTS = 184;
  203. }
  204. case BUY_FURNITURE_CATEGORY_LOUNGE: //Lounge
  205. {
  206. itemat = 184 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  207. MAXIMUM_OBJECTS = 231;
  208. }
  209. case BUY_FURNITURE_CATEGORY_BEDROOM: //Bedroom
  210. {
  211. itemat = 231 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  212. MAXIMUM_OBJECTS = 281;
  213. }
  214. case BUY_FURNITURE_CATEGORY_KITCHEN: //Kitchen
  215. {
  216. itemat = 281 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  217. MAXIMUM_OBJECTS = 417;
  218. }
  219. case BUY_FURNITURE_CATEGORY_DINING: //Dining
  220. {
  221. itemat = 417 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  222. MAXIMUM_OBJECTS = 449;
  223. }
  224. case BUY_FURNITURE_CATEGORY_BATHROOM: //Bathroom
  225. {
  226. itemat = 449 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  227. MAXIMUM_OBJECTS = 473;
  228. }
  229. case BUY_FURNITURE_CATEGORY_LAUNDRY: //Laundry
  230. {
  231. itemat = 473 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  232. MAXIMUM_OBJECTS = 483;
  233. }
  234. case BUY_FURNITURE_CATEGORY_ELECTRONICS: //Eletronics
  235. {
  236. itemat = 483 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  237. MAXIMUM_OBJECTS = 538;
  238. }
  239. case BUY_FURNITURE_CATEGORY_LIGHTS: //Lights
  240. {
  241. itemat = 538 + GetPVarInt(playerid, "ospawner_page") * _SELECTION_ITEMS;
  242. MAXIMUM_OBJECTS = 559;
  243. }
  244. case BUY_FURNITURE_CATEGORY_OUTDOOR: //Outdoor
  245. {
  246. itemat = 559 + GetPVarInt( playerid, "ospawner_page") * _SELECTION_ITEMS;
  247. MAXIMUM_OBJECTS = 626;
  248. }
  249. case BUY_FURNITURE_CATEGORY_STRUCTURE: //Structural Changes
  250. {
  251. itemat = 626 + GetPVarInt( playerid, "ospawner_page") * _SELECTION_ITEMS;
  252. MAXIMUM_OBJECTS = 693;
  253. }
  254. }
  255. while(x != _SELECTION_ITEMS && itemat < MAXIMUM_OBJECTS) {
  256. if(linetracker == 0) {
  257. BaseX = _DIALOG_BASE_X + 25.0; // in a bit from the box
  258. BaseY += _SPRITE_DIM_Y + 1.0; // move on the Y for the next line
  259. }
  260. _gSelectionItems[playerid][x] = CreateModelPreviewTextDraw(playerid, FurnitureObjectList[itemat][fD_model], BaseX, BaseY, _SPRITE_DIM_X, _SPRITE_DIM_Y, FurnitureObjectList[itemat][fD_rotX], FurnitureObjectList[itemat][fD_rotY]);
  261. _gSelectionItemsTag[playerid][x] = FurnitureObjectList[itemat][fD_model];
  262. _gSelectionItemName[playerid][x] = CreateModelPreviewNameTextDraw(playerid, BaseX + _SPRITE_DIM_X / 2, BaseY + _SPRITE_DIM_Y / 2 + 15, 50.0, 30.0, FurnitureObjectList[itemat][fD_name]);
  263. new pricestr[10];
  264. format(pricestr, sizeof(pricestr), "$%d", FurnitureObjectList[itemat][fD_price]);
  265. _gSelectionItemPrice[playerid][x] = CreateModelPreviewPriceTextDraw(playerid, BaseX + _SPRITE_DIM_X / 2, BaseY + _SPRITE_DIM_Y / 2 + 23, 50.0, 30.0, pricestr);
  266. BaseX += _SPRITE_DIM_X + 1.0; // move on the X for the next sprite
  267. linetracker++;
  268. if(linetracker == _ITEMS_PER_LINE) linetracker = 0;
  269. itemat++;
  270. x++;
  271. }
  272. }
  273. //------------------------------------------------
  274. _UpdatePageTextDraw(playerid, category)
  275. {
  276. new PageText[64+1];
  277. format(PageText, 64, "%d/%d", GetPVarInt(playerid,"ospawner_page") + 1, _GetNumberOfPages(category));
  278. PlayerTextDrawSetString(playerid, _gCurrentPageTextDrawId[playerid], PageText);
  279. }
  280. //------------------------------------------------
  281. _CreateSelectionMenu(playerid, category)
  282. {
  283. //background
  284. _gBackgroundTextDrawId[playerid] = CreatePlayerTextDraw(playerid, 92.000000, 125.000000, "_");
  285. PlayerTextDrawBackgroundColor(playerid, _gBackgroundTextDrawId[playerid], 255);
  286. PlayerTextDrawFont(playerid,_gBackgroundTextDrawId[playerid], 1);
  287. PlayerTextDrawLetterSize(playerid, _gBackgroundTextDrawId[playerid], 0.500000, 25.000003);
  288. PlayerTextDrawColor(playerid, _gBackgroundTextDrawId[playerid], -1);
  289. PlayerTextDrawSetOutline(playerid, _gBackgroundTextDrawId[playerid], 0);
  290. PlayerTextDrawSetShadow(playerid, _gBackgroundTextDrawId[playerid], 1);
  291. PlayerTextDrawUseBox(playerid, _gBackgroundTextDrawId[playerid], 1);
  292. PlayerTextDrawBoxColor(playerid, _gBackgroundTextDrawId[playerid], 150);
  293. PlayerTextDrawTextSize(playerid, _gBackgroundTextDrawId[playerid], 547.000000, 106.000000);
  294. PlayerTextDrawShow(playerid, _gBackgroundTextDrawId[playerid]);
  295. //bottom bar
  296. prev_bottombar[playerid] = CreatePlayerTextDraw(playerid, 92.000000, 354.000000, "_");
  297. PlayerTextDrawBackgroundColor(playerid, prev_bottombar[playerid], 255);
  298. PlayerTextDrawFont(playerid, prev_bottombar[playerid], 1);
  299. PlayerTextDrawLetterSize(playerid, prev_bottombar[playerid], 0.500000, 1.000002);
  300. PlayerTextDrawColor(playerid, prev_bottombar[playerid], -1);
  301. PlayerTextDrawSetOutline(playerid, prev_bottombar[playerid], 0);
  302. PlayerTextDrawSetShadow(playerid, prev_bottombar[playerid], 1);
  303. PlayerTextDrawUseBox(playerid, prev_bottombar[playerid], 1);
  304. PlayerTextDrawBoxColor(playerid, prev_bottombar[playerid], 180);
  305. PlayerTextDrawTextSize(playerid, prev_bottombar[playerid], 547.000000, 111.000000);
  306. PlayerTextDrawShow(playerid, prev_bottombar[playerid]);
  307. //top bar
  308. prev_topbar[playerid] = CreatePlayerTextDraw(playerid, 92.000000, 112.000000, "_");
  309. PlayerTextDrawBackgroundColor(playerid, prev_topbar[playerid], 255);
  310. PlayerTextDrawFont(playerid, prev_topbar[playerid], 1);
  311. PlayerTextDrawLetterSize(playerid, prev_topbar[playerid], 0.500000, 1.000002);
  312. PlayerTextDrawColor(playerid, prev_topbar[playerid], -1);
  313. PlayerTextDrawSetOutline(playerid, prev_topbar[playerid], 0);
  314. PlayerTextDrawSetShadow(playerid, prev_topbar[playerid], 1);
  315. PlayerTextDrawUseBox(playerid, prev_topbar[playerid], 1);
  316. PlayerTextDrawBoxColor(playerid, prev_topbar[playerid], 180);
  317. PlayerTextDrawTextSize(playerid, prev_topbar[playerid], 547.000000, 111.000000);
  318. PlayerTextDrawShow(playerid, prev_topbar[playerid]);
  319. //bottom bar line
  320. prev_bottombar_line[playerid] = CreatePlayerTextDraw(playerid, 92.000000, 353.000000, "_");
  321. PlayerTextDrawBackgroundColor(playerid, prev_bottombar_line[playerid], 255);
  322. PlayerTextDrawFont(playerid, prev_bottombar_line[playerid], 1);
  323. PlayerTextDrawLetterSize(playerid, prev_bottombar_line[playerid], 0.500000, -0.199996);
  324. PlayerTextDrawColor(playerid, prev_bottombar_line[playerid], -1);
  325. PlayerTextDrawSetOutline(playerid, prev_bottombar_line[playerid], 0);
  326. PlayerTextDrawSetShadow(playerid, prev_bottombar_line[playerid], 1);
  327. PlayerTextDrawUseBox(playerid, prev_bottombar_line[playerid], 1);
  328. PlayerTextDrawBoxColor(playerid, prev_bottombar_line[playerid], 336860310);
  329. PlayerTextDrawTextSize(playerid, prev_bottombar_line[playerid], 547.000000, 290.000000);
  330. PlayerTextDrawShow(playerid, prev_bottombar_line[playerid]);
  331. //top bar line
  332. prev_topbar_line[playerid] = CreatePlayerTextDraw(playerid, 92.000000, 124.000000, "_");
  333. PlayerTextDrawBackgroundColor(playerid, prev_topbar_line[playerid], 255);
  334. PlayerTextDrawFont(playerid, prev_topbar_line[playerid], 1);
  335. PlayerTextDrawLetterSize(playerid, prev_topbar_line[playerid], 0.500000, -0.199995);
  336. PlayerTextDrawColor(playerid, prev_topbar_line[playerid], -1);
  337. PlayerTextDrawSetOutline(playerid, prev_topbar_line[playerid], 0);
  338. PlayerTextDrawSetShadow(playerid, prev_topbar_line[playerid], 1);
  339. PlayerTextDrawUseBox(playerid, prev_topbar_line[playerid], 1);
  340. PlayerTextDrawBoxColor(playerid, prev_topbar_line[playerid], 336860310);
  341. PlayerTextDrawTextSize(playerid, prev_topbar_line[playerid], 547.000000, 290.000000);
  342. PlayerTextDrawShow(playerid, prev_topbar_line[playerid]);
  343. //tshirt icon
  344. prev_houseicon[playerid] = CreatePlayerTextDraw(playerid, 94.000000, 112.000000, "hud:radar_propertyG");
  345. PlayerTextDrawBackgroundColor(playerid, prev_houseicon[playerid], 255);
  346. PlayerTextDrawFont(playerid, prev_houseicon[playerid], 4);
  347. PlayerTextDrawLetterSize(playerid, prev_houseicon[playerid], 0.500000, 1.000000);
  348. PlayerTextDrawColor(playerid, prev_houseicon[playerid], -1);
  349. PlayerTextDrawSetOutline(playerid, prev_houseicon[playerid], 0);
  350. PlayerTextDrawSetShadow(playerid, prev_houseicon[playerid], 1);
  351. PlayerTextDrawUseBox(playerid, prev_houseicon[playerid], 1);
  352. PlayerTextDrawBoxColor(playerid, prev_houseicon[playerid], -1);
  353. PlayerTextDrawTextSize(playerid, prev_houseicon[playerid], 9.000000, 10.000000);
  354. PlayerTextDrawShow(playerid, prev_houseicon[playerid]);
  355. //page number
  356. _gCurrentPageTextDrawId[playerid] = CreatePlayerTextDraw(playerid, 545.000000, 112.000000, "0/0");
  357. PlayerTextDrawAlignment(playerid, _gCurrentPageTextDrawId[playerid], 3);
  358. PlayerTextDrawBackgroundColor(playerid, _gCurrentPageTextDrawId[playerid], 255);
  359. PlayerTextDrawFont(playerid, _gCurrentPageTextDrawId[playerid], 1);
  360. PlayerTextDrawLetterSize(playerid, _gCurrentPageTextDrawId[playerid], 0.149999, 0.899999);
  361. PlayerTextDrawColor(playerid, _gCurrentPageTextDrawId[playerid], -2105376106);
  362. PlayerTextDrawSetOutline(playerid, _gCurrentPageTextDrawId[playerid], 0);
  363. PlayerTextDrawSetShadow(playerid, _gCurrentPageTextDrawId[playerid], 0);
  364. PlayerTextDrawUseBox(playerid, _gCurrentPageTextDrawId[playerid], 0);
  365. PlayerTextDrawSetProportional(playerid, _gCurrentPageTextDrawId[playerid], 1);
  366. PlayerTextDrawShow(playerid, _gCurrentPageTextDrawId[playerid]);
  367. //arrowright
  368. _gNextButtonTextDrawId[playerid] = CreatePlayerTextDraw(playerid, 537.000000, 354.000000, "LD_BEAT:right");
  369. PlayerTextDrawBackgroundColor(playerid, _gNextButtonTextDrawId[playerid], 255);
  370. PlayerTextDrawFont(playerid, _gNextButtonTextDrawId[playerid], 4);
  371. PlayerTextDrawLetterSize(playerid, _gNextButtonTextDrawId[playerid], 0.500000, 1.000000);
  372. PlayerTextDrawColor(playerid, _gNextButtonTextDrawId[playerid], -1);
  373. PlayerTextDrawSetOutline(playerid, _gNextButtonTextDrawId[playerid], 0);
  374. PlayerTextDrawSetShadow(playerid, _gNextButtonTextDrawId[playerid], 1);
  375. PlayerTextDrawUseBox(playerid, _gNextButtonTextDrawId[playerid], 1);
  376. PlayerTextDrawBoxColor(playerid, _gNextButtonTextDrawId[playerid], 255);
  377. PlayerTextDrawTextSize(playerid, _gNextButtonTextDrawId[playerid], 8.000000, 9.000000);
  378. PlayerTextDrawSetSelectable(playerid, _gNextButtonTextDrawId[playerid], 1);
  379. PlayerTextDrawShow(playerid, _gNextButtonTextDrawId[playerid]);
  380. //arrowleft
  381. _gPrevButtonTextDrawId[playerid] = CreatePlayerTextDraw(playerid, 524.000000, 354.000000, "LD_BEAT:left");
  382. PlayerTextDrawBackgroundColor(playerid, _gPrevButtonTextDrawId[playerid], 255);
  383. PlayerTextDrawFont(playerid, _gPrevButtonTextDrawId[playerid], 4);
  384. PlayerTextDrawLetterSize(playerid, _gPrevButtonTextDrawId[playerid], 0.500000, 1.000000);
  385. PlayerTextDrawColor(playerid, _gPrevButtonTextDrawId[playerid], -1);
  386. PlayerTextDrawSetOutline(playerid, _gPrevButtonTextDrawId[playerid], 0);
  387. PlayerTextDrawSetShadow(playerid, _gPrevButtonTextDrawId[playerid], 1);
  388. PlayerTextDrawUseBox(playerid, _gPrevButtonTextDrawId[playerid], 1);
  389. PlayerTextDrawBoxColor(playerid, _gPrevButtonTextDrawId[playerid], 255);
  390. PlayerTextDrawTextSize(playerid, _gPrevButtonTextDrawId[playerid], 8.000000, 9.000000);
  391. PlayerTextDrawSetSelectable(playerid, _gPrevButtonTextDrawId[playerid], 1);
  392. PlayerTextDrawShow(playerid, _gPrevButtonTextDrawId[playerid]);
  393. _ShowPlayerModelPreviews(playerid, category);
  394. _UpdatePageTextDraw(playerid, category);
  395. }
  396. //------------------------------------------------
  397. _DestroySelectionMenu(playerid)
  398. {
  399. _DestroyPlayerModelPreviews(playerid);
  400. PlayerTextDrawDestroy(playerid, _gHeaderTextDrawId[playerid]);
  401. PlayerTextDrawDestroy(playerid, _gBackgroundTextDrawId[playerid]);
  402. PlayerTextDrawDestroy(playerid, prev_bottombar[playerid]); //bottombar
  403. PlayerTextDrawDestroy(playerid, prev_topbar[playerid]); //topbar
  404. PlayerTextDrawDestroy(playerid, prev_topbar_line[playerid]); //topbar line
  405. PlayerTextDrawDestroy(playerid, prev_bottombar_line[playerid]);
  406. PlayerTextDrawDestroy(playerid, prev_houseicon[playerid]);
  407. PlayerTextDrawDestroy(playerid, _gCurrentPageTextDrawId[playerid]);
  408. PlayerTextDrawDestroy(playerid, _gNextButtonTextDrawId[playerid]);
  409. PlayerTextDrawDestroy(playerid, _gPrevButtonTextDrawId[playerid]);
  410. _gHeaderTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  411. _gBackgroundTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  412. prev_bottombar[playerid] = PlayerText:INVALID_TEXT_DRAW; //buttombar
  413. prev_topbar[playerid] = PlayerText:INVALID_TEXT_DRAW; //topbar
  414. prev_topbar_line[playerid] = PlayerText:INVALID_TEXT_DRAW; //topbar line
  415. prev_bottombar_line[playerid] = PlayerText:INVALID_TEXT_DRAW; //bottombar line
  416. prev_houseicon[playerid] = PlayerText:INVALID_TEXT_DRAW; //bottombar line
  417. _gCurrentPageTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  418. _gNextButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  419. _gPrevButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  420. }
  421. stock getFurnitureIndexFromModel(modelid) {
  422. for(new i; i < sizeof(FurnitureObjectList); i++) {
  423. if(modelid == FurnitureObjectList[i][fD_model]) {
  424. return i;
  425. }
  426. }
  427. return -1;
  428. }
  429. HandleObjectItemSelection(playerid, selecteditem) {
  430. if(PlayerInfo[playerid][pCash] < FurnitureObjectList[selecteditem][fD_price]) {
  431. format(str, sizeof(str), "You cant afford the %s.", FurnitureObjectList[selecteditem][fD_name]);
  432. SendClientMessage(playerid, COLOR_GREY, str);
  433. return 1;
  434. }
  435. //add furniture to players house array
  436. new houseid = PlayerInfo[playerid][pHouseID];
  437. new modelid = FurnitureObjectList[selecteditem][fD_model];
  438. if(PlayerInfo[playerid][pHouseID] == 0) return SendClientMessage(playerid, COLOR_GREY, "You do not own a house.");
  439. if(HouseInfo[houseid][hFurnitureAmount] >= MAX_FURNITURE) return SendClientMessage(playerid, COLOR_GREY, "You have reached the max amount of furniture slots.");
  440. CreateHouseFurniture(playerid, houseid, modelid, selecteditem); //ugly
  441. return 1;
  442. }
  443. //------------------------------------------------
  444. stock clearObjectViewerTD(playerid) {
  445. // Init all of the textdraw related globals
  446. _gHeaderTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  447. _gBackgroundTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  448. prev_bottombar[playerid] = PlayerText:INVALID_TEXT_DRAW;
  449. prev_topbar[playerid] = PlayerText:INVALID_TEXT_DRAW;
  450. prev_topbar_line[playerid] = PlayerText:INVALID_TEXT_DRAW;
  451. prev_bottombar_line[playerid] = PlayerText:INVALID_TEXT_DRAW;
  452. prev_houseicon[playerid] = PlayerText:INVALID_TEXT_DRAW;
  453. _gCurrentPageTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  454. _gNextButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  455. _gPrevButtonTextDrawId[playerid] = PlayerText:INVALID_TEXT_DRAW;
  456. new x=0;
  457. while(x != _SELECTION_ITEMS) {
  458. _gSelectionItems[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
  459. _gSelectionItemName[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
  460. _gSelectionItemPrice[playerid][x] = PlayerText:INVALID_TEXT_DRAW;
  461. x++;
  462. }
  463. _gItemAt[playerid] = 0;
  464. return 1;
  465. }
  466. stock playerClickOTextDraw(playerid, Text:clickedid) {
  467. if(GetPVarInt(playerid, "ospawner_active") == 0) return 0;
  468. // Handle: They cancelled (with ESC)
  469. if(clickedid == Text:INVALID_TEXT_DRAW) {
  470. _DestroySelectionMenu(playerid);
  471. SetPVarInt(playerid, "ospawner_active", 0);
  472. PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
  473. return 1;
  474. }
  475. return 1;
  476. }
  477. //------------------------------------------------
  478. stock playerClickObjectTextDraw(playerid, PlayerText:playertextid) {
  479. if(GetPVarInt(playerid, "ospawner_active") == 0) return 0;
  480. new curpage = GetPVarInt(playerid, "ospawner_page");
  481. new category = GetPVarInt(playerid, "ospawner_category");
  482. // Handle: next button
  483. if(playertextid == _gNextButtonTextDrawId[playerid]) {
  484. if(curpage < (_GetNumberOfPages(category) - 1)) {
  485. SetPVarInt(playerid, "ospawner_page", curpage + 1);
  486. _ShowPlayerModelPreviews(playerid, category);
  487. _UpdatePageTextDraw(playerid, category);
  488. PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
  489. } else {
  490. PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
  491. }
  492. return 1;
  493. }
  494. // Handle: previous button
  495. if(playertextid == _gPrevButtonTextDrawId[playerid]) {
  496. if(curpage > 0) {
  497. SetPVarInt(playerid, "ospawner_page", curpage - 1);
  498. _ShowPlayerModelPreviews(playerid, category);
  499. _UpdatePageTextDraw(playerid, category);
  500. PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0);
  501. } else {
  502. PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
  503. }
  504. return 1;
  505. }
  506. // Search in the array of textdraws used for the items
  507. new x=0;
  508. while(x != _SELECTION_ITEMS) {
  509. if(playertextid == _gSelectionItems[playerid][x]) {
  510. /*
  511. format(str, sizeof(str), "x is %d.", x);
  512. SendClientMessage(playerid, COLOR_GREY, str);
  513. format(str, sizeof(str), "_gSelectionItemsTag[playerid][x] is %d.", _gSelectionItemsTag[playerid][x]);
  514. SendClientMessage(playerid, COLOR_GREY, str);
  515. */
  516. new i = getFurnitureIndexFromModel(_gSelectionItemsTag[playerid][x]);
  517. if(i != -1) {
  518. /*
  519. format(str, sizeof(str), "found match at index %d.", i);
  520. SendClientMessage(playerid, COLOR_GREY, str);
  521. */
  522. format(str, sizeof(str), "Are you sure you want to pay $%d for a %s?", FurnitureObjectList[i][fD_price], FurnitureObjectList[i][fD_name]);
  523. ShowPlayerDialog(playerid, DIALOG_FURNITURE_BUY_CONFIRM, DIALOG_STYLE_MSGBOX, "Confirm", str, "Buy", "Back");
  524. SetPVarInt(playerid, "buying_furniture_id", i);
  525. PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
  526. _DestroySelectionMenu(playerid);
  527. CancelSelectTextDraw(playerid);
  528. SetPVarInt(playerid, "ospawner_active", 0);
  529. }
  530. return 1;
  531. }
  532. x++;
  533. }
  534. return 1;
  535. }