Guest User

zama.pwn

a guest
Oct 24th, 2020
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 128.34 KB | None | 0 0
  1. // Start Of File
  2. /*
  3. Zamaroht's TextDraw Editor Version 1.0RC2.
  4. Designed for SA-MP 0.3.
  5.  
  6. Author: Zamaroht (Nicolás Laurito)
  7.  
  8. Start of Development: 25 December 2009, 22:16 (GMT-3)
  9. End of Development: 01 January 2010, 23:31 (GMT-3)
  10.  
  11. Disclaimer:
  12. You can re-distribute this file as you wish, but ALWAYS keeping the name of the
  13. author and a link back to http://forum.sa-mp.com/index.php?topic=143025.0
  14. attached to the mean of distrubution.
  15. For example, the link with the author's name in a public forum topic, or a
  16. separate README file in a .zip file, etc.
  17. If you modify this file, the same terms apply. You have to include the original
  18. author (Zamaroht) and the link back to the mentioned webpage.
  19. */
  20.  
  21. #include <a_samp>
  22. #include <Pawn.CMD>
  23. #include <Dini>
  24.  
  25. // =============================================================================
  26. // Internal Declarations.
  27. // =============================================================================
  28.  
  29. #define MAX_TEXTDRAWS 90 // Max textdraws shown on client screen is 92. Using 90 to be on the safe side.
  30. #define MSG_COLOR 0xFAF0CEFF // Color to be shown in the messages.
  31. #define PREVIEW_CHARS 35 // Amount of characters that show on the textdraw's preview.
  32.  
  33.  
  34. // Used with P_Aux
  35. #define DELETING 0
  36. #define LOADING 1
  37.  
  38. // Used with P_KeyEdition
  39. #define EDIT_NONE 0
  40. #define EDIT_POSITION 1
  41. #define EDIT_SIZE 2
  42. #define EDIT_BOX 3
  43.  
  44. // Used with P_ColorEdition
  45. #define COLOR_TEXT 0
  46. #define COLOR_OUTLINE 1
  47. #define COLOR_BOX 2
  48.  
  49. enum enum_tData // Textdraw data.
  50. {
  51. bool:T_Created, // Wheter the textdraw ID is created or not.
  52. Text:T_Handler, // Where the TD id is saved itself.
  53. T_Text[1536], // The textdraw's string.
  54. Float:T_X,
  55. Float:T_Y,
  56. T_Alignment,
  57. T_BackColor,
  58. T_BoxColor,
  59. T_Color,
  60. T_Font,
  61. Float:T_XSize,
  62. Float:T_YSize,
  63. T_Outline,
  64. T_Proportional,
  65. T_Shadow,
  66. Float:T_TextSizeX,
  67. Float:T_TextSizeY,
  68. T_UseBox
  69. };
  70.  
  71. enum enum_pData // Player data.
  72. {
  73. bool:P_Editing, // Wheter the player is editing or not at the moment (allow /menu).
  74. P_DialogPage, // Page of the textdraw selection dialog they are at.
  75. P_CurrentTextdraw, // Textdraw ID being currently edited.
  76. P_CurrentMenu, // Just used at the start, to know if the player is LOADING or DELETING.
  77. P_KeyEdition, // Used to know which editions is being performed with keyboard. Check defines.
  78. P_Aux, // Auxiliar variable, used as a temporal variable in various cases.
  79. P_ColorEdition, // Used to know WHAT the player is changing the color of. Check defines.
  80. P_Color[4], // Holds RGBA when using color combinator.
  81. P_ExpCommand[128], // Holds temporaly the command which will be used for a command fscript export.
  82. P_Aux2 // Just used in special export cases.
  83. };
  84.  
  85. new tData[MAX_TEXTDRAWS][enum_tData],
  86. pData[MAX_PLAYERS][enum_pData];
  87.  
  88. new CurrentProject[128]; // String containing the location of the current opened project file.
  89.  
  90. // =============================================================================
  91. // Callbacks.
  92. // =============================================================================
  93.  
  94. public OnFilterScriptInit()
  95. {
  96. print("\n--------------------------------------");
  97. print(" Text Draw Editor 1.0RC2 by Zamaroht for SA-MP 0.3 Loaded.");
  98. print("--------------------------------------\n");
  99. for(new i; i < MAX_PLAYERS; i ++) if(IsPlayerConnected(i)) ResetPlayerVars(i);
  100. for(new i; i < MAX_TEXTDRAWS; i ++)
  101. {
  102. tData[i][T_Handler] = TextDrawCreate(0.0, 0.0, " ");
  103. }
  104. return 1;
  105. }
  106.  
  107. public OnFilterScriptExit()
  108. {
  109. for(new i; i < MAX_TEXTDRAWS; i ++)
  110. {
  111. TextDrawHideForAll(tData[i][T_Handler]);
  112. TextDrawDestroy(tData[i][T_Handler]);
  113. }
  114. return 1;
  115. }
  116.  
  117. public OnPlayerConnect(playerid)
  118. {
  119. for(new i; i < MAX_TEXTDRAWS; i ++)
  120. {
  121. if(tData[i][T_Created])
  122. TextDrawShowForPlayer(playerid, tData[i][T_Handler]);
  123. }
  124. }
  125.  
  126. public OnPlayerSpawn(playerid)
  127. {
  128. SendClientMessage(playerid, MSG_COLOR, "Use /texto para mostrar o menu de Edição");
  129.  
  130. return 1;
  131. }
  132.  
  133. public OnPlayerDisconnect(playerid, reason)
  134. {
  135. ResetPlayerVars(playerid);
  136. return 1;
  137. }
  138.  
  139. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  140. {
  141. if(response == 1) PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0); // Confirmation sound
  142. else PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0); // Cancelation sound
  143.  
  144. switch(dialogid)
  145. {
  146. case 1574: // First dialog.
  147. {
  148. if(response) // If he pressed Aceitar.
  149. {
  150. strmid(CurrentProject, "", 0, 1, 128);
  151.  
  152. if(listitem == 0) // He pressed new project.
  153. ShowTextDrawDialog(playerid, 1);
  154. else if(listitem == 1) // He pressed load project.
  155. ShowTextDrawDialog(playerid, 2, 1);
  156. else if(listitem == 2) // He pressed delete project.
  157. ShowTextDrawDialog(playerid, 2, 2);
  158. }
  159. else pData[playerid][P_Editing] = false;
  160. }
  161.  
  162. case 1575: // New Project
  163. {
  164. if(response)
  165. {
  166. if(strlen(inputtext) > 120) ShowTextDrawDialog(playerid, 1, 1); // Too long.
  167.  
  168. else if(
  169. strfind(inputtext, "/") != -1 || strfind(inputtext, "\\") != -1 ||
  170. strfind(inputtext, ":") != -1 || strfind(inputtext, "*") != -1 ||
  171. strfind(inputtext, "?") != -1 || strfind(inputtext, "\"") != -1 ||
  172. strfind(inputtext, "<") != -1 || strfind(inputtext, ">") != -1 ||
  173. strfind(inputtext, "|") != -1 || !strlen(inputtext) ||
  174. inputtext[0] == ' ' )
  175. ShowTextDrawDialog(playerid, 1, 3); // Ilegal characters.
  176.  
  177. else // It's ok, create the new file.
  178. {
  179. new filename[128];
  180. format(filename, sizeof(filename), "%s.tde", inputtext);
  181. if(fexist(filename)) ShowTextDrawDialog(playerid, 1, 2); // Already exists.
  182. else
  183. {
  184. CreateNewProject(filename);
  185. strmid(CurrentProject, filename, 0, strlen(inputtext), 128);
  186.  
  187. new tmpstr[128];
  188. format(tmpstr, sizeof(tmpstr), "Agora você está trabalhando no '%s' projeto.", filename);
  189. SendClientMessage(playerid, MSG_COLOR, tmpstr);
  190.  
  191. ShowTextDrawDialog(playerid, 4); // Show the main edition menu.
  192. }
  193. }
  194. }
  195. else
  196. ShowTextDrawDialog(playerid, 0);
  197. }
  198.  
  199. case 1576: // Load/Delete project
  200. {
  201. if(response)
  202. {
  203. if(listitem == 0) // Custom filename
  204. {
  205. if(pData[playerid][P_CurrentMenu] == LOADING) ShowTextDrawDialog(playerid, 3);
  206. else if(pData[playerid][P_CurrentMenu] == DELETING) ShowTextDrawDialog(playerid, 0);
  207. }
  208. else
  209. {
  210. if(pData[playerid][P_CurrentMenu] == DELETING)
  211. {
  212. pData[playerid][P_Aux] = listitem - 1;
  213. ShowTextDrawDialog(playerid, 6);
  214. }
  215. else if(pData[playerid][P_CurrentMenu] == LOADING)
  216. {
  217. new filename[135];
  218. format(filename, sizeof(filename), "%s", GetFileNameFromLst("tdlist.lst", listitem - 1));
  219. LoadProject(playerid, filename);
  220. }
  221. }
  222. }
  223. else
  224. ShowTextDrawDialog(playerid, 0);
  225. }
  226.  
  227. case 1577: // Load custom project
  228. {
  229. if(response)
  230. {
  231. new ending[5];
  232. strmid(ending, inputtext, strlen(inputtext) - 4, strlen(inputtext));
  233. if(strcmp(ending, ".tde") != 0)
  234. {
  235. new filename[128];
  236. format(filename, sizeof(filename), "%s.tde", inputtext);
  237. LoadProject(playerid, filename);
  238. }
  239. else LoadProject(playerid, inputtext);
  240. }
  241. else
  242. {
  243. if(pData[playerid][P_CurrentMenu] == DELETING) ShowTextDrawDialog(playerid, 2, 2);
  244. else if(pData[playerid][P_CurrentMenu] == LOADING) ShowTextDrawDialog(playerid, 2);
  245. }
  246. }
  247.  
  248. case 1578: // Textdraw selection
  249. {
  250. if(response)
  251. {
  252. if(listitem == 0) // They selected new textdraw
  253. {
  254. pData[playerid][P_CurrentTextdraw] = -1;
  255. for(new i; i < MAX_TEXTDRAWS; i++)
  256. {
  257. if(!tData[i][T_Created]) // If it isn't created yet, use it.
  258. {
  259. ClearTextdraw(i);
  260. CreateDefaultTextdraw(i);
  261. pData[playerid][P_CurrentTextdraw] = i;
  262. ShowTextDrawDialog(playerid, 4, pData[playerid][P_DialogPage]);
  263. break;
  264. }
  265. }
  266. if(pData[playerid][P_CurrentTextdraw] == -1)
  267. {
  268. SendClientMessage(playerid, MSG_COLOR, "Você não pode criar mais textdraws!");
  269. ShowTextDrawDialog(playerid, 4, pData[playerid][P_DialogPage]);
  270. }
  271. else
  272. {
  273. new string[128];
  274. format(string, sizeof(string), "Textdraw #%d criado com sucesso!.", pData[playerid][P_CurrentTextdraw]);
  275. SendClientMessage(playerid, MSG_COLOR, string);
  276. }
  277. }
  278. else if(listitem == 1) // They selected export
  279. {
  280. ShowTextDrawDialog(playerid, 25);
  281. }
  282. else if(listitem == 2) // They selected close project
  283. {
  284. if(IsPlayerMinID(playerid))
  285. {
  286. for(new i; i < MAX_TEXTDRAWS; i ++)
  287. {
  288. ClearTextdraw(i);
  289. }
  290.  
  291. new string[128];
  292. format(string, sizeof(string), "Projeto '%s' fechado.", CurrentProject);
  293. SendClientMessage(playerid, MSG_COLOR, string);
  294.  
  295. strmid(CurrentProject, " ", 128, 128);
  296. ShowTextDrawDialog(playerid, 0);
  297. }
  298. else
  299. {
  300. SendClientMessage(playerid, MSG_COLOR, "Apenas o jogador menor ID pode gerenciar projetos. Peça-lhe para abrir uma.");
  301. ShowTextDrawDialog(playerid, 4);
  302. }
  303. }
  304. else if(listitem <= 10) // They selected a TD
  305. {
  306. new id = 3;
  307. for(new i = pData[playerid][P_DialogPage]; i < MAX_TEXTDRAWS; i ++)
  308. {
  309. if(tData[i][T_Created])
  310. {
  311. if(id == listitem)
  312. {
  313. // We found it
  314. pData[playerid][P_CurrentTextdraw] = i;
  315. ShowTextDrawDialog(playerid, 5);
  316. break;
  317. }
  318. id ++;
  319. }
  320. }
  321. new string[128];
  322. format(string, sizeof(string), "Você agora está editando TextDraw #%d", pData[playerid][P_CurrentTextdraw]);
  323. SendClientMessage(playerid, MSG_COLOR, string);
  324. }
  325. else
  326. {
  327. new BiggestID, itemcount;
  328. for(new i = pData[playerid][P_DialogPage]; i < MAX_TEXTDRAWS; i ++)
  329. {
  330. if(tData[i][T_Created])
  331. {
  332. itemcount ++;
  333. BiggestID = i;
  334. if(itemcount == 9) break;
  335. }
  336. }
  337. ShowTextDrawDialog(playerid, 4, BiggestID);
  338. }
  339. }
  340. else
  341. {
  342. pData[playerid][P_Editing] = false;
  343. pData[playerid][P_DialogPage] = 0;
  344. }
  345. }
  346.  
  347. case 1579: // Main edition menu
  348. {
  349. if(response)
  350. {
  351. switch(listitem)
  352. {
  353. case 0: // Change text
  354. {
  355. ShowTextDrawDialog(playerid, 8);
  356. }
  357. case 1: // Change position
  358. {
  359. ShowTextDrawDialog(playerid, 9);
  360. }
  361. case 2: // Change alignment
  362. {
  363. ShowTextDrawDialog(playerid, 11);
  364. }
  365. case 3: // Change font color
  366. {
  367. pData[playerid][P_ColorEdition] = COLOR_TEXT;
  368. ShowTextDrawDialog(playerid, 13);
  369. }
  370. case 4: // Change font
  371. {
  372. ShowTextDrawDialog(playerid, 17);
  373. }
  374. case 5: // Change proportionality
  375. {
  376. ShowTextDrawDialog(playerid, 12);
  377. }
  378. case 6: // Change letter size
  379. {
  380. ShowTextDrawDialog(playerid, 18);
  381. }
  382. case 7: // Edit outline
  383. {
  384. ShowTextDrawDialog(playerid, 20);
  385. }
  386. case 8: // Edit box
  387. {
  388. if(tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] == 0) ShowTextDrawDialog(playerid, 23);
  389. else if(tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] == 1) ShowTextDrawDialog(playerid, 24);
  390. }
  391. case 9: // Duplicate textdraw
  392. {
  393. new from, to;
  394. for(new i; i < MAX_TEXTDRAWS; i++)
  395. {
  396. if(!tData[i][T_Created]) // If it isn't created yet, use it.
  397. {
  398. ClearTextdraw(i);
  399. CreateDefaultTextdraw(i);
  400. from = pData[playerid][P_CurrentTextdraw];
  401. to = i;
  402. DuplicateTextdraw(pData[playerid][P_CurrentTextdraw], i);
  403. pData[playerid][P_CurrentTextdraw] = -1;
  404. ShowTextDrawDialog(playerid, 4);
  405. break;
  406. }
  407. }
  408. if(pData[playerid][P_CurrentTextdraw] != -1)
  409. {
  410. SendClientMessage(playerid, MSG_COLOR, "você não pode criar mais textdraws!");
  411. ShowTextDrawDialog(playerid, 5);
  412. }
  413. else
  414. {
  415. new string[128];
  416. format(string, sizeof(string), "Textdraw #%d copiado com sucesso para Textdraw #%d.", from, to);
  417. SendClientMessage(playerid, MSG_COLOR, string);
  418. }
  419. }
  420. case 10: // Delete textdraw
  421. {
  422. ShowTextDrawDialog(playerid, 7);
  423. }
  424. }
  425. }
  426. else
  427. {
  428. ShowTextDrawDialog(playerid, 4, 0);
  429. }
  430. }
  431.  
  432. case 1580: // Delete project confirmation dialog
  433. {
  434. if(response)
  435. {
  436. new filename[128];
  437. format(filename, sizeof(filename), "%s", GetFileNameFromLst("tdlist.lst", pData[playerid][P_Aux]));
  438. fremove(filename);
  439. DeleteLineFromFile("tdlist.lst", pData[playerid][P_Aux]);
  440.  
  441. format(filename, sizeof(filename), "O projeto salvo como '%s' foi apagado com sucesso.", filename);
  442. SendClientMessage(playerid, MSG_COLOR, filename);
  443.  
  444. ShowTextDrawDialog(playerid, 0);
  445. }
  446. else
  447. {
  448. ShowTextDrawDialog(playerid, 0);
  449. }
  450. }
  451.  
  452. case 1581: // Delete TD confirmation
  453. {
  454. if(response)
  455. {
  456. DeleteTDFromFile(pData[playerid][P_CurrentTextdraw]);
  457. ClearTextdraw(pData[playerid][P_CurrentTextdraw]);
  458.  
  459. new string[128];
  460. format(string, sizeof(string), "Você deletou a textdraw #%d", pData[playerid][P_CurrentTextdraw]);
  461. SendClientMessage(playerid, MSG_COLOR, string);
  462.  
  463. pData[playerid][P_CurrentTextdraw] = 0;
  464. ShowTextDrawDialog(playerid, 4);
  465. }
  466. else
  467. {
  468. ShowTextDrawDialog(playerid, 5);
  469. }
  470. }
  471.  
  472. case 1582: // Change textdraw's text
  473. {
  474. if(response)
  475. {
  476. if(!strlen(inputtext)) ShowTextDrawDialog(playerid, 8);
  477. else
  478. {
  479. format(tData[pData[playerid][P_CurrentTextdraw]][T_Text], 1024, "%s", inputtext);
  480. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  481. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Text");
  482. ShowTextDrawDialog(playerid, 5);
  483. }
  484. }
  485. else
  486. {
  487. ShowTextDrawDialog(playerid, 5);
  488. }
  489. }
  490.  
  491. case 1583: // Change textdraw's position: exact or move
  492. {
  493. if(response)
  494. {
  495. switch(listitem)
  496. {
  497. case 0: // Exact position
  498. {
  499. pData[playerid][P_Aux] = 0;
  500. ShowTextDrawDialog(playerid, 10, 0, 0);
  501. }
  502. case 1: // Move it
  503. {
  504. new string[512];
  505. string = "~n~~n~~n~~n~~n~~n~~n~~n~~w~";
  506. if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~Avançar~, ~k~~Voltar~, ~k~~Esquerda~, ~k~~Direita~~n~", string);
  507. else format(string, sizeof(string), "%s~k~~Veiculo_DireçãoCima~, ~k~~Veiculo_DireçãoBaixo~, ~k~~Veiculo_STEERLEFT~, ~k~~Veiculo_STEERRIGHT~~n~", string);
  508. format(string, sizeof(string), "%sand ~k~~PED_SPRINT~ to move. ", string);
  509. if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~Veiculo_entrar_Sair~", string);
  510. else format(string, sizeof(string), "%s~k~~VEHICLE_FIREWEAPON_ALT~", string);
  511. format(string, sizeof(string), "%s to finish.~n~", string);
  512.  
  513. GameTextForPlayer(playerid, string, 9999999, 3);
  514. SendClientMessage(playerid, MSG_COLOR, "Use [para cima], [baixo], [esquerda] e as teclas [Direita] para mover o TextDraw. [corrida] para aumentar e [enter carro] para terminar.");
  515.  
  516. TogglePlayerControllable(playerid, 0);
  517. pData[playerid][P_KeyEdition] = EDIT_POSITION;
  518. SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  519. }
  520. }
  521. }
  522. else
  523. {
  524. ShowTextDrawDialog(playerid, 5);
  525. }
  526. }
  527.  
  528. case 1584: // Set position manually
  529. {
  530. if(response)
  531. {
  532. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 10, pData[playerid][P_Aux], 1);
  533. else
  534. {
  535. if(pData[playerid][P_Aux] == 0) // If he edited X
  536. {
  537. tData[pData[playerid][P_CurrentTextdraw]][T_X] = floatstr(inputtext);
  538. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  539. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_X");
  540. ShowTextDrawDialog(playerid, 10, 1, 0);
  541. }
  542. else if(pData[playerid][P_Aux] == 1) // If he edited Y
  543. {
  544. tData[pData[playerid][P_CurrentTextdraw]][T_Y] = floatstr(inputtext);
  545. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  546. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Y");
  547. ShowTextDrawDialog(playerid, 5);
  548.  
  549. SendClientMessage(playerid, MSG_COLOR, "Textdraw movido com sucesso!.");
  550. }
  551. }
  552. }
  553. else
  554. {
  555. if(pData[playerid][P_Aux] == 1) // If he is editing Y, move him to X.
  556. {
  557. pData[playerid][P_Aux] = 0;
  558. ShowTextDrawDialog(playerid, 10, 0, 0);
  559. }
  560. else // If he was editing X, move him back to select menu
  561. {
  562. ShowTextDrawDialog(playerid, 9);
  563. }
  564. }
  565. }
  566.  
  567. case 1585: // Change textdraw's alignment
  568. {
  569. if(response)
  570. {
  571. tData[pData[playerid][P_CurrentTextdraw]][T_Alignment] = listitem+1;
  572. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  573. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Alignment");
  574.  
  575. new string[128];
  576. format(string, sizeof(string), "Textdraw #%d' alinhamento alterado para %d.", pData[playerid][P_CurrentTextdraw], listitem+1);
  577. SendClientMessage(playerid, MSG_COLOR, string);
  578.  
  579. ShowTextDrawDialog(playerid, 5);
  580. }
  581. else
  582. {
  583. ShowTextDrawDialog(playerid, 5);
  584. }
  585. }
  586.  
  587. case 1586: // Change textdraw's proportionality
  588. {
  589. if(response)
  590. {
  591. tData[pData[playerid][P_CurrentTextdraw]][T_Proportional] = listitem;
  592. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  593. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Proportional");
  594.  
  595. new string[128];
  596. format(string, sizeof(string), "Textdraw #%d's proporcionalidade alterado para %d.", pData[playerid][P_CurrentTextdraw], listitem);
  597. SendClientMessage(playerid, MSG_COLOR, string);
  598.  
  599. ShowTextDrawDialog(playerid, 5);
  600. }
  601. else
  602. {
  603. ShowTextDrawDialog(playerid, 5);
  604. }
  605. }
  606.  
  607. case 1587: // Change color
  608. {
  609. if(response)
  610. {
  611. switch(listitem)
  612. {
  613. case 0: // Write hex
  614. {
  615. ShowTextDrawDialog(playerid, 14);
  616. }
  617. case 1: // Color combinator
  618. {
  619. ShowTextDrawDialog(playerid, 15, 0, 0);
  620. }
  621. case 2: // Premade color
  622. {
  623. ShowTextDrawDialog(playerid, 16);
  624. }
  625. }
  626. }
  627. else
  628. {
  629. if(pData[playerid][P_ColorEdition] == COLOR_TEXT) ShowTextDrawDialog(playerid, 5);
  630. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE) ShowTextDrawDialog(playerid, 20);
  631. else if(pData[playerid][P_ColorEdition] == COLOR_BOX) ShowTextDrawDialog(playerid, 24);
  632. }
  633. }
  634.  
  635. case 1588: // Textdraw's color: custom hex
  636. {
  637. if(response)
  638. {
  639. new red[3], green[3], blue[3], alpha[3];
  640.  
  641. if(inputtext[0] == '0' && inputtext[1] == 'x') // He's using 0xFFFFFF format
  642. {
  643. if(strlen(inputtext) != 8 && strlen(inputtext) != 10) return ShowTextDrawDialog(playerid, 14, 1);
  644. else
  645. {
  646. format(red, sizeof(red), "%c%c", inputtext[2], inputtext[3]);
  647. format(green, sizeof(green), "%c%c", inputtext[4], inputtext[5]);
  648. format(blue, sizeof(blue), "%c%c", inputtext[6], inputtext[7]);
  649. if(inputtext[8] != '\0')
  650. format(alpha, sizeof(alpha), "%c%c", inputtext[8], inputtext[9]);
  651. else
  652. alpha = "FF";
  653. }
  654. }
  655. else if(inputtext[0] == '#') // He's using #FFFFFF format
  656. {
  657. if(strlen(inputtext) != 7 && strlen(inputtext) != 9) return ShowTextDrawDialog(playerid, 14, 1);
  658. else
  659. {
  660. format(red, sizeof(red), "%c%c", inputtext[1], inputtext[2]);
  661. format(green, sizeof(green), "%c%c", inputtext[3], inputtext[4]);
  662. format(blue, sizeof(blue), "%c%c", inputtext[5], inputtext[6]);
  663. if(inputtext[7] != '\0')
  664. format(alpha, sizeof(alpha), "%c%c", inputtext[7], inputtext[8]);
  665. else
  666. alpha = "FF";
  667. }
  668. }
  669. else // He's using FFFFFF format
  670. {
  671. if(strlen(inputtext) != 6 && strlen(inputtext) != 8) return ShowTextDrawDialog(playerid, 14, 1);
  672. else
  673. {
  674. format(red, sizeof(red), "%c%c", inputtext[0], inputtext[1]);
  675. format(green, sizeof(green), "%c%c", inputtext[2], inputtext[3]);
  676. format(blue, sizeof(blue), "%c%c", inputtext[4], inputtext[5]);
  677. if(inputtext[6] != '\0')
  678. format(alpha, sizeof(alpha), "%c%c", inputtext[6], inputtext[7]);
  679. else
  680. alpha = "FF";
  681. }
  682. }
  683. // We got the color
  684. if(pData[playerid][P_ColorEdition] == COLOR_TEXT)
  685. tData[pData[playerid][P_CurrentTextdraw]][T_Color] = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
  686. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)
  687. tData[pData[playerid][P_CurrentTextdraw]][T_BackColor] = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
  688. else if(pData[playerid][P_ColorEdition] == COLOR_BOX)
  689. tData[pData[playerid][P_CurrentTextdraw]][T_BoxColor] = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
  690. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  691. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Color");
  692. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BackColor");
  693. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BoxColor");
  694.  
  695. new string[128];
  696. format(string, sizeof(string), "Textdraw #%d's cor foi alterada.", pData[playerid][P_CurrentTextdraw]);
  697. SendClientMessage(playerid, MSG_COLOR, string);
  698.  
  699. if(pData[playerid][P_ColorEdition] == COLOR_TEXT) ShowTextDrawDialog(playerid, 5);
  700. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE) ShowTextDrawDialog(playerid, 20);
  701. else if(pData[playerid][P_ColorEdition] == COLOR_BOX) ShowTextDrawDialog(playerid, 24);
  702. }
  703. else
  704. {
  705. ShowTextDrawDialog(playerid, 13);
  706. }
  707. }
  708.  
  709. case 1589: // Textdraw's color: Color combinator
  710. {
  711. if(response)
  712. {
  713. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 2);
  714. else if(strval(inputtext) < 0 || strval(inputtext) > 255) ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 1);
  715. else
  716. {
  717. pData[playerid][P_Color][pData[playerid][P_Aux]] = strval(inputtext);
  718.  
  719. if(pData[playerid][P_Aux] == 3) // He finished editing alpha, he has the rest.
  720. {
  721. // We got the color
  722. if(pData[playerid][P_ColorEdition] == COLOR_TEXT)
  723. tData[pData[playerid][P_CurrentTextdraw]][T_Color] = RGB(pData[playerid][P_Color][0], pData[playerid][P_Color][1], \
  724. pData[playerid][P_Color][2], pData[playerid][P_Color][3] );
  725. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)
  726. tData[pData[playerid][P_CurrentTextdraw]][T_BackColor] = RGB(pData[playerid][P_Color][0], pData[playerid][P_Color][1], \
  727. pData[playerid][P_Color][2], pData[playerid][P_Color][3] );
  728. else if(pData[playerid][P_ColorEdition] == COLOR_BOX)
  729. tData[pData[playerid][P_CurrentTextdraw]][T_BoxColor] = RGB(pData[playerid][P_Color][0], pData[playerid][P_Color][1], \
  730. pData[playerid][P_Color][2], pData[playerid][P_Color][3] );
  731. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  732. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Color");
  733. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BackColor");
  734. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BoxColor");
  735.  
  736. new string[128];
  737. format(string, sizeof(string), "Textdraw #%d's cor foi alterada..", pData[playerid][P_CurrentTextdraw]);
  738. SendClientMessage(playerid, MSG_COLOR, string);
  739.  
  740. if(pData[playerid][P_ColorEdition] == COLOR_TEXT) ShowTextDrawDialog(playerid, 5);
  741. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE) ShowTextDrawDialog(playerid, 20);
  742. else if(pData[playerid][P_ColorEdition] == COLOR_BOX) ShowTextDrawDialog(playerid, 24);
  743. }
  744. else
  745. {
  746. pData[playerid][P_Aux] += 1;
  747. ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 0);
  748. }
  749. }
  750. }
  751. else
  752. {
  753. if(pData[playerid][P_Aux] >= 1) // If he is editing alpha, blue, etc.
  754. {
  755. pData[playerid][P_Aux] -= 1;
  756. ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 0);
  757. }
  758. else // If he was editing red, move him back to select color menu.
  759. {
  760. ShowTextDrawDialog(playerid, 13);
  761. }
  762. }
  763. }
  764.  
  765. case 1590: // Textdraw's color: premade colors
  766. {
  767. if(response)
  768. {
  769. new col;
  770. switch(listitem)
  771. {
  772. case 0: col = 0xff0000ff;
  773. case 1: col = 0x00ff00ff;
  774. case 2: col = 0x0000ffff;
  775. case 3: col = 0xffff00ff;
  776. case 4: col = 0xff00ffff;
  777. case 5: col = 0x00ffffff;
  778. case 6: col = 0xffffffff;
  779. case 7: col = 0x000000ff;
  780. }
  781. if(pData[playerid][P_ColorEdition] == COLOR_TEXT)
  782. tData[pData[playerid][P_CurrentTextdraw]][T_Color] = col;
  783. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)
  784. tData[pData[playerid][P_CurrentTextdraw]][T_BackColor] = col;
  785. else if(pData[playerid][P_ColorEdition] == COLOR_BOX)
  786. tData[pData[playerid][P_CurrentTextdraw]][T_BoxColor] = col;
  787. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  788. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Color");
  789. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BackColor");
  790. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BoxColor");
  791.  
  792. new string[128];
  793. format(string, sizeof(string), "Textdraw #%d's cor foi alterada..", pData[playerid][P_CurrentTextdraw]);
  794. SendClientMessage(playerid, MSG_COLOR, string);
  795.  
  796. if(pData[playerid][P_ColorEdition] == COLOR_TEXT) ShowTextDrawDialog(playerid, 5);
  797. else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE) ShowTextDrawDialog(playerid, 20);
  798. else if(pData[playerid][P_ColorEdition] == COLOR_BOX) ShowTextDrawDialog(playerid, 24);
  799. }
  800. else
  801. {
  802. ShowTextDrawDialog(playerid, 13);
  803. }
  804. }
  805.  
  806. case 1591: // Change textdraw's font
  807. {
  808. if(response)
  809. {
  810. tData[pData[playerid][P_CurrentTextdraw]][T_Font] = listitem;
  811. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  812. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Font");
  813.  
  814. new string[128];
  815. format(string, sizeof(string), "Textdraw #%d's a fonte foi aterada para %d.", pData[playerid][P_CurrentTextdraw], listitem);
  816. SendClientMessage(playerid, MSG_COLOR, string);
  817. if(listitem == 4)
  818. {
  819. SendClientMessage(playerid,-1, "Para usar fonte 4, você tem que ativa a caixa.");
  820. SendClientMessage(playerid,-1, "Alterar o tamanho da caixa para alterar o tamanho do TD.");
  821. SendClientMessage(playerid,-1, "Função adicionado por irinel1996 e Tradução ScriptGames");
  822. }
  823. ShowTextDrawDialog(playerid, 5);
  824. }
  825. else
  826. {
  827. ShowTextDrawDialog(playerid, 5);
  828. }
  829. }
  830.  
  831. case 1592: // Change textdraw's letter size: exact or move
  832. {
  833. if(response)
  834. {
  835. switch(listitem)
  836. {
  837. case 0: // Exact size
  838. {
  839. pData[playerid][P_Aux] = 0;
  840. ShowTextDrawDialog(playerid, 19, 0, 0);
  841. }
  842. case 1: // Resize it
  843. {
  844. new string[512];
  845. string = "~n~~n~~n~~n~~n~~n~~n~~n~~w~";
  846. if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~Avançar~, ~k~~Voltar~, ~k~~Esquerda~, ~k~~Direita~~n~", string);
  847. else format(string, sizeof(string), "%s~k~~Veiculo_DireçãoCima~, ~k~~Veiculo_DireçãoBaixo~, ~k~~Veiculo_STEERLEFT~, ~k~~Veiculo_STEERRIGHT~~n~", string);
  848. format(string, sizeof(string), "%sand ~k~~PED_SPRINT~ to resize. ", string);
  849. if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~VEHICLE_ENTER_EXIT~", string);
  850. else format(string, sizeof(string), "%s~k~~VEHICLE_FIREWEAPON_ALT~", string);
  851. format(string, sizeof(string), "%s to finish.~n~", string);
  852.  
  853. GameTextForPlayer(playerid, string, 9999999, 3);
  854. SendClientMessage(playerid, MSG_COLOR, "Use [para cima], [baixo], [esquerda] e as teclas [Direita] para mover o TextDraw. [corrida] para aumentar e [enter carro] para terminar.");
  855.  
  856. TogglePlayerControllable(playerid, 0);
  857. pData[playerid][P_KeyEdition] = EDIT_SIZE;
  858. SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  859. }
  860. }
  861. }
  862. else
  863. {
  864. ShowTextDrawDialog(playerid, 5);
  865. }
  866. }
  867.  
  868. case 1593: // Change letter size manually
  869. {
  870. if(response)
  871. {
  872. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 19, pData[playerid][P_Aux], 1);
  873. else
  874. {
  875. if(pData[playerid][P_Aux] == 0) // If he edited X
  876. {
  877. tData[pData[playerid][P_CurrentTextdraw]][T_XSize] = floatstr(inputtext);
  878. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  879. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_XSize");
  880. ShowTextDrawDialog(playerid, 19, 1, 0);
  881. }
  882. else if(pData[playerid][P_Aux] == 1) // If he edited Y
  883. {
  884. tData[pData[playerid][P_CurrentTextdraw]][T_YSize] = floatstr(inputtext);
  885. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  886. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_YSize");
  887. ShowTextDrawDialog(playerid, 5);
  888.  
  889. SendClientMessage(playerid, MSG_COLOR, "Textdraw successfuly resized.");
  890. }
  891. }
  892. }
  893. else
  894. {
  895. if(pData[playerid][P_Aux] == 1) // If he is editing Y, move him to X.
  896. {
  897. pData[playerid][P_Aux] = 0;
  898. ShowTextDrawDialog(playerid, 19, 0, 0);
  899. }
  900. else // If he was editing X, move him back to select menu
  901. {
  902. ShowTextDrawDialog(playerid, 18);
  903. }
  904. }
  905. }
  906.  
  907. case 1594: // main outline menu
  908. {
  909. if(response)
  910. {
  911. switch(listitem)
  912. {
  913. case 0: // Toggle outline
  914. {
  915. if(tData[pData[playerid][P_CurrentTextdraw]][T_Outline]) tData[pData[playerid][P_CurrentTextdraw]][T_Outline] = 0;
  916. else tData[pData[playerid][P_CurrentTextdraw]][T_Outline] = 1;
  917. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  918. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Outline");
  919. ShowTextDrawDialog(playerid, 20);
  920.  
  921. SendClientMessage(playerid, MSG_COLOR, "Textdraw's outline toggled.");
  922. }
  923. case 1: // Change shadow
  924. {
  925. ShowTextDrawDialog(playerid, 21);
  926. }
  927. case 2: // Change color
  928. {
  929. pData[playerid][P_ColorEdition] = COLOR_OUTLINE;
  930. ShowTextDrawDialog(playerid, 13);
  931. }
  932. case 3: // Finish
  933. {
  934. SendClientMessage(playerid, MSG_COLOR, "Finished outline customization.");
  935. ShowTextDrawDialog(playerid, 5);
  936. }
  937. }
  938. }
  939. else
  940. {
  941. ShowTextDrawDialog(playerid, 5);
  942. }
  943. }
  944.  
  945. case 1595: // Outline shadow
  946. {
  947. if(response)
  948. {
  949. if(listitem == 6) // selected custom
  950. {
  951. ShowTextDrawDialog(playerid, 22);
  952. }
  953. else
  954. {
  955. tData[pData[playerid][P_CurrentTextdraw]][T_Shadow] = listitem;
  956. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  957. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Shadow");
  958. ShowTextDrawDialog(playerid, 20);
  959.  
  960. new string[128];
  961. format(string, sizeof(string), "Textdraw #%d's esboço sombra alterado para %d.", pData[playerid][P_CurrentTextdraw], listitem);
  962. SendClientMessage(playerid, MSG_COLOR, string);
  963. }
  964. }
  965. else
  966. {
  967. ShowTextDrawDialog(playerid, 20);
  968. }
  969. }
  970.  
  971. case 1596: // outline shaow customized
  972. {
  973. if(response)
  974. {
  975. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 22, 1);
  976. else
  977. {
  978. tData[pData[playerid][P_CurrentTextdraw]][T_Shadow] = strval(inputtext);
  979. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  980. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Shadow");
  981. ShowTextDrawDialog(playerid, 20);
  982.  
  983. new string[128];
  984. format(string, sizeof(string), "Textdraw #%d's esboço sombra alterado para %d.", pData[playerid][P_CurrentTextdraw], strval(inputtext));
  985. SendClientMessage(playerid, MSG_COLOR, string);
  986. }
  987. }
  988. else
  989. {
  990. ShowTextDrawDialog(playerid, 21);
  991. }
  992. }
  993.  
  994. case 1597: // Box on - off
  995. {
  996. if(response)
  997. {
  998. switch(listitem)
  999. {
  1000. case 0: // Turned box on
  1001. {
  1002. tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] = 1;
  1003. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1004. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_UseBox");
  1005.  
  1006. SendClientMessage(playerid, MSG_COLOR, "TextDraw caixa habilitada. Prosseguindo com a edição ...");
  1007.  
  1008. ShowTextDrawDialog(playerid, 24);
  1009. }
  1010. case 1: // He disabled it, nothing more to edit.
  1011. {
  1012. tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] = 0;
  1013. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1014. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_UseBox");
  1015.  
  1016. SendClientMessage(playerid, MSG_COLOR, "TextDraw caixa desativada.");
  1017.  
  1018. ShowTextDrawDialog(playerid, 5);
  1019. }
  1020. }
  1021. }
  1022. else
  1023. {
  1024. ShowTextDrawDialog(playerid, 5);
  1025. }
  1026. }
  1027.  
  1028. case 1598: // Box main menu
  1029. {
  1030. if(response)
  1031. {
  1032. switch(listitem)
  1033. {
  1034. case 0: // Turned box off
  1035. {
  1036. tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] = 0;
  1037. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1038. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_UseBox");
  1039.  
  1040. SendClientMessage(playerid, MSG_COLOR, "TextDraw caixa desativada.");
  1041.  
  1042. ShowTextDrawDialog(playerid, 23);
  1043. }
  1044. case 1: // box size
  1045. {
  1046. new string[512];
  1047. string = "~n~~n~~n~~n~~n~~n~~n~~n~~w~";
  1048. if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~Avançar~, ~k~~Voltar~, ~k~~Esquerda~, ~k~~Direita~~n~", string);
  1049. else format(string, sizeof(string), "%s~k~~VEHICLE_STEERUP~, ~k~~VEHICLE_STEERDOWN~, ~k~~VEHICLE_STEERLEFT~, ~k~~VEHICLE_STEERRIGHT~~n~", string);
  1050. format(string, sizeof(string), "%sand ~k~~PED_SPRINT~ to resize. ", string);
  1051. if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~VEHICLE_ENTER_EXIT~", string);
  1052. else format(string, sizeof(string), "%s~k~~VEHICLE_FIREWEAPON_ALT~", string);
  1053. format(string, sizeof(string), "%s to finish.~n~", string);
  1054.  
  1055. GameTextForPlayer(playerid, string, 9999999, 3);
  1056. SendClientMessage(playerid, MSG_COLOR, "Use [para cima], [baixo], [esquerda] e as teclas [Direita] para mover o TextDraw. [corrida] para aumentar e [enter carro] para terminar.");
  1057.  
  1058. TogglePlayerControllable(playerid, 0);
  1059. pData[playerid][P_KeyEdition] = EDIT_BOX;
  1060. SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  1061. }
  1062. case 2: // box color
  1063. {
  1064. pData[playerid][P_ColorEdition] = COLOR_BOX;
  1065. ShowTextDrawDialog(playerid, 13);
  1066. }
  1067. }
  1068. }
  1069. else
  1070. {
  1071. ShowTextDrawDialog(playerid, 5);
  1072. }
  1073. }
  1074.  
  1075. case 1599: // Export menu
  1076. {
  1077. if(response)
  1078. {
  1079. switch(listitem)
  1080. {
  1081. case 0: // classic mode
  1082. {
  1083. ExportProject(playerid, 0);
  1084. }
  1085. case 1: // self-working fs
  1086. {
  1087. ShowTextDrawDialog(playerid, 26);
  1088. }
  1089. }
  1090. }
  1091. else
  1092. {
  1093. ShowTextDrawDialog(playerid, 4);
  1094. }
  1095. }
  1096.  
  1097. case 1600: // Export to self working filterscript
  1098. {
  1099. if(response)
  1100. {
  1101. switch(listitem)
  1102. {
  1103. case 0: // Show all the time.
  1104. {
  1105. ExportProject(playerid, 1);
  1106. }
  1107. case 1: // Show on class selection.
  1108. {
  1109. ExportProject(playerid, 2);
  1110. }
  1111. case 2: // Show while in vehicle
  1112. {
  1113. ExportProject(playerid, 3);
  1114. }
  1115. case 3: // Show with command
  1116. {
  1117. ShowTextDrawDialog(playerid, 27);
  1118. }
  1119. case 4: // Show automatly repeteadly after some time
  1120. {
  1121. ShowTextDrawDialog(playerid, 29);
  1122. }
  1123. case 5: // Show after player killed someone
  1124. {
  1125. ShowTextDrawDialog(playerid, 31);
  1126. }
  1127. }
  1128. }
  1129. else
  1130. {
  1131. ShowTextDrawDialog(playerid, 25);
  1132. }
  1133. }
  1134.  
  1135. case 1601: // Write command for export
  1136. {
  1137. if(response)
  1138. {
  1139. if(!strlen(inputtext)) ShowTextDrawDialog(playerid, 27);
  1140. else
  1141. {
  1142. if(inputtext[0] != '/')
  1143. format(pData[playerid][P_ExpCommand], 128, "/%s", inputtext);
  1144. else
  1145. format(pData[playerid][P_ExpCommand], 128, "%s", inputtext);
  1146.  
  1147. ShowTextDrawDialog(playerid, 28);
  1148. }
  1149. }
  1150. else
  1151. {
  1152. ShowTextDrawDialog(playerid, 26);
  1153. }
  1154. }
  1155.  
  1156. case 1602: // Time after command for export
  1157. {
  1158. if(response)
  1159. {
  1160. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 28);
  1161. else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 28);
  1162. else
  1163. {
  1164. pData[playerid][P_Aux] = strval(inputtext);
  1165. ExportProject(playerid, 4);
  1166. }
  1167. }
  1168. else
  1169. {
  1170. ShowTextDrawDialog(playerid, 27);
  1171. }
  1172. }
  1173.  
  1174. case 1603: // Write time in secs to appear for export
  1175. {
  1176. if(response)
  1177. {
  1178. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 29);
  1179. else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 29);
  1180. else
  1181. {
  1182. pData[playerid][P_Aux] = strval(inputtext);
  1183. ShowTextDrawDialog(playerid, 30);
  1184. }
  1185. }
  1186. else
  1187. {
  1188. ShowTextDrawDialog(playerid, 26);
  1189. }
  1190. }
  1191.  
  1192. case 1604: // Time after appeared to dissapear for export
  1193. {
  1194. if(response)
  1195. {
  1196. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 30);
  1197. else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 30);
  1198. else
  1199. {
  1200. pData[playerid][P_Aux2] = strval(inputtext);
  1201. ExportProject(playerid, 5);
  1202. }
  1203. }
  1204. else
  1205. {
  1206. ShowTextDrawDialog(playerid, 29);
  1207. }
  1208. }
  1209.  
  1210. case 1605: // Time after appeared to dissapear when kill for export
  1211. {
  1212. if(response)
  1213. {
  1214. if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 31);
  1215. else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 31);
  1216. else
  1217. {
  1218. pData[playerid][P_Aux] = strval(inputtext);
  1219. ExportProject(playerid, 6);
  1220. }
  1221. }
  1222. else
  1223. {
  1224. ShowTextDrawDialog(playerid, 26);
  1225. }
  1226. }
  1227. }
  1228.  
  1229. return 1;
  1230. }
  1231.  
  1232. // =============================================================================
  1233. // Functions.
  1234. // =============================================================================
  1235.  
  1236. forward ShowTextDrawDialogEx( playerid, dialogid );
  1237. public ShowTextDrawDialogEx( playerid, dialogid ) ShowTextDrawDialog( playerid, dialogid );
  1238.  
  1239. stock ShowTextDrawDialog( playerid, dialogid, aux=0, aux2=0 )
  1240. {
  1241. /* Shows a specific dialog for a specific player
  1242. @playerid: ID of the player to show the dialog to.
  1243. @dialogid: ID of the dialog to show.
  1244. @aux: Auxiliary variable. Works to make variations of certain dialogs.
  1245. @aux2: Auxiliary variable. Works to make variations of certain dialogs.
  1246.  
  1247. -Returns:
  1248. true on success, false on fail.
  1249. */
  1250.  
  1251. switch(dialogid)
  1252. {
  1253. case 0: // Select project.
  1254. {
  1255. new info[256];
  1256. format(info, sizeof(info), "%sNovo Projeto\n", info);
  1257. format(info, sizeof(info), "%sCarregar Projeto\n", info);
  1258. format(info, sizeof(info), "%sDelete Projeto", info);
  1259. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Startup"), info, "Aceitar", "Cancel");
  1260. return true;
  1261. }
  1262.  
  1263. case 1:
  1264. {
  1265. new info[256];
  1266. if(!aux) info = "Escreva o nome do novo arquivo de projeto.\n";
  1267. else if(aux == 1) info = "ERROR: O nome é muito longo, por favor, tente novamente.\n";
  1268. else if(aux == 2) info = "ERROR: Esse arquivo já existe, tente novamente.\n";
  1269. else if(aux == 3) info = "ERROR: Esse nome do arquivo contém caracteres Ilegal. Você não tem permissão para\ncriar subdiretórios. Tente Novamente";
  1270. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Novo projeto"), info, "Aceitar", "Voltar");
  1271. return true;
  1272. }
  1273.  
  1274. case 2:
  1275. {
  1276. // Store in a var if he's deleting or loading.
  1277. if(aux == 2) pData[playerid][P_CurrentMenu] = DELETING;
  1278. else pData[playerid][P_CurrentMenu] = LOADING;
  1279.  
  1280. new info[1024];
  1281. if(fexist("tdlist.lst"))
  1282. {
  1283. if(aux != 2) info = "Custom filename...";
  1284. else info = "<< Voltar";
  1285. new File:tdlist = fopen("tdlist.lst", io_read),
  1286. line[128];
  1287. while(fread(tdlist, line))
  1288. {
  1289. format(info, sizeof(info), "%s\n%s", info, line);
  1290. }
  1291.  
  1292. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Load project"), info, "Aceitar", "Voltar");
  1293. fclose(tdlist);
  1294. }
  1295. else
  1296. {
  1297. if(aux) format(info, sizeof(info), "%sCan't find tdlist.lst.\n", info);
  1298. format(info, sizeof(info), "%sEscrever manualmente o nome do arquivo de projeto que você deseja\n", info);
  1299. if(aux != 2) format(info, sizeof(info), "%sto open:\n", info);
  1300. else format(info, sizeof(info), "%sto delete:\n", info);
  1301.  
  1302. if(aux != 2) ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Load project"), info, "Aceitar", "Voltar");
  1303. else ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Delete project"), info, "Aceitar", "Voltar");
  1304. }
  1305. return true;
  1306. }
  1307.  
  1308. case 3:
  1309. {
  1310. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Load project"), \
  1311. "Escrever manualmente o nome do arquivo de projeto\n que deseja carregar:\n", "Aceitar", "Voltar");
  1312. return true;
  1313. }
  1314.  
  1315. case 4: // Main edition menu (shows all the textdraws and lets you create a new one).
  1316. {
  1317. new info[1024],
  1318. shown;
  1319. format(info, sizeof(info), "%sCriar Novo Textdraw...", info);
  1320. shown ++;
  1321. format(info, sizeof(info), "%s\nExportar projeto...", info);
  1322. shown ++;
  1323. format(info, sizeof(info), "%s\nFechar projeto...", info);
  1324. shown ++;
  1325. // Aux here is used to indicate from which TD show the list from.
  1326. pData[playerid][P_DialogPage] = aux;
  1327. for(new i=aux; i < MAX_TEXTDRAWS; i++)
  1328. {
  1329. if(tData[i][T_Created])
  1330. {
  1331. shown ++;
  1332. if(shown == 12)
  1333. {
  1334. format(info, sizeof(info), "%s\nMore >>", info);
  1335. break;
  1336. }
  1337.  
  1338. new PieceOfText[PREVIEW_CHARS];
  1339. if(strlen(tData[i][T_Text]) > sizeof(PieceOfText))
  1340. {
  1341. strmid(PieceOfText, tData[i][T_Text], 0, PREVIEW_CHARS, PREVIEW_CHARS);
  1342. format(info, sizeof(info), "%s\nTDraw %d: '%s [...]'", info, i, PieceOfText);
  1343. }
  1344. else
  1345. {
  1346. format(info, sizeof(info), "%s\nTDraw %d: '%s'", info, i, tData[i][T_Text]);
  1347. }
  1348. }
  1349. }
  1350. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw selection"), info, "Aceitar", "Cancel");
  1351. return true;
  1352. }
  1353.  
  1354. case 5:
  1355. {
  1356. new info[1024];
  1357. format(info, sizeof(info), "%sMude seqüência de texto\n", info);
  1358. format(info, sizeof(info), "%sAlterar posição\n", info);
  1359. format(info, sizeof(info), "%sAlterar o alinhamento\n", info);
  1360. format(info, sizeof(info), "%sMude a cor do texto\n", info);
  1361. format(info, sizeof(info), "%sMudar Fonte\n", info);
  1362. format(info, sizeof(info), "%sMude proporcionalidade\n", info);
  1363. format(info, sizeof(info), "%sAlterar o tamanho da fonte\n", info);
  1364. format(info, sizeof(info), "%sEditar esboço\n", info);
  1365. format(info, sizeof(info), "%sEditar caixa\n", info);
  1366. format(info, sizeof(info), "%sDuplicar Textdraw...\n", info);
  1367. format(info, sizeof(info), "%sDelete Textdraw...", info);
  1368.  
  1369. new title[40];
  1370. format(title, sizeof(title), "Textdraw %d", pData[playerid][P_CurrentTextdraw]);
  1371.  
  1372. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, title), info, "Aceitar", "Cancel");
  1373. return true;
  1374. }
  1375.  
  1376. case 6:
  1377. {
  1378. new info[256];
  1379. format(info, sizeof(info), "%sTem certeza de que deseja apagar o\n", info);
  1380. format(info, sizeof(info), "%s%s Projeto\n\n", info, GetFileNameFromLst("tdlist.lst", pData[playerid][P_Aux]));
  1381. format(info, sizeof(info), "%sWARNING: Não há maneira de desfazer esta operação.", info);
  1382.  
  1383. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_MSGBOX, CreateDialogTitle(playerid, "Confirma deletação"), info, "S", "N");
  1384. return true;
  1385. }
  1386.  
  1387. case 7:
  1388. {
  1389. new info[256];
  1390. format(info, sizeof(info), "%sTem certeza de que deseja apagar o\n", info);
  1391. format(info, sizeof(info), "%sTextdraw number %d?\n\n", info, pData[playerid][P_CurrentTextdraw]);
  1392. format(info, sizeof(info), "%sWARNING: Não há maneira de desfazer esta operação.", info);
  1393.  
  1394. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_MSGBOX, CreateDialogTitle(playerid, "Confirm deletiacao"), info, "S", "N");
  1395. return true;
  1396. }
  1397.  
  1398. case 8:
  1399. {
  1400. new info[1024];
  1401. info = "Escrever texto do novo TextDraw. O texto atual é:\n\n";
  1402. format(info, sizeof(info), "%s%s\n\n", info, tData[pData[playerid][P_CurrentTextdraw]][T_Text]);
  1403. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's string"), info, "Aceitar", "Voltar");
  1404. return true;
  1405. }
  1406.  
  1407. case 9:
  1408. {
  1409. new info[256];
  1410. info = "Write exact position\n";
  1411. format(info, sizeof(info), "%sMove the Textdraw", info);
  1412. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's position"), info, "Aceitar", "Voltar");
  1413. return true;
  1414. }
  1415.  
  1416. case 10:
  1417. {
  1418. // aux is 0 for X, 1 for Y.
  1419. // aux2 is the type of error message. 0 for no error.
  1420. new info[256];
  1421. if(aux2 == 1) info = "ERROR: Você tem que escrever um número.\n\n";
  1422.  
  1423. format(info, sizeof(info), "%sEscreve em números o novo exata. ", info);
  1424. if(aux == 0) format(info, sizeof(info), "%sX", info);
  1425. else if(aux == 1) format(info, sizeof(info), "%sY", info);
  1426. format(info, sizeof(info), "%s position of the Textdraw\n", info);
  1427.  
  1428. pData[playerid][P_Aux] = aux; // To know if he's editing X or Y.
  1429. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "A posição de TextDraw"), info, "Aceitar", "Voltar");
  1430. return true;
  1431. }
  1432.  
  1433. case 11:
  1434. {
  1435. new info[256];
  1436. info = "Left (type 1)\nCentered (type 2)\nRight (type 3)";
  1437. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Alinhamento do TextDraw"), info, "Aceitar", "Voltar");
  1438. return true;
  1439. }
  1440.  
  1441. case 12:
  1442. {
  1443. new info[256];
  1444. info = "Proportionality On\nProportionality Off";
  1445. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Proporcionalidade de TextDraw"), info, "Aceitar", "Voltar");
  1446. return true;
  1447. }
  1448.  
  1449. case 13:
  1450. {
  1451. new info[256];
  1452. info = "Write an hexadecimal number\nUse color combinator\nSelect a premade color";
  1453. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Cor do TextDraw"), info, "Aceitar", "Voltar");
  1454. return true;
  1455. }
  1456.  
  1457. case 14:
  1458. {
  1459. new info[256];
  1460. if(aux) info = "ERROR: You have written an invalid hex number.\n\n";
  1461. format(info, sizeof(info), "%sWrite the hexadecimal number you want:\n", info);
  1462. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Cor do TextDraw"), info, "Aceitar", "Voltar");
  1463. return true;
  1464. }
  1465.  
  1466. case 15:
  1467. {
  1468. // aux is 0 for red, 1 for green, 2 for blue, and 3 for alpha.
  1469. // aux2 is the type of error message. 0 for no error.
  1470. new info[256];
  1471. if(aux2 == 1) info = "ERROR: O intervalo de números tem de estar entre 0 e 255\n\n";
  1472. else if(aux2 == 2) info = "ERROR: You have to write a number.\n\n";
  1473.  
  1474. format(info, sizeof(info), "%sWrite the amount of ", info);
  1475. if(aux == 0) format(info, sizeof(info), "%sRED", info);
  1476. else if(aux == 1) format(info, sizeof(info), "%sGREEN", info);
  1477. else if(aux == 2) format(info, sizeof(info), "%sBLUE", info);
  1478. else if(aux == 3) format(info, sizeof(info), "%sOPACITY", info);
  1479. format(info, sizeof(info), "%s you want.\n", info);
  1480. format(info, sizeof(info), "%sThe number has to be in a range between 0 and 255.", info);
  1481.  
  1482. pData[playerid][P_Aux] = aux; // To know what color he's editing.
  1483. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's color"), info, "Aceitar", "Voltar");
  1484. return true;
  1485. }
  1486.  
  1487. case 16:
  1488. {
  1489. new info[256];
  1490. info = "Red\nGreen\nBlue\nYellow\nPink\nLight Blue\nWhite\nBlack";
  1491. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's color"), info, "Aceitar", "Voltar");
  1492. return true;
  1493. }
  1494.  
  1495. case 17:
  1496. {
  1497. new info[256];
  1498. info = "Font type 0\nFont type 1\nFont type 2\nFont type 3\nFont type 4";
  1499. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's font"), info, "Aceitar", "Voltar");
  1500. return true;
  1501. }
  1502.  
  1503. case 18:
  1504. {
  1505. new info[256];
  1506. info = "Write exact size\n";
  1507. format(info, sizeof(info), "%sResize the Textdraw", info);
  1508. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's font size"), info, "Aceitar", "Voltar");
  1509. return true;
  1510. }
  1511.  
  1512. case 19:
  1513. {
  1514. // aux is 0 for X, 1 for Y.
  1515. // aux2 is the type of error message. 0 for no error.
  1516. new info[256];
  1517. if(aux2 == 1) info = "ERROR: You have to write a number.\n\n";
  1518.  
  1519. format(info, sizeof(info), "%sWrite in numbers the new exact ", info);
  1520. if(aux == 0) format(info, sizeof(info), "%sX", info);
  1521. else if(aux == 1) format(info, sizeof(info), "%sY", info);
  1522. format(info, sizeof(info), "%s lenght of the font letters.\n", info);
  1523.  
  1524. pData[playerid][P_Aux] = aux; // To know if he's editing X or Y.
  1525. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's size"), info, "Aceitar", "Voltar");
  1526. return true;
  1527. }
  1528.  
  1529. case 20:
  1530. {
  1531. new info[256];
  1532. if(tData[pData[playerid][P_CurrentTextdraw]][T_Outline] == 1) info = "Outline Off";
  1533. else info = "Outline On";
  1534. format(info, sizeof(info), "%s\nShadow size\nOutline/Shadow color\nFinish outline edition...", info);
  1535. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's outline"), info, "Aceitar", "Voltar");
  1536. return true;
  1537. }
  1538.  
  1539. case 21:
  1540. {
  1541. new info[256];
  1542. info = "Outline shadow 0\nOutline shadow 1\nOutline shadow 2\nOutline shadow 3\nOutline shadow 4\nOutline shadow 5\nCustom...";
  1543. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's outline shadow"), info, "Aceitar", "Voltar");
  1544. return true;
  1545. }
  1546.  
  1547. case 22:
  1548. {
  1549. new info[256];
  1550. if(aux) info = "ERROR: You have written an invalid number.\n\n";
  1551. format(info, sizeof(info), "%sWrite a number indicating the size of the shadow:\n", info);
  1552. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's outline shadow"), info, "Aceitar", "Voltar");
  1553. return true;
  1554. }
  1555.  
  1556. case 23:
  1557. {
  1558. new info[256];
  1559. info = "Box On\nBox Off";
  1560. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's box"), info, "Aceitar", "Voltar");
  1561. return true;
  1562. }
  1563.  
  1564. case 24:
  1565. {
  1566. new info[256];
  1567. info = "Box Off\nBox size\nBox color";
  1568. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's box"), info, "Aceitar", "Voltar");
  1569. return true;
  1570. }
  1571.  
  1572. case 25:
  1573. {
  1574. new info[256];
  1575. info = "Classic export mode\nSelf-working filterscript";
  1576. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1577. return true;
  1578. }
  1579.  
  1580. case 26:
  1581. {
  1582. new info[512];
  1583. info = "FScript: Mostrar TextDraw o tempo todo\nFScript: Mostrar TextDraw na seleção de classe\nFScript: Mostrar TextDraw enquanto em veículo\n\
  1584. FScript: Mostrar TextDraw com comando\nFScript: Mostrar todos os X quantidade de tempo\nFScript: Mostrar depois de matar alguém";
  1585. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1586. return true;
  1587. }
  1588.  
  1589. case 27:
  1590. {
  1591. new info[128];
  1592. info = "Escreva o comando que você quer mostrar o TextDraw.\n";
  1593. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1594. return true;
  1595. }
  1596.  
  1597. case 28:
  1598. {
  1599. new info[128];
  1600. info = "Quanto tempo (em segundos) que permanecerá na tela?\n";
  1601. format(info, sizeof(info), "%sWrite 0 if you want to hide it by typing the command again.\n", info);
  1602. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1603. return true;
  1604. }
  1605.  
  1606. case 29:
  1607. {
  1608. new info[128];
  1609. info = "Cada quanto tempo você deseja que os textdraws aparecer?\nEscreva uma vez em SECONDS:\n";
  1610. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1611. return true;
  1612. }
  1613.  
  1614. case 30:
  1615. {
  1616. new info[128];
  1617. info = "Uma vez que ele apareceu, por quanto tempo ele permanecerá na tela? \\nWrite a time in SECONDS:\n";
  1618. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1619. return true;
  1620. }
  1621.  
  1622. case 31:
  1623. {
  1624. new info[128];
  1625. info = "Uma vez que ele apareceu, por quanto tempo ele permanecerá na tela? \nWrite a time in SECONDS:\n";
  1626. ShowPlayerDialog(playerid, dialogid+1574, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Textdraw's export"), info, "Aceitar", "Voltar");
  1627. return true;
  1628. }
  1629. }
  1630. return false;
  1631. }
  1632.  
  1633. stock CreateDialogTitle( playerid, text[] )
  1634. {
  1635. /* Creates a default title for the dialogs.
  1636. @playerid: ID of the player getting his dialog title generated.
  1637. @text[]: Text to be attached to the title.
  1638. */
  1639. #pragma unused playerid
  1640.  
  1641. new string[128];
  1642. if(!strlen(CurrentProject) || !strcmp(CurrentProject, " "))
  1643. format(string, sizeof(string), "Zamaroht's Textdraw Editor: %s", text);
  1644. else
  1645. format(string, sizeof(string), "%s - Zamaroht's Textdraw Editor: %s", CurrentProject, text);
  1646. return string;
  1647. }
  1648.  
  1649. stock ResetPlayerVars( playerid )
  1650. {
  1651. /* Resets a specific player's pData info.
  1652. @playerid: ID of the player to reset the data of.
  1653. */
  1654.  
  1655. pData[playerid][P_Editing] = false;
  1656. strmid(CurrentProject, "", 0, 1, 128);
  1657. }
  1658.  
  1659. forward KeyEdit( playerid );
  1660. public KeyEdit( playerid )
  1661. {
  1662. /* Handles the edition by keyboard.
  1663. @playerid: Player editing.
  1664. */
  1665. if(pData[playerid][P_KeyEdition] == EDIT_NONE) return 0;
  1666.  
  1667. new string[256]; // Buffer for all gametexts and other messages.
  1668. new keys, updown, leftright;
  1669. GetPlayerKeys(playerid, keys, updown, leftright);
  1670.  
  1671. if(updown < 0) // He's pressing up
  1672. {
  1673. switch(pData[playerid][P_KeyEdition])
  1674. {
  1675. case EDIT_POSITION:
  1676. {
  1677. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_Y] -= 10.0;
  1678. else tData[pData[playerid][P_CurrentTextdraw]][T_Y] -= 1.0;
  1679.  
  1680. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Posicao: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1681. tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1682. }
  1683.  
  1684. case EDIT_SIZE:
  1685. {
  1686. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_YSize] -= 1.0;
  1687. else tData[pData[playerid][P_CurrentTextdraw]][T_YSize] -= 0.1;
  1688.  
  1689. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1690. tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1691. }
  1692.  
  1693. case EDIT_BOX:
  1694. {
  1695. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] -= 10.0;
  1696. else tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] -= 1.0;
  1697.  
  1698. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1699. tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1700. }
  1701. }
  1702. }
  1703. else if(updown > 0) // He's pressing down
  1704. {
  1705. switch(pData[playerid][P_KeyEdition])
  1706. {
  1707. case EDIT_POSITION:
  1708. {
  1709. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_Y] += 10.0;
  1710. else tData[pData[playerid][P_CurrentTextdraw]][T_Y] += 1.0;
  1711.  
  1712. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Position: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1713. tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1714. }
  1715.  
  1716. case EDIT_SIZE:
  1717. {
  1718. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_YSize] += 1.0;
  1719. else tData[pData[playerid][P_CurrentTextdraw]][T_YSize] += 0.1;
  1720.  
  1721. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1722. tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1723. }
  1724.  
  1725. case EDIT_BOX:
  1726. {
  1727. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] += 10.0;
  1728. else tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] += 1.0;
  1729.  
  1730. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1731. tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1732. }
  1733. }
  1734. }
  1735.  
  1736. if(leftright < 0) // He's pressing left
  1737. {
  1738. switch(pData[playerid][P_KeyEdition])
  1739. {
  1740. case EDIT_POSITION:
  1741. {
  1742. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_X] -= 10.0;
  1743. else tData[pData[playerid][P_CurrentTextdraw]][T_X] -= 1.0;
  1744.  
  1745. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Position: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1746. tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1747. }
  1748.  
  1749. case EDIT_SIZE:
  1750. {
  1751. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_XSize] -= 0.1;
  1752. else tData[pData[playerid][P_CurrentTextdraw]][T_XSize] -= 0.01;
  1753.  
  1754. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1755. tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1756. }
  1757.  
  1758. case EDIT_BOX:
  1759. {
  1760. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] -= 10.0;
  1761. else tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] -= 1.0;
  1762.  
  1763. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1764. tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1765. }
  1766. }
  1767. }
  1768. else if(leftright > 0) // He's pressing right
  1769. {
  1770. switch(pData[playerid][P_KeyEdition])
  1771. {
  1772. case EDIT_POSITION:
  1773. {
  1774. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_X] += 10.0;
  1775. else tData[pData[playerid][P_CurrentTextdraw]][T_X] += 1.0;
  1776.  
  1777. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Position: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1778. tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1779. }
  1780.  
  1781. case EDIT_SIZE:
  1782. {
  1783. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_XSize] += 0.1;
  1784. else tData[pData[playerid][P_CurrentTextdraw]][T_XSize] += 0.01;
  1785.  
  1786. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1787. tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1788. }
  1789.  
  1790. case EDIT_BOX:
  1791. {
  1792. if(keys == KEY_SPRINT) tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] += 10.0;
  1793. else tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] += 1.0;
  1794.  
  1795. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~tamanho: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1796. tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1797. }
  1798. }
  1799. }
  1800.  
  1801. GameTextForPlayer(playerid, string, 999999999, 3);
  1802. UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1803. if(pData[playerid][P_KeyEdition] == EDIT_POSITION)
  1804. {
  1805. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_X");
  1806. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Y");
  1807. }
  1808. else if(pData[playerid][P_KeyEdition] == EDIT_SIZE)
  1809. {
  1810. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_XSize");
  1811. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_YSize");
  1812. }
  1813. else if(pData[playerid][P_KeyEdition] == EDIT_BOX)
  1814. {
  1815. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_TextSizeX");
  1816. SaveTDData(pData[playerid][P_CurrentTextdraw], "T_TextSizeY");
  1817. }
  1818. SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  1819. return 1;
  1820. }
  1821.  
  1822. public OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
  1823. {
  1824. if(pData[playerid][P_KeyEdition] != EDIT_NONE && newkeys == KEY_SECONDARY_ATTACK)
  1825. {
  1826. GameTextForPlayer(playerid, " ", 100, 3);
  1827. TogglePlayerControllable(playerid, 1);
  1828.  
  1829. new string[128];
  1830. switch(pData[playerid][P_KeyEdition])
  1831. {
  1832. case EDIT_POSITION:
  1833. {
  1834. format(string, sizeof(string), "Textdraw #%d successfuly moved.", pData[playerid][P_CurrentTextdraw]);
  1835. }
  1836. case EDIT_SIZE:
  1837. {
  1838. format(string, sizeof(string), "Textdraw #%d successfuly resized.", pData[playerid][P_CurrentTextdraw]);
  1839. }
  1840. case EDIT_BOX:
  1841. {
  1842. format(string, sizeof(string), "Textdraw #%d's box successfuly resized.", pData[playerid][P_CurrentTextdraw]);
  1843. }
  1844. }
  1845.  
  1846. if(pData[playerid][P_KeyEdition] == EDIT_BOX) SetTimerEx("ShowTextDrawDialogEx", 500, 0, "ii", playerid, 24);
  1847. else SetTimerEx("ShowTextDrawDialogEx", 500, 0, "ii", playerid, 5);
  1848. SendClientMessage(playerid, MSG_COLOR, string);
  1849. pData[playerid][P_KeyEdition] = EDIT_NONE;
  1850. }
  1851. return 1;
  1852. }
  1853.  
  1854. stock CreateNewProject( name[] )
  1855. {
  1856. /* Creates a new .tde project file.
  1857. @name[]: Name to be used in the filename.
  1858. */
  1859.  
  1860. new string[128], File:File;
  1861.  
  1862. // Add it to the list.
  1863. format(string, sizeof(string), "%s\r\n", name);
  1864. File = fopen("tdlist.lst", io_append);
  1865. fwrite(File, string);
  1866. fclose(File);
  1867.  
  1868. // Create the default file.
  1869. File = fopen(name, io_write);
  1870. fwrite(File, "TDFile=yes");
  1871. fclose(File);
  1872. }
  1873.  
  1874. stock ClearTextdraw( tdid )
  1875. {
  1876. /* Resets a textdraw's variables and destroys it.
  1877. @tdid: Textdraw ID
  1878. */
  1879. TextDrawHideForAll(tData[tdid][T_Handler]);
  1880. tData[tdid][T_Created] = false;
  1881. strmid(tData[tdid][T_Text], "", 0, 1, 2);
  1882. tData[tdid][T_X] = 0.0;
  1883. tData[tdid][T_Y] = 0.0;
  1884. tData[tdid][T_Alignment] = 0;
  1885. tData[tdid][T_BackColor] = 0;
  1886. tData[tdid][T_UseBox] = 0;
  1887. tData[tdid][T_BoxColor] = 0;
  1888. tData[tdid][T_TextSizeX] = 0.0;
  1889. tData[tdid][T_TextSizeY] = 0.0;
  1890. tData[tdid][T_Color] = 0;
  1891. tData[tdid][T_Font] = 0;
  1892. tData[tdid][T_XSize] = 0.0;
  1893. tData[tdid][T_YSize] = 0.0;
  1894. tData[tdid][T_Outline] = 0;
  1895. tData[tdid][T_Proportional] = 0;
  1896. tData[tdid][T_Shadow] = 0;
  1897. }
  1898.  
  1899. stock CreateDefaultTextdraw( tdid, save = 1 )
  1900. {
  1901. /* Creates a new textdraw with default settings.
  1902. @tdid: Textdraw ID
  1903. */
  1904. tData[tdid][T_Created] = true;
  1905. format(tData[tdid][T_Text], 1024, "New Textdraw", 1);
  1906. tData[tdid][T_X] = 250.0;
  1907. tData[tdid][T_Y] = 10.0;
  1908. tData[tdid][T_Alignment] = 0;
  1909. tData[tdid][T_BackColor] = RGB(0, 0, 0, 255);
  1910. tData[tdid][T_UseBox] = 0;
  1911. tData[tdid][T_BoxColor] = RGB(0, 0, 0, 255);
  1912. tData[tdid][T_TextSizeX] = 0.0;
  1913. tData[tdid][T_TextSizeY] = 0.0;
  1914. tData[tdid][T_Color] = RGB(255, 255, 255, 255);
  1915. tData[tdid][T_Font] = 1;
  1916. tData[tdid][T_XSize] = 0.5;
  1917. tData[tdid][T_YSize] = 1.0;
  1918. tData[tdid][T_Outline] = 0;
  1919. tData[tdid][T_Proportional] = 1;
  1920. tData[tdid][T_Shadow] = 1;
  1921.  
  1922. UpdateTextdraw(tdid);
  1923. if(save) SaveTDData(tdid, "T_Created");
  1924. }
  1925.  
  1926. stock DuplicateTextdraw( source, to )
  1927. {
  1928. /* Duplicates a textdraw from another one. Updates the new one.
  1929. @source: Where to copy the textdraw from.
  1930. @to: Where to copy the textdraw to.
  1931. */
  1932. tData[to][T_Created] = tData[source][T_Created];
  1933. format(tData[to][T_Text], 1024, "%s", tData[source][T_Text]);
  1934. tData[to][T_X] = tData[source][T_X];
  1935. tData[to][T_Y] = tData[source][T_Y];
  1936. tData[to][T_Alignment] = tData[source][T_Alignment];
  1937. tData[to][T_BackColor] = tData[source][T_BackColor];
  1938. tData[to][T_UseBox] = tData[source][T_UseBox];
  1939. tData[to][T_BoxColor] = tData[source][T_BoxColor];
  1940. tData[to][T_TextSizeX] = tData[source][T_TextSizeX];
  1941. tData[to][T_TextSizeY] = tData[source][T_TextSizeY];
  1942. tData[to][T_Color] = tData[source][T_Color];
  1943. tData[to][T_Font] = tData[source][T_Font];
  1944. tData[to][T_XSize] = tData[source][T_XSize];
  1945. tData[to][T_YSize] = tData[source][T_YSize];
  1946. tData[to][T_Outline] = tData[source][T_Outline];
  1947. tData[to][T_Proportional] = tData[source][T_Proportional];
  1948. tData[to][T_Shadow] = tData[source][T_Shadow];
  1949.  
  1950. UpdateTextdraw(to);
  1951. SaveTDData(to, "T_Created");
  1952. SaveTDData(to, "T_Text");
  1953. SaveTDData(to, "T_X");
  1954. SaveTDData(to, "T_Y");
  1955. SaveTDData(to, "T_Alignment");
  1956. SaveTDData(to, "T_BackColor");
  1957. SaveTDData(to, "T_UseBox");
  1958. SaveTDData(to, "T_BoxColor");
  1959. SaveTDData(to, "T_TextSizeX");
  1960. SaveTDData(to, "T_TextSizeY");
  1961. SaveTDData(to, "T_Color");
  1962. SaveTDData(to, "T_Font");
  1963. SaveTDData(to, "T_XSize");
  1964. SaveTDData(to, "T_YSize");
  1965. SaveTDData(to, "T_Outline");
  1966. SaveTDData(to, "T_Proportional");
  1967. SaveTDData(to, "T_Shadow");
  1968. }
  1969.  
  1970. stock UpdateTextdraw( tdid )
  1971. {
  1972. if(!tData[tdid][T_Created]) return false;
  1973. TextDrawHideForAll(tData[tdid][T_Handler]);
  1974. TextDrawDestroy(tData[tdid][T_Handler]);
  1975.  
  1976. // Recreate it
  1977. tData[tdid][T_Handler] = TextDrawCreate(tData[tdid][T_X], tData[tdid][T_Y], tData[tdid][T_Text]);
  1978. TextDrawAlignment(tData[tdid][T_Handler], tData[tdid][T_Alignment]);
  1979. TextDrawBackgroundColor(tData[tdid][T_Handler], tData[tdid][T_BackColor]);
  1980. TextDrawColor(tData[tdid][T_Handler], tData[tdid][T_Color]);
  1981. TextDrawFont(tData[tdid][T_Handler], tData[tdid][T_Font]);
  1982. TextDrawLetterSize(tData[tdid][T_Handler], tData[tdid][T_XSize], tData[tdid][T_YSize]);
  1983. TextDrawSetOutline(tData[tdid][T_Handler], tData[tdid][T_Outline]);
  1984. TextDrawSetProportional(tData[tdid][T_Handler], tData[tdid][T_Proportional]);
  1985. TextDrawSetShadow(tData[tdid][T_Handler], tData[tdid][T_Shadow]);
  1986. if(tData[tdid][T_UseBox])
  1987. {
  1988. TextDrawUseBox(tData[tdid][T_Handler], tData[tdid][T_UseBox]);
  1989. TextDrawBoxColor(tData[tdid][T_Handler], tData[tdid][T_BoxColor]);
  1990. TextDrawTextSize(tData[tdid][T_Handler], tData[tdid][T_TextSizeX], tData[tdid][T_TextSizeY]);
  1991. }
  1992. TextDrawShowForAll(tData[tdid][T_Handler]);
  1993. return true;
  1994. }
  1995.  
  1996. stock DeleteTDFromFile( tdid )
  1997. {
  1998. /* Deletes a specific textdraw from its .tde file
  1999. @tdid: Textdraw ID.
  2000. */
  2001. new string[128], filename[135];
  2002. format(filename, sizeof(filename), "%s.tde", CurrentProject);
  2003.  
  2004. format(string, sizeof(string), "%dT_Created", tdid);
  2005. dini_Unset(filename, string);
  2006. format(string, sizeof(string), "%dT_Text", tdid);
  2007. dini_Unset(filename, string);
  2008. format(string, sizeof(string), "%dT_X", tdid);
  2009. dini_Unset(filename, string);
  2010. format(string, sizeof(string), "%dT_Y", tdid);
  2011. dini_Unset(filename, string);
  2012. format(string, sizeof(string), "%dT_Alignment", tdid);
  2013. dini_Unset(filename, string);
  2014. format(string, sizeof(string), "%dT_BackColor", tdid);
  2015. dini_Unset(filename, string);
  2016. format(string, sizeof(string), "%dT_UseBox", tdid);
  2017. dini_Unset(filename, string);
  2018. format(string, sizeof(string), "%dT_BoxColor", tdid);
  2019. dini_Unset(filename, string);
  2020. format(string, sizeof(string), "%dT_TextSizeX", tdid);
  2021. dini_Unset(filename, string);
  2022. format(string, sizeof(string), "%dT_TextSizeY", tdid);
  2023. dini_Unset(filename, string);
  2024. format(string, sizeof(string), "%dT_Color", tdid);
  2025. dini_Unset(filename, string);
  2026. format(string, sizeof(string), "%dT_Font", tdid);
  2027. dini_Unset(filename, string);
  2028. format(string, sizeof(string), "%dT_XSize", tdid);
  2029. dini_Unset(filename, string);
  2030. format(string, sizeof(string), "%dT_YSize", tdid);
  2031. dini_Unset(filename, string);
  2032. format(string, sizeof(string), "%dT_Outline", tdid);
  2033. dini_Unset(filename, string);
  2034. format(string, sizeof(string), "%dT_Proportional", tdid);
  2035. dini_Unset(filename, string);
  2036. format(string, sizeof(string), "%dT_Shadow", tdid);
  2037. dini_Unset(filename, string);
  2038. }
  2039.  
  2040. stock SaveTDData( tdid, data[] )
  2041. {
  2042. /* Saves a specific data from a specific textdraw to project file.
  2043. @tdid: Textdraw ID.
  2044. @data[]: Data to be saved.
  2045. */
  2046. new string[128], filename[135];
  2047. format(string, sizeof(string), "%d%s", tdid, data);
  2048. format(filename, sizeof(filename), "%s.tde", CurrentProject);
  2049.  
  2050. if(!strcmp("T_Created", data))
  2051. dini_IntSet(filename, string, 1);
  2052. else if(!strcmp("T_Text", data))
  2053. dini_Set(filename, string, tData[tdid][T_Text]);
  2054. else if(!strcmp("T_X", data))
  2055. dini_FloatSet(filename, string, tData[tdid][T_X]);
  2056. else if(!strcmp("T_Y", data))
  2057. dini_FloatSet(filename, string, tData[tdid][T_Y]);
  2058. else if(!strcmp("T_Alignment", data))
  2059. dini_IntSet(filename, string, tData[tdid][T_Alignment]);
  2060. else if(!strcmp("T_BackColor", data))
  2061. dini_IntSet(filename, string, tData[tdid][T_BackColor]);
  2062. else if(!strcmp("T_UseBox", data))
  2063. dini_IntSet(filename, string, tData[tdid][T_UseBox]);
  2064. else if(!strcmp("T_BoxColor", data))
  2065. dini_IntSet(filename, string, tData[tdid][T_BoxColor]);
  2066. else if(!strcmp("T_TextSizeX", data))
  2067. dini_FloatSet(filename, string, tData[tdid][T_TextSizeX]);
  2068. else if(!strcmp("T_TextSizeY", data))
  2069. dini_FloatSet(filename, string, tData[tdid][T_TextSizeY]);
  2070. else if(!strcmp("T_Color", data))
  2071. dini_IntSet(filename, string, tData[tdid][T_Color]);
  2072. else if(!strcmp("T_Font", data))
  2073. dini_IntSet(filename, string, tData[tdid][T_Font]);
  2074. else if(!strcmp("T_XSize", data))
  2075. dini_FloatSet(filename, string, tData[tdid][T_XSize]);
  2076. else if(!strcmp("T_YSize", data))
  2077. dini_FloatSet(filename, string, tData[tdid][T_YSize]);
  2078. else if(!strcmp("T_Outline", data))
  2079. dini_IntSet(filename, string, tData[tdid][T_Outline]);
  2080. else if(!strcmp("T_Proportional", data))
  2081. dini_IntSet(filename, string, tData[tdid][T_Proportional]);
  2082. else if(!strcmp("T_Shadow", data))
  2083. dini_IntSet(filename, string, tData[tdid][T_Shadow]);
  2084. else
  2085. SendClientMessageToAll(MSG_COLOR, "Incorrect data parsed, textdraw autosave failed");
  2086. }
  2087.  
  2088. stock LoadProject( playerid, filename[] )
  2089. {
  2090. /* Loads a project for edition.
  2091. @filename[]: Filename where the project is currently saved.
  2092. */
  2093. new string[128];
  2094. if(!dini_Isset(filename, "TDFile"))
  2095. {
  2096. SendClientMessage(playerid, MSG_COLOR, "Invalid textdraw file.");
  2097. ShowTextDrawDialog(playerid, 0);
  2098. }
  2099. else
  2100. {
  2101. for(new i; i < MAX_TEXTDRAWS; i ++)
  2102. {
  2103. format(string, sizeof(string), "%dT_Created", i);
  2104. if(dini_Isset(filename, string))
  2105. {
  2106. CreateDefaultTextdraw(i, 0); // Create but don't save.
  2107.  
  2108. format(string, sizeof(string), "%dT_Text", i);
  2109. if(dini_Isset(filename, string))
  2110. format(tData[i][T_Text], 1536, "%s", dini_Get(filename, string));
  2111.  
  2112. format(string, sizeof(string), "%dT_X", i);
  2113. if(dini_Isset(filename, string))
  2114. tData[i][T_X] = dini_Float(filename, string);
  2115.  
  2116. format(string, sizeof(string), "%dT_Y", i);
  2117. if(dini_Isset(filename, string))
  2118. tData[i][T_Y] = dini_Float(filename, string);
  2119.  
  2120. format(string, sizeof(string), "%dT_Alignment", i);
  2121. if(dini_Isset(filename, string))
  2122. tData[i][T_Alignment] = dini_Int(filename, string);
  2123.  
  2124. format(string, sizeof(string), "%dT_BackColor", i);
  2125. if(dini_Isset(filename, string))
  2126. tData[i][T_BackColor] = dini_Int(filename, string);
  2127.  
  2128. format(string, sizeof(string), "%dT_UseBox", i);
  2129. if(dini_Isset(filename, string))
  2130. tData[i][T_UseBox] = dini_Int(filename, string);
  2131.  
  2132. format(string, sizeof(string), "%dT_BoxColor", i);
  2133. if(dini_Isset(filename, string))
  2134. tData[i][T_BoxColor] = dini_Int(filename, string);
  2135.  
  2136. format(string, sizeof(string), "%dT_TextSizeX", i);
  2137. if(dini_Isset(filename, string))
  2138. tData[i][T_TextSizeX] = dini_Float(filename, string);
  2139.  
  2140. format(string, sizeof(string), "%dT_TextSizeY", i);
  2141. if(dini_Isset(filename, string))
  2142. tData[i][T_TextSizeY] = dini_Float(filename, string);
  2143.  
  2144. format(string, sizeof(string), "%dT_Color", i);
  2145. if(dini_Isset(filename, string))
  2146. tData[i][T_Color] = dini_Int(filename, string);
  2147.  
  2148. format(string, sizeof(string), "%dT_Font", i);
  2149. if(dini_Isset(filename, string))
  2150. tData[i][T_Font] = dini_Int(filename, string);
  2151.  
  2152. format(string, sizeof(string), "%dT_XSize", i);
  2153. if(dini_Isset(filename, string))
  2154. tData[i][T_XSize] = dini_Float(filename, string);
  2155.  
  2156. format(string, sizeof(string), "%dT_YSize", i);
  2157. if(dini_Isset(filename, string))
  2158. tData[i][T_YSize] = dini_Float(filename, string);
  2159.  
  2160. format(string, sizeof(string), "%dT_Outline", i);
  2161. if(dini_Isset(filename, string))
  2162. tData[i][T_Outline] = dini_Int(filename, string);
  2163.  
  2164. format(string, sizeof(string), "%dT_Proportional", i);
  2165. if(dini_Isset(filename, string))
  2166. tData[i][T_Proportional] = dini_Int(filename, string);
  2167.  
  2168. format(string, sizeof(string), "%dT_Shadow", i);
  2169. if(dini_Isset(filename, string))
  2170. tData[i][T_Shadow] = dini_Int(filename, string);
  2171.  
  2172. UpdateTextdraw(i);
  2173. }
  2174. }
  2175. strmid(CurrentProject, filename, 0, strlen(filename) - 4, 128);
  2176. ShowTextDrawDialog(playerid, 4);
  2177. }
  2178. }
  2179.  
  2180. stock ExportProject( playerid, type )
  2181. {
  2182. /* Exports a project.
  2183. @playerid: ID of the player exporting the project.
  2184. @type: Type of export requested:
  2185. - Type 0: Classic export type
  2186. */
  2187. SendClientMessage(playerid, MSG_COLOR, "The project is now being exported, please wait...");
  2188.  
  2189. new filename[135], tmpstring[1152];
  2190. if(type == 0) format(filename, sizeof(filename), "%s.txt", CurrentProject);
  2191. else format(filename, sizeof(filename), "%s.pwn", CurrentProject);
  2192. new File:File = fopen(filename, io_write);
  2193. switch(type)
  2194. {
  2195. case 0: // Classic export.
  2196. {
  2197. fwrite(File, "// TextDraw developed using Zamaroht's Textdraw Editor 1.0\r\n\r\n");
  2198. fwrite(File, "// No topo do seu GM/FS Coloque:\r\n");
  2199. for(new i; i < MAX_TEXTDRAWS; i++)
  2200. {
  2201. if(tData[i][T_Created])
  2202. {
  2203. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2204. fwrite(File, tmpstring);
  2205. }
  2206. }
  2207. fwrite(File, "\r\n// Em OnGameModeInit preferência, passamos a criar nossos textdraws:\r\n");
  2208. for(new i; i < MAX_TEXTDRAWS; i++)
  2209. {
  2210. if(tData[i][T_Created])
  2211. {
  2212. format(tmpstring, sizeof(tmpstring), "Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2213. fwrite(File, tmpstring);
  2214. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2215. {
  2216. format(tmpstring, sizeof(tmpstring), "TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2217. fwrite(File, tmpstring);
  2218. }
  2219. format(tmpstring, sizeof(tmpstring), "TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2220. fwrite(File, tmpstring);
  2221. format(tmpstring, sizeof(tmpstring), "TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2222. fwrite(File, tmpstring);
  2223. format(tmpstring, sizeof(tmpstring), "TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2224. fwrite(File, tmpstring);
  2225. format(tmpstring, sizeof(tmpstring), "TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2226. fwrite(File, tmpstring);
  2227. format(tmpstring, sizeof(tmpstring), "TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2228. fwrite(File, tmpstring);
  2229. format(tmpstring, sizeof(tmpstring), "TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2230. fwrite(File, tmpstring);
  2231. if(tData[i][T_Outline] == 0)
  2232. {
  2233. format(tmpstring, sizeof(tmpstring), "TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2234. fwrite(File, tmpstring);
  2235. }
  2236. if(tData[i][T_UseBox] == 1)
  2237. {
  2238. format(tmpstring, sizeof(tmpstring), "TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2239. fwrite(File, tmpstring);
  2240. format(tmpstring, sizeof(tmpstring), "TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2241. fwrite(File, tmpstring);
  2242. format(tmpstring, sizeof(tmpstring), "TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2243. fwrite(File, tmpstring);
  2244. }
  2245. fwrite(File, "\r\n");
  2246. }
  2247. }
  2248. fwrite(File, "// Agora você pode usar TextDrawShowForPlayer (-ForAll), TextDrawHideForPlayer (-ForAll) and\r\n");
  2249. fwrite(File, "// Funções TextDrawDestroy para mostrar, ocultar e destruir o TextDraw.");
  2250.  
  2251. format(tmpstring, sizeof(tmpstring), "Project exported to %s.txt in scriptfiles directory.", CurrentProject);
  2252. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2253. }
  2254.  
  2255. case 1: // Show all the time
  2256. {
  2257. fwrite(File, "/*\r\n");
  2258. fwrite(File, "Filterscript generated using Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2259. fwrite(File, "Designed for SA-MP 0.3x.\r\n\r\n");
  2260. new ye,mo,da,ho,mi,se;
  2261. getdate(ye,mo,da);
  2262. gettime(ho,mi,se);
  2263. format(tmpstring, sizeof(tmpstring), "Time and Date: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2264. fwrite(File, tmpstring);
  2265. fwrite(File, "Instructions:\r\n");
  2266. fwrite(File, "1- Compile this file using the compiler provided with the sa-mp server package.\r\n");
  2267. fwrite(File, "2- Copy the .amx file to the filterscripts directory.\r\n");
  2268. fwrite(File, "3- Add the filterscripts in the server.cfg file (more info here:\r\n");
  2269. fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2270. fwrite(File, "4- Run the server!\r\n\r\n");
  2271. fwrite(File, "Disclaimer:\r\n");
  2272. fwrite(File, "You have full rights over this file. You can distribute it, modify it, and\r\n");
  2273. fwrite(File, "change it as much as you want, without having to give any special credits.\r\n");
  2274. fwrite(File, "*/\r\n\r\n");
  2275. fwrite(File, "#include <a_samp>\r\n\r\n");
  2276. for(new i; i < MAX_TEXTDRAWS; i++)
  2277. {
  2278. if(tData[i][T_Created])
  2279. {
  2280. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2281. fwrite(File, tmpstring);
  2282. }
  2283. }
  2284. fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2285. fwrite(File, "{\r\n");
  2286. fwrite(File, " print(\"Textdraw file generated by\");\r\n");
  2287. fwrite(File, " print(\" Zamaroht's textdraw editor was loaded.\");\r\n\r\n");
  2288. fwrite(File, " // Create the textdraws:\r\n");
  2289. for(new i; i < MAX_TEXTDRAWS; i++)
  2290. {
  2291. if(tData[i][T_Created])
  2292. {
  2293. format(tmpstring, sizeof(tmpstring), " Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2294. fwrite(File, tmpstring);
  2295. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2296. {
  2297. format(tmpstring, sizeof(tmpstring), " TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2298. fwrite(File, tmpstring);
  2299. }
  2300. format(tmpstring, sizeof(tmpstring), " TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2301. fwrite(File, tmpstring);
  2302. format(tmpstring, sizeof(tmpstring), " TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2303. fwrite(File, tmpstring);
  2304. format(tmpstring, sizeof(tmpstring), " TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2305. fwrite(File, tmpstring);
  2306. format(tmpstring, sizeof(tmpstring), " TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2307. fwrite(File, tmpstring);
  2308. format(tmpstring, sizeof(tmpstring), " TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2309. fwrite(File, tmpstring);
  2310. format(tmpstring, sizeof(tmpstring), " TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2311. fwrite(File, tmpstring);
  2312. if(tData[i][T_Outline] == 0)
  2313. {
  2314. format(tmpstring, sizeof(tmpstring), " TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2315. fwrite(File, tmpstring);
  2316. }
  2317. if(tData[i][T_UseBox] == 1)
  2318. {
  2319. format(tmpstring, sizeof(tmpstring), " TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2320. fwrite(File, tmpstring);
  2321. format(tmpstring, sizeof(tmpstring), " TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2322. fwrite(File, tmpstring);
  2323. format(tmpstring, sizeof(tmpstring), " TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2324. fwrite(File, tmpstring);
  2325. }
  2326. fwrite(File, "\r\n");
  2327. }
  2328. }
  2329. fwrite(File, " for(new i; i < MAX_PLAYERS; i ++)\r\n");
  2330. fwrite(File, " {\r\n");
  2331. fwrite(File, " if(IsPlayerConnected(i))\r\n");
  2332. fwrite(File, " {\r\n");
  2333. for(new i; i < MAX_TEXTDRAWS; i ++)
  2334. {
  2335. if(tData[i][T_Created])
  2336. {
  2337. format(tmpstring, sizeof(tmpstring), " TextDrawShowForPlayer(i, Textdraw%d);\r\n", i);
  2338. fwrite(File, tmpstring);
  2339. }
  2340. }
  2341. fwrite(File, " }\r\n");
  2342. fwrite(File, " }\r\n");
  2343. fwrite(File, " return 1;\r\n");
  2344. fwrite(File, "}\r\n\r\n");
  2345. fwrite(File, "public OnFilterScriptExit()\r\n");
  2346. fwrite(File, "{\r\n");
  2347. for(new i; i < MAX_TEXTDRAWS; i ++)
  2348. {
  2349. if(tData[i][T_Created])
  2350. {
  2351. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2352. fwrite(File, tmpstring);
  2353. format(tmpstring, sizeof(tmpstring), " TextDrawDestroy(Textdraw%d);\r\n", i);
  2354. fwrite(File, tmpstring);
  2355. }
  2356. }
  2357. fwrite(File, " return 1;\r\n");
  2358. fwrite(File, "}\r\n\r\n");
  2359. fwrite(File, "public OnPlayerConnect(playerid)\r\n");
  2360. fwrite(File, "{\r\n");
  2361. for(new i; i < MAX_TEXTDRAWS; i ++)
  2362. {
  2363. if(tData[i][T_Created])
  2364. {
  2365. format(tmpstring, sizeof(tmpstring), " TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2366. fwrite(File, tmpstring);
  2367. }
  2368. }
  2369. fwrite(File, " return 1;\r\n");
  2370. fwrite(File, "}\r\n");
  2371.  
  2372. format(tmpstring, sizeof(tmpstring), "Project exported to %s.pwn in scriptfiles directory as a filterscript.", CurrentProject);
  2373. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2374. }
  2375.  
  2376. case 2: // Show on class selection
  2377. {
  2378. fwrite(File, "/*\r\n");
  2379. fwrite(File, "Filterscript generated using Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2380. fwrite(File, "Designed for SA-MP 0.3a.\r\n\r\n");
  2381. new ye,mo,da,ho,mi,se;
  2382. getdate(ye,mo,da);
  2383. gettime(ho,mi,se);
  2384. format(tmpstring, sizeof(tmpstring), "Time and Date: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2385. fwrite(File, tmpstring);
  2386. fwrite(File, "Instructions:\r\n");
  2387. fwrite(File, "1- Compile this file using the compiler provided with the sa-mp server package.\r\n");
  2388. fwrite(File, "2- Copy the .amx file to the filterscripts directory.\r\n");
  2389. fwrite(File, "3- Add the filterscripts in the server.cfg file (more info here:\r\n");
  2390. fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2391. fwrite(File, "4- Run the server!\r\n\r\n");
  2392. fwrite(File, "Disclaimer:\r\n");
  2393. fwrite(File, "You have full rights over this file. You can distribute it, modify it, and\r\n");
  2394. fwrite(File, "change it as much as you want, without having to give any special credits.\r\n");
  2395. fwrite(File, "*/\r\n\r\n");
  2396. fwrite(File, "#include <a_samp>\r\n\r\n");
  2397. for(new i; i < MAX_TEXTDRAWS; i++)
  2398. {
  2399. if(tData[i][T_Created])
  2400. {
  2401. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2402. fwrite(File, tmpstring);
  2403. }
  2404. }
  2405. fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2406. fwrite(File, "{\r\n");
  2407. fwrite(File, " print(\"Textdraw file generated by\");\r\n");
  2408. fwrite(File, " print(\" Zamaroht's textdraw editor was loaded.\");\r\n\r\n");
  2409. fwrite(File, " // Create the textdraws:\r\n");
  2410. for(new i; i < MAX_TEXTDRAWS; i++)
  2411. {
  2412. if(tData[i][T_Created])
  2413. {
  2414. format(tmpstring, sizeof(tmpstring), " Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2415. fwrite(File, tmpstring);
  2416. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2417. {
  2418. format(tmpstring, sizeof(tmpstring), " TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2419. fwrite(File, tmpstring);
  2420. }
  2421. format(tmpstring, sizeof(tmpstring), " TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2422. fwrite(File, tmpstring);
  2423. format(tmpstring, sizeof(tmpstring), " TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2424. fwrite(File, tmpstring);
  2425. format(tmpstring, sizeof(tmpstring), " TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2426. fwrite(File, tmpstring);
  2427. format(tmpstring, sizeof(tmpstring), " TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2428. fwrite(File, tmpstring);
  2429. format(tmpstring, sizeof(tmpstring), " TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2430. fwrite(File, tmpstring);
  2431. format(tmpstring, sizeof(tmpstring), " TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2432. fwrite(File, tmpstring);
  2433. if(tData[i][T_Outline] == 0)
  2434. {
  2435. format(tmpstring, sizeof(tmpstring), " TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2436. fwrite(File, tmpstring);
  2437. }
  2438. if(tData[i][T_UseBox] == 1)
  2439. {
  2440. format(tmpstring, sizeof(tmpstring), " TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2441. fwrite(File, tmpstring);
  2442. format(tmpstring, sizeof(tmpstring), " TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2443. fwrite(File, tmpstring);
  2444. format(tmpstring, sizeof(tmpstring), " TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2445. fwrite(File, tmpstring);
  2446. }
  2447. fwrite(File, "\r\n");
  2448. }
  2449. }
  2450. fwrite(File, " return 1;\r\n");
  2451. fwrite(File, "}\r\n\r\n");
  2452. fwrite(File, "public OnFilterScriptExit()\r\n");
  2453. fwrite(File, "{\r\n");
  2454. for(new i; i < MAX_TEXTDRAWS; i ++)
  2455. {
  2456. if(tData[i][T_Created])
  2457. {
  2458. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2459. fwrite(File, tmpstring);
  2460. format(tmpstring, sizeof(tmpstring), " TextDrawDestroy(Textdraw%d);\r\n", i);
  2461. fwrite(File, tmpstring);
  2462. }
  2463. }
  2464. fwrite(File, " return 1;\r\n");
  2465. fwrite(File, "}\r\n\r\n");
  2466. fwrite(File, "public OnPlayerRequestClass(playerid, classid)\r\n");
  2467. fwrite(File, "{\r\n");
  2468. for(new i; i < MAX_TEXTDRAWS; i ++)
  2469. {
  2470. if(tData[i][T_Created])
  2471. {
  2472. format(tmpstring, sizeof(tmpstring), " TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2473. fwrite(File, tmpstring);
  2474. }
  2475. }
  2476. fwrite(File, " return 1;\r\n");
  2477. fwrite(File, "}\r\n\r\n");
  2478. fwrite(File, "public OnPlayerSpawn(playerid)\r\n");
  2479. fwrite(File, "{\r\n");
  2480. for(new i; i < MAX_TEXTDRAWS; i ++)
  2481. {
  2482. if(tData[i][T_Created])
  2483. {
  2484. format(tmpstring, sizeof(tmpstring), " TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2485. fwrite(File, tmpstring);
  2486. }
  2487. }
  2488. fwrite(File, " return 1;\r\n");
  2489. fwrite(File, "}\r\n\r\n");
  2490.  
  2491. format(tmpstring, sizeof(tmpstring), "Project exported to %s.pwn in scriptfiles directory as a filterscript.", CurrentProject);
  2492. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2493. }
  2494.  
  2495. case 3: // Show while in vehicle
  2496. {
  2497. fwrite(File, "/*\r\n");
  2498. fwrite(File, "Filterscript generated using Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2499. fwrite(File, "Designed for SA-MP 0.3a.\r\n\r\n");
  2500. new ye,mo,da,ho,mi,se;
  2501. getdate(ye,mo,da);
  2502. gettime(ho,mi,se);
  2503. format(tmpstring, sizeof(tmpstring), "Time and Date: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2504. fwrite(File, tmpstring);
  2505. fwrite(File, "Instructions:\r\n");
  2506. fwrite(File, "1- Compile this file using the compiler provided with the sa-mp server package.\r\n");
  2507. fwrite(File, "2- Copy the .amx file to the filterscripts directory.\r\n");
  2508. fwrite(File, "3- Add the filterscripts in the server.cfg file (more info here:\r\n");
  2509. fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2510. fwrite(File, "4- Run the server!\r\n\r\n");
  2511. fwrite(File, "Disclaimer:\r\n");
  2512. fwrite(File, "You have full rights over this file. You can distribute it, modify it, and\r\n");
  2513. fwrite(File, "change it as much as you want, without having to give any special credits.\r\n");
  2514. fwrite(File, "*/\r\n\r\n");
  2515. fwrite(File, "#include <a_samp>\r\n\r\n");
  2516. for(new i; i < MAX_TEXTDRAWS; i++)
  2517. {
  2518. if(tData[i][T_Created])
  2519. {
  2520. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2521. fwrite(File, tmpstring);
  2522. }
  2523. }
  2524. fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2525. fwrite(File, "{\r\n");
  2526. fwrite(File, " print(\"Textdraw file generated by\");\r\n");
  2527. fwrite(File, " print(\" Zamaroht's textdraw editor was loaded.\");\r\n\r\n");
  2528. fwrite(File, " // Create the textdraws:\r\n");
  2529. for(new i; i < MAX_TEXTDRAWS; i++)
  2530. {
  2531. if(tData[i][T_Created])
  2532. {
  2533. format(tmpstring, sizeof(tmpstring), " Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2534. fwrite(File, tmpstring);
  2535. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2536. {
  2537. format(tmpstring, sizeof(tmpstring), " TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2538. fwrite(File, tmpstring);
  2539. }
  2540. format(tmpstring, sizeof(tmpstring), " TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2541. fwrite(File, tmpstring);
  2542. format(tmpstring, sizeof(tmpstring), " TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2543. fwrite(File, tmpstring);
  2544. format(tmpstring, sizeof(tmpstring), " TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2545. fwrite(File, tmpstring);
  2546. format(tmpstring, sizeof(tmpstring), " TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2547. fwrite(File, tmpstring);
  2548. format(tmpstring, sizeof(tmpstring), " TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2549. fwrite(File, tmpstring);
  2550. format(tmpstring, sizeof(tmpstring), " TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2551. fwrite(File, tmpstring);
  2552. if(tData[i][T_Outline] == 0)
  2553. {
  2554. format(tmpstring, sizeof(tmpstring), " TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2555. fwrite(File, tmpstring);
  2556. }
  2557. if(tData[i][T_UseBox] == 1)
  2558. {
  2559. format(tmpstring, sizeof(tmpstring), " TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2560. fwrite(File, tmpstring);
  2561. format(tmpstring, sizeof(tmpstring), " TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2562. fwrite(File, tmpstring);
  2563. format(tmpstring, sizeof(tmpstring), " TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2564. fwrite(File, tmpstring);
  2565. }
  2566. fwrite(File, "\r\n");
  2567. }
  2568. }
  2569. fwrite(File, " return 1;\r\n");
  2570. fwrite(File, "}\r\n\r\n");
  2571. fwrite(File, "public OnFilterScriptExit()\r\n");
  2572. fwrite(File, "{\r\n");
  2573. for(new i; i < MAX_TEXTDRAWS; i ++)
  2574. {
  2575. if(tData[i][T_Created])
  2576. {
  2577. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2578. fwrite(File, tmpstring);
  2579. format(tmpstring, sizeof(tmpstring), " TextDrawDestroy(Textdraw%d);\r\n", i);
  2580. fwrite(File, tmpstring);
  2581. }
  2582. }
  2583. fwrite(File, " return 1;\r\n");
  2584. fwrite(File, "}\r\n\r\n");
  2585. fwrite(File, "public OnPlayerStateChange(playerid, newstate, oldstate)\r\n");
  2586. fwrite(File, "{\r\n");
  2587. fwrite(File, " if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)\r\n");
  2588. fwrite(File, " {\r\n");
  2589. for(new i; i < MAX_TEXTDRAWS; i ++)
  2590. {
  2591. if(tData[i][T_Created])
  2592. {
  2593. format(tmpstring, sizeof(tmpstring), " TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2594. fwrite(File, tmpstring);
  2595. }
  2596. }
  2597. fwrite(File, " }\r\n");
  2598. fwrite(File, " else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)\r\n");
  2599. fwrite(File, " {\r\n");
  2600. for(new i; i < MAX_TEXTDRAWS; i ++)
  2601. {
  2602. if(tData[i][T_Created])
  2603. {
  2604. format(tmpstring, sizeof(tmpstring), " TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2605. fwrite(File, tmpstring);
  2606. }
  2607. }
  2608. fwrite(File, " }\r\n");
  2609. fwrite(File, " return 1;\r\n");
  2610. fwrite(File, "}\r\n");
  2611.  
  2612. format(tmpstring, sizeof(tmpstring), "Project exported to %s.pwn in scriptfiles directory as a filterscript.", CurrentProject);
  2613. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2614. }
  2615.  
  2616. case 4: // Use command
  2617. {
  2618. fwrite(File, "/*\r\n");
  2619. fwrite(File, "Filterscript generated using Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2620. fwrite(File, "Designed for SA-MP 0.3a.\r\n\r\n");
  2621. new ye,mo,da,ho,mi,se;
  2622. getdate(ye,mo,da);
  2623. gettime(ho,mi,se);
  2624. format(tmpstring, sizeof(tmpstring), "Time and Date: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2625. fwrite(File, tmpstring);
  2626. fwrite(File, "Instructions:\r\n");
  2627. fwrite(File, "1- Compile this file using the compiler provided with the sa-mp server package.\r\n");
  2628. fwrite(File, "2- Copy the .amx file to the filterscripts directory.\r\n");
  2629. fwrite(File, "3- Add the filterscripts in the server.cfg file (more info here:\r\n");
  2630. fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2631. fwrite(File, "4- Run the server!\r\n\r\n");
  2632. fwrite(File, "Disclaimer:\r\n");
  2633. fwrite(File, "You have full rights over this file. You can distribute it, modify it, and\r\n");
  2634. fwrite(File, "change it as much as you want, without having to give any special credits.\r\n");
  2635. fwrite(File, "*/\r\n\r\n");
  2636. fwrite(File, "#include <a_samp>\r\n\r\n");
  2637. fwrite(File, "new Showing[MAX_PLAYERS];\r\n\r\n");
  2638. for(new i; i < MAX_TEXTDRAWS; i++)
  2639. {
  2640. if(tData[i][T_Created])
  2641. {
  2642. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2643. fwrite(File, tmpstring);
  2644. }
  2645. }
  2646. fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2647. fwrite(File, "{\r\n");
  2648. fwrite(File, " print(\"Textdraw file generated by\");\r\n");
  2649. fwrite(File, " print(\" Zamaroht's textdraw editor was loaded.\");\r\n\r\n");
  2650. fwrite(File, " // Create the textdraws:\r\n");
  2651. for(new i; i < MAX_TEXTDRAWS; i++)
  2652. {
  2653. if(tData[i][T_Created])
  2654. {
  2655. format(tmpstring, sizeof(tmpstring), " Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2656. fwrite(File, tmpstring);
  2657. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2658. {
  2659. format(tmpstring, sizeof(tmpstring), " TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2660. fwrite(File, tmpstring);
  2661. }
  2662. format(tmpstring, sizeof(tmpstring), " TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2663. fwrite(File, tmpstring);
  2664. format(tmpstring, sizeof(tmpstring), " TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2665. fwrite(File, tmpstring);
  2666. format(tmpstring, sizeof(tmpstring), " TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2667. fwrite(File, tmpstring);
  2668. format(tmpstring, sizeof(tmpstring), " TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2669. fwrite(File, tmpstring);
  2670. format(tmpstring, sizeof(tmpstring), " TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2671. fwrite(File, tmpstring);
  2672. format(tmpstring, sizeof(tmpstring), " TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2673. fwrite(File, tmpstring);
  2674. if(tData[i][T_Outline] == 0)
  2675. {
  2676. format(tmpstring, sizeof(tmpstring), " TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2677. fwrite(File, tmpstring);
  2678. }
  2679. if(tData[i][T_UseBox] == 1)
  2680. {
  2681. format(tmpstring, sizeof(tmpstring), " TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2682. fwrite(File, tmpstring);
  2683. format(tmpstring, sizeof(tmpstring), " TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2684. fwrite(File, tmpstring);
  2685. format(tmpstring, sizeof(tmpstring), " TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2686. fwrite(File, tmpstring);
  2687. }
  2688. fwrite(File, "\r\n");
  2689. }
  2690. }
  2691. fwrite(File, " return 1;\r\n");
  2692. fwrite(File, "}\r\n\r\n");
  2693. fwrite(File, "public OnFilterScriptExit()\r\n");
  2694. fwrite(File, "{\r\n");
  2695. for(new i; i < MAX_TEXTDRAWS; i ++)
  2696. {
  2697. if(tData[i][T_Created])
  2698. {
  2699. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2700. fwrite(File, tmpstring);
  2701. format(tmpstring, sizeof(tmpstring), " TextDrawDestroy(Textdraw%d);\r\n", i);
  2702. fwrite(File, tmpstring);
  2703. }
  2704. }
  2705. fwrite(File, " return 1;\r\n");
  2706. fwrite(File, "}\r\n\r\n");
  2707. fwrite(File, "public OnPlayerConnect(playerid)\r\n");
  2708. fwrite(File, "{\r\n");
  2709. fwrite(File, " Showing[playerid] = 0;\r\n");
  2710. fwrite(File, "}\r\n\r\n");
  2711. fwrite(File, "public OnPlayerCommandText(playerid, cmdtext[])\r\n");
  2712. fwrite(File, "{\r\n");
  2713. if(pData[playerid][P_Aux] != 0)
  2714. {
  2715. format(tmpstring, sizeof(tmpstring), " if(!strcmp(cmdtext, \"%s\") && Showing[playerid] == 0)\r\n", pData[playerid][P_ExpCommand]);
  2716. fwrite(File, tmpstring);
  2717. }
  2718. else
  2719. {
  2720. format(tmpstring, sizeof(tmpstring), " if(!strcmp(cmdtext, \"%s\"))\r\n", pData[playerid][P_ExpCommand]);
  2721. fwrite(File, tmpstring);
  2722. }
  2723. fwrite(File, " {\r\n");
  2724. fwrite(File, " if(Showing[playerid] == 1)\r\n");
  2725. fwrite(File, " {\r\n");
  2726. fwrite(File, " Showing[playerid] = 0;\r\n");
  2727. for(new i; i < MAX_TEXTDRAWS; i ++)
  2728. {
  2729. if(tData[i][T_Created])
  2730. {
  2731. format(tmpstring, sizeof(tmpstring), " TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2732. fwrite(File, tmpstring);
  2733. }
  2734. }
  2735. fwrite(File, " }\r\n");
  2736. fwrite(File, " else\r\n");
  2737. fwrite(File, " {\r\n");
  2738. fwrite(File, " Showing[playerid] = 1;\r\n");
  2739. for(new i; i < MAX_TEXTDRAWS; i ++)
  2740. {
  2741. if(tData[i][T_Created])
  2742. {
  2743. format(tmpstring, sizeof(tmpstring), " TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2744. fwrite(File, tmpstring);
  2745. }
  2746. }
  2747. if(pData[playerid][P_Aux] != 0)
  2748. {
  2749. format(tmpstring, sizeof(tmpstring), " SetTimerEx(\"HideTextdraws\", %d, 0, \"i\", playerid);\r\n", pData[playerid][P_Aux]*1000);
  2750. fwrite(File, tmpstring);
  2751. }
  2752. fwrite(File, " }\r\n");
  2753. fwrite(File, " }\r\n");
  2754. fwrite(File, " return 1;\r\n");
  2755. fwrite(File, "}\r\n");
  2756. if(pData[playerid][P_Aux] != 0)
  2757. {
  2758. fwrite(File, "\r\n");
  2759. fwrite(File, "forward HideTextdraws(playerid);\r\n");
  2760. fwrite(File, "public HideTextdraws(playerid)\r\n");
  2761. fwrite(File, "{\r\n");
  2762. fwrite(File, " Showing[playerid] = 0;\r\n");
  2763. for(new i; i < MAX_TEXTDRAWS; i ++)
  2764. {
  2765. if(tData[i][T_Created])
  2766. {
  2767. format(tmpstring, sizeof(tmpstring), " TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2768. fwrite(File, tmpstring);
  2769. }
  2770. }
  2771. fwrite(File, "}\r\n");
  2772. }
  2773.  
  2774. format(tmpstring, sizeof(tmpstring), "Project exported to %s.pwn in scriptfiles directory as a filterscript.", CurrentProject);
  2775. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2776. }
  2777.  
  2778. case 5: // Every X time
  2779. {
  2780. fwrite(File, "/*\r\n");
  2781. fwrite(File, "Filterscript generated using Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2782. fwrite(File, "Designed for SA-MP 0.3a.\r\n\r\n");
  2783. new ye,mo,da,ho,mi,se;
  2784. getdate(ye,mo,da);
  2785. gettime(ho,mi,se);
  2786. format(tmpstring, sizeof(tmpstring), "Time and Date: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2787. fwrite(File, tmpstring);
  2788. fwrite(File, "Instructions:\r\n");
  2789. fwrite(File, "1- Compile this file using the compiler provided with the sa-mp server package.\r\n");
  2790. fwrite(File, "2- Copy the .amx file to the filterscripts directory.\r\n");
  2791. fwrite(File, "3- Add the filterscripts in the server.cfg file (more info here:\r\n");
  2792. fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2793. fwrite(File, "4- Run the server!\r\n\r\n");
  2794. fwrite(File, "Disclaimer:\r\n");
  2795. fwrite(File, "You have full rights over this file. You can distribute it, modify it, and\r\n");
  2796. fwrite(File, "change it as much as you want, without having to give any special credits.\r\n");
  2797. fwrite(File, "*/\r\n\r\n");
  2798. fwrite(File, "#include <a_samp>\r\n\r\n");
  2799. fwrite(File, "new Timer;\r\n\r\n");
  2800. for(new i; i < MAX_TEXTDRAWS; i++)
  2801. {
  2802. if(tData[i][T_Created])
  2803. {
  2804. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2805. fwrite(File, tmpstring);
  2806. }
  2807. }
  2808. fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2809. fwrite(File, "{\r\n");
  2810. fwrite(File, " print(\"Textdraw file generated by\");\r\n");
  2811. fwrite(File, " print(\" Zamaroht's textdraw editor was loaded.\");\r\n\r\n");
  2812. fwrite(File, " // Create the textdraws:\r\n");
  2813. for(new i; i < MAX_TEXTDRAWS; i++)
  2814. {
  2815. if(tData[i][T_Created])
  2816. {
  2817. format(tmpstring, sizeof(tmpstring), " Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2818. fwrite(File, tmpstring);
  2819. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2820. {
  2821. format(tmpstring, sizeof(tmpstring), " TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2822. fwrite(File, tmpstring);
  2823. }
  2824. format(tmpstring, sizeof(tmpstring), " TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2825. fwrite(File, tmpstring);
  2826. format(tmpstring, sizeof(tmpstring), " TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2827. fwrite(File, tmpstring);
  2828. format(tmpstring, sizeof(tmpstring), " TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2829. fwrite(File, tmpstring);
  2830. format(tmpstring, sizeof(tmpstring), " TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2831. fwrite(File, tmpstring);
  2832. format(tmpstring, sizeof(tmpstring), " TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2833. fwrite(File, tmpstring);
  2834. format(tmpstring, sizeof(tmpstring), " TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2835. fwrite(File, tmpstring);
  2836. if(tData[i][T_Outline] == 0)
  2837. {
  2838. format(tmpstring, sizeof(tmpstring), " TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2839. fwrite(File, tmpstring);
  2840. }
  2841. if(tData[i][T_UseBox] == 1)
  2842. {
  2843. format(tmpstring, sizeof(tmpstring), " TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2844. fwrite(File, tmpstring);
  2845. format(tmpstring, sizeof(tmpstring), " TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2846. fwrite(File, tmpstring);
  2847. format(tmpstring, sizeof(tmpstring), " TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2848. fwrite(File, tmpstring);
  2849. }
  2850. fwrite(File, "\r\n");
  2851. }
  2852. }
  2853. format(tmpstring, sizeof(tmpstring), " Timer = SetTimer(\"ShowMessage\", %d, 1);\r\n", pData[playerid][P_Aux]*1000);
  2854. fwrite(File, tmpstring);
  2855. fwrite(File, " return 1;\r\n");
  2856. fwrite(File, "}\r\n\r\n");
  2857. fwrite(File, "public OnFilterScriptExit()\r\n");
  2858. fwrite(File, "{\r\n");
  2859. for(new i; i < MAX_TEXTDRAWS; i ++)
  2860. {
  2861. if(tData[i][T_Created])
  2862. {
  2863. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2864. fwrite(File, tmpstring);
  2865. format(tmpstring, sizeof(tmpstring), " TextDrawDestroy(Textdraw%d);\r\n", i);
  2866. fwrite(File, tmpstring);
  2867. }
  2868. }
  2869. fwrite(File, " KillTimer(Timer);\r\n");
  2870. fwrite(File, " return 1;\r\n");
  2871. fwrite(File, "}\r\n\r\n");
  2872. fwrite(File, "forward ShowMessage( );\r\n");
  2873. fwrite(File, "public ShowMessage( )\r\n");
  2874. fwrite(File, "{\r\n");
  2875. for(new i; i < MAX_TEXTDRAWS; i ++)
  2876. {
  2877. if(tData[i][T_Created])
  2878. {
  2879. format(tmpstring, sizeof(tmpstring), " TextDrawShowForAll(Textdraw%d);\r\n", i);
  2880. fwrite(File, tmpstring);
  2881. }
  2882. }
  2883. format(tmpstring, sizeof(tmpstring), " SetTimer(\"HideMessage\", %d, 1);\r\n", pData[playerid][P_Aux2]*1000);
  2884. fwrite(File, tmpstring);
  2885. fwrite(File, "}\r\n\r\n");
  2886. fwrite(File, "forward HideMessage( );\r\n");
  2887. fwrite(File, "public HideMessage( )\r\n");
  2888. fwrite(File, "{\r\n");
  2889. for(new i; i < MAX_TEXTDRAWS; i ++)
  2890. {
  2891. if(tData[i][T_Created])
  2892. {
  2893. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2894. fwrite(File, tmpstring);
  2895. }
  2896. }
  2897. fwrite(File, "}");
  2898.  
  2899. format(tmpstring, sizeof(tmpstring), "Project exported to %s.pwn in scriptfiles directory as a filterscript.", CurrentProject);
  2900. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2901. }
  2902.  
  2903. case 6: // After kill
  2904. {
  2905. fwrite(File, "/*\r\n");
  2906. fwrite(File, "Filterscript generated using Zamaroht's TextDraw Editor Version 1.0.Traduzido por ScriptGames\r\n");
  2907. fwrite(File, "Designed for SA-MP 0.3a.\r\n\r\n");
  2908. new ye,mo,da,ho,mi,se;
  2909. getdate(ye,mo,da);
  2910. gettime(ho,mi,se);
  2911. format(tmpstring, sizeof(tmpstring), "Time and Date: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2912. fwrite(File, tmpstring);
  2913. fwrite(File, "Instructions:\r\n");
  2914. fwrite(File, "1 - compilar este arquivo usando o compilador fornecido com o pacote do servidor sa-mp.\r\n");
  2915. fwrite(File, "2 - Copie o arquivo amx para o diretório filterscripts..\r\n");
  2916. fwrite(File, "3- Adicione os filterscripts no arquivo server.cfg (more info here:\r\n");
  2917. fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2918. fwrite(File, "4-Execute o servidor!\r\n\r\n");
  2919. fwrite(File, "Disclaimer:\r\n");
  2920. fwrite(File, "Você tem direitos totais sobre este arquivo. Você pode distribuí-lo, modificá-lo e\r\n");
  2921. fwrite(File, "mudá-lo tanto quanto você quiser, sem ter que dar todos os créditos especiais.\r\n");
  2922. fwrite(File, "*/\r\n\r\n");
  2923. fwrite(File, "#include <a_samp>\r\n\r\n");
  2924. for(new i; i < MAX_TEXTDRAWS; i++)
  2925. {
  2926. if(tData[i][T_Created])
  2927. {
  2928. format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2929. fwrite(File, tmpstring);
  2930. }
  2931. }
  2932. fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2933. fwrite(File, "{\r\n");
  2934. fwrite(File, " print(\"Textdraw file generated by\");\r\n");
  2935. fwrite(File, " print(\" Zamaroht's textdraw editor foi carregado.\");\r\n\r\n");
  2936. fwrite(File, " // Create the textdraws:\r\n");
  2937. for(new i; i < MAX_TEXTDRAWS; i++)
  2938. {
  2939. if(tData[i][T_Created])
  2940. {
  2941. format(tmpstring, sizeof(tmpstring), " Textdraw%d = TextDrawCreate(%f, %f, \"%s\");\r\n", i, tData[i][T_X], tData[i][T_Y], tData[i][T_Text]);
  2942. fwrite(File, tmpstring);
  2943. if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2944. {
  2945. format(tmpstring, sizeof(tmpstring), " TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2946. fwrite(File, tmpstring);
  2947. }
  2948. format(tmpstring, sizeof(tmpstring), " TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2949. fwrite(File, tmpstring);
  2950. format(tmpstring, sizeof(tmpstring), " TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2951. fwrite(File, tmpstring);
  2952. format(tmpstring, sizeof(tmpstring), " TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2953. fwrite(File, tmpstring);
  2954. format(tmpstring, sizeof(tmpstring), " TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2955. fwrite(File, tmpstring);
  2956. format(tmpstring, sizeof(tmpstring), " TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2957. fwrite(File, tmpstring);
  2958. format(tmpstring, sizeof(tmpstring), " TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2959. fwrite(File, tmpstring);
  2960. if(tData[i][T_Outline] == 0)
  2961. {
  2962. format(tmpstring, sizeof(tmpstring), " TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2963. fwrite(File, tmpstring);
  2964. }
  2965. if(tData[i][T_UseBox] == 1)
  2966. {
  2967. format(tmpstring, sizeof(tmpstring), " TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2968. fwrite(File, tmpstring);
  2969. format(tmpstring, sizeof(tmpstring), " TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2970. fwrite(File, tmpstring);
  2971. format(tmpstring, sizeof(tmpstring), " TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2972. fwrite(File, tmpstring);
  2973. }
  2974. fwrite(File, "\r\n");
  2975. }
  2976. }
  2977. fwrite(File, " return 1;\r\n");
  2978. fwrite(File, "}\r\n\r\n");
  2979. fwrite(File, "public OnFilterScriptExit()\r\n");
  2980. fwrite(File, "{\r\n");
  2981. for(new i; i < MAX_TEXTDRAWS; i ++)
  2982. {
  2983. if(tData[i][T_Created])
  2984. {
  2985. format(tmpstring, sizeof(tmpstring), " TextDrawHideForAll(Textdraw%d);\r\n", i);
  2986. fwrite(File, tmpstring);
  2987. format(tmpstring, sizeof(tmpstring), " TextDrawDestroy(Textdraw%d);\r\n", i);
  2988. fwrite(File, tmpstring);
  2989. }
  2990. }
  2991. fwrite(File, " return 1;\r\n");
  2992. fwrite(File, "}\r\n\r\n");
  2993. fwrite(File, "public OnPlayerDeath(playerid, killerid, reason)\r\n");
  2994. fwrite(File, "{\r\n");
  2995. for(new i; i < MAX_TEXTDRAWS; i ++)
  2996. {
  2997. if(tData[i][T_Created])
  2998. {
  2999. format(tmpstring, sizeof(tmpstring), " TextDrawShowForPlayer(killerid, Textdraw%d);\r\n", i);
  3000. fwrite(File, tmpstring);
  3001. }
  3002. }
  3003. format(tmpstring, sizeof(tmpstring), " SetTimerEx(\"HideMessage\", %d, 0, \"i\", killerid);\r\n", pData[playerid][P_Aux]*1000);
  3004. fwrite(File, tmpstring);
  3005. fwrite(File, "}\r\n\r\n");
  3006. fwrite(File, "forward HideMessage(playerid);\r\n");
  3007. fwrite(File, "public HideMessage(playerid)\r\n");
  3008. fwrite(File, "{\r\n");
  3009. for(new i; i < MAX_TEXTDRAWS; i ++)
  3010. {
  3011. if(tData[i][T_Created])
  3012. {
  3013. format(tmpstring, sizeof(tmpstring), " TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  3014. fwrite(File, tmpstring);
  3015. }
  3016. }
  3017. fwrite(File, "}");
  3018.  
  3019. format(tmpstring, sizeof(tmpstring), "Project exported to %s.pwn in scriptfiles directory as a filterscript.", CurrentProject);
  3020. SendClientMessage(playerid, MSG_COLOR, tmpstring);
  3021. }
  3022. }
  3023. fclose(File);
  3024.  
  3025. ShowTextDrawDialog(playerid, 4);
  3026. }
  3027. CMD:texto(playerid)
  3028. {
  3029. if(pData[playerid][P_Editing]) return SendClientMessage(playerid, MSG_COLOR, "[ERROR] Termine a edição atual antes de usar /texto!");
  3030. else if(!strlen(CurrentProject) || !strcmp(CurrentProject, " "))
  3031. {
  3032. if(IsPlayerMinID(playerid))
  3033. {
  3034. ShowTextDrawDialog(playerid, 0);
  3035. pData[playerid][P_Editing] = true;
  3036. }
  3037. else
  3038. SendClientMessage(playerid, MSG_COLOR, "apenas o jogador menor ID pode gerenciar projetos. Peça-lhe para abrir uma.");
  3039. return 1;
  3040. }
  3041. else
  3042. {
  3043. ShowTextDrawDialog(playerid, 4, 0);
  3044. pData[playerid][P_Editing] = true;
  3045. return 1;
  3046. }
  3047. }
  3048. // ================================================================================================================================
  3049. // -------------------------------------------------------- AUXILIAR FUNCTIONS ----------------------------------------------------
  3050. // ================================================================================================================================
  3051.  
  3052.  
  3053. stock GetFileNameFromLst( file[], line )
  3054. {
  3055. /* Returns the line in the specified line of the specified file.
  3056. @file[]: File to return the line from.
  3057. @line: Line number to return.
  3058. */
  3059. new string[150];
  3060.  
  3061. new CurrLine,
  3062. File:Handler = fopen(file, io_read);
  3063.  
  3064. if(line >= 0 && CurrLine != line)
  3065. {
  3066. while(CurrLine != line)
  3067. {
  3068. fread(Handler, string);
  3069. CurrLine ++;
  3070. }
  3071. }
  3072.  
  3073. // Read the next line, which is the asked one.
  3074. fread(Handler, string);
  3075. fclose(Handler);
  3076.  
  3077. // Cut the last two characters (\n)
  3078. strmid(string, string, 0, strlen(string) - 2, 150);
  3079.  
  3080. return string;
  3081. }
  3082.  
  3083. stock DeleteLineFromFile( file[], line )
  3084. {
  3085. /* Deletes a specific line from a specific file.
  3086. @file[]: File to delete the line from.
  3087. @line: Line number to delete.
  3088. */
  3089.  
  3090. if(line < 0) return false;
  3091.  
  3092. new tmpfile[140];
  3093. format(tmpfile, sizeof(tmpfile), "%s.tmp", file);
  3094. fcopytextfile(file, tmpfile);
  3095. // Copied to a temp file, now parse it back.
  3096.  
  3097. new CurrLine,
  3098. File:FileFrom = fopen(tmpfile, io_read),
  3099. File:FileTo = fopen(file, io_write);
  3100.  
  3101. new tmpstring[200];
  3102. if(CurrLine != line)
  3103. {
  3104. while(CurrLine != line)
  3105. {
  3106. fread(FileFrom, tmpstring);
  3107. fwrite(FileTo, tmpstring);
  3108. CurrLine ++;
  3109. }
  3110. }
  3111.  
  3112. // Skip a line
  3113. fread(FileFrom, tmpstring);
  3114.  
  3115. // Write the rest
  3116. while(fread(FileFrom, tmpstring))
  3117. {
  3118. fwrite(FileTo, tmpstring);
  3119. }
  3120.  
  3121. fclose(FileTo);
  3122. fclose(FileFrom);
  3123. // Remove tmp file.
  3124. fremove(tmpfile);
  3125. return true;
  3126. }
  3127.  
  3128. /** BY DRACOBLUE
  3129. * Strips Newline from the end of a string.
  3130. * Idea: Y_Less, Bugfixing (when length=1) by DracoBlue
  3131. * @param string
  3132. */
  3133. stock StripNewLine(string[])
  3134. {
  3135. new len = strlen(string);
  3136. if (string[0]==0) return ;
  3137. if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
  3138. string[len - 1] = 0;
  3139. if (string[0]==0) return ;
  3140. if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
  3141. }
  3142. }
  3143.  
  3144. /** BY DRACOBLUE
  3145. * Copies a textfile (Source file won't be deleted!)
  3146. * @param oldname
  3147. * newname
  3148. */
  3149. stock fcopytextfile(oldname[],newname[]) {
  3150. new File:ohnd,File:nhnd;
  3151. if (!fexist(oldname)) return false;
  3152. ohnd=fopen(oldname,io_read);
  3153. nhnd=fopen(newname,io_write);
  3154. new tmpres[256];
  3155. while (fread(ohnd,tmpres)) {
  3156. StripNewLine(tmpres);
  3157. format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
  3158. fwrite(nhnd,tmpres);
  3159. }
  3160. fclose(ohnd);
  3161. fclose(nhnd);
  3162. return true;
  3163. }
  3164.  
  3165. stock RGB( red, green, blue, alpha )
  3166. {
  3167. /* Combines a color and returns it, so it can be used in functions.
  3168. @red: Amount of red color.
  3169. @green: Amount of green color.
  3170. @blue: Amount of blue color.
  3171. @alpha: Amount of alpha transparency.
  3172.  
  3173. -Returns:
  3174. A integer with the combined color.
  3175. */
  3176. return (red * 16777216) + (green * 65536) + (blue * 256) + alpha;
  3177. }
  3178.  
  3179. IsNumeric2(const string[])
  3180. {
  3181. // Is Numeric Check 2
  3182. // ------------------
  3183. // By DracoBlue... handles negative numbers
  3184.  
  3185. new length=strlen(string);
  3186. if (length==0) return false;
  3187. for (new i = 0; i < length; i++)
  3188. {
  3189. if((string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+' && string[i]!='.') // Not a number,'+' or '-' or '.'
  3190. || (string[i]=='-' && i!=0) // A '-' but not first char.
  3191. || (string[i]=='+' && i!=0) // A '+' but not first char.
  3192. ) return false;
  3193. }
  3194. if (length==1 && (string[0]=='-' || string[0]=='+' || string[0]=='.')) return false;
  3195. return true;
  3196. }
  3197.  
  3198. /** BY DRACOBLUE
  3199. * Return the value of an hex-string
  3200. * @param string
  3201. */
  3202. stock HexToInt(string[]) {
  3203. if (string[0]==0) return 0;
  3204. new i;
  3205. new cur=1;
  3206. new res=0;
  3207. for (i=strlen(string);i>0;i--) {
  3208. if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  3209. cur=cur*16;
  3210. }
  3211. return res;
  3212. }
  3213.  
  3214. stock IsPlayerMinID(playerid)
  3215. {
  3216. /* Checks if the player is the minumum ID in the server.
  3217. @playerid: ID to check.
  3218.  
  3219. -Returns:
  3220. true if he is, false if he isn't.
  3221. */
  3222. for(new i; i < playerid; i ++)
  3223. {
  3224. if(IsPlayerConnected(i))
  3225. {
  3226. if(IsPlayerNPC(i)) continue;
  3227. else return false;
  3228. }
  3229. }
  3230. return true;
  3231. }
  3232. // ================================================================================================================================
  3233. // ----------------------------------------------------- END OF AUXULIAR FUNCTIONS ------------------------------------------------
  3234. // ================================================================================================================================
  3235.  
  3236. // EOF
Add Comment
Please, Sign In to add comment