Advertisement
Kar

TextDraw Editor Version v3.1

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