Advertisement
Guest User

iPLEOMAX Textdraw Editor pataisytas

a guest
Jan 31st, 2015
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 75.20 KB | None | 0 0
  1.  
  2.  
  3. #include <a_samp>
  4. #include <sscanf2>
  5.  
  6. /*
  7.  
  8. This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
  9. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
  10.  
  11. Author: iPLEOMAX
  12. Note: Do not release any other version without my permission.
  13.  
  14. */
  15.  
  16. #define ITD_VER "Version: 1.16 Stable (13/10/2012)"
  17. #define ITD_List "projects.lst"
  18. #define ITD_File "%s.itd"
  19. #define ITD "{62E300}iTD: {FFFFFF}"
  20. #define ITD_E "{62E300}iTD: {FF0000}(Error) {FFFFFF}"
  21. #define ITD_W "{62E300}iTD: {FFB429}(Warning) {FFFFFF}"
  22. #define ITD_I "{62E300}iTD: {00FF00}(Info) {FFFFFF}"
  23.  
  24. #if !defined isnull
  25. #define isnull(%1) \
  26. ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  27. #endif
  28.  
  29. #define Send(%0,%1,%2) SendClientMessage(%0, %1, %2)
  30. #define LoopProjectTextdraws for (new i = 0; i < MAX_PROJECT_TEXTDRAWS; i++)
  31. #define CountRange(%0,%1) for (new c = %0; c < %1; c++)
  32. #define EmptyString(%0) %0[0] = '\0'
  33. #define iShowPlayerDialog DialogShown = true, ShowPlayerDialog
  34.  
  35. #define INVALID_INDEX_ID (-1)
  36. #define MAX_PROJECT_TEXTDRAWS (100)
  37. #define MAX_UNDO_STATES (1000)
  38.  
  39. #define VK_KEY_A 0x41
  40. #define VK_KEY_B 0x42
  41. #define VK_KEY_C 0x43
  42. #define VK_KEY_D 0x44
  43. #define VK_KEY_E 0x45
  44. #define VK_KEY_F 0x46
  45. #define VK_KEY_G 0x47
  46. #define VK_KEY_H 0x48
  47. #define VK_KEY_I 0x49
  48. #define VK_KEY_J 0x4A
  49. #define VK_KEY_K 0x4B
  50. #define VK_KEY_L 0x4C
  51. #define VK_KEY_M 0x4D
  52. #define VK_KEY_N 0x4E
  53. #define VK_KEY_O 0x4F
  54. #define VK_KEY_P 0x50
  55. #define VK_KEY_Q 0x51
  56. #define VK_KEY_R 0x52
  57. #define VK_KEY_S 0x53
  58. #define VK_KEY_T 0x54
  59. #define VK_KEY_U 0x55
  60. #define VK_KEY_V 0x56
  61. #define VK_KEY_W 0x57
  62. #define VK_KEY_X 0x58
  63. #define VK_KEY_Y 0x59
  64. #define VK_KEY_Z 0x5A
  65. #define VK_LBUTTON 0x01
  66. #define VK_MBUTTON 0x04
  67. #define VK_RBUTTON 0x02
  68. #define VK_UP 0x26
  69. #define VK_DOWN 0x28
  70. #define VK_LEFT 0x25
  71. #define VK_RIGHT 0x27
  72. #define VK_LSHIFT 0xA0
  73. #define VK_RSHIFT 0xA1
  74. #define VK_SPACE 0x20
  75.  
  76. native GetVirtualKeyState(key);
  77. native GetScreenSize(&Width, &Height);
  78. native GetMousePos(&X, &Y);
  79.  
  80. enum
  81. {
  82. DIALOG_NEW = 6900,
  83. DIALOG_LIST,
  84. DIALOG_CREATE,
  85. DIALOG_TEXT,
  86. DIALOG_PROJECTS,
  87. DIALOG_COLOR,
  88. DIALOG_HEXCOLOR,
  89. DIALOG_NUMCOLOR,
  90. DIALOG_PRECOLOR,
  91. DIALOG_POSITION,
  92. DIALOG_POSITIONC,
  93. DIALOG_SIZE,
  94. DIALOG_SIZEC,
  95. DIALOG_LETTER,
  96. DIALOG_LETTERC,
  97. DIALOG_WARNING
  98. };
  99.  
  100. enum
  101. {
  102. EDITMODE_NONE,
  103. EDITMODE_TEXTDRAW,
  104. EDITMODE_USEBOX,
  105. EDITMODE_TEXTUREBOX,
  106. EDITMODE_POSITION,
  107. EDITMODE_SIZE,
  108. EDITMODE_LETTERSIZE,
  109. EDITMODE_COLOR,
  110. EDITMODE_BGCOLOR,
  111. EDITMODE_BOXCOLOR,
  112. EDITMODE_OUTLINE,
  113. EDITMODE_SHADOW,
  114. EDITMODE_PROPORTION,
  115. EDITMODE_SELECTABLE,
  116. EDITMODE_FONT,
  117. EDITMODE_ALIGNMENT,
  118. EDITMODE_BOX,
  119. EDITMODE_TYPE,
  120. EDITMODE_REMOVE
  121. };
  122.  
  123. enum
  124. {
  125. COLORMODE_NONE,
  126. COLORMODE_RED,
  127. COLORMODE_GREEN,
  128. COLORMODE_BLUE,
  129. COLORMODE_ALPHA
  130. };
  131.  
  132. enum
  133. E_TD_STRUCT
  134. {
  135. Text:iTextdraw,
  136. iText[128],
  137. Float:iPositionX,
  138. Float:iPositionY,
  139. Float:iLetterX,
  140. Float:iLetterY,
  141. Float:iTextX,
  142. Float:iTextY,
  143. iAlignment,
  144. iColor,
  145. iUsebox,
  146. iBoxcolor,
  147. iShadow,
  148. iOutline,
  149. iBackgroundcolor,
  150. iFont,
  151. iProportion,
  152. iSelectable,
  153. iType
  154. };
  155.  
  156. enum
  157. E_KEY_STRUCT
  158. {
  159. bool:KEY_PRESSED,
  160. KEY_CODE,
  161. };
  162.  
  163. new
  164. Float:OffsetZ = 415.0,
  165. Text:TD_Menu[34] = {Text:INVALID_TEXT_DRAW, ...},
  166.  
  167. File:Handler,
  168. ProjectEditor,
  169. ProjectFile[64],
  170.  
  171. bool:DialogShown,
  172. bool:MenuShown,
  173. bool:MenuHidden,
  174. bool:EditEnabled,
  175. Float:EditSpeed = 1.0,
  176.  
  177. EditMode,
  178. EditIndex,
  179. ColorMode,
  180. Colors[4],
  181.  
  182. Project[MAX_PROJECT_TEXTDRAWS][E_TD_STRUCT],
  183.  
  184. String_Large[3584],
  185. String_Textdraw[512],
  186. String_Message[128],
  187. String_Normal[64],
  188.  
  189. States[MAX_UNDO_STATES][sizeof String_Textdraw],
  190.  
  191. UpdateTimer,
  192. CursorOX, CursorOY,
  193. CursorX, CursorY,
  194. ScreenWidth, ScreenHeight,
  195. VirtualKeys[36][E_KEY_STRUCT]
  196. ;
  197.  
  198. new PremadeColors[][] =
  199. {
  200. { 0xFF0000FF , "Red" },
  201. { 0xFFFFFFFF , "White" },
  202. { 0x00FFFFFF , "Cyan" },
  203. { 0xC0C0C0FF , "Silver" },
  204. { 0x0000FFFF , "Blue" },
  205. { 0x808080FF , "Grey" },
  206. { 0x0000A0FF , "DarkBlue" },
  207. { 0x000000FF , "Black" },
  208. { 0xADD8E6FF , "LightBlue" },
  209. { 0xFFA500FF , "Orange" },
  210. { 0x800080FF , "Purple" },
  211. { 0xA52A2AFF , "Brown" },
  212. { 0xFFFF00FF , "Yellow" },
  213. { 0x800000FF , "Maroon" },
  214. { 0x00FF00FF , "Lime" },
  215. { 0x008000FF , "Green" },
  216. { 0xFF00FFFF , "Fuchsia" },
  217. { 0x808000FF , "Olive" }
  218. };
  219.  
  220. public OnFilterScriptInit()
  221. {
  222. printf("\n\tiPLEOMAX's TextDraw Editor loaded successfully!\n\t%s\n", ITD_VER);
  223. Initiate();
  224. return true;
  225. }
  226.  
  227. public OnFilterScriptExit()
  228. {
  229. Dispose();
  230. return true;
  231. }
  232.  
  233. public OnPlayerCommandText(playerid, cmdtext[])
  234. {
  235. if(!strcmp(cmdtext, "/itd", true, 4))
  236. {
  237. if(ProjectEditor == playerid)
  238. {
  239. if(strlen(cmdtext) >= 6)
  240. {
  241. if(!strcmp(cmdtext[5], "top", true))
  242. {
  243. OffsetZ = 0.0;
  244. if(MenuShown && !MenuHidden) ShowEditor();
  245. return Send(playerid, -1, #ITD_I"Menu location set to: TOP");
  246. } else
  247.  
  248. if(!strcmp(cmdtext[5], "bottom", true))
  249. {
  250. OffsetZ = 415.0;
  251. if(MenuShown && !MenuHidden) ShowEditor();
  252. return Send(playerid, -1, #ITD_I"Menu location set to: BOTTOM");
  253. } else
  254.  
  255. return Send(playerid, -1, "Usage: /itd (Top / Bottom / Center)");
  256. }
  257. return Send(playerid, -1, #ITD_I"Press ESC in main menu to go back or exit editor.");
  258. }
  259.  
  260. GetPlayerIp(playerid, String_Normal, 16);
  261.  
  262. //if(strcmp(String_Normal, "127.0.0.1", false))
  263. //return Send(playerid, -1, #ITD_E"samp-server.exe is not running in this computer! Make sure the server is at localhost, not remote.");
  264.  
  265. if(ProjectEditor != playerid && ProjectEditor != INVALID_PLAYER_ID)
  266. return Send(playerid, -1, #ITD_E"Another host is already using the editor.");
  267.  
  268.  
  269. Send(playerid, -1, "Welcome to {62E300}iPLEOMAX's Textdraw Editor{FFFFFF}. Pick an option to begin!");
  270. ProjectEditor = playerid;
  271. ShowEditor();
  272. return true;
  273. }
  274. return false;
  275. }
  276.  
  277. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  278. {
  279. if(playerid != ProjectEditor) return false;
  280. DialogShown = false;
  281.  
  282. switch(dialogid)
  283. {
  284. case DIALOG_NEW:
  285. {
  286. if(response)
  287. {
  288. if( !(1 <= strlen(inputtext) <= 32) )
  289. return Send(playerid, -1, #ITD_I"Project name must be within 1 to 32 characters");
  290.  
  291. if( !IsValidProjectName(inputtext) )
  292. return Send(playerid, -1, #ITD_I"Project name must contain only these characters: A-Z, 0-9, -, _, (, )");
  293.  
  294. if(strlen(ProjectFile)) CloseProject();
  295. format(ProjectFile, sizeof ProjectFile, ITD_File, inputtext);
  296.  
  297. if(!CheckProject(inputtext)) AddProject(ProjectFile);
  298.  
  299. if(fexist(ProjectFile)) {
  300.  
  301. LoadProject();
  302. format(String_Message, 128, "%sProject: '%s' already exists, loaded!", ITD_I, ProjectFile);
  303. Send(ProjectEditor, -1, String_Message);
  304.  
  305. } else {
  306. Handler = fopen(ProjectFile, io_write);
  307. fclose(Handler);
  308. }
  309.  
  310. ShowEditor();
  311. return true;
  312. }
  313. }
  314. case DIALOG_PROJECTS:
  315. {
  316. if(response)
  317. {
  318. Handler = fopen(ITD_List, io_read);
  319. if(!Handler) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (project.lst)");
  320.  
  321. new Index = -1;
  322. while(fread(Handler, String_Normal))
  323. {
  324. if(!strlen(String_Normal)) continue;
  325. Index++;
  326.  
  327. if(Index == listitem)
  328. {
  329. StripNewLine(String_Normal);
  330.  
  331. if(strlen(ProjectFile))
  332. {
  333. SaveProject(true);
  334. CloseProject();
  335. }
  336.  
  337. format(ProjectFile, sizeof ProjectFile, "%s", String_Normal);
  338. LoadProject(true);
  339. }
  340. }
  341. }
  342.  
  343. return true;
  344. }
  345. case DIALOG_LIST:
  346. {
  347. if(response)
  348. {
  349. switch(listitem)
  350. {
  351. case 0: ShowCreateDialog();
  352. case 1:
  353. {
  354. TextDrawEdit(EDITMODE_REMOVE);
  355. ShowTextDrawList();
  356. }
  357. default:
  358. {
  359. listitem -= 2;
  360. new match = -1;
  361. LoopProjectTextdraws
  362. {
  363. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  364. match++;
  365. if(match == listitem)
  366. {
  367. EditIndex = i;
  368. ShowTextDrawList();
  369. if(!MenuHidden) ShowEditor();
  370. }
  371. }
  372. }
  373. }
  374. }
  375. }
  376. case DIALOG_CREATE:
  377. {
  378. if(!response) return ShowTextDrawList();
  379.  
  380. new Index = GetAvailableIndex();
  381. if(Index == INVALID_INDEX_ID)
  382. return Send(ProjectEditor, -1, #ITD_E"Project Textdraw limit reached! Unable to create new.");
  383. EditIndex = Index;
  384.  
  385. switch(listitem)
  386. {
  387. case 0: TextDrawEdit(EDITMODE_TEXTDRAW);
  388. case 1: TextDrawEdit(EDITMODE_USEBOX);
  389. case 2: TextDrawEdit(EDITMODE_TEXTUREBOX);
  390. }
  391.  
  392. return true;
  393. }
  394. case DIALOG_POSITION:
  395. {
  396. if(!response) return true;
  397. switch(listitem)
  398. {
  399. case 0: TextDrawEdit(EDITMODE_POSITION);
  400. case 1: ShowPositionCustomDialog();
  401. }
  402. return true;
  403. }
  404. case DIALOG_POSITIONC:
  405. {
  406. if(!response) return ShowPositionDialog();
  407. if(strlen(inputtext) < 3) return ShowPositionCustomDialog();
  408. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGPOSITIONC (Report as bug)");
  409.  
  410. new Float:iTemp1, Float:iTemp2;
  411.  
  412. if(!sscanf(inputtext, "ff", iTemp1, iTemp2) ||
  413. !sscanf(inputtext, "p<,>ff", iTemp1, iTemp2))
  414. {
  415. SaveTextDrawState(EditIndex);
  416. Project[EditIndex][iPositionX] = iTemp1;
  417. Project[EditIndex][iPositionX] = iTemp2;
  418.  
  419. UpdateTextDraw(EditIndex);
  420. Send(playerid, -1, #ITD_I"Position updated");
  421. } else {
  422. ShowPositionCustomDialog();
  423. Send(playerid, -1, #ITD_E"Invalid coord format");
  424. }
  425. return true;
  426. }
  427. case DIALOG_SIZE:
  428. {
  429. if(response)
  430. {
  431. switch(listitem)
  432. {
  433. case 0: TextDrawEdit(EDITMODE_SIZE);
  434. case 1: ShowSizeCustomDialog();
  435. }
  436. }
  437. return true;
  438. }
  439. case DIALOG_SIZEC:
  440. {
  441. if(!response) return ShowSizeDialog();
  442. if(strlen(inputtext) < 3) return ShowSizeCustomDialog();
  443. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGSIZEC (Report as bug)");
  444.  
  445. new Float:iTemp1, Float:iTemp2;
  446.  
  447. if(!sscanf(inputtext, "ff", iTemp1, iTemp2) ||
  448. !sscanf(inputtext, "p<,>ff", iTemp1, iTemp2))
  449. {
  450. SaveTextDrawState(EditIndex);
  451. Project[EditIndex][iTextX] = iTemp1;
  452. Project[EditIndex][iTextX] = iTemp2;
  453.  
  454. UpdateTextDraw(EditIndex);
  455. Send(playerid, -1, #ITD_I"Text Size updated");
  456. } else {
  457. ShowSizeCustomDialog();
  458. Send(playerid, -1, #ITD_E"Invalid size format");
  459. }
  460. return true;
  461. }
  462. case DIALOG_LETTER:
  463. {
  464. if(response)
  465. {
  466. switch(listitem)
  467. {
  468. case 0: TextDrawEdit(EDITMODE_LETTERSIZE);
  469. case 1: ShowLetterCustomDialog();
  470. }
  471. }
  472. return true;
  473. }
  474. case DIALOG_LETTERC:
  475. {
  476. if(!response) return ShowLetterDialog();
  477. if(strlen(inputtext) < 3) return ShowLetterCustomDialog();
  478. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGLETTERC (Report as bug)");
  479.  
  480. new Float:iTemp1, Float:iTemp2;
  481.  
  482. if(!sscanf(inputtext, "ff", iTemp1, iTemp2) ||
  483. !sscanf(inputtext, "p<,>ff",iTemp1, iTemp2))
  484. {
  485. SaveTextDrawState(EditIndex);
  486. Project[EditIndex][iLetterX] = iTemp1;
  487. Project[EditIndex][iLetterY] = iTemp2;
  488.  
  489. UpdateTextDraw(EditIndex);
  490. Send(playerid, -1, #ITD_I"Letter Size updated");
  491. } else {
  492. ShowLetterCustomDialog();
  493. Send(playerid, -1, #ITD_E"Invalid size format");
  494. }
  495. return true;
  496. }
  497. case DIALOG_TEXT:
  498. {
  499. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGTEXT (Report as bug)");
  500. if(response)
  501. {
  502. if(!strlen(inputtext)) return ShowTextDialog();
  503.  
  504. SaveTextDrawState(EditIndex);
  505. format(Project[EditIndex][iText], 128, "%s", inputtext);
  506. UpdateTextDraw(EditIndex);
  507. }
  508. return true;
  509. }
  510. case DIALOG_COLOR:
  511. {
  512. if(response)
  513. {
  514. switch(listitem)
  515. {
  516. case 0: ShowHEXColorDialog();
  517. case 1: ShowNUMColorDialog();
  518. case 2: ShowPREColorDialog();
  519. }
  520. }
  521. return true;
  522. }
  523. case DIALOG_HEXCOLOR:
  524. {
  525. if(!response) return ShowColorDialog();
  526. if(strlen(inputtext) < 8) return ShowHEXColorDialog();
  527. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGHEXCOLOR (Report as bug)");
  528.  
  529. if(inputtext[0] == '0' && inputtext[1] == 'x')
  530. {
  531. Colors[0] = HexToInt(inputtext[2]);
  532. } else
  533. if(inputtext[0] == '#')
  534. {
  535. Colors[0] = HexToInt(inputtext[1]);
  536. } else
  537. {
  538. Colors[0] = HexToInt(inputtext);
  539. }
  540.  
  541. SaveTextDrawState(EditIndex);
  542. switch(EditMode)
  543. {
  544. case EDITMODE_COLOR: Project[EditIndex][iColor] = Colors[0];
  545. case EDITMODE_BGCOLOR: Project[EditIndex][iBackgroundcolor] = Colors[0];
  546. case EDITMODE_BOXCOLOR: Project[EditIndex][iBoxcolor] = Colors[0];
  547. }
  548.  
  549. UpdateTextDraw(EditIndex);
  550. return Send(playerid, Colors[0], "< Color Applied >");
  551. }
  552. case DIALOG_NUMCOLOR:
  553. {
  554. if(!response) return ShowColorDialog();
  555. if(!strlen(inputtext)) return ShowNUMColorDialog();
  556. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGNUMCOLOR (Report as bug)");
  557.  
  558. if(!sscanf(inputtext, "iiii", Colors[0], Colors[1], Colors[2], Colors[3]) ||
  559. !sscanf(inputtext, "p<,>iiii", Colors[0], Colors[1], Colors[2], Colors[3]))
  560. {
  561. SaveTextDrawState(EditIndex);
  562. switch(EditMode)
  563. {
  564. case EDITMODE_COLOR: Project[EditIndex][iColor] = RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]);
  565. case EDITMODE_BGCOLOR: Project[EditIndex][iBackgroundcolor] = RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]);
  566. case EDITMODE_BOXCOLOR: Project[EditIndex][iBoxcolor] = RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]);
  567. }
  568. } else {
  569. Send(playerid, -1, #ITD_E"Invalid Color Format | Example usage: 255, 0, 0, 125 (Red with 50%% Transparency)");
  570. return ShowNUMColorDialog();
  571. }
  572.  
  573. UpdateTextDraw(EditIndex);
  574. return Send(playerid, RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]), "< Color Applied >");
  575. }
  576. case DIALOG_PRECOLOR:
  577. {
  578. if(!response) return ShowColorDialog();
  579. if(EditIndex == INVALID_INDEX_ID) return Send(playerid, -1, #ITD_E"Invalid Edit Index @DIALOGPRECOLOR (Report as bug)");
  580.  
  581. SaveTextDrawState(EditIndex);
  582. switch(EditMode)
  583. {
  584. case EDITMODE_COLOR: Project[EditIndex][iColor] = PremadeColors[listitem][0];
  585. case EDITMODE_BGCOLOR: Project[EditIndex][iBackgroundcolor] = PremadeColors[listitem][0];
  586. case EDITMODE_BOXCOLOR: Project[EditIndex][iBoxcolor] = PremadeColors[listitem][0];
  587. }
  588.  
  589. UpdateTextDraw(EditIndex);
  590. return Send(playerid, PremadeColors[listitem][0], "< Color Applied >");
  591. }
  592. case DIALOG_WARNING:
  593. {
  594. if(!response) ShowSizeDialog();
  595. return true;
  596. }
  597. }
  598.  
  599. return false;
  600. }
  601.  
  602. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  603. {
  604. //format(String_Message, sizeof String_Message, "Clickedid: %i", _:clickedid);
  605. //Send(playerid, -1, String_Message);
  606.  
  607. if(playerid != ProjectEditor) return false;
  608.  
  609. if(clickedid == Text:INVALID_TEXT_DRAW)
  610. {
  611. if(DialogShown)
  612. {
  613. Send(ProjectEditor, -1, #ITD_W"Please close this dialog first!");
  614. return SelectTextDraw(playerid, -1);
  615. }
  616. if(MenuHidden) return ShowEditor();
  617. if(MenuShown) return HideEditor();
  618. return true;
  619. }
  620.  
  621. if(clickedid == TD_Menu[1]) iShowPlayerDialog(playerid, DIALOG_NEW, DIALOG_STYLE_INPUT,
  622. "New Project", "\nPlease enter the name of your new project:\n", "OK", "Cancel");
  623.  
  624. if(clickedid == TD_Menu[2]) return ShowProjectList();
  625. if(clickedid == TD_Menu[3]) return CloseProject(true);
  626. if(clickedid == TD_Menu[4]) return ExportProject();
  627. if(clickedid == TD_Menu[8]) return ShowTextDrawList();
  628. if(clickedid == TD_Menu[9]) return ShowPositionDialog();
  629. if(clickedid == TD_Menu[10]) return ShowSizeDialog(true);
  630. if(clickedid == TD_Menu[11]) return ShowTextDialog();
  631. if(clickedid == TD_Menu[16]) return ShowLetterDialog();
  632. if(clickedid == TD_Menu[14]) return TextDrawEdit(EDITMODE_COLOR);
  633. if(clickedid == TD_Menu[15]) return TextDrawEdit(EDITMODE_BGCOLOR);
  634. if(clickedid == TD_Menu[32]) return TextDrawEdit(EDITMODE_BOXCOLOR);
  635. if(clickedid == TD_Menu[17]) return TextDrawEdit(EDITMODE_OUTLINE);
  636. if(clickedid == TD_Menu[18]) return TextDrawEdit(EDITMODE_SHADOW);
  637. if(clickedid == TD_Menu[31] || clickedid == TD_Menu[30]) return TextDrawEdit(EDITMODE_PROPORTION);
  638. if(clickedid == TD_Menu[29] || clickedid == TD_Menu[28]) return TextDrawEdit(EDITMODE_SELECTABLE);
  639. if(clickedid == TD_Menu[27] || clickedid == TD_Menu[26] || clickedid == TD_Menu[25] || clickedid == TD_Menu[24] || clickedid == TD_Menu[12]) return TextDrawEdit(EDITMODE_FONT);
  640. if(clickedid == TD_Menu[23] || clickedid == TD_Menu[22] || clickedid == TD_Menu[21]) return TextDrawEdit(EDITMODE_ALIGNMENT);
  641. if(clickedid == TD_Menu[20] || clickedid == TD_Menu[19]) return TextDrawEdit(EDITMODE_BOX);
  642. if(clickedid == TD_Menu[5] || clickedid == TD_Menu[33]) return TextDrawEdit(EDITMODE_TYPE);
  643. return false;
  644. }
  645.  
  646. forward OnEditorUpdate();
  647. public OnEditorUpdate()
  648. {
  649. CountRange(0, sizeof VirtualKeys)
  650. {
  651. if(GetVirtualKeyState(VirtualKeys[c][KEY_CODE]) & 0x8000)
  652. {
  653. if(!VirtualKeys[c][KEY_PRESSED])
  654. {
  655. CallLocalFunction("OnVirtualKeyDown", "d", VirtualKeys[c][KEY_CODE]);
  656. VirtualKeys[c][KEY_PRESSED] = true;
  657. }
  658. }
  659. else if(VirtualKeys[c][KEY_PRESSED])
  660. {
  661. CallLocalFunction("OnVirtualKeyRelease", "d", VirtualKeys[c][KEY_CODE]);
  662. VirtualKeys[c][KEY_PRESSED] = false;
  663. }
  664. }
  665.  
  666. GetScreenSize(ScreenWidth, ScreenHeight);
  667. GetMousePos(CursorX, CursorY);
  668.  
  669. if(CursorOX != CursorX || CursorOY != CursorY)
  670. {
  671. CallLocalFunction("OnCursorPositionChange", "dd", CursorX, CursorY);
  672. CursorOX = CursorX;
  673. CursorOY = CursorY;
  674. }
  675. }
  676.  
  677. stock ShowValues(Float:ZPos, Float:X, Float:Y)
  678. {
  679. if(ZPos >= 220)
  680. {
  681. format(String_Normal, sizeof String_Normal, "~w~%.3f, %.3f", X, Y);
  682. GameTextForPlayer(ProjectEditor, String_Normal, 1000, 4);
  683. } else {
  684. format(String_Normal, sizeof String_Normal, "~n~~n~~n~~n~%.3f, %.3f", X, Y);
  685. GameTextForPlayer(ProjectEditor, String_Normal, 1000, 5);
  686. }
  687. }
  688.  
  689. forward OnCursorPositionChange(NewX, NewY);
  690. public OnCursorPositionChange(NewX, NewY)
  691. {
  692. if(EditEnabled)
  693. {
  694. switch(EditMode)
  695. {
  696. case EDITMODE_POSITION:
  697. {
  698. if(Project[EditIndex][iUsebox] && Project[EditIndex][iLetterX] == 0.0)
  699. {
  700. Project[EditIndex][iPositionX] -= floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0 * EditSpeed;
  701. Project[EditIndex][iTextX] -= floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0 * EditSpeed;
  702. Project[EditIndex][iPositionY] -= floatdiv(floatsub(CursorOY, NewY), ScreenHeight) * 448.0 * EditSpeed;
  703. ShowValues(Project[EditIndex][iPositionY], Project[EditIndex][iTextX], Project[EditIndex][iPositionY]);
  704. } else {
  705. Project[EditIndex][iPositionX] -= floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0 * EditSpeed;
  706. Project[EditIndex][iPositionY] -= floatdiv(floatsub(CursorOY, NewY), ScreenHeight) * 448.0 * EditSpeed;
  707. ShowValues(Project[EditIndex][iPositionY], Project[EditIndex][iPositionX], Project[EditIndex][iPositionY]);
  708. }
  709. UpdateTextDraw(EditIndex);
  710. }
  711. case EDITMODE_USEBOX:
  712. {
  713. Project[EditIndex][iPositionX] = (floatdiv(NewX, ScreenWidth) * 640.0) + 2.0;
  714. Project[EditIndex][iLetterY] = ((floatdiv(NewY, ScreenHeight) * 448.0) - Project[EditIndex][iPositionY])/9.0;
  715. Project[EditIndex][iLetterY] -= 0.15;
  716. UpdateTextDraw(EditIndex);
  717. }
  718. case EDITMODE_TEXTUREBOX:
  719. {
  720. Project[EditIndex][iTextX] = (floatdiv((NewX == ScreenWidth - 1) ? ScreenWidth : NewX, ScreenWidth) * 640.0) - Project[EditIndex][iPositionX];
  721. Project[EditIndex][iTextY] = (floatdiv((NewY == ScreenHeight - 1) ? ScreenHeight : NewY, ScreenHeight) * 448.0) - Project[EditIndex][iPositionY];
  722. ShowValues(Project[EditIndex][iPositionY], Project[EditIndex][iTextX], Project[EditIndex][iTextY]);
  723. UpdateTextDraw(EditIndex);
  724. }
  725. case EDITMODE_SIZE:
  726. {
  727. if(Project[EditIndex][iUsebox] && Project[EditIndex][iLetterX] == 0.0)
  728. {
  729. Project[EditIndex][iLetterY] -= (floatdiv(floatsub(CursorOY, NewY), ScreenWidth) * 640.0)/10.0 * EditSpeed;
  730. Project[EditIndex][iPositionX] -= floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0 * EditSpeed;
  731. } else {
  732. Project[EditIndex][iTextX] -= floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0 * EditSpeed;
  733. Project[EditIndex][iTextY] -= floatdiv(floatsub(CursorOY, NewY), ScreenHeight) * 448.0 * EditSpeed;
  734. ShowValues(Project[EditIndex][iPositionY], Project[EditIndex][iTextX], Project[EditIndex][iTextY]);
  735. }
  736. UpdateTextDraw(EditIndex);
  737. }
  738. case EDITMODE_LETTERSIZE:
  739. {
  740. Project[EditIndex][iLetterX] -= floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0 * EditSpeed * 0.001;
  741. Project[EditIndex][iLetterY] -= floatdiv(floatsub(CursorOY, NewY), ScreenHeight) * 448.0 * EditSpeed * 0.01;
  742. ShowValues(Project[EditIndex][iPositionY], Project[EditIndex][iLetterX], Project[EditIndex][iLetterY]);
  743. UpdateTextDraw(EditIndex);
  744. }
  745. case EDITMODE_OUTLINE:
  746. {
  747. Project[EditIndex][iOutline] -= floatround(floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0);
  748. Project[EditIndex][iOutline] -= floatround(floatdiv(floatsub(CursorOY, NewY), ScreenHeight) * 448.0);
  749. UpdateTextDraw(EditIndex);
  750. }
  751. case EDITMODE_SHADOW:
  752. {
  753. Project[EditIndex][iShadow] -= floatround(floatdiv(floatsub(CursorOX, NewX), ScreenWidth) * 640.0);
  754. Project[EditIndex][iShadow] -= floatround(floatdiv(floatsub(CursorOY, NewY), ScreenHeight) * 448.0);
  755. UpdateTextDraw(EditIndex);
  756. }
  757. case EDITMODE_COLOR:
  758. {
  759. HexToRGBA(Project[EditIndex][iColor], Colors[0], Colors[1], Colors[2], Colors[3]);
  760. switch(ColorMode)
  761. {
  762. case COLORMODE_RED: Colors[0] = floatround( floatdiv((NewY - 1), (ScreenHeight - 2)) * 255.0 );
  763. case COLORMODE_GREEN: Colors[1] = floatround( floatdiv((NewX - 1), (ScreenWidth - 2)) * 255.0 );
  764. case COLORMODE_BLUE: Colors[2] = floatround( floatdiv((NewY - 1), (ScreenHeight - 2)) * 255.0 );
  765. case COLORMODE_ALPHA: Colors[3] = floatround( floatdiv((NewX - 1), (ScreenWidth - 2)) * 255.0 );
  766. }
  767. format(String_Normal, sizeof String_Normal, "~n~~r~R%i~n~~g~G%i~n~~b~B%i~n~~w~A%i", Colors[0], Colors[1], Colors[2], Colors[3]);
  768. GameTextForPlayer(ProjectEditor, String_Normal, 1000, 3);
  769. Project[EditIndex][iColor] = RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]);
  770. UpdateTextDraw(EditIndex);
  771. }
  772. case EDITMODE_BGCOLOR:
  773. {
  774. HexToRGBA(Project[EditIndex][iBackgroundcolor], Colors[0], Colors[1], Colors[2], Colors[3]);
  775. switch(ColorMode)
  776. {
  777. case COLORMODE_RED: Colors[0] = floatround( floatdiv((NewY - 1), (ScreenHeight - 2)) * 255.0 );
  778. case COLORMODE_GREEN: Colors[1] = floatround( floatdiv((NewX - 1), (ScreenWidth - 2)) * 255.0 );
  779. case COLORMODE_BLUE: Colors[2] = floatround( floatdiv((NewY - 1), (ScreenHeight - 2)) * 255.0 );
  780. case COLORMODE_ALPHA: Colors[3] = floatround( floatdiv((NewX - 1), (ScreenWidth - 2)) * 255.0 );
  781. }
  782. format(String_Normal, sizeof String_Normal, "~n~~r~R%i~n~~g~G%i~n~~b~B%i~n~~w~A%i", Colors[0], Colors[1], Colors[2], Colors[3]);
  783. GameTextForPlayer(ProjectEditor, String_Normal, 1000, 3);
  784. Project[EditIndex][iBackgroundcolor] = RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]);
  785. UpdateTextDraw(EditIndex);
  786. }
  787. case EDITMODE_BOXCOLOR:
  788. {
  789. HexToRGBA(Project[EditIndex][iBoxcolor], Colors[0], Colors[1], Colors[2], Colors[3]);
  790. switch(ColorMode)
  791. {
  792. case COLORMODE_RED: Colors[0] = floatround( floatdiv((NewY - 1), (ScreenHeight - 2)) * 255.0 );
  793. case COLORMODE_GREEN: Colors[1] = floatround( floatdiv((NewX - 1), (ScreenWidth - 2)) * 255.0 );
  794. case COLORMODE_BLUE: Colors[2] = floatround( floatdiv((NewY - 1), (ScreenHeight - 2)) * 255.0 );
  795. case COLORMODE_ALPHA: Colors[3] = floatround( floatdiv((NewX - 1), (ScreenWidth - 2)) * 255.0 );
  796. }
  797. format(String_Normal, sizeof String_Normal, "~n~~r~R%i~n~~g~G%i~n~~b~B%i~n~~w~A%i", Colors[0], Colors[1], Colors[2], Colors[3]);
  798. GameTextForPlayer(ProjectEditor, String_Normal, 1000, 3);
  799. Project[EditIndex][iBoxcolor] = RGBAToHex(Colors[0], Colors[1], Colors[2], Colors[3]);
  800. UpdateTextDraw(EditIndex);
  801. }
  802. }
  803. }
  804. return true;
  805. }
  806.  
  807. forward OnVirtualKeyDown(key);
  808. public OnVirtualKeyDown(key)
  809. {
  810. if(!EditEnabled && ProjectEditor != INVALID_PLAYER_ID && MenuHidden && MenuShown && !DialogShown)
  811. {
  812. switch(key)
  813. {
  814. case VK_KEY_M: ShowTextDrawList();
  815. case VK_KEY_N: ShowCreateDialog();
  816. case VK_KEY_Z: UndoTextDrawState();
  817. }
  818. if(EditIndex != INVALID_INDEX_ID)
  819. {
  820. if(Project[EditIndex][iTextdraw] != Text:INVALID_TEXT_DRAW)
  821. {
  822. switch(key)
  823. {
  824. case VK_KEY_C:
  825. {
  826. new ToIndex = GetAvailableIndex();
  827. if(ToIndex == INVALID_INDEX_ID) return Send(ProjectEditor, -1, #ITD_E"Project Textdraw limit reached! Unable to create new.");
  828. CopyTextDraw(EditIndex, ToIndex);
  829. }
  830. case VK_KEY_X:
  831. {
  832. TextDrawEdit(EDITMODE_REMOVE);
  833. ShowTextDrawList();
  834. }
  835. case VK_KEY_F: TextDrawEdit(EDITMODE_FONT);
  836. case VK_KEY_P: TextDrawEdit(EDITMODE_POSITION);
  837. case VK_KEY_S: ShowSizeDialog(true);
  838. case VK_KEY_Y: ShowTextDialog();
  839. case VK_KEY_L: ShowLetterDialog();
  840. case VK_KEY_Q: TextDrawEdit(EDITMODE_COLOR);
  841. case VK_KEY_B: TextDrawEdit(EDITMODE_BGCOLOR);
  842. case VK_KEY_I: TextDrawEdit(EDITMODE_BOXCOLOR);
  843. case VK_KEY_U: TextDrawEdit(EDITMODE_BOX);
  844. case VK_KEY_O: TextDrawEdit(EDITMODE_OUTLINE);
  845. case VK_KEY_W: TextDrawEdit(EDITMODE_SHADOW);
  846. case VK_KEY_G: TextDrawEdit(EDITMODE_TYPE);
  847. case VK_KEY_A: TextDrawEdit(EDITMODE_ALIGNMENT);
  848. case VK_KEY_K: TextDrawEdit(EDITMODE_SELECTABLE);
  849. case VK_KEY_R: TextDrawEdit(EDITMODE_PROPORTION);
  850. }
  851. }
  852. }
  853. }
  854.  
  855. switch(key)
  856. {
  857. case VK_LBUTTON:
  858. {
  859. switch(EditMode)
  860. {
  861. case EDITMODE_COLOR, EDITMODE_BOXCOLOR, EDITMODE_BGCOLOR:
  862. {
  863. SaveTextDrawState(EditIndex);
  864.  
  865. if(!CursorX && (0 < CursorY < (ScreenHeight - 1)) && ColorMode != COLORMODE_RED)
  866. ColorMode = COLORMODE_RED;
  867.  
  868. if(CursorX == (ScreenWidth - 1) && (0 < CursorY < (ScreenHeight - 1)) && ColorMode != COLORMODE_BLUE)
  869. ColorMode = COLORMODE_BLUE;
  870.  
  871. if(!CursorY && (0 < CursorX < (ScreenWidth - 1)) && ColorMode != COLORMODE_GREEN)
  872. ColorMode = COLORMODE_GREEN;
  873.  
  874. if(CursorY == (ScreenHeight - 1) && (0 < CursorX < (ScreenWidth - 1)) && ColorMode != COLORMODE_ALPHA)
  875. ColorMode = COLORMODE_ALPHA;
  876.  
  877. EditEnabled = true;
  878. }
  879. case EDITMODE_TEXTDRAW:
  880. {
  881. SaveTextDrawState(EditIndex, true);
  882.  
  883. format(Project[EditIndex][iText], 128, "New Textdraw");
  884. Project[EditIndex][iPositionX] = floatdiv(CursorX, ScreenWidth) * 640.0;
  885. Project[EditIndex][iPositionY] = floatdiv(CursorY, ScreenHeight) * 448.0;
  886. Project[EditIndex][iLetterX] = 0.45, Project[EditIndex][iLetterY] = 1.6;
  887. Project[EditIndex][iColor] = 0xFFFFFFFF;
  888. Project[EditIndex][iBackgroundcolor] = 51;
  889. Project[EditIndex][iFont] = 1;
  890. Project[EditIndex][iOutline] = 1;
  891. Project[EditIndex][iProportion] = 1;
  892. Project[EditIndex][iAlignment] = 1;
  893. UpdateTextDraw(EditIndex);
  894. EditMode = EDITMODE_POSITION;
  895. EditEnabled = true;
  896. }
  897. case EDITMODE_USEBOX:
  898. {
  899. SaveTextDrawState(EditIndex, true);
  900.  
  901. format(Project[EditIndex][iText], 128, "usebox");
  902. Project[EditIndex][iAlignment] = 1;
  903. Project[EditIndex][iBoxcolor] = 0x00000066;
  904. Project[EditIndex][iUsebox] = 1;
  905. Project[EditIndex][iPositionX] = (floatdiv(CursorX, ScreenWidth) * 640.0) - 2.0;
  906. Project[EditIndex][iPositionY] = (floatdiv(CursorY, ScreenHeight) * 448.0) + 1.5;
  907. Project[EditIndex][iTextX] = Project[EditIndex][iPositionX];
  908. Project[EditIndex][iLetterX] = 0.0;
  909. Project[EditIndex][iLetterY] = 0.0;
  910. EditEnabled = true;
  911. }
  912. case EDITMODE_TEXTUREBOX:
  913. {
  914. SaveTextDrawState(EditIndex, true);
  915.  
  916. format(Project[EditIndex][iText], 128, "LD_SPAC:white");
  917. Project[EditIndex][iAlignment] = 1;
  918. Project[EditIndex][iFont] = 4;
  919. Project[EditIndex][iPositionX] = floatdiv(CursorX, ScreenWidth) * 640.0;
  920. Project[EditIndex][iPositionY] = floatdiv(CursorY, ScreenHeight) * 448.0;
  921. Project[EditIndex][iColor] = 0xFFFFFFFF;
  922. EditEnabled = true;
  923. }
  924. case EDITMODE_POSITION, EDITMODE_SIZE, EDITMODE_LETTERSIZE, EDITMODE_OUTLINE, EDITMODE_SHADOW:
  925. {
  926. SaveTextDrawState(EditIndex);
  927. EditEnabled = true;
  928. }
  929. }
  930. }
  931. case VK_RBUTTON:
  932. {
  933. switch(EditMode)
  934. {
  935. case EDITMODE_OUTLINE:
  936. {
  937. SaveTextDrawState(EditIndex);
  938. Project[EditIndex][iOutline] = 0;
  939. UpdateTextDraw(EditIndex);
  940. }
  941. case EDITMODE_SHADOW:
  942. {
  943. SaveTextDrawState(EditIndex);
  944. Project[EditIndex][iShadow] = 0;
  945. UpdateTextDraw(EditIndex);
  946. }
  947. case EDITMODE_POSITION:
  948. {
  949. SaveTextDrawState(EditIndex);
  950. Project[EditIndex][iPositionX] = floatdiv(floatdiv(ScreenWidth, 2), ScreenWidth) * 640.0;
  951. Project[EditIndex][iPositionY] = floatdiv(floatdiv(ScreenHeight, 2), ScreenHeight) * 448.0;
  952. UpdateTextDraw(EditIndex);
  953. }
  954. }
  955. }
  956. case VK_SPACE: EditSpeed = 0.1;
  957. case VK_LSHIFT, VK_RSHIFT: EditSpeed = 5.0;
  958. }
  959. return true;
  960. }
  961.  
  962. forward OnVirtualKeyRelease(key);
  963. public OnVirtualKeyRelease(key)
  964. {
  965. if(key == VK_LBUTTON)
  966. {
  967. if(EditEnabled)
  968. {
  969. if(ColorMode) ColorMode = 0;
  970. EditEnabled = false;
  971. SaveProject();
  972. }
  973. }
  974. if(key == VK_SPACE || key == VK_LSHIFT) EditSpeed = 1.0;
  975. return true;
  976. }
  977.  
  978. //============================================================================//
  979.  
  980. stock TextDrawEdit(mode)
  981. {
  982. if(!mode)
  983. {
  984. if(EditEnabled)
  985. {
  986. ColorMode = COLORMODE_NONE;
  987. EditMode = EDITMODE_NONE;
  988. EditEnabled = false;
  989. SaveProject(false);
  990. }
  991. } else
  992. {
  993. if(EditIndex == INVALID_INDEX_ID)
  994. {
  995. ShowTextDrawList();
  996. Send(ProjectEditor, -1, #ITD_W"You need to select a textdraw from the menu first!");
  997. return true;
  998. }
  999.  
  1000. switch(mode)
  1001. {
  1002. case EDITMODE_TEXTDRAW:
  1003. {
  1004. Send(ProjectEditor, -1, "Create {00FF00}New Textdraw{FFFFFF}: Press LMB to place and MOVE cursor to relocate");
  1005. EditMode = EDITMODE_TEXTDRAW;
  1006. HideEditor(true);
  1007. }
  1008. case EDITMODE_USEBOX:
  1009. {
  1010. Send(ProjectEditor, -1, "Create {00FF00}Box{FFFFFF}: Press LMB to start and MOVE cursor to resize and release LMB to stop");
  1011. EditMode = EDITMODE_USEBOX;
  1012. HideEditor(true);
  1013. }
  1014. case EDITMODE_TEXTUREBOX:
  1015. {
  1016. Send(ProjectEditor, -1, "Create {00FF00}Texture Box{FFFFFF}: Press LMB to start and MOVE cursor to resize and release LMB to stop");
  1017. EditMode = EDITMODE_TEXTUREBOX;
  1018. HideEditor(true);
  1019. }
  1020. case EDITMODE_POSITION:
  1021. {
  1022. Send(ProjectEditor, -1, "Modify {00FF00}Position{FFFFFF}: Hold LMB and MOVE cursor to relocate");
  1023. EditMode = EDITMODE_POSITION;
  1024. HideEditor(true);
  1025. }
  1026. case EDITMODE_SIZE:
  1027. {
  1028. Send(ProjectEditor, -1, "Modify {00FF00}Size{FFFFFF}: Hold LMB and MOVE cursor to resize (If you want to resize font, use LetterSize Mode)");
  1029. EditMode = EDITMODE_SIZE;
  1030. HideEditor(true);
  1031. }
  1032. case EDITMODE_LETTERSIZE:
  1033. {
  1034. Send(ProjectEditor, -1, "Modify {00FF00}LetterSize{FFFFFF}: Hold LMB and MOVE cursor to adjust");
  1035. EditMode = EDITMODE_LETTERSIZE;
  1036. HideEditor(true);
  1037. }
  1038. case EDITMODE_COLOR:
  1039. {
  1040. EditMode = EDITMODE_COLOR;
  1041. ShowColorDialog();
  1042. }
  1043. case EDITMODE_BGCOLOR:
  1044. {
  1045. EditMode = EDITMODE_BGCOLOR;
  1046. ShowColorDialog();
  1047. }
  1048. case EDITMODE_BOXCOLOR:
  1049. {
  1050. EditMode = EDITMODE_BOXCOLOR;
  1051. ShowColorDialog();
  1052. }
  1053. case EDITMODE_OUTLINE:
  1054. {
  1055. Project[EditIndex][iShadow] = 0;
  1056. Send(ProjectEditor, -1, "Modify {00FF00}Outline{FFFFFF}: Hold LMB and MOVE cursor to adjust | RMB to disable outline.");
  1057. EditMode = EDITMODE_OUTLINE;
  1058. HideEditor(true);
  1059. }
  1060. case EDITMODE_SHADOW:
  1061. {
  1062. Project[EditIndex][iOutline] = 0;
  1063. Send(ProjectEditor, -1, "Modify {00FF00}Shadow{FFFFFF}: Hold LMB and MOVE cursor to adjust | RMB to disable shadow.");
  1064. EditMode = EDITMODE_SHADOW;
  1065. HideEditor(true);
  1066. }
  1067. case EDITMODE_ALIGNMENT:
  1068. {
  1069. SaveTextDrawState(EditIndex);
  1070. switch(Project[EditIndex][iAlignment])
  1071. {
  1072. case 1: Project[EditIndex][iAlignment] = 2, Send(ProjectEditor, -1, "Textdraw {00FF00}Alignment{FFFFFF}: Centered");
  1073. case 2: Project[EditIndex][iAlignment] = 3, Send(ProjectEditor, -1, "Textdraw {00FF00}Alignment{FFFFFF}: Right");
  1074. case 3: Project[EditIndex][iAlignment] = 1, Send(ProjectEditor, -1, "Textdraw {00FF00}Alignment{FFFFFF}: Left");
  1075. }
  1076. if(!MenuHidden) ShowEditor();
  1077. UpdateTextDraw(EditIndex);
  1078. }
  1079. case EDITMODE_PROPORTION:
  1080. {
  1081. SaveTextDrawState(EditIndex);
  1082. switch(Project[EditIndex][iProportion])
  1083. {
  1084. case 0: Project[EditIndex][iProportion] = 1, Send(ProjectEditor, -1, "Textdraw {00FF00}Proportional{FFFFFF}: Yes");
  1085. case 1: Project[EditIndex][iProportion] = 0, Send(ProjectEditor, -1, "Textdraw {00FF00}Proportional{FFFFFF}: No");
  1086. }
  1087. if(!MenuHidden) ShowEditor();
  1088. UpdateTextDraw(EditIndex);
  1089. }
  1090. case EDITMODE_SELECTABLE:
  1091. {
  1092. SaveTextDrawState(EditIndex);
  1093. switch(Project[EditIndex][iSelectable])
  1094. {
  1095. case 0: Project[EditIndex][iSelectable] = 1, Send(ProjectEditor, -1, "Textdraw {00FF00}Selectable{FFFFFF}: Yes");
  1096. case 1: Project[EditIndex][iSelectable] = 0, Send(ProjectEditor, -1, "Textdraw {00FF00}Selectable{FFFFFF}: No");
  1097. }
  1098. if(!MenuHidden) ShowEditor();
  1099. UpdateTextDraw(EditIndex);
  1100. }
  1101. case EDITMODE_BOX:
  1102. {
  1103. SaveTextDrawState(EditIndex);
  1104. switch(Project[EditIndex][iUsebox])
  1105. {
  1106. case 0: Project[EditIndex][iUsebox] = 1, Project[EditIndex][iBoxcolor] = 255, Send(ProjectEditor, -1, "Textdraw {00FF00}Box{FFFFFF}: Enabled");
  1107. case 1: Project[EditIndex][iUsebox] = 0, Send(ProjectEditor, -1, "Textdraw {00FF00}Box{FFFFFF}: Disabled");
  1108. }
  1109. if(!MenuHidden) ShowEditor();
  1110. UpdateTextDraw(EditIndex);
  1111. }
  1112. case EDITMODE_FONT:
  1113. {
  1114. SaveTextDrawState(EditIndex);
  1115. switch(Project[EditIndex][iFont])
  1116. {
  1117. case 0: Project[EditIndex][iFont] = 1, Send(ProjectEditor, -1, "Textdraw {00FF00}Font{FFFFFF}: 1 Normal");
  1118. case 1: Project[EditIndex][iFont] = 2, Send(ProjectEditor, -1, "Textdraw {00FF00}Font{FFFFFF}: 2 Modern");
  1119. case 2: Project[EditIndex][iFont] = 3, Send(ProjectEditor, -1, "Textdraw {00FF00}Font{FFFFFF}: 3 Bold");
  1120. case 3: Project[EditIndex][iFont] = 4, Send(ProjectEditor, -1, "Textdraw {00FF00}Font{FFFFFF}: 4 TXD Image");
  1121. case 4: Project[EditIndex][iFont] = 0, Send(ProjectEditor, -1, "Textdraw {00FF00}Font{FFFFFF}: 0 Oldschool");
  1122. }
  1123. if(!MenuHidden) ShowEditor();
  1124. UpdateTextDraw(EditIndex);
  1125. }
  1126. case EDITMODE_TYPE:
  1127. {
  1128. SaveTextDrawState(EditIndex);
  1129. switch(Project[EditIndex][iType])
  1130. {
  1131. case 0: Project[EditIndex][iType] = 1, Send(ProjectEditor, -1, "Textdraw {00FF00}Type{FFFFFF}: PlayerTextDraw");
  1132. case 1: Project[EditIndex][iType] = 0, Send(ProjectEditor, -1, "Textdraw {00FF00}Type{FFFFFF}: Global TextDraw");
  1133. }
  1134. if(!MenuHidden) ShowEditor();
  1135. UpdateTextDraw(EditIndex);
  1136. }
  1137. case EDITMODE_REMOVE:
  1138. {
  1139. SaveTextDrawState(EditIndex);
  1140.  
  1141. format(String_Normal, sizeof String_Normal, #ITD_I"Deleted Textdraw(%i)", EditIndex);
  1142. Send(ProjectEditor, -1, String_Normal);
  1143. RemoveTextDraw(EditIndex);
  1144. ShowEditor();
  1145. }
  1146. }
  1147. }
  1148. return true;
  1149. }
  1150.  
  1151. //============================================================================//
  1152.  
  1153. stock ShowTextSizeWarning()
  1154. {
  1155. String_Textdraw = "{FFFF00}WARNING\n\n{FFFFFF}You are trying to edit the Text Size when you don't have any box or image enabled.\n";
  1156. strcat(String_Textdraw, "This will result the textdraws to automatically create new lines in order to adjust your desired text size.\n\n");
  1157. strcat(String_Textdraw, "\n{00FF00}Q: I'm trying to resize FONT.\n{FFFFFF}A: Please use the 'Letter Size' tool (Size tool is for texture/box)\n");
  1158. strcat(String_Textdraw, "\n{00FF00}Q: I'm trying to resize CLICKABLE AREA.\n{FFFFFF}A: You may continue.\n");
  1159. strcat(String_Textdraw, "\n{00FF00}Q: I'm trying to make a FIXED REGION for my display text.\n{FFFFFF}A: You may continue.");
  1160.  
  1161. return iShowPlayerDialog(ProjectEditor, DIALOG_WARNING, DIALOG_STYLE_MSGBOX,
  1162. "Text Size Warning", String_Textdraw, "Cancel", "Continue");
  1163. }
  1164.  
  1165. stock ShowCreateDialog()
  1166. {
  1167. return iShowPlayerDialog(ProjectEditor, DIALOG_CREATE, DIALOG_STYLE_LIST,
  1168. "Create a new TextDraw",
  1169. "+ Create Normal Textdraw\n\
  1170. + Create Box (Uses \"TextDrawUseBox\" method)\n\
  1171. + Create Texture Box(uses \"LD_SPAC:white\" texture)",
  1172. "OK", "Back");
  1173. }
  1174.  
  1175. stock ShowTextDialog()
  1176. {
  1177. format(String_Message, sizeof String_Message,
  1178. "Please enter a new text below.\n\nCurrent Text: %s", Project[EditIndex][iText]);
  1179.  
  1180. return iShowPlayerDialog(ProjectEditor, DIALOG_TEXT, DIALOG_STYLE_INPUT,
  1181. "Change TextDraw String", String_Message, "OK", "Cancel");
  1182. }
  1183.  
  1184. stock ShowPositionDialog()
  1185. {
  1186. return iShowPlayerDialog(ProjectEditor, DIALOG_POSITION, DIALOG_STYLE_LIST, "Change Position",
  1187. "- Use the Mouse Pointer\n\
  1188. - Set the Position Manually\n", "OK", "Cancel");
  1189. }
  1190.  
  1191. stock ShowPositionCustomDialog()
  1192. {
  1193. format(String_Textdraw, sizeof String_Textdraw,
  1194. "Current Position: X: %f Y: %f\n\n\
  1195. Please enter the desired coordinates\n\
  1196. Make sure you use one the following formats:\n\
  1197. X Y | X, Y | X.00, Y.00 | X.00 Y.00",
  1198. Project[EditIndex][iPositionX],
  1199. Project[EditIndex][iPositionY]);
  1200.  
  1201. return iShowPlayerDialog(ProjectEditor, DIALOG_POSITIONC, DIALOG_STYLE_INPUT, "Enter Coordinates",
  1202. String_Textdraw, "OK", "Back");
  1203. }
  1204.  
  1205. stock ShowSizeDialog(bool:warn = false)
  1206. {
  1207. if(warn && Project[EditIndex][iFont] != 4 && !Project[EditIndex][iUsebox]) return ShowTextSizeWarning();
  1208. return iShowPlayerDialog(ProjectEditor, DIALOG_SIZE, DIALOG_STYLE_LIST, "Change Text Size",
  1209. "- Use the Mouse Pointer\n\
  1210. - Set the Text Size Manually\n", "OK", "Cancel");
  1211. }
  1212.  
  1213. stock ShowSizeCustomDialog()
  1214. {
  1215. format(String_Textdraw, sizeof String_Textdraw,
  1216. "Current Text Size: Width: %f Height: %f\n\n\
  1217. Please enter the desired size\n\
  1218. Make sure you use one the following formats:\n\
  1219. Width Height | Width, Height | Width.00 Height.00 | Width.00, Height.00",
  1220. Project[EditIndex][iTextX],
  1221. Project[EditIndex][iTextY]);
  1222.  
  1223. return iShowPlayerDialog(ProjectEditor, DIALOG_SIZEC, DIALOG_STYLE_INPUT, "Enter Text Size",
  1224. String_Textdraw, "OK", "Back");
  1225. }
  1226.  
  1227. stock ShowLetterDialog()
  1228. {
  1229. return iShowPlayerDialog(ProjectEditor, DIALOG_LETTER, DIALOG_STYLE_LIST, "Change Letter Size",
  1230. "- Use the Mouse Pointer\n\
  1231. - Set the Letter Size Manually\n", "OK", "Cancel");
  1232. }
  1233.  
  1234. stock ShowLetterCustomDialog()
  1235. {
  1236. format(String_Textdraw, sizeof String_Textdraw,
  1237. "Current Letter Size: Width: %f Height: %f\n\n\
  1238. Please enter the desired size\n\
  1239. Make sure you use one the following formats:\n\
  1240. Width Height | Width, Height | Width.00 Height.00 | Width.00, Height.00",
  1241. Project[EditIndex][iLetterX],
  1242. Project[EditIndex][iLetterY]);
  1243.  
  1244. return iShowPlayerDialog(ProjectEditor, DIALOG_LETTERC, DIALOG_STYLE_INPUT, "Enter Letter Size",
  1245. String_Textdraw, "OK", "Back");
  1246. }
  1247.  
  1248. stock ShowColorDialog()
  1249. {
  1250. new heading[32];
  1251. switch(EditMode)
  1252. {
  1253. case EDITMODE_COLOR: heading = "TextDraw Color";
  1254. case EDITMODE_BGCOLOR: heading = "TextDraw Background Color";
  1255. case EDITMODE_BOXCOLOR: heading = "TextDraw Box Color";
  1256. default: return Send(ProjectEditor, -1, #ITD_E"Color edit type undefined (Report as bug)");
  1257. }
  1258.  
  1259. return iShowPlayerDialog(ProjectEditor, DIALOG_COLOR, DIALOG_STYLE_LIST, heading,
  1260. "- Use Hexadecimal RGBA Code (e.g: 0xFFFFFFFF)\n\
  1261. - Enter Alphanumeric RGBA Code (e.g: 255, 255, 255, 255)\n\
  1262. - Select a Premade Color\n\
  1263. - Use the in-built color editor", "OK", "Cancel");
  1264. }
  1265.  
  1266. stock ShowHEXColorDialog()
  1267. {
  1268. return iShowPlayerDialog(ProjectEditor, DIALOG_HEXCOLOR, DIALOG_STYLE_INPUT,
  1269. "Input HEX Color Code", "Please enter a hexadecimal color code:\n\nMake sure it has one of the following forms:\n\
  1270. 0xRRGGBBAA | #RRGGBBAA | RRGGBBAA", "Done", "Back");
  1271. }
  1272.  
  1273. stock ShowNUMColorDialog()
  1274. {
  1275. return iShowPlayerDialog(ProjectEditor, DIALOG_NUMCOLOR, DIALOG_STYLE_INPUT, "Input Numeric Color Code",
  1276. "Please enter a numeric color code:\n\nMake sure it has one of the following forms:\n\
  1277. R G B A | R, G, B, A | (Values from 0 to 255)", "Done", "Back");
  1278. }
  1279.  
  1280. stock ShowPREColorDialog()
  1281. {
  1282. EmptyString(String_Textdraw);
  1283. CountRange(0, sizeof PremadeColors)
  1284. {
  1285. format(String_Normal, sizeof String_Normal, "{%06x}%s", PremadeColors[c][0] >>> 8, PremadeColors[c][1]);
  1286. strcat(String_Textdraw, String_Normal);
  1287. strcat(String_Textdraw, "\n");
  1288. }
  1289.  
  1290. return iShowPlayerDialog(ProjectEditor, DIALOG_PRECOLOR, DIALOG_STYLE_LIST, "Select a color",
  1291. String_Textdraw, "Done", "Back");
  1292. }
  1293.  
  1294. stock ShowProjectList()
  1295. {
  1296. String_Large = "(No projects created yet)";
  1297. new bool:Found;
  1298.  
  1299. Handler = fopen(ITD_List, io_read);
  1300. if(Handler)
  1301. {
  1302. while(fread(Handler, String_Normal))
  1303. {
  1304. if(strlen(String_Normal))
  1305. {
  1306. if(!Found)
  1307. {
  1308. EmptyString(String_Large);
  1309. Found = true;
  1310. }
  1311. strcat(String_Large, String_Normal);
  1312. }
  1313. }
  1314. fclose(Handler);
  1315. } else return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (project.lst)");
  1316.  
  1317. return iShowPlayerDialog(ProjectEditor, DIALOG_PROJECTS, DIALOG_STYLE_LIST, "Projects", String_Large, "Open", "Cancel");
  1318. }
  1319.  
  1320. stock ShowTextDrawList()
  1321. {
  1322. EmptyString(String_Large);
  1323. strcat(String_Large, "{00FF00}> Create New TextDraw\n{FF0000}> Destroy Selected TextDraw");
  1324.  
  1325. LoopProjectTextdraws
  1326. {
  1327. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  1328.  
  1329. format(String_Normal, sizeof String_Normal, "\n%s(%i)%s", EditIndex == i ? ("{00BFFF}"):(""), i, Project[i][iText]);
  1330. strcat(String_Large, String_Normal);
  1331. }
  1332.  
  1333. return iShowPlayerDialog(ProjectEditor, DIALOG_LIST, DIALOG_STYLE_LIST, "Project Textdraw List", String_Large, "Select", "Close");
  1334. }
  1335.  
  1336. //============================================================================//
  1337.  
  1338. stock AddProject(name[])
  1339. {
  1340. Handler = fopen(ITD_List, io_append);
  1341. if(!Handler) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (project.lst)");
  1342.  
  1343. fwrite(Handler, name);
  1344. fwrite(Handler, "\r\n");
  1345. fclose(Handler);
  1346.  
  1347. printf("iTD: %s added to Projects.lst", name);
  1348. return true;
  1349. }
  1350.  
  1351. stock CheckProject(name[])
  1352. {
  1353. if(!fexist(ITD_List)) return false;
  1354.  
  1355. Handler = fopen(ITD_List, io_read);
  1356. if(!Handler) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (project.lst)");
  1357.  
  1358. while(fread(Handler, String_Normal))
  1359. if(!strcmp(String_Normal, name, true, strlen(name)))
  1360. {
  1361. //printf("iTD: %s exists in Projects.lst", name);
  1362. fclose(Handler);
  1363. return true;
  1364. }
  1365.  
  1366. //printf("iTD: %s does not exist in Projects.lst", name);
  1367. fclose(Handler);
  1368. return false;
  1369. }
  1370.  
  1371. stock RemoveProject(name[])
  1372. {
  1373. if(!fexist(ITD_List)) return true;
  1374. if(fexist(name)) fremove(name);
  1375.  
  1376. Handler = fopen(ITD_List, io_read);
  1377. if(!Handler) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (project.lst)");
  1378.  
  1379. EmptyString(String_Large);
  1380. while(fread(Handler, String_Normal))
  1381. if(strcmp(Project, name, true, strlen(name))) strcat(String_Large, String_Normal);
  1382.  
  1383. fclose(Handler);
  1384. fremove(ITD_List);
  1385.  
  1386. Handler = fopen(ITD_List, io_append);
  1387. if(!Handler) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (project.lst)");
  1388.  
  1389. fwrite(Handler, String_Large);
  1390. fclose(Handler);
  1391. return true;
  1392. }
  1393.  
  1394. stock SaveProject(bool:response = false)
  1395. {
  1396. if(!strlen(ProjectFile)) return Send(ProjectEditor, -1, #ITD_E"No project is open to save");
  1397. if(fexist(ProjectFile)) fremove(ProjectFile);
  1398.  
  1399. Handler = fopen(ProjectFile, io_append);
  1400. if(!Handler) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occured (.iTD)");
  1401.  
  1402. LoopProjectTextdraws
  1403. {
  1404. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  1405.  
  1406. format(String_Textdraw, sizeof String_Textdraw,
  1407. "%f|%f|%f|%f|%f|%f|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%s\r\n",
  1408. Project[i][iPositionX], Project[i][iPositionY],
  1409. Project[i][iLetterX], Project[i][iLetterY],
  1410. Project[i][iTextX], Project[i][iTextY],
  1411. Project[i][iAlignment], Project[i][iColor],
  1412. Project[i][iUsebox], Project[i][iBoxcolor],
  1413. Project[i][iShadow], Project[i][iOutline],
  1414. Project[i][iBackgroundcolor], Project[i][iFont],
  1415. Project[i][iProportion], Project[i][iSelectable],
  1416. Project[i][iType], Project[i][iText]);
  1417. fwrite(Handler, String_Textdraw);
  1418. }
  1419. fclose(Handler);
  1420.  
  1421. if(response)
  1422. {
  1423. format(String_Message, 128, "%sProject: '%s' has been saved!", ITD, ProjectFile);
  1424. Send(ProjectEditor, -1, String_Message);
  1425. }
  1426. return true;
  1427. }
  1428.  
  1429. stock CloseProject(bool:response = false)
  1430. {
  1431. if(!strlen(ProjectFile)) return Send(ProjectEditor, -1, #ITD_E"No project is open to close");
  1432.  
  1433. SaveProject();
  1434. LoopProjectTextdraws RemoveTextDraw(i);
  1435.  
  1436. if(response)
  1437. {
  1438. format(String_Message, 128, "%sProject: '%s' has been closed!", ITD, ProjectFile);
  1439. Send(ProjectEditor, -1, String_Message);
  1440. }
  1441.  
  1442. EditIndex = INVALID_INDEX_ID;
  1443. EditMode = EDITMODE_NONE;
  1444. ColorMode = COLORMODE_NONE;
  1445. EmptyString(ProjectFile);
  1446. CountRange(0, sizeof States) EmptyString(States[c]);
  1447. ShowEditor();
  1448. return true;
  1449. }
  1450.  
  1451. stock LoadProject(bool:response = false)
  1452. {
  1453. if(!strlen(ProjectFile)) return Send(ProjectEditor, -1, #ITD_E"Unexpected error occured while trying to load a project. (Report as bug)");
  1454.  
  1455. Handler = fopen(ProjectFile, io_read);
  1456.  
  1457. new Index;
  1458.  
  1459. while(fread(Handler, String_Textdraw))
  1460. {
  1461. StripNewLine(String_Textdraw);
  1462.  
  1463. if(!sscanf(String_Textdraw, "p<|>ffffffiiiiiiiiiiis[128]",
  1464. Project[Index][iPositionX], Project[Index][iPositionY],
  1465. Project[Index][iLetterX], Project[Index][iLetterY],
  1466. Project[Index][iTextX], Project[Index][iTextY],
  1467. Project[Index][iAlignment], Project[Index][iColor],
  1468. Project[Index][iUsebox], Project[Index][iBoxcolor],
  1469. Project[Index][iShadow], Project[Index][iOutline],
  1470. Project[Index][iBackgroundcolor], Project[Index][iFont],
  1471. Project[Index][iProportion], Project[Index][iSelectable],
  1472. Project[Index][iType], Project[Index][iText]))
  1473. {
  1474. EditIndex = Index;
  1475. UpdateTextDraw(Index, false);
  1476. TextDrawShowForPlayer(ProjectEditor, Project[Index][iTextdraw]);
  1477. Index++;
  1478. }
  1479. }
  1480.  
  1481. fclose(Handler);
  1482. ShowEditor();
  1483.  
  1484. if(response)
  1485. {
  1486. format(String_Message, 128, "%sProject: '%s' has been loaded!", ITD, ProjectFile);
  1487. Send(ProjectEditor, -1, String_Message);
  1488. }
  1489. return true;
  1490. }
  1491.  
  1492. stock ExportProject()
  1493. {
  1494. if(!strlen(ProjectFile)) return Send(ProjectEditor, -1, #ITD_E"No project is open to export. (If this is a bug, please report)");
  1495.  
  1496. new ExportFile[64];
  1497. format(ExportFile, sizeof ExportFile, "%s", ProjectFile);
  1498. strins(ExportFile, "TD_", 0);
  1499. new len = strlen(ExportFile);
  1500. strdel(ExportFile, len - 3, len);
  1501. strcat(ExportFile, "pwn");
  1502.  
  1503. format(String_Message, sizeof String_Message, #ITD"Exporting Project to '%s'..", ExportFile);
  1504.  
  1505. if(fexist(ExportFile)) fremove(ExportFile);
  1506. new File:ExportIO = fopen(ExportFile, io_append);
  1507. if(!ExportIO) return Send(ProjectEditor, -1, #ITD_E"File I/O Error occurred (.pwn)");
  1508.  
  1509. new bool:Type;
  1510.  
  1511. new Index = -1;
  1512. LoopProjectTextdraws
  1513. {
  1514. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  1515. if(Project[i][iType]) continue;
  1516. if(!Type) fwrite(ExportIO, "//Global Textdraws:\r\n\r\n"), Type = true;
  1517.  
  1518. Index++;
  1519. format(String_Textdraw, sizeof String_Textdraw, "new Text:Textdraw%i;\r\n", Index);
  1520. fwrite(ExportIO, String_Textdraw);
  1521. }
  1522.  
  1523. if(Type)
  1524. {
  1525. fwrite(ExportIO, "\r\n\r\n");
  1526. Index = -1;
  1527. LoopProjectTextdraws
  1528. {
  1529. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  1530. if(Project[i][iType]) continue;
  1531.  
  1532. Index++;
  1533. format(String_Textdraw, sizeof String_Textdraw, "Textdraw%i = TextDrawCreate(%f, %f, \"%s\");\r\n", Index, Project[i][iPositionX], Project[i][iPositionY], Project[i][iText]);
  1534. fwrite(ExportIO, String_Textdraw);
  1535.  
  1536. format(String_Textdraw, sizeof String_Textdraw, "TextDrawLetterSize(Textdraw%i, %f, %f);\r\n", Index, Project[i][iLetterX], Project[i][iLetterY]);
  1537. fwrite(ExportIO, String_Textdraw);
  1538.  
  1539. if(floatadd(Project[i][iTextX], Project[i][iTextY]))
  1540. {
  1541. format(String_Textdraw, sizeof String_Textdraw, "TextDrawTextSize(Textdraw%i, %f, %f);\r\n", Index, Project[i][iTextX], Project[i][iTextY]);
  1542. fwrite(ExportIO, String_Textdraw);
  1543. }
  1544.  
  1545. format(String_Textdraw, sizeof String_Textdraw, "TextDrawAlignment(Textdraw%i, %i);\r\n", Index, Project[i][iAlignment]);
  1546. fwrite(ExportIO, String_Textdraw);
  1547.  
  1548. format(String_Textdraw, sizeof String_Textdraw, "TextDrawColor(Textdraw%i, %i);\r\n", Index, Project[i][iColor]);
  1549. fwrite(ExportIO, String_Textdraw);
  1550.  
  1551. if(Project[i][iUsebox])
  1552. {
  1553. format(String_Textdraw, sizeof String_Textdraw, "TextDrawUseBox(Textdraw%i, true);\r\n", Index);
  1554. fwrite(ExportIO, String_Textdraw);
  1555.  
  1556. format(String_Textdraw, sizeof String_Textdraw, "TextDrawBoxColor(Textdraw%i, %i);\r\n", Index, Project[i][iBoxcolor]);
  1557. fwrite(ExportIO, String_Textdraw);
  1558. }
  1559.  
  1560. format(String_Textdraw, sizeof String_Textdraw, "TextDrawSetShadow(Textdraw%i, %i);\r\n", Index, Project[i][iShadow]);
  1561. fwrite(ExportIO, String_Textdraw);
  1562.  
  1563. format(String_Textdraw, sizeof String_Textdraw, "TextDrawSetOutline(Textdraw%i, %i);\r\n", Index, Project[i][iOutline]);
  1564. fwrite(ExportIO, String_Textdraw);
  1565.  
  1566. if(Project[i][iBackgroundcolor])
  1567. {
  1568. format(String_Textdraw, sizeof String_Textdraw, "TextDrawBackgroundColor(Textdraw%i, %i);\r\n", Index, Project[i][iBackgroundcolor]);
  1569. fwrite(ExportIO, String_Textdraw);
  1570. }
  1571.  
  1572. format(String_Textdraw, sizeof String_Textdraw, "TextDrawFont(Textdraw%i, %i);\r\n", Index, Project[i][iFont]);
  1573. fwrite(ExportIO, String_Textdraw);
  1574.  
  1575. if(Project[i][iProportion])
  1576. {
  1577. format(String_Textdraw, sizeof String_Textdraw, "TextDrawSetProportional(Textdraw%i, %i);\r\n", Index, Project[i][iProportion]);
  1578. fwrite(ExportIO, String_Textdraw);
  1579. }
  1580.  
  1581. if(Project[i][iSelectable])
  1582. {
  1583. format(String_Textdraw, sizeof String_Textdraw, "TextDrawSetSelectable(Textdraw%i, true);\r\n", Index);
  1584. fwrite(ExportIO, String_Textdraw);
  1585. }
  1586. fwrite(ExportIO, "\r\n");
  1587. }
  1588. }
  1589.  
  1590. Type = false;
  1591.  
  1592. new gTexts = Index; Index = -1;
  1593. LoopProjectTextdraws
  1594. {
  1595. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  1596. if(!Project[i][iType]) continue;
  1597. if(!Type) fwrite(ExportIO, "\r\n//Player Textdraws:\r\n\r\n"), Type = true;
  1598. Index++;
  1599. format(String_Textdraw, sizeof String_Textdraw, "new PlayerText:Textdraw%i[MAX_PLAYERS];\r\n", Index);
  1600. fwrite(ExportIO, String_Textdraw);
  1601. }
  1602.  
  1603. Index = -1;
  1604. if(Type)
  1605. {
  1606. fwrite(ExportIO, "\r\n\r\n");
  1607. LoopProjectTextdraws
  1608. {
  1609. if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) continue;
  1610. if(!Project[i][iType]) continue;
  1611.  
  1612. Index++;
  1613. format(String_Textdraw, sizeof String_Textdraw, "Textdraw%i[playerid] = CreatePlayerTextDraw(playerid, %f, %f, \"%s\");\r\n", Index, Project[i][iPositionX], Project[i][iPositionY], Project[i][iText]);
  1614. fwrite(ExportIO, String_Textdraw);
  1615.  
  1616. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawLetterSize(playerid, Textdraw%i[playerid], %f, %f);\r\n", Index, Project[i][iLetterX], Project[i][iLetterY]);
  1617. fwrite(ExportIO, String_Textdraw);
  1618.  
  1619. if(floatadd(Project[i][iTextX], Project[i][iTextY]))
  1620. {
  1621. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawTextSize(playerid, Textdraw%i[playerid], %f, %f);\r\n", Index, Project[i][iTextX], Project[i][iTextY]);
  1622. fwrite(ExportIO, String_Textdraw);
  1623. }
  1624.  
  1625. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawAlignment(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iAlignment]);
  1626. fwrite(ExportIO, String_Textdraw);
  1627.  
  1628. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawColor(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iColor]);
  1629. fwrite(ExportIO, String_Textdraw);
  1630.  
  1631. if(Project[i][iUsebox])
  1632. {
  1633. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawUseBox(playerid, Textdraw%i[playerid], true);\r\n", Index);
  1634. fwrite(ExportIO, String_Textdraw);
  1635.  
  1636. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawBoxColor(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iBoxcolor]);
  1637. fwrite(ExportIO, String_Textdraw);
  1638. }
  1639.  
  1640. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawSetShadow(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iShadow]);
  1641. fwrite(ExportIO, String_Textdraw);
  1642.  
  1643. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawSetOutline(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iOutline]);
  1644. fwrite(ExportIO, String_Textdraw);
  1645.  
  1646. if(Project[i][iBackgroundcolor])
  1647. {
  1648. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawBackgroundColor(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iBackgroundcolor]);
  1649. fwrite(ExportIO, String_Textdraw);
  1650. }
  1651.  
  1652. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawFont(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iFont]);
  1653. fwrite(ExportIO, String_Textdraw);
  1654.  
  1655. if(Project[i][iProportion])
  1656. {
  1657. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawSetProportional(playerid, Textdraw%i[playerid], %i);\r\n", Index, Project[i][iProportion]);
  1658. fwrite(ExportIO, String_Textdraw);
  1659. }
  1660.  
  1661. if(Project[i][iSelectable])
  1662. {
  1663. format(String_Textdraw, sizeof String_Textdraw, "PlayerTextDrawSetSelectable(playerid, Textdraw%i[playerid], true);\r\n", Index);
  1664. fwrite(ExportIO, String_Textdraw);
  1665. }
  1666.  
  1667. fwrite(ExportIO, "\r\n");
  1668. }
  1669. }
  1670.  
  1671. fclose(ExportIO);
  1672. format(String_Message, sizeof String_Message, #ITD"Project Exported to '%s'! (%i Global Textdraws / %i Player Textdraws)", ExportFile, gTexts + 1, Index + 1);
  1673. Send(ProjectEditor, -1, String_Message);
  1674. return true;
  1675. }
  1676.  
  1677. stock UpdateTextDraw(Index, bool:Show = true)
  1678. {
  1679. if(!(0 <= Index < sizeof Project)) return;
  1680.  
  1681. TextDrawDestroy(Project[Index][iTextdraw]);
  1682. Project[Index][iTextdraw] = Text:INVALID_TEXT_DRAW;
  1683.  
  1684. Project[Index][iTextdraw] = TextDrawCreate
  1685. (
  1686. Project[Index][iPositionX],
  1687. Project[Index][iPositionY],
  1688. Project[Index][iText]
  1689. );
  1690.  
  1691. TextDrawLetterSize (Project[Index][iTextdraw], Project[Index][iLetterX], Project[Index][iLetterY]);
  1692.  
  1693. if(Project[Index][iUsebox] || Project[Index][iFont] == 4)
  1694. TextDrawTextSize (Project[Index][iTextdraw], Project[Index][iTextX], Project[Index][iTextY]);
  1695.  
  1696. TextDrawAlignment (Project[Index][iTextdraw], Project[Index][iAlignment] ? Project[Index][iAlignment] : 1);
  1697. TextDrawColor (Project[Index][iTextdraw], Project[Index][iColor]);
  1698. TextDrawUseBox (Project[Index][iTextdraw], Project[Index][iUsebox]);
  1699. TextDrawBoxColor (Project[Index][iTextdraw], Project[Index][iBoxcolor]);
  1700. TextDrawSetShadow (Project[Index][iTextdraw], Project[Index][iShadow]);
  1701. TextDrawSetOutline (Project[Index][iTextdraw], Project[Index][iOutline]);
  1702. TextDrawBackgroundColor (Project[Index][iTextdraw], Project[Index][iBackgroundcolor]);
  1703. TextDrawFont (Project[Index][iTextdraw], Project[Index][iFont]);
  1704. TextDrawSetProportional (Project[Index][iTextdraw], Project[Index][iProportion]);
  1705.  
  1706. if(Show) TextDrawShowForPlayer(ProjectEditor, Project[Index][iTextdraw]);
  1707. }
  1708.  
  1709. stock RemoveTextDraw(Index)
  1710. {
  1711. if(!(0 <= Index < sizeof Project)) return;
  1712.  
  1713. TextDrawDestroy(Project[Index][iTextdraw]);
  1714. format(Project[Index][iText], 128, " ");
  1715. Project[Index][iTextdraw] = Text:INVALID_TEXT_DRAW;
  1716. Project[Index][iLetterX] = 0.0;
  1717. Project[Index][iLetterY] = 0.0;
  1718. Project[Index][iTextX] = 0.0;
  1719. Project[Index][iTextY] = 0.0;
  1720. Project[Index][iAlignment] = 1;
  1721. Project[Index][iColor] = 0;
  1722. Project[Index][iUsebox] = 0;
  1723. Project[Index][iBoxcolor] = 0;
  1724. Project[Index][iShadow] = 0;
  1725. Project[Index][iOutline] = 0;
  1726. Project[Index][iBackgroundcolor] = 0;
  1727. Project[Index][iFont] = 0;
  1728. Project[Index][iProportion] = 0;
  1729. Project[Index][iSelectable] = 0;
  1730.  
  1731. if(EditIndex == Index)
  1732. {
  1733. EditMode = EDITMODE_NONE;
  1734. EditIndex = INVALID_INDEX_ID;
  1735. }
  1736. }
  1737.  
  1738.  
  1739. stock CopyTextDraw(Index, ToIndex)
  1740. {
  1741. if(!(0 <= Index < sizeof Project) || !(0 <= ToIndex < sizeof Project)) return;
  1742.  
  1743. format(Project[ToIndex][iText], 128, "%s", Project[Index][iText]);
  1744. Project[ToIndex][iPositionX] = Project[Index][iPositionX] + 1;
  1745. Project[ToIndex][iPositionY] = Project[Index][iPositionY] + 1;
  1746. Project[ToIndex][iLetterY] = Project[Index][iLetterY];
  1747. Project[ToIndex][iLetterX] = Project[Index][iLetterX];
  1748. Project[ToIndex][iLetterY] = Project[Index][iLetterY];
  1749. Project[ToIndex][iTextX] = Project[Index][iTextX];
  1750. Project[ToIndex][iTextY] = Project[Index][iTextY];
  1751. Project[ToIndex][iAlignment] = Project[Index][iAlignment];
  1752. Project[ToIndex][iColor] = Project[Index][iColor];
  1753. Project[ToIndex][iUsebox] = Project[Index][iUsebox];
  1754. Project[ToIndex][iBoxcolor] = Project[Index][iBoxcolor];
  1755. Project[ToIndex][iShadow] = Project[Index][iShadow];
  1756. Project[ToIndex][iOutline] = Project[Index][iOutline];
  1757. Project[ToIndex][iBackgroundcolor] = Project[Index][iBackgroundcolor];
  1758. Project[ToIndex][iFont] = Project[Index][iFont];
  1759. Project[ToIndex][iProportion] = Project[Index][iProportion];
  1760. Project[ToIndex][iSelectable] = Project[Index][iSelectable];
  1761.  
  1762. EditIndex = ToIndex;
  1763. UpdateTextDraw(ToIndex);
  1764. SaveTextDrawState(EditIndex, true);
  1765.  
  1766. format(String_Message, sizeof String_Message, #ITD_I"Textdraw (%i) Copied as new Textdraw (%i)", Index, ToIndex);
  1767. Send(ProjectEditor, -1, String_Message);
  1768. if(EditMode) EditMode = EDITMODE_POSITION;
  1769. }
  1770.  
  1771. stock SaveTextDrawState(Index, bool:Remove = false)
  1772. {
  1773. for( new i = 0; i < MAX_UNDO_STATES - 1; i++ )
  1774. States[i] = States[i + 1];
  1775.  
  1776. if(Remove) format(States[MAX_UNDO_STATES - 1], sizeof States[], "%i", Index);
  1777. else
  1778. {
  1779. format(States[MAX_UNDO_STATES - 1], sizeof States[],
  1780.  
  1781. "%i|%f|%f|%f|%f|%f|%f|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%s",
  1782.  
  1783. Index,
  1784. Project[Index][iPositionX], Project[Index][iPositionY],
  1785. Project[Index][iLetterX], Project[Index][iLetterY],
  1786. Project[Index][iTextX], Project[Index][iTextY],
  1787. Project[Index][iAlignment], Project[Index][iColor],
  1788. Project[Index][iUsebox], Project[Index][iBoxcolor],
  1789. Project[Index][iShadow], Project[Index][iOutline],
  1790. Project[Index][iBackgroundcolor], Project[Index][iFont],
  1791. Project[Index][iProportion], Project[Index][iSelectable],
  1792. Project[Index][iType], Project[Index][iText]);
  1793. }
  1794. }
  1795.  
  1796. stock UndoTextDrawState()
  1797. {
  1798. new
  1799. iCount,
  1800. iIndex = INVALID_INDEX_ID
  1801. ;
  1802.  
  1803. CountRange(0, MAX_UNDO_STATES) if(!isnull(States[c])) iIndex = c, iCount++;
  1804. if(iIndex == INVALID_INDEX_ID) return Send(ProjectEditor, -1, #ITD_E"Can't undo anymore.");
  1805.  
  1806. new index = -1, Float:ucX, Float:ucY, Float:ulX, Float:ulY, Float:utX, Float:utY,
  1807. uAl, uCl, uUb, uBc, uSd, uOl, uBg, uFt, uPr, uSl, uT, uS[64];
  1808.  
  1809. if(!sscanf(States[iIndex], "p<|>iffffffiiiiiiiiiiis[128]", index, ucX, ucY, ulX, ulY, utX, utY,
  1810. uAl, uCl, uUb, uBc, uSd, uOl, uBg, uFt, uPr, uSl, uT, uS))
  1811. {
  1812. if(index != -1)
  1813. {
  1814. Project[index][iPositionX] = ucX;
  1815. Project[index][iPositionY] = ucY;
  1816. Project[index][iLetterX] = ulX;
  1817. Project[index][iLetterY] = ulY;
  1818. Project[index][iTextX] = utX;
  1819. Project[index][iTextY] = utY;
  1820. Project[index][iAlignment] = uAl;
  1821. Project[index][iColor] = uCl;
  1822. Project[index][iUsebox] = uUb;
  1823. Project[index][iBoxcolor] = uBc;
  1824. Project[index][iShadow] = uSd;
  1825. Project[index][iOutline] = uOl;
  1826. Project[index][iBackgroundcolor] = uBg;
  1827. Project[index][iFont] = uFt;
  1828. Project[index][iProportion] = uPr;
  1829. Project[index][iSelectable] = uSl;
  1830. Project[index][iType] = uT;
  1831. format(Project[index][iText], 128, "%s", uS);
  1832. EditIndex = index;
  1833. UpdateTextDraw(EditIndex);
  1834. }
  1835. } else if(!sscanf(States[iIndex], "i", index))
  1836. {
  1837. if(0 <= index < sizeof Project) RemoveTextDraw(index);
  1838. }
  1839.  
  1840. EmptyString(States[iIndex]);
  1841. format(String_Message, sizeof String_Message, #ITD_I"{00FF00}Undo{FFFFFF} applied (%i remaining)", iCount - 1);
  1842. return Send(ProjectEditor, -1, String_Message);
  1843. }
  1844.  
  1845. stock ShowEditor()
  1846. {
  1847. DestroyMenuTextDraws();
  1848. CreateMenuTextDraws();
  1849.  
  1850. TogglePlayerControllable(ProjectEditor, false);
  1851.  
  1852. if(EditIndex != INVALID_INDEX_ID)
  1853. {
  1854. CountRange(0, sizeof TD_Menu)
  1855. {
  1856. TextDrawColor(TD_Menu[c], 0xDDDDDDFF);
  1857. TextDrawSetSelectable(TD_Menu[c], true);
  1858.  
  1859. switch(c)
  1860. {
  1861. case 24, 25, 26, 27, 12:
  1862. {
  1863. switch(Project[EditIndex][iFont])
  1864. {
  1865. case 0: TextDrawShowForPlayer(ProjectEditor, TD_Menu[24]);
  1866. case 1: TextDrawShowForPlayer(ProjectEditor, TD_Menu[25]);
  1867. case 2: TextDrawShowForPlayer(ProjectEditor, TD_Menu[26]);
  1868. case 3: TextDrawShowForPlayer(ProjectEditor, TD_Menu[27]);
  1869. case 4: TextDrawShowForPlayer(ProjectEditor, TD_Menu[12]);
  1870. }
  1871. }
  1872. case 5, 33:
  1873. {
  1874. switch(Project[EditIndex][iType])
  1875. {
  1876. case 0: TextDrawShowForPlayer(ProjectEditor, TD_Menu[5]);
  1877. case 1: TextDrawShowForPlayer(ProjectEditor, TD_Menu[33]);
  1878. }
  1879. }
  1880. case 30, 31:
  1881. {
  1882. switch(Project[EditIndex][iProportion])
  1883. {
  1884. case 0: TextDrawShowForPlayer(ProjectEditor, TD_Menu[30]);
  1885. case 1: TextDrawShowForPlayer(ProjectEditor, TD_Menu[31]);
  1886. }
  1887. }
  1888. case 28, 29:
  1889. {
  1890. switch(Project[EditIndex][iSelectable])
  1891. {
  1892. case 0: TextDrawShowForPlayer(ProjectEditor, TD_Menu[28]);
  1893. case 1: TextDrawShowForPlayer(ProjectEditor, TD_Menu[29]);
  1894. }
  1895. }
  1896. case 21, 22, 23:
  1897. {
  1898. switch(Project[EditIndex][iAlignment])
  1899. {
  1900. case 1: TextDrawShowForPlayer(ProjectEditor, TD_Menu[21]);
  1901. case 2: TextDrawShowForPlayer(ProjectEditor, TD_Menu[22]);
  1902. case 3: TextDrawShowForPlayer(ProjectEditor, TD_Menu[23]);
  1903. default:
  1904. {
  1905. Project[EditIndex][iAlignment] = 1;
  1906. TextDrawShowForPlayer(ProjectEditor, TD_Menu[21]);
  1907. }
  1908. }
  1909. }
  1910. case 19, 20:
  1911. {
  1912. switch(Project[EditIndex][iUsebox])
  1913. {
  1914. case 0: TextDrawShowForPlayer(ProjectEditor, TD_Menu[19]);
  1915. case 1: TextDrawShowForPlayer(ProjectEditor, TD_Menu[20]);
  1916. }
  1917. }
  1918. case 6, 7, 13:
  1919. {
  1920. TextDrawColor(TD_Menu[c], 0xFFFFFFFF);
  1921. TextDrawSetSelectable(TD_Menu[c], false);
  1922. TextDrawShowForPlayer(ProjectEditor, TD_Menu[c]);
  1923. }
  1924. case 0:
  1925. {
  1926. TextDrawColor(TD_Menu[c], 0x000000FF);
  1927. TextDrawSetSelectable(TD_Menu[c], false);
  1928. TextDrawShowForPlayer(ProjectEditor, TD_Menu[c]);
  1929. }
  1930. default: TextDrawShowForPlayer(ProjectEditor, TD_Menu[c]);
  1931. }
  1932. }
  1933.  
  1934. } else {
  1935. CountRange(0, sizeof TD_Menu)
  1936. {
  1937. switch(c)
  1938. {
  1939. case 1, 2:
  1940. {
  1941. TextDrawColor(TD_Menu[c], 0xDDDDDDFF);
  1942. TextDrawSetSelectable(TD_Menu[c], true);
  1943. }
  1944. case 3, 4, 8:
  1945. {
  1946. if(strlen(ProjectFile))
  1947. {
  1948. TextDrawColor(TD_Menu[c], 0xDDDDDDFF);
  1949. TextDrawSetSelectable(TD_Menu[c], true);
  1950. } else {
  1951. TextDrawColor(TD_Menu[c], 0x888888FF);
  1952. TextDrawSetSelectable(TD_Menu[c], false);
  1953. }
  1954. }
  1955. case 5, 9..12, 14..33:
  1956. {
  1957. TextDrawColor(TD_Menu[c], 0x888888FF);
  1958. TextDrawSetSelectable(TD_Menu[c], false);
  1959. }
  1960. }
  1961. TextDrawShowForPlayer(ProjectEditor, TD_Menu[c]);
  1962. }
  1963. }
  1964.  
  1965. SelectTextDraw(ProjectEditor, 0xFFFFFFFF);
  1966. MenuShown = true;
  1967. MenuHidden = false;
  1968. EditMode = EDITMODE_NONE;
  1969. if(strlen(ProjectFile)) SaveProject(false);
  1970. return true;
  1971. }
  1972.  
  1973. stock HideEditor(bool:temp = false)
  1974. {
  1975. if(temp)
  1976. {
  1977. DestroyMenuTextDraws();
  1978. MenuHidden = true;
  1979. return true;
  1980. }
  1981.  
  1982. DestroyMenuTextDraws();
  1983. TogglePlayerControllable(ProjectEditor, true);
  1984. EditMode = EDITMODE_NONE;
  1985. EditIndex = INVALID_INDEX_ID;
  1986. MenuHidden = false;
  1987. ProjectEditor = INVALID_PLAYER_ID;
  1988. MenuShown = false;
  1989. return true;
  1990. }
  1991.  
  1992. stock Initiate()
  1993. {
  1994. if(!fexist(ITD_List)) {
  1995. new File:IO = fopen(ITD_List, io_write);
  1996. fclose(IO);
  1997. }
  1998.  
  1999. VirtualKeys[0][KEY_CODE] = VK_KEY_A;
  2000. VirtualKeys[1][KEY_CODE] = VK_KEY_B;
  2001. VirtualKeys[2][KEY_CODE] = VK_KEY_C;
  2002. VirtualKeys[3][KEY_CODE] = VK_KEY_D;
  2003. VirtualKeys[4][KEY_CODE] = VK_KEY_E;
  2004. VirtualKeys[5][KEY_CODE] = VK_KEY_F;
  2005. VirtualKeys[6][KEY_CODE] = VK_KEY_G;
  2006. VirtualKeys[7][KEY_CODE] = VK_KEY_H;
  2007. VirtualKeys[8][KEY_CODE] = VK_KEY_I;
  2008. VirtualKeys[9][KEY_CODE] = VK_KEY_J;
  2009. VirtualKeys[10][KEY_CODE] = VK_KEY_K;
  2010. VirtualKeys[11][KEY_CODE] = VK_KEY_L;
  2011. VirtualKeys[12][KEY_CODE] = VK_KEY_M;
  2012. VirtualKeys[13][KEY_CODE] = VK_KEY_N;
  2013. VirtualKeys[14][KEY_CODE] = VK_KEY_O;
  2014. VirtualKeys[15][KEY_CODE] = VK_KEY_P;
  2015. VirtualKeys[16][KEY_CODE] = VK_KEY_Q;
  2016. VirtualKeys[17][KEY_CODE] = VK_KEY_R;
  2017. VirtualKeys[18][KEY_CODE] = VK_KEY_S;
  2018. VirtualKeys[19][KEY_CODE] = VK_KEY_T;
  2019. VirtualKeys[20][KEY_CODE] = VK_KEY_U;
  2020. VirtualKeys[21][KEY_CODE] = VK_KEY_V;
  2021. VirtualKeys[22][KEY_CODE] = VK_KEY_W;
  2022. VirtualKeys[23][KEY_CODE] = VK_KEY_X;
  2023. VirtualKeys[24][KEY_CODE] = VK_KEY_Y;
  2024. VirtualKeys[25][KEY_CODE] = VK_KEY_Z;
  2025. VirtualKeys[26][KEY_CODE] = VK_LBUTTON;
  2026. VirtualKeys[27][KEY_CODE] = VK_MBUTTON;
  2027. VirtualKeys[28][KEY_CODE] = VK_RBUTTON;
  2028. VirtualKeys[29][KEY_CODE] = VK_LEFT;
  2029. VirtualKeys[30][KEY_CODE] = VK_RIGHT;
  2030. VirtualKeys[31][KEY_CODE] = VK_UP;
  2031. VirtualKeys[32][KEY_CODE] = VK_DOWN;
  2032. VirtualKeys[33][KEY_CODE] = VK_LSHIFT;
  2033. VirtualKeys[34][KEY_CODE] = VK_RSHIFT;
  2034. VirtualKeys[35][KEY_CODE] = VK_SPACE;
  2035.  
  2036. EditMode = EDITMODE_NONE;
  2037. EditIndex = INVALID_INDEX_ID;
  2038. ProjectEditor = INVALID_PLAYER_ID;
  2039. LoopProjectTextdraws Project[i][iTextdraw] = Text:INVALID_TEXT_DRAW;
  2040. UpdateTimer = SetTimer("OnEditorUpdate", 25, true);
  2041. }
  2042.  
  2043. stock CreateMenuTextDraws()
  2044. {
  2045. TD_Menu[0] = TextDrawCreate(0.0, OffsetZ - 2.0, "LD_SPAC:white");
  2046. TextdrawSettings(TD_Menu[0], Float:{0.5, 1.0, 640.0, 37.0}, {0,0x000000FF,0,0,0,0,255,4,1,0});
  2047.  
  2048. new Float:OffsetX = 0.01;
  2049.  
  2050. TD_Menu[1] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_new"); OffsetX += 32.0;
  2051. TD_Menu[2] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_open"); OffsetX += 32.0;
  2052.  
  2053. CountRange(1, 3)
  2054. TextdrawSettings(TD_Menu[c], Float:{0.5, 1.0, 32.0, 32.0}, {0,0xDDDDDDFF,0,0,0,0,0,4,1,0});
  2055.  
  2056. TD_Menu[3] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_close"); OffsetX += 32.0;
  2057. TD_Menu[4] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_export"); OffsetX += 32.0;
  2058. TD_Menu[8] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_manage"); OffsetX += 32.0;
  2059. TD_Menu[24] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_font0");
  2060. TD_Menu[25] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_font1");
  2061. TD_Menu[26] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_font2");
  2062. TD_Menu[27] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_font3");
  2063. TD_Menu[12] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_image"); OffsetX += 32.0;
  2064. TD_Menu[9] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_pos"); OffsetX += 32.0;
  2065. TD_Menu[10] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_size"); OffsetX += 32.0;
  2066. TD_Menu[11] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_text"); OffsetX += 32.0;
  2067. TD_Menu[14] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_color"); OffsetX += 32.0;
  2068. TD_Menu[15] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_bgcolor"); OffsetX += 32.0;
  2069. TD_Menu[32] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_boxcolor"); OffsetX += 32.0;
  2070. TD_Menu[16] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_lettersize"); OffsetX += 32.0;
  2071. TD_Menu[17] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_outline"); OffsetX += 32.0;
  2072. TD_Menu[18] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_shadow"); OffsetX += 32.0;
  2073. TD_Menu[19] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_useboxno");
  2074. TD_Menu[20] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_useboxyes"); OffsetX += 32.0;
  2075. TD_Menu[21] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_alignmentleft");
  2076. TD_Menu[22] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_alignmentcenter");
  2077. TD_Menu[23] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_alignmentright"); OffsetX += 32.0;
  2078. TD_Menu[5] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_global");
  2079. TD_Menu[33] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_player"); OffsetX += 32.0;
  2080. TD_Menu[28] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_selectableno");
  2081. TD_Menu[29] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_selectableyes"); OffsetX += 32.0;
  2082. TD_Menu[30] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_proportionno");
  2083. TD_Menu[31] = TextDrawCreate(OffsetX, OffsetZ, "PLEO:btn_proportionyes"); OffsetX += 32.0;
  2084.  
  2085. //TD_Menu[6] = TextDrawCreate(222.0, 173.0, "Project tools:");
  2086. //TD_Menu[7] = TextDrawCreate(222.0, 234.0, "Textdraw tools:");
  2087. //TD_Menu[13] = TextDrawCreate(222.0, 334.0, "Textdraw Toggles:");
  2088.  
  2089. CountRange(3, sizeof TD_Menu)
  2090. TextdrawSettings(TD_Menu[c], Float:{0.5, 1.0, 32.0, 32.0}, {0,0x888888FF,0,0,0,0,0,4,1,0});
  2091. }
  2092.  
  2093. stock DestroyMenuTextDraws()
  2094. {
  2095. CountRange(0, sizeof TD_Menu)
  2096. {
  2097. TextDrawDestroy(TD_Menu[c]);
  2098. TD_Menu[c] = Text:INVALID_TEXT_DRAW;
  2099. }
  2100. }
  2101.  
  2102. stock TextdrawSettings(Text:textid, Float:Sizes[4], Options[10])
  2103. {
  2104. TextDrawLetterSize (textid, Sizes[0], Sizes[1]);
  2105. TextDrawTextSize (textid, Sizes[2], Sizes[3]);
  2106. TextDrawAlignment (textid, Options[0] ? Options[0] : 1);
  2107. TextDrawColor (textid, Options[1]);
  2108. TextDrawUseBox (textid, Options[2]);
  2109. TextDrawBoxColor (textid, Options[3]);
  2110. TextDrawSetShadow (textid, Options[4]);
  2111. TextDrawSetOutline (textid, Options[5]);
  2112. TextDrawBackgroundColor (textid, Options[6]);
  2113. TextDrawFont (textid, Options[7]);
  2114. TextDrawSetProportional (textid, Options[8]);
  2115. TextDrawSetSelectable (textid, Options[9]);
  2116. }
  2117.  
  2118. stock Dispose()
  2119. {
  2120. CountRange(0, sizeof States) EmptyString(States[c]);
  2121. KillTimer(UpdateTimer);
  2122. LoopProjectTextdraws TextDrawDestroy(Project[i][iTextdraw]);
  2123. DestroyMenuTextDraws();
  2124. }
  2125.  
  2126. stock IsValidProjectName(name[])
  2127. {
  2128. CountRange(0, strlen(name))
  2129. {
  2130. switch(name[c])
  2131. {
  2132. case 'A' .. 'Z', 'a' .. 'z', '0' .. '9', '-', '_', '(', ')': continue;
  2133. default: return false;
  2134. }
  2135. }
  2136. return true;
  2137. }
  2138.  
  2139. stock GetAvailableIndex()
  2140. {
  2141. LoopProjectTextdraws if(Project[i][iTextdraw] == Text:INVALID_TEXT_DRAW) return i;
  2142. return INVALID_INDEX_ID;
  2143. }
  2144.  
  2145. stock StripNewLine(string[]) //DracoBlue (bugfix idea by Y_Less)
  2146. {
  2147. new len = strlen(string);
  2148. if (string[0]==0) return ;
  2149. if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
  2150. string[len - 1] = 0;
  2151. if (string[0]==0) return ;
  2152. if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
  2153. }
  2154. }
  2155.  
  2156. stock HexToInt(string[])//DracoBlue
  2157. {
  2158. if (string[0] == 0) return 0;
  2159. new i, cur=1, res = 0;
  2160. for (i=strlen(string);i>0;i--) {
  2161. if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  2162. cur=cur*16;
  2163. }
  2164. return res;
  2165. }
  2166.  
  2167. stock RGBAToHex(r, g, b, a) //By Betamaster
  2168. {
  2169. return (r<<24 | g<<16 | b<<8 | a);
  2170. }
  2171.  
  2172. stock HexToRGBA(colour, &r, &g, &b, &a) //By Betamaster
  2173. {
  2174. r = (colour >> 24) & 0xFF;
  2175. g = (colour >> 16) & 0xFF;
  2176. b = (colour >> 8) & 0xFF;
  2177. a = colour & 0xFF;
  2178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement