Advertisement
Smoke-Luca

sas

Jun 29th, 2014
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 130.40 KB | None | 0 0
  1. // Inicio del archivo
  2. /*
  3. Zamaroht's TextDraw Editor Version 1.0RC2.
  4. Diseñado para SA-MP 0.3.
  5. Versión en español.
  6.  
  7. Autor: Zamaroht (Nicolás Laurito)
  8.  
  9. Inicio del Desarrollo: 25 Diciembre 2009, 22:16 (GMT-3)
  10. Fin del Desarrollo: 01 Enero 2010, 23:31 (GMT-3)
  11. Fin de la Traducción: 03 Enero 2010, 15:19 (GMT-3)
  12.  
  13. Licencia:
  14. Puedes redistribuir este archivo como quieras, pero SIEMPRE manteniento el
  15. nombre del autor y un link de regreso a
  16. http://forum.sa-mp.com/index.php?topic=143025.0 junto con el medio de
  17. distrubución.
  18. Por ejemplo, el link con el nombre del autór en un hilo de un foro público, o
  19. un archivo README por separado en un archivo .zip, etc.
  20. Si modificas este archivo, los mismos términos se aplican. Tienes que incluir
  21. el autor original (Zamaroht) y un link de regreso a la página mencionada.
  22. */
  23.  
  24. #include <a_samp>
  25. #include <Dini>
  26.  
  27. // =============================================================================
  28. // Declaraciones Internas.
  29. // =============================================================================
  30.  
  31. #define MAX_TEXTDRAWS       90          // La cantidad máxima en la pantalla del cliente es de 92. Usamos 90 para estar seguros.
  32. #define MSG_COLOR           0xFAF0CEFF  // Color en que se muestran los mensajes.
  33. #define PREVIEW_CHARS       35          // Cantidad de carácteres que se pueden llegar a mostrar en la preview del textdraw.
  34.  
  35.  
  36. // Usado con P_Aux
  37. #define DELETING 0
  38. #define LOADING 1
  39.  
  40. // Usado con P_KeyEdition
  41. #define EDIT_NONE       0
  42. #define EDIT_POSITION   1
  43. #define EDIT_SIZE       2
  44. #define EDIT_BOX        3
  45.  
  46. // Usado con P_ColorEdition
  47. #define COLOR_TEXT      0
  48. #define COLOR_OUTLINE   1
  49. #define COLOR_BOX       2
  50.  
  51. enum enum_tData // Datos de los textdraws.
  52. {
  53.     bool:T_Created,         // Si el textdraw está creado o no.
  54.     Text:T_Handler,         // Donde el textdraw está guardado.
  55.     T_Text[1024],           // El texto del textdraw.
  56.     Float:T_X,
  57.     Float:T_Y,
  58.     T_Alignment,
  59.     T_BackColor,
  60.     T_BoxColor,
  61.     T_Color,
  62.     T_Font,
  63.     Float:T_XSize,
  64.     Float:T_YSize,
  65.     T_Outline,
  66.     T_Proportional,
  67.     T_Shadow,
  68.     Float:T_TextSizeX,
  69.     Float:T_TextSizeY,
  70.     T_UseBox
  71. };
  72.  
  73. enum enum_pData // Datos del jugador.
  74. {
  75.     bool:P_Editing,         // Si el jugador está editando o no en el momento (permitir /text).
  76.     P_DialogPage,           // Página del menu de selección de textdraw en la que se encuentran.
  77.     P_CurrentTextdraw,      // Textdraw ID que está siendo editada en el momento.
  78.     P_CurrentMenu,          // Solo usado al comiendo, para saber si el jugador esta LOADING o DELETING.
  79.     P_KeyEdition,           // Usado para saber que edición se está haciendo con teclado. Revisar #defines.
  80.     P_Aux,                  // Variable auxiliar. Usada como temporal en varios casos.
  81.     P_ColorEdition,         // Usada para saber a QUE le está cambiando el color el jugador. Revisar #defines.
  82.     P_Color[4],             // Contiene RGBA cuando se usa el combinador de colores.
  83.     P_ExpCommand[128],      // Cntiene temporalmente el comando que será usado en un filterscript autogenerado en modo comando.
  84.     P_Aux2                  // Solo usado en algunos casos especiales de export.
  85. };
  86.  
  87. new tData[MAX_TEXTDRAWS][enum_tData],
  88.     pData[MAX_PLAYERS][enum_pData];
  89.    
  90. new CurrentProject[128];  // Strint que contiene donde se ecuentra el archivo actualmente abierto.
  91.  
  92. // =============================================================================
  93. // Callbacks.
  94. // =============================================================================
  95.  
  96. public OnFilterScriptInit()
  97. {
  98.     print("\n--------------------------------------");
  99.     print(" Text Draw Editor 1.0RC2 por Zamaroht para SA-MP 0.3 Cargado.");
  100.     print(" -- Versión en español.");
  101.     print("--------------------------------------\n");
  102.     for(new i; i < MAX_PLAYERS; i ++) if(IsPlayerConnected(i)) ResetPlayerVars(i);
  103.     for(new i; i < MAX_TEXTDRAWS; i ++)
  104.     {
  105.         tData[i][T_Handler] = TextDrawCreate(0.0, 0.0, " ");
  106.     }
  107.     return 1;
  108. }
  109.  
  110. public OnFilterScriptExit()
  111. {
  112.     for(new i; i < MAX_TEXTDRAWS; i ++)
  113.     {
  114.         TextDrawHideForAll(tData[i][T_Handler]);
  115.         TextDrawDestroy(tData[i][T_Handler]);
  116.     }
  117.     return 1;
  118. }
  119.  
  120. public OnPlayerConnect(playerid)
  121. {
  122.     for(new i; i < MAX_TEXTDRAWS; i ++)
  123.     {
  124.         if(tData[i][T_Created])
  125.             TextDrawShowForPlayer(playerid, tData[i][T_Handler]);
  126.     }
  127. }
  128.  
  129. public OnPlayerSpawn(playerid)
  130. {
  131.     SendClientMessage(playerid, MSG_COLOR, "Usar /text para mostrar el Menu de Edición.");
  132.    
  133.     return 1;
  134. }
  135.  
  136. public OnPlayerDisconnect(playerid, reason)
  137. {
  138.     ResetPlayerVars(playerid);
  139.     return 1;
  140. }
  141.  
  142. public OnPlayerCommandText(playerid, cmdtext[])
  143. {
  144.     if(!strcmp("/text", cmdtext))
  145.     {
  146.        
  147.         if(pData[playerid][P_Editing]) return SendClientMessage(playerid, MSG_COLOR, "[ERROR] Termina la edición actual antes de usar /text!");
  148.         else if(!strlen(CurrentProject) || !strcmp(CurrentProject, " "))
  149.         {
  150.             if(IsPlayerMinID(playerid))
  151.             {
  152.                 ShowTextDrawDialog(playerid, 0);
  153.                 pData[playerid][P_Editing] = true;
  154.             }
  155.             else
  156.                 SendClientMessage(playerid, MSG_COLOR, "Solo la ID menor del servidor puede manejar proyectos. Pídele que abra uno.");
  157.             return 1;
  158.         }
  159.         else
  160.         {
  161.             ShowTextDrawDialog(playerid, 4, 0);
  162.             pData[playerid][P_Editing] = true;
  163.             return 1;
  164.         }
  165.     }
  166.     return 0;
  167. }
  168.  
  169. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  170. {
  171.     if(response == 1)   PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0); // Sonido de confirmacion
  172.     else                PlayerPlaySound(playerid, 1084, 0.0, 0.0, 0.0); // Sonido de cancelacion
  173.    
  174.     switch(dialogid)
  175.     {
  176.         case 0: // Primer dialogo
  177.         {
  178.             if(response) // Si apreta aceptar
  179.             {
  180.                 strmid(CurrentProject, "", 0, 1, 128);
  181.                
  182.                 if(listitem == 0) // Apret nuevo proyecto
  183.                     ShowTextDrawDialog(playerid, 1);
  184.                 else if(listitem == 1) // Apret cargar proyecto
  185.                     ShowTextDrawDialog(playerid, 2, 1);
  186.                 else if(listitem == 2) // Apretó eliminar proyecto
  187.                     ShowTextDrawDialog(playerid, 2, 2);
  188.             }
  189.             else pData[playerid][P_Editing] = false;
  190.         }
  191.        
  192.         case 1: // Nuevo Project
  193.         {
  194.             if(response)
  195.             {
  196.                 if(strlen(inputtext) > 120) ShowTextDrawDialog(playerid, 1, 1); // Muy largo.
  197.                
  198.                 else if(
  199.                     strfind(inputtext, "/") != -1 || strfind(inputtext, "\\") != -1 ||
  200.                     strfind(inputtext, ":") != -1 || strfind(inputtext, "*") != -1 ||
  201.                     strfind(inputtext, "?") != -1 || strfind(inputtext, "\"") != -1 ||
  202.                     strfind(inputtext, "<") != -1 || strfind(inputtext, ">") != -1 ||
  203.                     strfind(inputtext, "|") != -1 || !strlen(inputtext) ||
  204.                     inputtext[0] == ' ' )
  205.                         ShowTextDrawDialog(playerid, 1, 3); // Caracteres ilegales
  206.                        
  207.                 else // Esta bien, crear nuevo archivo
  208.                 {
  209.                     new filename[128];
  210.                     format(filename, sizeof(filename), "%s.tde", inputtext);
  211.                     if(fexist(filename)) ShowTextDrawDialog(playerid, 1, 2); // Ya existe.
  212.                     else
  213.                     {
  214.                         CreateNewProject(filename);
  215.                         strmid(CurrentProject, filename, 0, strlen(inputtext), 128);
  216.                        
  217.                         new tmpstr[128];
  218.                         format(tmpstr, sizeof(tmpstr), "You are now working on the '%s' project.", filename);
  219.                         SendClientMessage(playerid, MSG_COLOR, tmpstr);
  220.                        
  221.                         ShowTextDrawDialog(playerid, 4); // Mostrar el menu principal de edicion
  222.                     }
  223.                 }
  224.             }
  225.             else
  226.                 ShowTextDrawDialog(playerid, 0);
  227.         }
  228.        
  229.         case 2: // Cargar/Eliminar proyecto
  230.         {
  231.             if(response)
  232.             {
  233.                 if(listitem == 0) // Nombre de archivo especifico
  234.                 {
  235.                     if(pData[playerid][P_CurrentMenu] == LOADING)       ShowTextDrawDialog(playerid, 3);
  236.                     else if(pData[playerid][P_CurrentMenu] == DELETING) ShowTextDrawDialog(playerid, 0);
  237.                 }
  238.                 else
  239.                 {
  240.                     if(pData[playerid][P_CurrentMenu] == DELETING)
  241.                     {
  242.                         pData[playerid][P_Aux] = listitem - 1;
  243.                         ShowTextDrawDialog(playerid, 6);
  244.                     }
  245.                     else if(pData[playerid][P_CurrentMenu] == LOADING)
  246.                     {
  247.                         new filename[135];
  248.                         format(filename, sizeof(filename), "%s", GetFileNameFromLst("tdlist.lst", listitem - 1));
  249.                         LoadProject(playerid, filename);
  250.                     }
  251.                 }
  252.             }
  253.             else
  254.                 ShowTextDrawDialog(playerid, 0);
  255.         }
  256.        
  257.         case 3: // Cargar proyecto especifico
  258.         {
  259.             if(response)
  260.             {
  261.                 new ending[5];
  262.                 strmid(ending, inputtext, strlen(inputtext) - 4, strlen(inputtext));
  263.                 if(strcmp(ending, ".tde") != 0)
  264.                 {
  265.                     new filename[128];
  266.                     format(filename, sizeof(filename), "%s.tde", inputtext);
  267.                     LoadProject(playerid, filename);
  268.                 }
  269.                 else LoadProject(playerid, inputtext);
  270.             }
  271.             else
  272.             {
  273.                 if(pData[playerid][P_CurrentMenu] == DELETING)      ShowTextDrawDialog(playerid, 2, 2);
  274.                 else if(pData[playerid][P_CurrentMenu] == LOADING)  ShowTextDrawDialog(playerid, 2);
  275.             }
  276.         }
  277.        
  278.         case 4: // Seleccion de textdraw
  279.         {
  280.             if(response)
  281.             {
  282.                 if(listitem == 0) // Seleccionaron nuevo TD
  283.                 {
  284.                     pData[playerid][P_CurrentTextdraw] = -1;
  285.                     for(new i; i < MAX_TEXTDRAWS; i++)
  286.                     {
  287.                         if(!tData[i][T_Created]) // Si todavia no esta creado, usarlo.
  288.                         {
  289.                             ClearTextdraw(i);
  290.                             CreateDefaultTextdraw(i);
  291.                             pData[playerid][P_CurrentTextdraw] = i;
  292.                             ShowTextDrawDialog(playerid, 4, pData[playerid][P_DialogPage]);
  293.                             break;
  294.                         }
  295.                     }
  296.                     if(pData[playerid][P_CurrentTextdraw] == -1)
  297.                     {
  298.                         SendClientMessage(playerid, MSG_COLOR, "No puedes crear más textdraws!");
  299.                         ShowTextDrawDialog(playerid, 4, pData[playerid][P_DialogPage]);
  300.                     }
  301.                     else
  302.                     {
  303.                         new string[128];
  304.                         format(string, sizeof(string), "Textdraw #%d exitosamente creado.", pData[playerid][P_CurrentTextdraw]);
  305.                         SendClientMessage(playerid, MSG_COLOR, string);
  306.                     }
  307.                 }
  308.                 else if(listitem == 1) // Eligieron exportar
  309.                 {
  310.                     ShowTextDrawDialog(playerid, 25);
  311.                 }
  312.                 else if(listitem == 2) // Eligieron cerrar proyecto
  313.                 {
  314.                     if(IsPlayerMinID(playerid))
  315.                     {
  316.                         for(new i; i < MAX_TEXTDRAWS; i ++)
  317.                         {
  318.                             ClearTextdraw(i);
  319.                         }
  320.  
  321.                         new string[128];
  322.                         format(string, sizeof(string), "Proyecto '%s' cerrado.", CurrentProject);
  323.                         SendClientMessage(playerid, MSG_COLOR, string);
  324.  
  325.                         strmid(CurrentProject, " ", 128, 128);
  326.                         ShowTextDrawDialog(playerid, 0);
  327.                     }
  328.                     else
  329.                     {
  330.                         SendClientMessage(playerid, MSG_COLOR, "Solo la ID menor del servidor puede manejar proyectos. Pídele que abra uno.");
  331.                         ShowTextDrawDialog(playerid, 4);
  332.                     }
  333.                 }
  334.                 else if(listitem <= 10) // Seleccionaron un TD
  335.                 {
  336.                     new id = 3;
  337.                     for(new i = pData[playerid][P_DialogPage]; i < MAX_TEXTDRAWS; i ++)
  338.                     {
  339.                         if(tData[i][T_Created])
  340.                         {
  341.                             if(id == listitem)
  342.                             {
  343.                                 // Lo encontramos
  344.                                 pData[playerid][P_CurrentTextdraw] = i;
  345.                                 ShowTextDrawDialog(playerid, 5);
  346.                                 break;
  347.                             }
  348.                             id ++;
  349.                         }
  350.                     }
  351.                     new string[128];
  352.                     format(string, sizeof(string), "Ahora estás editando el textdraw #%d", pData[playerid][P_CurrentTextdraw]);
  353.                     SendClientMessage(playerid, MSG_COLOR, string);
  354.                 }
  355.                 else
  356.                 {
  357.                     new BiggestID, itemcount;
  358.                     for(new i = pData[playerid][P_DialogPage]; i < MAX_TEXTDRAWS; i ++)
  359.                     {
  360.                         if(tData[i][T_Created])
  361.                         {
  362.                             itemcount ++;
  363.                             BiggestID = i;
  364.                             if(itemcount == 9) break;
  365.                         }
  366.                     }
  367.                     ShowTextDrawDialog(playerid, 4, BiggestID);
  368.                 }
  369.             }
  370.             else
  371.             {
  372.                 pData[playerid][P_Editing] = false;
  373.                 pData[playerid][P_DialogPage] = 0;
  374.             }
  375.         }
  376.        
  377.         case 5: // Menu principal de edicion
  378.         {
  379.             if(response)
  380.             {
  381.                 switch(listitem)
  382.                 {
  383.                     case 0: // Cambiar texto
  384.                     {
  385.                         ShowTextDrawDialog(playerid, 8);
  386.                     }
  387.                     case 1: // Cambiar posicion
  388.                     {
  389.                         ShowTextDrawDialog(playerid, 9);
  390.                     }
  391.                     case 2: // Cambiar alineacion
  392.                     {
  393.                         ShowTextDrawDialog(playerid, 11);
  394.                     }
  395.                     case 3: // Cambiar color de fuente
  396.                     {
  397.                         pData[playerid][P_ColorEdition] = COLOR_TEXT;
  398.                         ShowTextDrawDialog(playerid, 13);
  399.                     }
  400.                     case 4: // Cambiar fuente
  401.                     {
  402.                         ShowTextDrawDialog(playerid, 17);
  403.                     }
  404.                     case 5: // Cambiar proporcionalidad
  405.                     {
  406.                         ShowTextDrawDialog(playerid, 12);
  407.                     }
  408.                     case 6: // Cambiar tamaño de letra
  409.                     {
  410.                         ShowTextDrawDialog(playerid, 18);
  411.                     }
  412.                     case 7: // Editar contorno
  413.                     {
  414.                         ShowTextDrawDialog(playerid, 20);
  415.                     }
  416.                     case 8: // Editar box
  417.                     {
  418.                         if(tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] == 0)        ShowTextDrawDialog(playerid, 23);
  419.                         else if(tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] == 1)   ShowTextDrawDialog(playerid, 24);
  420.                     }
  421.                     case 9: // Duplicar textdraw
  422.                     {
  423.                         new from, to;
  424.                         for(new i; i < MAX_TEXTDRAWS; i++)
  425.                         {
  426.                             if(!tData[i][T_Created]) // Si no ha sido creado, usarlo
  427.                             {
  428.                                 ClearTextdraw(i);
  429.                                 CreateDefaultTextdraw(i);
  430.                                 from = pData[playerid][P_CurrentTextdraw];
  431.                                 to = i;
  432.                                 DuplicateTextdraw(pData[playerid][P_CurrentTextdraw], i);
  433.                                 pData[playerid][P_CurrentTextdraw] = -1;
  434.                                 ShowTextDrawDialog(playerid, 4);
  435.                                 break;
  436.                             }
  437.                         }
  438.                         if(pData[playerid][P_CurrentTextdraw] != -1)
  439.                         {
  440.                             SendClientMessage(playerid, MSG_COLOR, "No puedes crear más textdraws!");
  441.                             ShowTextDrawDialog(playerid, 5);
  442.                         }
  443.                         else
  444.                         {
  445.                             new string[128];
  446.                             format(string, sizeof(string), "Textdraw #%d exitosamente copiado a Textdraw #%d.", from, to);
  447.                             SendClientMessage(playerid, MSG_COLOR, string);
  448.                         }
  449.                     }
  450.                     case 10: // Eliminar textdraw
  451.                     {
  452.                         ShowTextDrawDialog(playerid, 7);
  453.                     }
  454.                 }
  455.             }
  456.             else
  457.             {
  458.                 ShowTextDrawDialog(playerid, 4, 0);
  459.             }
  460.         }
  461.        
  462.         case 6: // Confirmacion: eliminar proyecto
  463.         {
  464.             if(response)
  465.             {
  466.                 new filename[128];
  467.                 format(filename, sizeof(filename), "%s", GetFileNameFromLst("tdlist.lst", pData[playerid][P_Aux]));
  468.                 fremove(filename);
  469.                 DeleteLineFromFile("tdlist.lst", pData[playerid][P_Aux]);
  470.                
  471.                 format(filename, sizeof(filename), "El proyecto guardado como '%s' ha sido borrado.", filename);
  472.                 SendClientMessage(playerid, MSG_COLOR, filename);
  473.                
  474.                 ShowTextDrawDialog(playerid, 0);
  475.             }
  476.             else
  477.             {
  478.                 ShowTextDrawDialog(playerid, 0);
  479.             }
  480.         }
  481.        
  482.         case 7: // Confirmacion: Eliminar TD
  483.         {
  484.             if(response)
  485.             {
  486.                 DeleteTDFromFile(pData[playerid][P_CurrentTextdraw]);
  487.                 ClearTextdraw(pData[playerid][P_CurrentTextdraw]);
  488.                
  489.                 new string[128];
  490.                 format(string, sizeof(string), "Eliminaste el textdraw #%d", pData[playerid][P_CurrentTextdraw]);
  491.                 SendClientMessage(playerid, MSG_COLOR, string);
  492.                
  493.                 pData[playerid][P_CurrentTextdraw] = 0;
  494.                 ShowTextDrawDialog(playerid, 4);
  495.             }
  496.             else
  497.             {
  498.                 ShowTextDrawDialog(playerid, 5);
  499.             }
  500.         }
  501.        
  502.         case 8: // Cambiar texto del textdraw
  503.         {
  504.             if(response)
  505.             {
  506.                 if(!strlen(inputtext)) ShowTextDrawDialog(playerid, 8);
  507.                 else
  508.                 {
  509.                     format(tData[pData[playerid][P_CurrentTextdraw]][T_Text], 1024, "%s", inputtext);
  510.                     UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  511.                     SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Text");
  512.                     ShowTextDrawDialog(playerid, 5);
  513.                 }
  514.             }
  515.             else
  516.             {
  517.                 ShowTextDrawDialog(playerid, 5);
  518.             }
  519.         }
  520.        
  521.         case 9: // Cambiar posicion del textdraw: Exacta o mover
  522.         {
  523.             if(response)
  524.             {
  525.                 switch(listitem)
  526.                 {
  527.                     case 0: // Posicion exacta
  528.                     {
  529.                         pData[playerid][P_Aux] = 0;
  530.                         ShowTextDrawDialog(playerid, 10, 0, 0);
  531.                     }
  532.                     case 1: // Moverlo
  533.                     {
  534.                         new string[512];
  535.                         string = "~n~~n~~n~~n~~n~~n~~n~~n~~w~";
  536.                         if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~, ~k~~GO_RIGHT~~n~", string);
  537.                         else                                format(string, sizeof(string), "%s~k~~VEHICLE_STEERUP~, ~k~~VEHICLE_STEERDOWN~, ~k~~VEHICLE_STEERLEFT~, ~k~~VEHICLE_STEERRIGHT~~n~", string);
  538.                         format(string, sizeof(string), "%sy ~k~~PED_SPRINT~ para mover. ", string);
  539.                         if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~VEHICLE_ENTER_EXIT~", string);
  540.                         else                                format(string, sizeof(string), "%s~k~~VEHICLE_FIREWEAPON_ALT~", string);
  541.                         format(string, sizeof(string), "%s para terminar.~n~", string);
  542.                        
  543.                         GameTextForPlayer(playerid, string, 9999999, 3);
  544.                         SendClientMessage(playerid, MSG_COLOR, "Usa [arriba], [abajo], [izq] y [der] para actualizar. [correr] para acelerar y [entrar coche] para terminar.");
  545.                        
  546.                         TogglePlayerControllable(playerid, 0);
  547.                         pData[playerid][P_KeyEdition] = EDIT_POSITION;
  548.                         SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  549.                     }
  550.                 }
  551.             }
  552.             else
  553.             {
  554.                 ShowTextDrawDialog(playerid, 5);
  555.             }
  556.         }
  557.        
  558.         case 10: // Cambiar posición a mano
  559.         {
  560.             if(response)
  561.             {
  562.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 10, pData[playerid][P_Aux], 1);
  563.                 else
  564.                 {
  565.                     if(pData[playerid][P_Aux] == 0) // Si editó X
  566.                     {
  567.                         tData[pData[playerid][P_CurrentTextdraw]][T_X] = floatstr(inputtext);
  568.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  569.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_X");
  570.                         ShowTextDrawDialog(playerid, 10, 1, 0);
  571.                     }
  572.                     else if(pData[playerid][P_Aux] == 1) // Si editó Y
  573.                     {
  574.                         tData[pData[playerid][P_CurrentTextdraw]][T_Y] = floatstr(inputtext);
  575.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  576.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Y");
  577.                         ShowTextDrawDialog(playerid, 5);
  578.                        
  579.                         SendClientMessage(playerid, MSG_COLOR, "Textdraw exitosamente movido.");
  580.                     }
  581.                 }
  582.             }
  583.             else
  584.             {
  585.                 if(pData[playerid][P_Aux] == 1) // Si estaba editando Y, moverlo a X
  586.                 {
  587.                     pData[playerid][P_Aux] = 0;
  588.                     ShowTextDrawDialog(playerid, 10, 0, 0);
  589.                 }
  590.                 else // Si estaba editando X, moverlo al menu de seleccion
  591.                 {
  592.                     ShowTextDrawDialog(playerid, 9);
  593.                 }
  594.             }
  595.         }
  596.        
  597.         case 11: // Cambiar alineacion
  598.         {
  599.             if(response)
  600.             {
  601.                 tData[pData[playerid][P_CurrentTextdraw]][T_Alignment] = listitem+1;
  602.                 UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  603.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Alignment");
  604.                
  605.                 new string[128];
  606.                 format(string, sizeof(string), "Alineación del Textdraw #%d cambiada a %d.", pData[playerid][P_CurrentTextdraw], listitem+1);
  607.                 SendClientMessage(playerid, MSG_COLOR, string);
  608.                
  609.                 ShowTextDrawDialog(playerid, 5);
  610.             }
  611.             else
  612.             {
  613.                 ShowTextDrawDialog(playerid, 5);
  614.             }
  615.         }
  616.        
  617.         case 12: // Cambiar proporcionalidad del textdraw
  618.         {
  619.             if(response)
  620.             {
  621.                 tData[pData[playerid][P_CurrentTextdraw]][T_Proportional] = listitem;
  622.                 UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  623.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Proportional");
  624.  
  625.                 new string[128];
  626.                 format(string, sizeof(string), "Proporcionalidad del Textdraw #%d cambiada a %d.", pData[playerid][P_CurrentTextdraw], listitem);
  627.                 SendClientMessage(playerid, MSG_COLOR, string);
  628.  
  629.                 ShowTextDrawDialog(playerid, 5);
  630.             }
  631.             else
  632.             {
  633.                 ShowTextDrawDialog(playerid, 5);
  634.             }
  635.         }
  636.        
  637.         case 13: // Cambiar color
  638.         {
  639.             if(response)
  640.             {
  641.                 switch(listitem)
  642.                 {
  643.                     case 0: // Escribir hex
  644.                     {
  645.                         ShowTextDrawDialog(playerid, 14);
  646.                     }
  647.                     case 1: // Combinador de colores
  648.                     {
  649.                         ShowTextDrawDialog(playerid, 15, 0, 0);
  650.                     }
  651.                     case 2: // Color prehecho
  652.                     {
  653.                         ShowTextDrawDialog(playerid, 16);
  654.                     }
  655.                 }
  656.             }
  657.             else
  658.             {
  659.                 if(pData[playerid][P_ColorEdition] == COLOR_TEXT)           ShowTextDrawDialog(playerid, 5);
  660.                 else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)   ShowTextDrawDialog(playerid, 20);
  661.                 else if(pData[playerid][P_ColorEdition] == COLOR_BOX)       ShowTextDrawDialog(playerid, 24);
  662.             }
  663.         }
  664.        
  665.         case 14: // Color del textdraw: hex
  666.         {
  667.             if(response)
  668.             {
  669.                 new red[3], green[3], blue[3], alpha[3];
  670.                
  671.                 if(inputtext[0] == '0' && inputtext[1] == 'x') // Esta usando el formato 0xFFFFFF
  672.                 {
  673.                     if(strlen(inputtext) != 8 && strlen(inputtext) != 10) return ShowTextDrawDialog(playerid, 14, 1);
  674.                     else
  675.                     {
  676.                         format(red, sizeof(red), "%c%c", inputtext[2], inputtext[3]);
  677.                         format(green, sizeof(green), "%c%c", inputtext[4], inputtext[5]);
  678.                         format(blue, sizeof(blue), "%c%c", inputtext[6], inputtext[7]);
  679.                         if(inputtext[8] != '\0')
  680.                             format(alpha, sizeof(alpha), "%c%c", inputtext[8], inputtext[9]);
  681.                         else
  682.                             alpha = "FF";
  683.                     }
  684.                 }
  685.                 else if(inputtext[0] == '#') // Esta usando el formato #FFFFFF
  686.                 {
  687.                     if(strlen(inputtext) != 7 && strlen(inputtext) != 9) return ShowTextDrawDialog(playerid, 14, 1);
  688.                     else
  689.                     {
  690.                         format(red, sizeof(red), "%c%c", inputtext[1], inputtext[2]);
  691.                         format(green, sizeof(green), "%c%c", inputtext[3], inputtext[4]);
  692.                         format(blue, sizeof(blue), "%c%c", inputtext[5], inputtext[6]);
  693.                         if(inputtext[7] != '\0')
  694.                             format(alpha, sizeof(alpha), "%c%c", inputtext[7], inputtext[8]);
  695.                         else
  696.                             alpha = "FF";
  697.                     }
  698.                 }
  699.                 else // Esta usando el formato FFFFFF
  700.                 {
  701.                     if(strlen(inputtext) != 6 && strlen(inputtext) != 8) return ShowTextDrawDialog(playerid, 14, 1);
  702.                     else
  703.                     {
  704.                         format(red, sizeof(red), "%c%c", inputtext[0], inputtext[1]);
  705.                         format(green, sizeof(green), "%c%c", inputtext[2], inputtext[3]);
  706.                         format(blue, sizeof(blue), "%c%c", inputtext[4], inputtext[5]);
  707.                         if(inputtext[6] != '\0')
  708.                             format(alpha, sizeof(alpha), "%c%c", inputtext[6], inputtext[7]);
  709.                         else
  710.                             alpha = "FF";
  711.                     }
  712.                 }
  713.                 // Tenemos el color
  714.                 if(pData[playerid][P_ColorEdition] == COLOR_TEXT)
  715.                     tData[pData[playerid][P_CurrentTextdraw]][T_Color] = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
  716.                 else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)
  717.                     tData[pData[playerid][P_CurrentTextdraw]][T_BackColor] = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
  718.                 else if(pData[playerid][P_ColorEdition] == COLOR_BOX)
  719.                     tData[pData[playerid][P_CurrentTextdraw]][T_BoxColor] = RGB(HexToInt(red), HexToInt(green), HexToInt(blue), HexToInt(alpha));
  720.                 UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  721.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Color");
  722.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BackColor");
  723.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BoxColor");
  724.                
  725.                 new string[128];
  726.                 format(string, sizeof(string), "Color del Textdraw #%d ha sido cambiado.", pData[playerid][P_CurrentTextdraw]);
  727.                 SendClientMessage(playerid, MSG_COLOR, string);
  728.  
  729.                 if(pData[playerid][P_ColorEdition] == COLOR_TEXT)           ShowTextDrawDialog(playerid, 5);
  730.                 else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)   ShowTextDrawDialog(playerid, 20);
  731.                 else if(pData[playerid][P_ColorEdition] == COLOR_BOX)       ShowTextDrawDialog(playerid, 24);
  732.             }
  733.             else
  734.             {
  735.                 ShowTextDrawDialog(playerid, 13);
  736.             }
  737.         }
  738.        
  739.         case 15: // Color de Textdraw: Combinador de colores
  740.         {
  741.             if(response)
  742.             {
  743.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 2);
  744.                 else if(strval(inputtext) < 0 || strval(inputtext) > 255) ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 1);
  745.                 else
  746.                 {
  747.                     pData[playerid][P_Color][pData[playerid][P_Aux]] = strval(inputtext);
  748.                    
  749.                     if(pData[playerid][P_Aux] == 3) // Terminó de editar alpha, por lo que ya tiene el resto
  750.                     {
  751.                         // Tenemos el color
  752.                         if(pData[playerid][P_ColorEdition] == COLOR_TEXT)
  753.                             tData[pData[playerid][P_CurrentTextdraw]][T_Color] = RGB(pData[playerid][P_Color][0], pData[playerid][P_Color][1], \
  754.                                                                                  pData[playerid][P_Color][2], pData[playerid][P_Color][3] );
  755.                         else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)
  756.                             tData[pData[playerid][P_CurrentTextdraw]][T_BackColor] = RGB(pData[playerid][P_Color][0], pData[playerid][P_Color][1], \
  757.                                                                                  pData[playerid][P_Color][2], pData[playerid][P_Color][3] );
  758.                         else if(pData[playerid][P_ColorEdition] == COLOR_BOX)
  759.                             tData[pData[playerid][P_CurrentTextdraw]][T_BoxColor] = RGB(pData[playerid][P_Color][0], pData[playerid][P_Color][1], \
  760.                                                                                  pData[playerid][P_Color][2], pData[playerid][P_Color][3] );
  761.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  762.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Color");
  763.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BackColor");
  764.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BoxColor");
  765.  
  766.                         new string[128];
  767.                         format(string, sizeof(string), "Color del Textdraw #%d ha sido cambiado.", pData[playerid][P_CurrentTextdraw]);
  768.                         SendClientMessage(playerid, MSG_COLOR, string);
  769.  
  770.                         if(pData[playerid][P_ColorEdition] == COLOR_TEXT)           ShowTextDrawDialog(playerid, 5);
  771.                         else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)   ShowTextDrawDialog(playerid, 20);
  772.                         else if(pData[playerid][P_ColorEdition] == COLOR_BOX)       ShowTextDrawDialog(playerid, 24);
  773.                     }
  774.                     else
  775.                     {
  776.                         pData[playerid][P_Aux] += 1;
  777.                         ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 0);
  778.                     }
  779.                 }
  780.             }
  781.             else
  782.             {
  783.                 if(pData[playerid][P_Aux] >= 1) // Si esta editando alpha, azul, etc.
  784.                 {
  785.                     pData[playerid][P_Aux] -= 1;
  786.                     ShowTextDrawDialog(playerid, 15, pData[playerid][P_Aux], 0);
  787.                 }
  788.                 else // Si editaba rojo, moverlo a seleccion de color menu.
  789.                 {
  790.                     ShowTextDrawDialog(playerid, 13);
  791.                 }
  792.             }
  793.         }
  794.        
  795.         case 16: // Color de Textdraw: colores prehechos
  796.         {
  797.             if(response)
  798.             {
  799.                 new col;
  800.                 switch(listitem)
  801.                 {
  802.                     case 0: col = 0xff0000ff;
  803.                     case 1: col = 0x00ff00ff;
  804.                     case 2: col = 0x0000ffff;
  805.                     case 3: col = 0xffff00ff;
  806.                     case 4: col = 0xff00ffff;
  807.                     case 5: col = 0x00ffffff;
  808.                     case 6: col = 0xffffffff;
  809.                     case 7: col = 0x000000ff;
  810.                 }
  811.                 if(pData[playerid][P_ColorEdition] == COLOR_TEXT)
  812.                     tData[pData[playerid][P_CurrentTextdraw]][T_Color] = col;
  813.                 else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)
  814.                     tData[pData[playerid][P_CurrentTextdraw]][T_BackColor] = col;
  815.                 else if(pData[playerid][P_ColorEdition] == COLOR_BOX)
  816.                     tData[pData[playerid][P_CurrentTextdraw]][T_BoxColor] = col;
  817.                 UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  818.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Color");
  819.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BackColor");
  820.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_BoxColor");
  821.  
  822.                 new string[128];
  823.                 format(string, sizeof(string), "Color del Textdraw #%d ha sido cambiado.", pData[playerid][P_CurrentTextdraw]);
  824.                 SendClientMessage(playerid, MSG_COLOR, string);
  825.                
  826.                 if(pData[playerid][P_ColorEdition] == COLOR_TEXT)           ShowTextDrawDialog(playerid, 5);
  827.                 else if(pData[playerid][P_ColorEdition] == COLOR_OUTLINE)   ShowTextDrawDialog(playerid, 20);
  828.                 else if(pData[playerid][P_ColorEdition] == COLOR_BOX)       ShowTextDrawDialog(playerid, 24);
  829.             }
  830.             else
  831.             {
  832.                 ShowTextDrawDialog(playerid, 13);
  833.             }
  834.         }
  835.        
  836.         case 17: // Cambiar fuente
  837.         {
  838.             if(response)
  839.             {
  840.                 tData[pData[playerid][P_CurrentTextdraw]][T_Font] = listitem;
  841.                 UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  842.                 SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Font");
  843.  
  844.                 new string[128];
  845.                 format(string, sizeof(string), "Fuente del Textdraw #%d cambiada a %d.", pData[playerid][P_CurrentTextdraw], listitem);
  846.                 SendClientMessage(playerid, MSG_COLOR, string);
  847.  
  848.                 ShowTextDrawDialog(playerid, 5);
  849.             }
  850.             else
  851.             {
  852.                 ShowTextDrawDialog(playerid, 5);
  853.             }
  854.         }
  855.        
  856.         case 18: // Cambiar tamaño de letra del textdraw: exacto o mover
  857.         {
  858.             if(response)
  859.             {
  860.                 switch(listitem)
  861.                 {
  862.                     case 0: // Tamaño exacto
  863.                     {
  864.                         pData[playerid][P_Aux] = 0;
  865.                         ShowTextDrawDialog(playerid, 19, 0, 0);
  866.                     }
  867.                     case 1: // Cambiar tamaño
  868.                     {
  869.                         new string[512];
  870.                         string = "~n~~n~~n~~n~~n~~n~~n~~n~~w~";
  871.                         if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~, ~k~~GO_RIGHT~~n~", string);
  872.                         else                                format(string, sizeof(string), "%s~k~~VEHICLE_STEERUP~, ~k~~VEHICLE_STEERDOWN~, ~k~~VEHICLE_STEERLEFT~, ~k~~VEHICLE_STEERRIGHT~~n~", string);
  873.                         format(string, sizeof(string), "%sy ~k~~PED_SPRINT~ para actualizar. ", string);
  874.                         if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~VEHICLE_ENTER_EXIT~", string);
  875.                         else                                format(string, sizeof(string), "%s~k~~VEHICLE_FIREWEAPON_ALT~", string);
  876.                         format(string, sizeof(string), "%s para terminar.~n~", string);
  877.  
  878.                         GameTextForPlayer(playerid, string, 9999999, 3);
  879.                         SendClientMessage(playerid, MSG_COLOR, "Usa [arriba], [abajo], [izq] y [der] para actualizar. [correr] para acelerar y [entrar coche] para terminar.");
  880.  
  881.                         TogglePlayerControllable(playerid, 0);
  882.                         pData[playerid][P_KeyEdition] = EDIT_SIZE;
  883.                         SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  884.                     }
  885.                 }
  886.             }
  887.             else
  888.             {
  889.                 ShowTextDrawDialog(playerid, 5);
  890.             }
  891.         }
  892.        
  893.         case 19: // Cambiar manualmente tamaño de letra
  894.         {
  895.             if(response)
  896.             {
  897.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 19, pData[playerid][P_Aux], 1);
  898.                 else
  899.                 {
  900.                     if(pData[playerid][P_Aux] == 0) // Si editó X
  901.                     {
  902.                         tData[pData[playerid][P_CurrentTextdraw]][T_XSize] = floatstr(inputtext);
  903.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  904.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_XSize");
  905.                         ShowTextDrawDialog(playerid, 19, 1, 0);
  906.                     }
  907.                     else if(pData[playerid][P_Aux] == 1) // Si editó Y
  908.                     {
  909.                         tData[pData[playerid][P_CurrentTextdraw]][T_YSize] = floatstr(inputtext);
  910.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  911.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_YSize");
  912.                         ShowTextDrawDialog(playerid, 5);
  913.  
  914.                         SendClientMessage(playerid, MSG_COLOR, "Tamaño exitosamente cambiado.");
  915.                     }
  916.                 }
  917.             }
  918.             else
  919.             {
  920.                 if(pData[playerid][P_Aux] == 1) // Si esta editando Y, moverlo a X
  921.                 {
  922.                     pData[playerid][P_Aux] = 0;
  923.                     ShowTextDrawDialog(playerid, 19, 0, 0);
  924.                 }
  925.                 else // Si estaba editando X, volver al menu de seleccion
  926.                 {
  927.                     ShowTextDrawDialog(playerid, 18);
  928.                 }
  929.             }
  930.         }
  931.        
  932.         case 20: // menu principal contorno
  933.         {
  934.             if(response)
  935.             {
  936.                 switch(listitem)
  937.                 {
  938.                     case 0: // Togglear contorno
  939.                     {
  940.                         if(tData[pData[playerid][P_CurrentTextdraw]][T_Outline])    tData[pData[playerid][P_CurrentTextdraw]][T_Outline] = 0;
  941.                         else                                                        tData[pData[playerid][P_CurrentTextdraw]][T_Outline] = 1;
  942.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  943.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Outline");
  944.                         ShowTextDrawDialog(playerid, 20);
  945.                        
  946.                         SendClientMessage(playerid, MSG_COLOR, "Contorno del textdraw cambiado.");
  947.                     }
  948.                     case 1: // Cambiar sombra
  949.                     {
  950.                         ShowTextDrawDialog(playerid, 21);
  951.                     }
  952.                     case 2: // Cambiar color
  953.                     {
  954.                         pData[playerid][P_ColorEdition] = COLOR_OUTLINE;
  955.                         ShowTextDrawDialog(playerid, 13);
  956.                     }
  957.                     case 3: // Terminar
  958.                     {
  959.                         SendClientMessage(playerid, MSG_COLOR, "Terminada edición del contorno.");
  960.                         ShowTextDrawDialog(playerid, 5);
  961.                     }
  962.                 }
  963.             }
  964.             else
  965.             {
  966.                 ShowTextDrawDialog(playerid, 5);
  967.             }
  968.         }
  969.        
  970.         case 21: // Sombra de contorno
  971.         {
  972.             if(response)
  973.             {
  974.                 if(listitem == 6) // Personalizado ha sido elegido
  975.                 {
  976.                     ShowTextDrawDialog(playerid, 22);
  977.                 }
  978.                 else
  979.                 {
  980.                     tData[pData[playerid][P_CurrentTextdraw]][T_Shadow] = listitem;
  981.                     UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  982.                     SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Shadow");
  983.                     ShowTextDrawDialog(playerid, 20);
  984.  
  985.                     new string[128];
  986.                     format(string, sizeof(string), "Sombra de contorno del Textdraw #%d's cambiada a %d.", pData[playerid][P_CurrentTextdraw], listitem);
  987.                     SendClientMessage(playerid, MSG_COLOR, string);
  988.                 }
  989.             }
  990.             else
  991.             {
  992.                 ShowTextDrawDialog(playerid, 20);
  993.             }
  994.         }
  995.        
  996.         case 22: // sombra de contorno personalizada
  997.         {
  998.             if(response)
  999.             {
  1000.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 22, 1);
  1001.                 else
  1002.                 {
  1003.                     tData[pData[playerid][P_CurrentTextdraw]][T_Shadow] = strval(inputtext);
  1004.                     UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1005.                     SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Shadow");
  1006.                     ShowTextDrawDialog(playerid, 20);
  1007.  
  1008.                     new string[128];
  1009.                     format(string, sizeof(string), "Sombre del contorno del Textdraw #%d's cambiada a %d.", pData[playerid][P_CurrentTextdraw], strval(inputtext));
  1010.                     SendClientMessage(playerid, MSG_COLOR, string);
  1011.                 }
  1012.             }
  1013.             else
  1014.             {
  1015.                 ShowTextDrawDialog(playerid, 21);
  1016.             }
  1017.         }
  1018.        
  1019.         case 23: // Box on - off
  1020.         {
  1021.             if(response)
  1022.             {
  1023.                 switch(listitem)
  1024.                 {
  1025.                     case 0: // Box encendida
  1026.                     {
  1027.                         tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] = 1;
  1028.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1029.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_UseBox");
  1030.  
  1031.                         SendClientMessage(playerid, MSG_COLOR, "Box del Textdraw activada. Procediendo a la edición...");
  1032.  
  1033.                         ShowTextDrawDialog(playerid, 24);
  1034.                     }
  1035.                     case 1: // La desactivo, nada mas que editar.
  1036.                     {
  1037.                         tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] = 0;
  1038.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1039.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_UseBox");
  1040.                        
  1041.                         SendClientMessage(playerid, MSG_COLOR, "Box del Textdraw desactivada.");
  1042.                        
  1043.                         ShowTextDrawDialog(playerid, 5);
  1044.                     }
  1045.                 }
  1046.             }
  1047.             else
  1048.             {
  1049.                 ShowTextDrawDialog(playerid, 5);
  1050.             }
  1051.         }
  1052.        
  1053.         case 24: // menu principal de box
  1054.         {
  1055.             if(response)
  1056.             {
  1057.                 switch(listitem)
  1058.                 {
  1059.                     case 0: // box apagada
  1060.                     {
  1061.                         tData[pData[playerid][P_CurrentTextdraw]][T_UseBox] = 0;
  1062.                         UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1063.                         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_UseBox");
  1064.  
  1065.                         SendClientMessage(playerid, MSG_COLOR, "Box del Textdraw desactivada.");
  1066.  
  1067.                         ShowTextDrawDialog(playerid, 23);
  1068.                     }
  1069.                     case 1: // tamaño de box
  1070.                     {
  1071.                         new string[512];
  1072.                         string = "~n~~n~~n~~n~~n~~n~~n~~n~~w~";
  1073.                         if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~, ~k~~GO_RIGHT~~n~", string);
  1074.                         else                                format(string, sizeof(string), "%s~k~~VEHICLE_STEERUP~, ~k~~VEHICLE_STEERDOWN~, ~k~~VEHICLE_STEERLEFT~, ~k~~VEHICLE_STEERRIGHT~~n~", string);
  1075.                         format(string, sizeof(string), "%sy ~k~~PED_SPRINT~ para actualizar. ", string);
  1076.                         if(!IsPlayerInAnyVehicle(playerid)) format(string, sizeof(string), "%s~k~~VEHICLE_ENTER_EXIT~", string);
  1077.                         else                                format(string, sizeof(string), "%s~k~~VEHICLE_FIREWEAPON_ALT~", string);
  1078.                         format(string, sizeof(string), "%s para terminar.~n~", string);
  1079.  
  1080.                         GameTextForPlayer(playerid, string, 9999999, 3);
  1081.                         SendClientMessage(playerid, MSG_COLOR, "Usa [arriba], [abajo], [izq] y [der] para cambiar tamaño de box. [correr] para acelerar y [entrar coche] para terminar.");
  1082.  
  1083.                         TogglePlayerControllable(playerid, 0);
  1084.                         pData[playerid][P_KeyEdition] = EDIT_BOX;
  1085.                         SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  1086.                     }
  1087.                     case 2: // color de box
  1088.                     {
  1089.                         pData[playerid][P_ColorEdition] = COLOR_BOX;
  1090.                         ShowTextDrawDialog(playerid, 13);
  1091.                     }
  1092.                 }
  1093.             }
  1094.             else
  1095.             {
  1096.                 ShowTextDrawDialog(playerid, 5);
  1097.             }
  1098.         }
  1099.        
  1100.         case 25: // menu de export
  1101.         {
  1102.             if(response)
  1103.             {
  1104.                 switch(listitem)
  1105.                 {
  1106.                     case 0: // modo clasico
  1107.                     {
  1108.                         ExportProject(playerid, 0);
  1109.                     }
  1110.                     case 1: // filterscript autogenerado
  1111.                     {
  1112.                         ShowTextDrawDialog(playerid, 26);
  1113.                     }
  1114.                 }
  1115.             }
  1116.             else
  1117.             {
  1118.                 ShowTextDrawDialog(playerid, 4);
  1119.             }
  1120.         }
  1121.        
  1122.         case 26: // Exportar a un filterscript autogenerado
  1123.         {
  1124.             if(response)
  1125.             {
  1126.                 switch(listitem)
  1127.                 {
  1128.                     case 0: // Mostrar todo el tiempo
  1129.                     {
  1130.                         ExportProject(playerid, 1);
  1131.                     }
  1132.                     case 1: // Mostrar en class selection
  1133.                     {
  1134.                         ExportProject(playerid, 2);
  1135.                     }
  1136.                     case 2: // Mostrar en vehiculo
  1137.                     {
  1138.                         ExportProject(playerid, 3);
  1139.                     }
  1140.                     case 3: // Mostrar con comando
  1141.                     {
  1142.                         ShowTextDrawDialog(playerid, 27);
  1143.                     }
  1144.                     case 4: // Mostrar automaticamente cada X tiempo
  1145.                     {
  1146.                         ShowTextDrawDialog(playerid, 29);
  1147.                     }
  1148.                     case 5: // Mostrar despues que el jugador mato a alguien
  1149.                     {
  1150.                         ShowTextDrawDialog(playerid, 31);
  1151.                     }
  1152.                 }
  1153.             }
  1154.             else
  1155.             {
  1156.                 ShowTextDrawDialog(playerid, 25);
  1157.             }
  1158.         }
  1159.  
  1160.         case 27: // Escribir comando para export
  1161.         {
  1162.             if(response)
  1163.             {
  1164.                 if(!strlen(inputtext)) ShowTextDrawDialog(playerid, 27);
  1165.                 else
  1166.                 {
  1167.                     if(inputtext[0] != '/')
  1168.                         format(pData[playerid][P_ExpCommand], 128, "/%s", inputtext);
  1169.                     else
  1170.                         format(pData[playerid][P_ExpCommand], 128, "%s", inputtext);
  1171.                        
  1172.                     ShowTextDrawDialog(playerid, 28);
  1173.                 }
  1174.             }
  1175.             else
  1176.             {
  1177.                 ShowTextDrawDialog(playerid, 26);
  1178.             }
  1179.         }
  1180.        
  1181.         case 28: // Tiempo despues de comando para export
  1182.         {
  1183.             if(response)
  1184.             {
  1185.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 28);
  1186.                 else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 28);
  1187.                 else
  1188.                 {
  1189.                     pData[playerid][P_Aux] = strval(inputtext);
  1190.                     ExportProject(playerid, 4);
  1191.                 }
  1192.             }
  1193.             else
  1194.             {
  1195.                 ShowTextDrawDialog(playerid, 27);
  1196.             }
  1197.         }
  1198.        
  1199.         case 29: // Tiempo en segundos a aparecer para export
  1200.         {
  1201.             if(response)
  1202.             {
  1203.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 29);
  1204.                 else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 29);
  1205.                 else
  1206.                 {
  1207.                     pData[playerid][P_Aux] = strval(inputtext);
  1208.                     ShowTextDrawDialog(playerid, 30);
  1209.                 }
  1210.             }
  1211.             else
  1212.             {
  1213.                 ShowTextDrawDialog(playerid, 26);
  1214.             }
  1215.         }
  1216.  
  1217.         case 30: // Tiempo a desaparecer despues de aparecido para export
  1218.         {
  1219.             if(response)
  1220.             {
  1221.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 30);
  1222.                 else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 30);
  1223.                 else
  1224.                 {
  1225.                     pData[playerid][P_Aux2] = strval(inputtext);
  1226.                     ExportProject(playerid, 5);
  1227.                 }
  1228.             }
  1229.             else
  1230.             {
  1231.                 ShowTextDrawDialog(playerid, 29);
  1232.             }
  1233.         }
  1234.        
  1235.         case 31: // Desaparecer despues de X despues de aparecer, en export modo kill
  1236.         {
  1237.             if(response)
  1238.             {
  1239.                 if(!IsNumeric2(inputtext)) ShowTextDrawDialog(playerid, 31);
  1240.                 else if(strval(inputtext) < 0) ShowTextDrawDialog(playerid, 31);
  1241.                 else
  1242.                 {
  1243.                     pData[playerid][P_Aux] = strval(inputtext);
  1244.                     ExportProject(playerid, 6);
  1245.                 }
  1246.             }
  1247.             else
  1248.             {
  1249.                 ShowTextDrawDialog(playerid, 26);
  1250.             }
  1251.         }
  1252.     }
  1253.    
  1254.     return 1;
  1255. }
  1256.  
  1257. // =============================================================================
  1258. // Funciones.
  1259. // =============================================================================
  1260.  
  1261. forward ShowTextDrawDialogEx( playerid, dialogid );
  1262. public ShowTextDrawDialogEx( playerid, dialogid ) ShowTextDrawDialog( playerid, dialogid );
  1263.  
  1264. stock ShowTextDrawDialog( playerid, dialogid, aux=0, aux2=0 )
  1265. {
  1266.     /*  Muestra un diálogo específico a un jugador específico
  1267.         @playerid:      ID del jugador al cual mostrar el diálogo.
  1268.         @dialogid:      ID del diálogo a mostrar.
  1269.         @aux:           Variable auxiliar. Sirve para hacer variaciones en ciertos diálogos.
  1270.         @aux2:          Variable auxiliar. Sirve para hacer variaciones en ciertos diálogos.
  1271.  
  1272.         -Returns:
  1273.         true si la operación es exitosa, false si no.
  1274.     */
  1275.  
  1276.     switch(dialogid)
  1277.     {
  1278.         case 0: // Seleccionar proyecto.
  1279.         {
  1280.             new info[256];
  1281.             format(info, sizeof(info), "%sNuevo Proyecto\n", info);
  1282.             format(info, sizeof(info), "%sCargar Proyecto\n", info);
  1283.             format(info, sizeof(info), "%sEliminar Proyecto", info);
  1284.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Inicio"), info, "Aceptar", "Cancelar");
  1285.             return true;
  1286.         }
  1287.        
  1288.         case 1:
  1289.         {
  1290.             new info[256];
  1291.             if(!aux)            info = "Escribe el nombre del nuevo archivo de proyecto.\n";
  1292.             else if(aux == 1)   info = "ERROR: El nombre es muy largo, intenta nuevamente.\n";
  1293.             else if(aux == 2)   info = "ERROR: Ese nombre de archivo ya existe, intenta nuevamente.\n";
  1294.             else if(aux == 3)   info = "ERROR: Ese nombre de archivo contiene carácteres inválidos. No se te permite\ncrear subdirectorios. Intenta nuevamente.";
  1295.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Nuevo proyecto"), info, "Aceptar", "Volver");
  1296.             return true;
  1297.         }
  1298.        
  1299.         case 2:
  1300.         {
  1301.             // Guardar en una variable si está eliminando o cargando.
  1302.             if(aux == 2)    pData[playerid][P_CurrentMenu] = DELETING;
  1303.             else            pData[playerid][P_CurrentMenu] = LOADING;
  1304.            
  1305.             new info[1024];
  1306.             if(fexist("tdlist.lst"))
  1307.             {
  1308.                 if(aux != 2)    info = "Archivo específico...";
  1309.                 else            info = "<< Volver";
  1310.                 new File:tdlist = fopen("tdlist.lst", io_read),
  1311.                     line[128];
  1312.                 while(fread(tdlist, line))
  1313.                 {
  1314.                     format(info, sizeof(info), "%s\n%s", info, line);
  1315.                 }
  1316.                
  1317.                 ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Cargar proyecto"), info, "Aceptar", "Volver");
  1318.                 fclose(tdlist);
  1319.             }
  1320.             else
  1321.             {
  1322.                 if(aux) format(info, sizeof(info), "%sNo se puede encontrar tdlist.lst.\n", info);
  1323.                 format(info, sizeof(info), "%sEscribe manualmente el nombre del archivo que quieres\n", info);
  1324.                 if(aux != 2)    format(info, sizeof(info), "%sabrir:\n", info);
  1325.                 else            format(info, sizeof(info), "%seliminar:\n", info);
  1326.                
  1327.                 if(aux != 2)    ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Cargar proyecto"), info, "Aceptar", "Volver");
  1328.                 else            ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Eliminar proyecto"), info, "Aceptar", "Volver");
  1329.             }
  1330.             return true;
  1331.         }
  1332.        
  1333.         case 3:
  1334.         {
  1335.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Cargar proyecto"), \
  1336.                 "Escribe manualmente el nombre del archivo de\nproyecto que quieres cargar:\n", "Aceptar", "Volver");
  1337.             return true;
  1338.         }
  1339.        
  1340.         case 4: // Main edition menu (shows all the textdraws and lets you create a new one).
  1341.         {
  1342.             new info[1024],
  1343.                 shown;
  1344.             format(info, sizeof(info), "%sCrear nuevo Textdraw...", info);
  1345.             shown ++;
  1346.             format(info, sizeof(info), "%s\nExportar proyecto...", info);
  1347.             shown ++;
  1348.             format(info, sizeof(info), "%s\nCerrar proyecto...", info);
  1349.             shown ++;
  1350.             // Aux here is used to indicate from which TD show the list from.
  1351.             pData[playerid][P_DialogPage] = aux;
  1352.             for(new i=aux; i < MAX_TEXTDRAWS; i++)
  1353.             {
  1354.                 if(tData[i][T_Created])
  1355.                 {
  1356.                     shown ++;
  1357.                     if(shown == 12)
  1358.                     {
  1359.                         format(info, sizeof(info), "%s\nMás >>", info);
  1360.                         break;
  1361.                     }
  1362.                    
  1363.                     new PieceOfText[PREVIEW_CHARS];
  1364.                     if(strlen(tData[i][T_Text]) > sizeof(PieceOfText))
  1365.                     {
  1366.                         strmid(PieceOfText, tData[i][T_Text], 0, PREVIEW_CHARS, PREVIEW_CHARS);
  1367.                         format(info, sizeof(info), "%s\nTDraw %d: '%s [...]'", info, i, PieceOfText);
  1368.                     }
  1369.                     else
  1370.                     {
  1371.                         format(info, sizeof(info), "%s\nTDraw %d: '%s'", info, i, tData[i][T_Text]);
  1372.                     }
  1373.                 }
  1374.             }
  1375.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Selección de Textdraw"), info, "Aceptar", "Cancelar");
  1376.             return true;
  1377.         }
  1378.        
  1379.         case 5:
  1380.         {
  1381.             new info[1024];
  1382.             format(info, sizeof(info), "%sCambiar texto\n", info);
  1383.             format(info, sizeof(info), "%sCambiar posición\n", info);
  1384.             format(info, sizeof(info), "%sCambiar alineación\n", info);
  1385.             format(info, sizeof(info), "%sCambiar color de texto\n", info);
  1386.             format(info, sizeof(info), "%sCambiar fuente\n", info);
  1387.             format(info, sizeof(info), "%sCambiar proporcionalidad\n", info);
  1388.             format(info, sizeof(info), "%sCambiar tamaño de fuente\n", info);
  1389.             format(info, sizeof(info), "%sEditar contorno\n", info);
  1390.             format(info, sizeof(info), "%sEditar box\n", info);
  1391.             format(info, sizeof(info), "%sDuplicar Textdraw...\n", info);
  1392.             format(info, sizeof(info), "%sEliminar Textdraw...", info);
  1393.            
  1394.             new title[40];
  1395.             format(title, sizeof(title), "Textdraw %d", pData[playerid][P_CurrentTextdraw]);
  1396.            
  1397.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, title), info, "Aceptar", "Cancelar");
  1398.             return true;
  1399.         }
  1400.        
  1401.         case 6:
  1402.         {
  1403.             new info[256];
  1404.             format(info, sizeof(info), "%sEstás seguro de querer borrar el\n", info);
  1405.             format(info, sizeof(info), "%sproyecto %s?\n\n", info, GetFileNameFromLst("tdlist.lst", pData[playerid][P_Aux]));
  1406.             format(info, sizeof(info), "%sADVERTENCIA: No hay forma de deshacer esta operación.", info);
  1407.            
  1408.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateDialogTitle(playerid, "Confirmar eliminación"), info, "Si", "No");
  1409.             return true;
  1410.         }
  1411.        
  1412.         case 7:
  1413.         {
  1414.             new info[256];
  1415.             format(info, sizeof(info), "%sEstás seguro que quieres eliminar el\n", info);
  1416.             format(info, sizeof(info), "%sTextdraw número %d?\n\n", info, pData[playerid][P_CurrentTextdraw]);
  1417.             format(info, sizeof(info), "%sADVERTENCIA: No hay forma de deshacer esta operación.", info);
  1418.            
  1419.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateDialogTitle(playerid, "Confirmar eliminación"), info, "Si", "No");
  1420.             return true;
  1421.         }
  1422.        
  1423.         case 8:
  1424.         {
  1425.             new info[1024];
  1426.             info = "Escribe el nuevo texto del textdraw. El texto actual es:\n\n";
  1427.             format(info, sizeof(info), "%s%s\n\n", info, tData[pData[playerid][P_CurrentTextdraw]][T_Text]);
  1428.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Texto del Textdraw"), info, "Aceptar", "Volver");
  1429.             return true;
  1430.         }
  1431.        
  1432.         case 9:
  1433.         {
  1434.             new info[256];
  1435.             info = "Escribir posición exacta\n";
  1436.             format(info, sizeof(info), "%sMover el Textdraw", info);
  1437.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Posición del Textdraw"), info, "Aceptar", "Volver");
  1438.             return true;
  1439.         }
  1440.        
  1441.         case 10:
  1442.         {
  1443.             // aux es 0 para X, 1 para Y.
  1444.             // aux2 es el tipo de mensaje de error, 0 para sin error.
  1445.             new info[256];
  1446.             if(aux2 == 1) info = "ERROR: Tienes que escribir un número.\n\n";
  1447.            
  1448.             format(info, sizeof(info), "%sEscribe en números la nueva coordenada ", info);
  1449.             if(aux == 0)        format(info, sizeof(info), "%sX", info);
  1450.             else if(aux == 1)   format(info, sizeof(info), "%sY", info);
  1451.             format(info, sizeof(info), "%s del Textdraw\n", info);
  1452.            
  1453.             pData[playerid][P_Aux] = aux; // Para saber si está editando X o Y.
  1454.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Posición del Textdraw"), info, "Aceptar", "Volver");
  1455.             return true;
  1456.         }
  1457.        
  1458.         case 11:
  1459.         {
  1460.             new info[256];
  1461.             info = "Izquierda (tipo 1)\nCentrado (tipo 2)\nDerecha (tipo 3)";
  1462.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Alineación del Textdraw"), info, "Aceptar", "Volver");
  1463.             return true;
  1464.         }
  1465.        
  1466.         case 12:
  1467.         {
  1468.             new info[256];
  1469.             info = "Proporcionalidad Activada\nProporcionalidad Desactivada";
  1470.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Proporcionalidad del Textdraw"), info, "Aceptar", "Volver");
  1471.             return true;
  1472.         }
  1473.        
  1474.         case 13:
  1475.         {
  1476.             new info[256];
  1477.             info = "Escribir número hexadecimal\nUsar combinador de colores\nElegir un color prehecho";
  1478.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Color del Textdraw"), info, "Aceptar", "Volver");
  1479.             return true;
  1480.         }
  1481.        
  1482.         case 14:
  1483.         {
  1484.             new info[256];
  1485.             if(aux) info = "ERROR: Escribiste un número hexadecimal inválido.\n\n";
  1486.             format(info, sizeof(info), "%sEscribe el número hexadecimal que quieres:\n", info);
  1487.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Color del Textdraw"), info, "Aceptar", "Volver");
  1488.             return true;
  1489.         }
  1490.        
  1491.         case 15:
  1492.         {
  1493.             // aux es 0 para rojo, 1 para verde, 2 para azul y 3 para alpha.
  1494.             // aux2 es el tipo de mensaje de error, 0 para sin error.
  1495.             new info[256];
  1496.             if(aux2 == 1)       info = "ERROR: El número tiene que estar entre 0 y 255.\n\n";
  1497.             else if(aux2 == 2)  info = "ERROR: Tienes que escribir un número.\n\n";
  1498.  
  1499.             format(info, sizeof(info), "%sEscribe la cantidad de ", info);
  1500.             if(aux == 0)        format(info, sizeof(info), "%sROJO", info);
  1501.             else if(aux == 1)   format(info, sizeof(info), "%sVERDE", info);
  1502.             else if(aux == 2)   format(info, sizeof(info), "%sAZUL", info);
  1503.             else if(aux == 3)   format(info, sizeof(info), "%sOPACIDAD", info);
  1504.             format(info, sizeof(info), "%s que quieres.\n", info);
  1505.             format(info, sizeof(info), "%sEl número debe estar en un rango entre 0 y 255.", info);
  1506.  
  1507.             pData[playerid][P_Aux] = aux; // Para saber que color está editando.
  1508.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Color del Textdraw"), info, "Aceptar", "Volver");
  1509.             return true;
  1510.         }
  1511.        
  1512.         case 16:
  1513.         {
  1514.             new info[256];
  1515.             info = "Rojo\nVerde\nAzul\nAmarillo\nRosa\nCeleste\nBlanco\nNegro";
  1516.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Color del Textdraw"), info, "Aceptar", "Volver");
  1517.             return true;
  1518.         }
  1519.        
  1520.         case 17:
  1521.         {
  1522.             new info[256];
  1523.             info = "Fuente tipo 0\nFuente tipo 1\nFuente tipo 2\nFuente tipo 3";
  1524.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Fuente del Textdraw"), info, "Aceptar", "Volver");
  1525.             return true;
  1526.         }
  1527.        
  1528.         case 18:
  1529.         {
  1530.             new info[256];
  1531.             info = "Escribir el tamaño exacto\n";
  1532.             format(info, sizeof(info), "%sReajustar el Textdraw", info);
  1533.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Tamaño de fuente del Textdraw"), info, "Aceptar", "Volver");
  1534.             return true;
  1535.         }
  1536.        
  1537.         case 19:
  1538.         {
  1539.             // aux es 0 para X, 1 para Y.
  1540.             // aux2 es el tipo de mensaje de error, 0 para no error.
  1541.             new info[256];
  1542.             if(aux2 == 1) info = "ERROR: Tienes que escribir un número.\n\n";
  1543.  
  1544.             format(info, sizeof(info), "%sEscribe en números la nueva coordenada ", info);
  1545.             if(aux == 0)        format(info, sizeof(info), "%sX", info);
  1546.             else if(aux == 1)   format(info, sizeof(info), "%sY", info);
  1547.             format(info, sizeof(info), "%s para el tamaño de la fuente.\n", info);
  1548.  
  1549.             pData[playerid][P_Aux] = aux; // Para saber si está editando X o Y.
  1550.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Tamaño del Textdraw"), info, "Aceptar", "Volver");
  1551.             return true;
  1552.         }
  1553.        
  1554.         case 20:
  1555.         {
  1556.             new info[256];
  1557.             if(tData[pData[playerid][P_CurrentTextdraw]][T_Outline] == 1)   info = "Outline Off";
  1558.             else                                                            info = "Outline On";
  1559.             format(info, sizeof(info), "%s\nTamaño de sombra\nColor de la sombra/contorno\nTerminar edición de contorno...", info);
  1560.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Contorno del Textdraw"), info, "Aceptar", "Volver");
  1561.             return true;
  1562.         }
  1563.        
  1564.         case 21:
  1565.         {
  1566.             new info[256];
  1567.             info = "Sombra de contorno 0\nSombra de contorno 1\nSombra de contorno 2\nSombra de contorno 3\nSombra de contorno 4\nSombra de contorno 5\nPersonalizar...";
  1568.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Sombra del Textdraw"), info, "Aceptar", "Volver");
  1569.             return true;
  1570.         }
  1571.        
  1572.         case 22:
  1573.         {
  1574.             new info[256];
  1575.             if(aux) info = "ERROR: Escribiste un número inválido.\n\n";
  1576.             format(info, sizeof(info), "%sEscribe el número indicanto el tamaño de la sombra:\n", info);
  1577.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Sombra del Textdraw"), info, "Aceptar", "Volver");
  1578.             return true;
  1579.         }
  1580.        
  1581.         case 23:
  1582.         {
  1583.             new info[256];
  1584.             info = "Usar box\nNo usar box";
  1585.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Box del Textdraw"), info, "Aceptar", "Volver");
  1586.             return true;
  1587.         }
  1588.        
  1589.         case 24:
  1590.         {
  1591.             new info[256];
  1592.             info = "No usar box\nTamaño del box\nColor del box";
  1593.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Box del Textdraw"), info, "Aceptar", "Volver");
  1594.             return true;
  1595.         }
  1596.        
  1597.         case 25:
  1598.         {
  1599.             new info[256];
  1600.             info = "Modo de exportación clásico\nFilterscript autogenerado";
  1601.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1602.             return true;
  1603.         }
  1604.        
  1605.         case 26:
  1606.         {
  1607.             new info[512];
  1608.             info = "FScript: Mostrar textdraw todo el tiempo\nFScript: Mostrar textdraw durante la selección del clase\nFScript: Mostrar textdraw mientras en vehículo\n\
  1609.                     FScript: Mostrar textdraw con comando\nFScript: Mostrar cada X cantidad de tiempo\nFScript: Mostrar después de matar a alguien";
  1610.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1611.             return true;
  1612.         }
  1613.        
  1614.         case 27:
  1615.         {
  1616.             new info[128];
  1617.             info = "Escribe el comando que quieres que muestre el textdraw.\n";
  1618.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1619.             return true;
  1620.         }
  1621.        
  1622.         case 28:
  1623.         {
  1624.             new info[128];
  1625.             info = "Cuanto permanecerá en la pantalla? (EN SEGUNDOS)\n";
  1626.             format(info, sizeof(info), "%sEscribe 0 si quieres ocultarlo tipeando otra vez el comando.\n", info);
  1627.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1628.             return true;
  1629.         }
  1630.        
  1631.         case 29:
  1632.         {
  1633.             new info[128];
  1634.             info = "Cada cuanto quieres que aparezcan los textdraws?\nEscribe la cantidad de tiempo en SEGUNDOS:\n";
  1635.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1636.             return true;
  1637.         }
  1638.  
  1639.         case 30:
  1640.         {
  1641.             new info[128];
  1642.             info = "Una vez que apareció, cuanto permanecerá en la pantalla?\nEscribe la cantidad de tiempo en SEGUNDOS:\n";
  1643.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1644.             return true;
  1645.         }
  1646.        
  1647.         case 31:
  1648.         {
  1649.             new info[128];
  1650.             info = "Una vez que apareció, cuanto permanecerá en la pantalla?\nEscribe la cantidad de tiempo en SEGUNDOS:\n";
  1651.             ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateDialogTitle(playerid, "Exportar proyecto"), info, "Aceptar", "Volver");
  1652.             return true;
  1653.         }
  1654.     }
  1655.     return false;
  1656. }
  1657.  
  1658. stock CreateDialogTitle( playerid, text[] )
  1659. {
  1660.     /*  Crea un título por defecto para los diálogos.
  1661.         @playerid:      ID del jugador al cual se le está generando el título.
  1662.         @text[]:        Texto a ser añadido al título.
  1663.     */
  1664.     #pragma unused playerid
  1665.    
  1666.     new string[128];
  1667.     if(!strlen(CurrentProject) || !strcmp(CurrentProject, " "))
  1668.         format(string, sizeof(string), "Zamaroht's Textdraw Editor: %s", text);
  1669.     else
  1670.         format(string, sizeof(string), "%s - Zamaroht's Textdraw Editor: %s", CurrentProject, text);
  1671.     return string;
  1672. }
  1673.  
  1674. stock ResetPlayerVars( playerid )
  1675. {
  1676.     /*  Resetea los datos en pData de un jugador específico.
  1677.         @playerid:      ID del jugador del cual resetear datos.
  1678.     */
  1679.    
  1680.     pData[playerid][P_Editing] = false;
  1681.     strmid(CurrentProject, "", 0, 1, 128);
  1682. }
  1683.  
  1684. forward KeyEdit( playerid );
  1685. public KeyEdit( playerid )
  1686. {
  1687.     /*  Se encarga de la edición por teclado.
  1688.         @playerid:              El jugador que está editando.
  1689.     */
  1690.     if(pData[playerid][P_KeyEdition] == EDIT_NONE) return 0;
  1691.    
  1692.     new string[256]; // Buffer para todos los GameTexts y otros mensajes.
  1693.     new keys, updown, leftright;
  1694.     GetPlayerKeys(playerid, keys, updown, leftright);
  1695.  
  1696.     if(updown < 0) // Está apretando arriba
  1697.     {
  1698.         switch(pData[playerid][P_KeyEdition])
  1699.         {
  1700.             case EDIT_POSITION:
  1701.             {
  1702.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_Y] -= 10.0;
  1703.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_Y] -= 1.0;
  1704.  
  1705.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Posicion: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1706.                     tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1707.             }
  1708.            
  1709.             case EDIT_SIZE:
  1710.             {
  1711.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_YSize] -= 1.0;
  1712.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_YSize] -= 0.1;
  1713.  
  1714.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1715.                     tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1716.             }
  1717.            
  1718.             case EDIT_BOX:
  1719.             {
  1720.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] -= 10.0;
  1721.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] -= 1.0;
  1722.  
  1723.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1724.                     tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1725.             }
  1726.         }
  1727.     }
  1728.     else if(updown > 0) // Está apretando abajo
  1729.     {
  1730.         switch(pData[playerid][P_KeyEdition])
  1731.         {
  1732.             case EDIT_POSITION:
  1733.             {
  1734.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_Y] += 10.0;
  1735.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_Y] += 1.0;
  1736.  
  1737.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Posicion: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1738.                     tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1739.             }
  1740.            
  1741.             case EDIT_SIZE:
  1742.             {
  1743.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_YSize] += 1.0;
  1744.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_YSize] += 0.1;
  1745.  
  1746.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1747.                     tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1748.             }
  1749.            
  1750.             case EDIT_BOX:
  1751.             {
  1752.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] += 10.0;
  1753.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY] += 1.0;
  1754.  
  1755.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1756.                     tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1757.             }
  1758.         }
  1759.     }
  1760.  
  1761.     if(leftright < 0) // Está apretando izquierda
  1762.     {
  1763.         switch(pData[playerid][P_KeyEdition])
  1764.         {
  1765.             case EDIT_POSITION:
  1766.             {
  1767.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_X] -= 10.0;
  1768.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_X] -= 1.0;
  1769.  
  1770.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Posicion: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1771.                     tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1772.             }
  1773.            
  1774.             case EDIT_SIZE:
  1775.             {
  1776.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_XSize] -= 0.1;
  1777.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_XSize] -= 0.01;
  1778.  
  1779.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1780.                     tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1781.             }
  1782.            
  1783.             case EDIT_BOX:
  1784.             {
  1785.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] -= 10.0;
  1786.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] -= 1.0;
  1787.  
  1788.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1789.                     tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1790.             }
  1791.         }
  1792.     }
  1793.     else if(leftright > 0) // Está apretando derecha
  1794.     {
  1795.         switch(pData[playerid][P_KeyEdition])
  1796.         {
  1797.             case EDIT_POSITION:
  1798.             {
  1799.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_X] += 10.0;
  1800.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_X] += 1.0;
  1801.  
  1802.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Posicion: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1803.                     tData[pData[playerid][P_CurrentTextdraw]][T_X], tData[pData[playerid][P_CurrentTextdraw]][T_Y]);
  1804.             }
  1805.            
  1806.             case EDIT_SIZE:
  1807.             {
  1808.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_XSize] += 0.1;
  1809.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_XSize] += 0.01;
  1810.  
  1811.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1812.                     tData[pData[playerid][P_CurrentTextdraw]][T_XSize], tData[pData[playerid][P_CurrentTextdraw]][T_YSize]);
  1813.             }
  1814.            
  1815.             case EDIT_BOX:
  1816.             {
  1817.                 if(keys == KEY_SPRINT)  tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] += 10.0;
  1818.                 else                    tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX] += 1.0;
  1819.  
  1820.                 format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~~h~Tamano: ~b~X: ~w~%.4f ~r~- ~b~Y: ~w~%.4f", \
  1821.                     tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeX], tData[pData[playerid][P_CurrentTextdraw]][T_TextSizeY]);
  1822.             }
  1823.         }
  1824.     }
  1825.  
  1826.     GameTextForPlayer(playerid, string, 999999999, 3);
  1827.     UpdateTextdraw(pData[playerid][P_CurrentTextdraw]);
  1828.     if(pData[playerid][P_KeyEdition] == EDIT_POSITION)
  1829.     {
  1830.         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_X");
  1831.         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_Y");
  1832.     }
  1833.     else if(pData[playerid][P_KeyEdition] == EDIT_SIZE)
  1834.     {
  1835.         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_XSize");
  1836.         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_YSize");
  1837.     }
  1838.     else if(pData[playerid][P_KeyEdition] == EDIT_BOX)
  1839.     {
  1840.         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_TextSizeX");
  1841.         SaveTDData(pData[playerid][P_CurrentTextdraw], "T_TextSizeY");
  1842.     }
  1843.     SetTimerEx("KeyEdit", 200, 0, "i", playerid);
  1844.     return 1;
  1845. }
  1846.  
  1847. public OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
  1848. {
  1849.     if(pData[playerid][P_KeyEdition] != EDIT_NONE && newkeys == KEY_SECONDARY_ATTACK)
  1850.     {
  1851.         GameTextForPlayer(playerid, " ", 100, 3);
  1852.         TogglePlayerControllable(playerid, 1);
  1853.  
  1854.         new string[128];
  1855.         switch(pData[playerid][P_KeyEdition])
  1856.         {
  1857.             case EDIT_POSITION:
  1858.             {
  1859.                 format(string, sizeof(string), "Textdraw #%d correctamente movido.", pData[playerid][P_CurrentTextdraw]);
  1860.             }
  1861.             case EDIT_SIZE:
  1862.             {
  1863.                 format(string, sizeof(string), "Textdraw #%d correctamente actualizado.", pData[playerid][P_CurrentTextdraw]);
  1864.             }
  1865.             case EDIT_BOX:
  1866.             {
  1867.                 format(string, sizeof(string), "La box del Textdraw #%d's box ha sido correctamente actualizada.", pData[playerid][P_CurrentTextdraw]);
  1868.             }
  1869.         }
  1870.  
  1871.         if(pData[playerid][P_KeyEdition] == EDIT_BOX)   SetTimerEx("ShowTextDrawDialogEx", 500, 0, "ii", playerid, 24);
  1872.         else                                            SetTimerEx("ShowTextDrawDialogEx", 500, 0, "ii", playerid, 5);
  1873.         SendClientMessage(playerid, MSG_COLOR, string);
  1874.         pData[playerid][P_KeyEdition] = EDIT_NONE;
  1875.     }
  1876.     return 1;
  1877. }
  1878.  
  1879. stock CreateNewProject( name[] )
  1880. {
  1881.     /*  Crea un nuevo proyecto .tde.
  1882.         @name[]:        Nombre a ser usado en el archivo.
  1883.     */
  1884.  
  1885.     new string[128], File:File;
  1886.  
  1887.     // Agregarlo a la lista.
  1888.     format(string, sizeof(string), "%s\r\n", name);
  1889.     File = fopen("tdlist.lst", io_append);
  1890.     fwrite(File, string);
  1891.     fclose(File);
  1892.  
  1893.     // Crear el archivo en blanco.
  1894.     File = fopen(name, io_write);
  1895.     fwrite(File, "TDFile=yes");
  1896.     fclose(File);
  1897. }
  1898.  
  1899. stock ClearTextdraw( tdid )
  1900. {
  1901.     /*  Resetea las variables de un textdraw y lo destruye.
  1902.         @tdid:          Textdraw ID
  1903.     */
  1904.     TextDrawHideForAll(tData[tdid][T_Handler]);
  1905.     tData[tdid][T_Created] = false;
  1906.     strmid(tData[tdid][T_Text], "", 0, 1, 2);
  1907.     tData[tdid][T_X] = 0.0;
  1908.     tData[tdid][T_Y] = 0.0;
  1909.     tData[tdid][T_Alignment] = 0;
  1910.     tData[tdid][T_BackColor] = 0;
  1911.     tData[tdid][T_UseBox] = 0;
  1912.     tData[tdid][T_BoxColor] = 0;
  1913.     tData[tdid][T_TextSizeX] = 0.0;
  1914.     tData[tdid][T_TextSizeY] = 0.0;
  1915.     tData[tdid][T_Color] = 0;
  1916.     tData[tdid][T_Font] = 0;
  1917.     tData[tdid][T_XSize] = 0.0;
  1918.     tData[tdid][T_YSize] = 0.0;
  1919.     tData[tdid][T_Outline] = 0;
  1920.     tData[tdid][T_Proportional] = 0;
  1921.     tData[tdid][T_Shadow] = 0;
  1922. }
  1923.  
  1924. stock CreateDefaultTextdraw( tdid, save = 1 )
  1925. {
  1926.     /*  Crea un nuevo textdraw con su configuración por defecto.
  1927.         @tdid:          Textdraw ID
  1928.     */
  1929.     tData[tdid][T_Created] = true;
  1930.     format(tData[tdid][T_Text], 1024, "Nuevo Textdraw", 1);
  1931.     tData[tdid][T_X] = 250.0;
  1932.     tData[tdid][T_Y] = 10.0;
  1933.     tData[tdid][T_Alignment] = 0;
  1934.     tData[tdid][T_BackColor] = RGB(0, 0, 0, 255);
  1935.     tData[tdid][T_UseBox] = 0;
  1936.     tData[tdid][T_BoxColor] = RGB(0, 0, 0, 255);
  1937.     tData[tdid][T_TextSizeX] = 0.0;
  1938.     tData[tdid][T_TextSizeY] = 0.0;
  1939.     tData[tdid][T_Color] = RGB(255, 255, 255, 255);
  1940.     tData[tdid][T_Font] = 1;
  1941.     tData[tdid][T_XSize] = 0.5;
  1942.     tData[tdid][T_YSize] = 1.0;
  1943.     tData[tdid][T_Outline] = 0;
  1944.     tData[tdid][T_Proportional] = 1;
  1945.     tData[tdid][T_Shadow] = 1;
  1946.  
  1947.     UpdateTextdraw(tdid);
  1948.     if(save) SaveTDData(tdid, "T_Created");
  1949. }
  1950.  
  1951. stock DuplicateTextdraw( source, to )
  1952. {
  1953.     /*  Duplica un textdraw a partir de otro. Actualiza al nuevo.
  1954.         @source:            De donde copiar el textdraw.
  1955.         @to:                A donde copiar el textdraw.
  1956.     */
  1957.     tData[to][T_Created] = tData[source][T_Created];
  1958.     format(tData[to][T_Text], 1024, "%s", tData[source][T_Text]);
  1959.     tData[to][T_X] = tData[source][T_X];
  1960.     tData[to][T_Y] = tData[source][T_Y];
  1961.     tData[to][T_Alignment] = tData[source][T_Alignment];
  1962.     tData[to][T_BackColor] = tData[source][T_BackColor];
  1963.     tData[to][T_UseBox] = tData[source][T_UseBox];
  1964.     tData[to][T_BoxColor] = tData[source][T_BoxColor];
  1965.     tData[to][T_TextSizeX] = tData[source][T_TextSizeX];
  1966.     tData[to][T_TextSizeY] = tData[source][T_TextSizeY];
  1967.     tData[to][T_Color] = tData[source][T_Color];
  1968.     tData[to][T_Font] = tData[source][T_Font];
  1969.     tData[to][T_XSize] = tData[source][T_XSize];
  1970.     tData[to][T_YSize] = tData[source][T_YSize];
  1971.     tData[to][T_Outline] = tData[source][T_Outline];
  1972.     tData[to][T_Proportional] = tData[source][T_Proportional];
  1973.     tData[to][T_Shadow] = tData[source][T_Shadow];
  1974.    
  1975.     UpdateTextdraw(to);
  1976.     SaveTDData(to, "T_Created");
  1977.     SaveTDData(to, "T_Text");
  1978.     SaveTDData(to, "T_X");
  1979.     SaveTDData(to, "T_Y");
  1980.     SaveTDData(to, "T_Alignment");
  1981.     SaveTDData(to, "T_BackColor");
  1982.     SaveTDData(to, "T_UseBox");
  1983.     SaveTDData(to, "T_BoxColor");
  1984.     SaveTDData(to, "T_TextSizeX");
  1985.     SaveTDData(to, "T_TextSizeY");
  1986.     SaveTDData(to, "T_Color");
  1987.     SaveTDData(to, "T_Font");
  1988.     SaveTDData(to, "T_XSize");
  1989.     SaveTDData(to, "T_YSize");
  1990.     SaveTDData(to, "T_Outline");
  1991.     SaveTDData(to, "T_Proportional");
  1992.     SaveTDData(to, "T_Shadow");
  1993. }
  1994.  
  1995. stock UpdateTextdraw( tdid )
  1996. {
  1997.     /*  Actualiza un textdraw que está siendo mostrado en la pantalla con sus respectivos valores.
  1998.         @tdid:          Textdraw ID
  1999.     */
  2000.     if(!tData[tdid][T_Created]) return false;
  2001.     TextDrawHideForAll(tData[tdid][T_Handler]);
  2002.     TextDrawDestroy(tData[tdid][T_Handler]);
  2003.    
  2004.     // Recrearlo
  2005.     tData[tdid][T_Handler] = TextDrawCreate(tData[tdid][T_X], tData[tdid][T_Y], tData[tdid][T_Text]);
  2006.     TextDrawAlignment(tData[tdid][T_Handler], tData[tdid][T_Alignment]);
  2007.     TextDrawBackgroundColor(tData[tdid][T_Handler], tData[tdid][T_BackColor]);
  2008.     TextDrawColor(tData[tdid][T_Handler], tData[tdid][T_Color]);
  2009.     TextDrawFont(tData[tdid][T_Handler], tData[tdid][T_Font]);
  2010.     TextDrawLetterSize(tData[tdid][T_Handler], tData[tdid][T_XSize], tData[tdid][T_YSize]);
  2011.     TextDrawSetOutline(tData[tdid][T_Handler], tData[tdid][T_Outline]);
  2012.     TextDrawSetProportional(tData[tdid][T_Handler], tData[tdid][T_Proportional]);
  2013.     TextDrawSetShadow(tData[tdid][T_Handler], tData[tdid][T_Shadow]);
  2014.     if(tData[tdid][T_UseBox])
  2015.     {
  2016.         TextDrawUseBox(tData[tdid][T_Handler], tData[tdid][T_UseBox]);
  2017.         TextDrawBoxColor(tData[tdid][T_Handler], tData[tdid][T_BoxColor]);
  2018.         TextDrawTextSize(tData[tdid][T_Handler], tData[tdid][T_TextSizeX], tData[tdid][T_TextSizeY]);
  2019.     }
  2020.  
  2021.     TextDrawShowForAll(tData[tdid][T_Handler]);
  2022.  
  2023.     return true;
  2024. }
  2025.  
  2026. stock DeleteTDFromFile( tdid )
  2027. {
  2028.     /*  Elimina un textdraw específico de su archivo .tde.
  2029.         @tdid:              Textdraw ID.
  2030.     */
  2031.     new string[128], filename[135];
  2032.     format(filename, sizeof(filename), "%s.tde", CurrentProject);
  2033.    
  2034.     format(string, sizeof(string), "%dT_Created", tdid);
  2035.     dini_Unset(filename, string);
  2036.     format(string, sizeof(string), "%dT_Text", tdid);
  2037.     dini_Unset(filename, string);
  2038.     format(string, sizeof(string), "%dT_X", tdid);
  2039.     dini_Unset(filename, string);
  2040.     format(string, sizeof(string), "%dT_Y", tdid);
  2041.     dini_Unset(filename, string);
  2042.     format(string, sizeof(string), "%dT_Alignment", tdid);
  2043.     dini_Unset(filename, string);
  2044.     format(string, sizeof(string), "%dT_BackColor", tdid);
  2045.     dini_Unset(filename, string);
  2046.     format(string, sizeof(string), "%dT_UseBox", tdid);
  2047.     dini_Unset(filename, string);
  2048.     format(string, sizeof(string), "%dT_BoxColor", tdid);
  2049.     dini_Unset(filename, string);
  2050.     format(string, sizeof(string), "%dT_TextSizeX", tdid);
  2051.     dini_Unset(filename, string);
  2052.     format(string, sizeof(string), "%dT_TextSizeY", tdid);
  2053.     dini_Unset(filename, string);
  2054.     format(string, sizeof(string), "%dT_Color", tdid);
  2055.     dini_Unset(filename, string);
  2056.     format(string, sizeof(string), "%dT_Font", tdid);
  2057.     dini_Unset(filename, string);
  2058.     format(string, sizeof(string), "%dT_XSize", tdid);
  2059.     dini_Unset(filename, string);
  2060.     format(string, sizeof(string), "%dT_YSize", tdid);
  2061.     dini_Unset(filename, string);
  2062.     format(string, sizeof(string), "%dT_Outline", tdid);
  2063.     dini_Unset(filename, string);
  2064.     format(string, sizeof(string), "%dT_Proportional", tdid);
  2065.     dini_Unset(filename, string);
  2066.     format(string, sizeof(string), "%dT_Shadow", tdid);
  2067.     dini_Unset(filename, string);
  2068. }
  2069.  
  2070. stock SaveTDData( tdid, data[] )
  2071. {
  2072.     /*  Guarda datos específicos de un textdraw específico en un archivo de proyecto.
  2073.         @tdid:              Textdraw ID.
  2074.         @data[]:            Dato a ser guardado.
  2075.     */
  2076.     new string[128], filename[135];
  2077.     format(string, sizeof(string), "%d%s", tdid, data);
  2078.     format(filename, sizeof(filename), "%s.tde", CurrentProject);
  2079.    
  2080.     if(!strcmp("T_Created", data))
  2081.         dini_IntSet(filename, string, 1);
  2082.     else if(!strcmp("T_Text", data))
  2083.         dini_Set(filename, string, tData[tdid][T_Text]);
  2084.     else if(!strcmp("T_X", data))
  2085.         dini_FloatSet(filename, string, tData[tdid][T_X]);
  2086.     else if(!strcmp("T_Y", data))
  2087.         dini_FloatSet(filename, string, tData[tdid][T_Y]);
  2088.     else if(!strcmp("T_Alignment", data))
  2089.         dini_IntSet(filename, string, tData[tdid][T_Alignment]);
  2090.     else if(!strcmp("T_BackColor", data))
  2091.         dini_IntSet(filename, string, tData[tdid][T_BackColor]);
  2092.     else if(!strcmp("T_UseBox", data))
  2093.         dini_IntSet(filename, string, tData[tdid][T_UseBox]);
  2094.     else if(!strcmp("T_BoxColor", data))
  2095.         dini_IntSet(filename, string, tData[tdid][T_BoxColor]);
  2096.     else if(!strcmp("T_TextSizeX", data))
  2097.         dini_FloatSet(filename, string, tData[tdid][T_TextSizeX]);
  2098.     else if(!strcmp("T_TextSizeY", data))
  2099.         dini_FloatSet(filename, string, tData[tdid][T_TextSizeY]);
  2100.     else if(!strcmp("T_Color", data))
  2101.         dini_IntSet(filename, string, tData[tdid][T_Color]);
  2102.     else if(!strcmp("T_Font", data))
  2103.         dini_IntSet(filename, string, tData[tdid][T_Font]);
  2104.     else if(!strcmp("T_XSize", data))
  2105.         dini_FloatSet(filename, string, tData[tdid][T_XSize]);
  2106.     else if(!strcmp("T_YSize", data))
  2107.         dini_FloatSet(filename, string, tData[tdid][T_YSize]);
  2108.     else if(!strcmp("T_Outline", data))
  2109.         dini_IntSet(filename, string, tData[tdid][T_Outline]);
  2110.     else if(!strcmp("T_Proportional", data))
  2111.         dini_IntSet(filename, string, tData[tdid][T_Proportional]);
  2112.     else if(!strcmp("T_Shadow", data))
  2113.         dini_IntSet(filename, string, tData[tdid][T_Shadow]);
  2114.     else
  2115.         SendClientMessageToAll(MSG_COLOR, "Datos incorrectos fueron requeridos, guardado automático ha fallado");
  2116. }
  2117.  
  2118. stock LoadProject( playerid, filename[] )
  2119. {
  2120.     /*  Carga un proyecto para su edición.
  2121.         @filename[]:            Nombre del archivo donde el proyecto está guardado.
  2122.     */
  2123.     new string[128];
  2124.     if(!dini_Isset(filename, "TDFile"))
  2125.     {
  2126.         SendClientMessage(playerid, MSG_COLOR, "Archivo de Textdraws inválido.");
  2127.         ShowTextDrawDialog(playerid, 0);
  2128.     }
  2129.     else
  2130.     {
  2131.         for(new i; i < MAX_TEXTDRAWS; i ++)
  2132.         {
  2133.             format(string, sizeof(string), "%dT_Created", i);
  2134.             if(dini_Isset(filename, string))
  2135.             {
  2136.                 CreateDefaultTextdraw(i, 0); // Create but don't save.
  2137.  
  2138.                 format(string, sizeof(string), "%dT_Text", i);
  2139.                 if(dini_Isset(filename, string))
  2140.                     format(tData[i][T_Text], 1024, "%s", dini_Get(filename, string));
  2141.  
  2142.                 format(string, sizeof(string), "%dT_X", i);
  2143.                 if(dini_Isset(filename, string))
  2144.                     tData[i][T_X] = dini_Float(filename, string);
  2145.  
  2146.                 format(string, sizeof(string), "%dT_Y", i);
  2147.                 if(dini_Isset(filename, string))
  2148.                     tData[i][T_Y] = dini_Float(filename, string);
  2149.  
  2150.                 format(string, sizeof(string), "%dT_Alignment", i);
  2151.                 if(dini_Isset(filename, string))
  2152.                     tData[i][T_Alignment] = dini_Int(filename, string);
  2153.  
  2154.                 format(string, sizeof(string), "%dT_BackColor", i);
  2155.                 if(dini_Isset(filename, string))
  2156.                     tData[i][T_BackColor] = dini_Int(filename, string);
  2157.  
  2158.                 format(string, sizeof(string), "%dT_UseBox", i);
  2159.                 if(dini_Isset(filename, string))
  2160.                     tData[i][T_UseBox] = dini_Int(filename, string);
  2161.  
  2162.                 format(string, sizeof(string), "%dT_BoxColor", i);
  2163.                 if(dini_Isset(filename, string))
  2164.                     tData[i][T_BoxColor] = dini_Int(filename, string);
  2165.  
  2166.                 format(string, sizeof(string), "%dT_TextSizeX", i);
  2167.                 if(dini_Isset(filename, string))
  2168.                     tData[i][T_TextSizeX] = dini_Float(filename, string);
  2169.  
  2170.                 format(string, sizeof(string), "%dT_TextSizeY", i);
  2171.                 if(dini_Isset(filename, string))
  2172.                     tData[i][T_TextSizeY] = dini_Float(filename, string);
  2173.  
  2174.                 format(string, sizeof(string), "%dT_Color", i);
  2175.                 if(dini_Isset(filename, string))
  2176.                     tData[i][T_Color] = dini_Int(filename, string);
  2177.  
  2178.                 format(string, sizeof(string), "%dT_Font", i);
  2179.                 if(dini_Isset(filename, string))
  2180.                     tData[i][T_Font] = dini_Int(filename, string);
  2181.  
  2182.                 format(string, sizeof(string), "%dT_XSize", i);
  2183.                 if(dini_Isset(filename, string))
  2184.                     tData[i][T_XSize] = dini_Float(filename, string);
  2185.  
  2186.                 format(string, sizeof(string), "%dT_YSize", i);
  2187.                 if(dini_Isset(filename, string))
  2188.                     tData[i][T_YSize] = dini_Float(filename, string);
  2189.  
  2190.                 format(string, sizeof(string), "%dT_Outline", i);
  2191.                 if(dini_Isset(filename, string))
  2192.                     tData[i][T_Outline] = dini_Int(filename, string);
  2193.  
  2194.                 format(string, sizeof(string), "%dT_Proportional", i);
  2195.                 if(dini_Isset(filename, string))
  2196.                     tData[i][T_Proportional] = dini_Int(filename, string);
  2197.  
  2198.                 format(string, sizeof(string), "%dT_Shadow", i);
  2199.                 if(dini_Isset(filename, string))
  2200.                     tData[i][T_Shadow] = dini_Int(filename, string);
  2201.  
  2202.                 UpdateTextdraw(i);
  2203.             }
  2204.         }
  2205.         strmid(CurrentProject, filename, 0, strlen(filename) - 4, 128);
  2206.         ShowTextDrawDialog(playerid, 4);
  2207.     }
  2208. }
  2209.  
  2210. stock ExportProject( playerid, type )
  2211. {
  2212.     /*  Exporta un proyecto.
  2213.         @playerid:          ID del jugador que exporta el proyecto.
  2214.         @type:              Tipo de exportación pedida:
  2215.             - Type 0:       Modo de exportación clásico.
  2216.     */
  2217.     SendClientMessage(playerid, MSG_COLOR, "El proyecto está siendo exportado, espera...");
  2218.    
  2219.     new filename[135], tmpstring[1152];
  2220.     if(type == 0)   format(filename, sizeof(filename), "%s.txt", CurrentProject);
  2221.     else            format(filename, sizeof(filename), "%s.pwn", CurrentProject);
  2222.     new File:File = fopen(filename, io_write);
  2223.     switch(type)
  2224.     {
  2225.         case 0: // Classic export.
  2226.         {
  2227.             fwrite(File, "// TextDraw desarrollado utilizando Zamaroht's Textdraw Editor 1.0\r\n\r\n");
  2228.             fwrite(File, "// Arriba de todo del script:\r\n");
  2229.             for(new i; i < MAX_TEXTDRAWS; i++)
  2230.             {
  2231.                 if(tData[i][T_Created])
  2232.                 {
  2233.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2234.                     fwrite(File, tmpstring);
  2235.                 }
  2236.             }
  2237.             fwrite(File, "\r\n// En OnGameModeInit preferentemente, procedemos a crear nuestros textdraws:\r\n");
  2238.             for(new i; i < MAX_TEXTDRAWS; i++)
  2239.             {
  2240.                 if(tData[i][T_Created])
  2241.                 {
  2242.                     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]);
  2243.                     fwrite(File, tmpstring);
  2244.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2245.                     {
  2246.                         format(tmpstring, sizeof(tmpstring), "TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2247.                         fwrite(File, tmpstring);
  2248.                     }
  2249.                     format(tmpstring, sizeof(tmpstring), "TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2250.                     fwrite(File, tmpstring);
  2251.                     format(tmpstring, sizeof(tmpstring), "TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2252.                     fwrite(File, tmpstring);
  2253.                     format(tmpstring, sizeof(tmpstring), "TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2254.                     fwrite(File, tmpstring);
  2255.                     format(tmpstring, sizeof(tmpstring), "TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2256.                     fwrite(File, tmpstring);
  2257.                     format(tmpstring, sizeof(tmpstring), "TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2258.                     fwrite(File, tmpstring);
  2259.                     format(tmpstring, sizeof(tmpstring), "TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2260.                     fwrite(File, tmpstring);
  2261.                     if(tData[i][T_Outline] == 0)
  2262.                     {
  2263.                         format(tmpstring, sizeof(tmpstring), "TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2264.                         fwrite(File, tmpstring);
  2265.                     }
  2266.                     if(tData[i][T_UseBox] == 1)
  2267.                     {
  2268.                         format(tmpstring, sizeof(tmpstring), "TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2269.                         fwrite(File, tmpstring);
  2270.                         format(tmpstring, sizeof(tmpstring), "TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2271.                         fwrite(File, tmpstring);
  2272.                         format(tmpstring, sizeof(tmpstring), "TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2273.                         fwrite(File, tmpstring);
  2274.                     }
  2275.                     fwrite(File, "\r\n");
  2276.                 }
  2277.             }
  2278.             fwrite(File, "// Ahora puedes usar TextDrawShowForPlayer(-ForAll), TextDrawHideForPlayer(-ForAll) y\r\n");
  2279.             fwrite(File, "// TextDrawDestroy para mostrar, esconder y destruir el textdraw.");
  2280.  
  2281.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.txt en el directorio scriptfiles.", CurrentProject);
  2282.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2283.         }
  2284.        
  2285.         case 1: // Show all the time
  2286.         {
  2287.             fwrite(File, "/*\r\n");
  2288.             fwrite(File, "Filterscript generado utilizando Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2289.             fwrite(File, "Diseñado para SA-MP 0.3a.\r\n\r\n");
  2290.             new ye,mo,da,ho,mi,se;
  2291.             getdate(ye,mo,da);
  2292.             gettime(ho,mi,se);
  2293.             format(tmpstring, sizeof(tmpstring), "Hora y Fecha: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2294.             fwrite(File, tmpstring);
  2295.             fwrite(File, "Instrucciones:\r\n");
  2296.             fwrite(File, "1- Compilar este archivo utilizando el compilador provisto por el pack de server de sa-mp.\r\n");
  2297.             fwrite(File, "2- Copiar el archivo .amx generado al directorio filterscripts.\r\n");
  2298.             fwrite(File, "3- Añadir el filterscript al archivo server.cfg (más información aquí:\r\n");
  2299.             fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2300.             fwrite(File, "4- Ejecutar el servidor!\r\n\r\n");
  2301.             fwrite(File, "Licencia:\r\n");
  2302.             fwrite(File, "Tienes derechos completos sobre este archivo. Pueeds distribuirlo, modificarlo y\r\n");
  2303.             fwrite(File, "cambiarlo tanto como quieras, sin tener que dar ningún credito en especial.\r\n");
  2304.             fwrite(File, "*/\r\n\r\n");
  2305.             fwrite(File, "#include <a_samp>\r\n\r\n");
  2306.             for(new i; i < MAX_TEXTDRAWS; i++)
  2307.             {
  2308.                 if(tData[i][T_Created])
  2309.                 {
  2310.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2311.                     fwrite(File, tmpstring);
  2312.                 }
  2313.             }
  2314.             fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2315.             fwrite(File, "{\r\n");
  2316.             fwrite(File, "  print(\"Archivo de Textdraws generado utilizando\");\r\n");
  2317.             fwrite(File, "  print(\"    Zamaroht's textdraw editor fue exitosamente cargado.\");\r\n\r\n");
  2318.             fwrite(File, "  // Crear los textdraws:\r\n");
  2319.             for(new i; i < MAX_TEXTDRAWS; i++)
  2320.             {
  2321.                 if(tData[i][T_Created])
  2322.                 {
  2323.                     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]);
  2324.                     fwrite(File, tmpstring);
  2325.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2326.                     {
  2327.                         format(tmpstring, sizeof(tmpstring), "  TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2328.                         fwrite(File, tmpstring);
  2329.                     }
  2330.                     format(tmpstring, sizeof(tmpstring), "  TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2331.                     fwrite(File, tmpstring);
  2332.                     format(tmpstring, sizeof(tmpstring), "  TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2333.                     fwrite(File, tmpstring);
  2334.                     format(tmpstring, sizeof(tmpstring), "  TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2335.                     fwrite(File, tmpstring);
  2336.                     format(tmpstring, sizeof(tmpstring), "  TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2337.                     fwrite(File, tmpstring);
  2338.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2339.                     fwrite(File, tmpstring);
  2340.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2341.                     fwrite(File, tmpstring);
  2342.                     if(tData[i][T_Outline] == 0)
  2343.                     {
  2344.                         format(tmpstring, sizeof(tmpstring), "  TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2345.                         fwrite(File, tmpstring);
  2346.                     }
  2347.                     if(tData[i][T_UseBox] == 1)
  2348.                     {
  2349.                         format(tmpstring, sizeof(tmpstring), "  TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2350.                         fwrite(File, tmpstring);
  2351.                         format(tmpstring, sizeof(tmpstring), "  TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2352.                         fwrite(File, tmpstring);
  2353.                         format(tmpstring, sizeof(tmpstring), "  TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2354.                         fwrite(File, tmpstring);
  2355.                     }
  2356.                     fwrite(File, "\r\n");
  2357.                 }
  2358.             }
  2359.             fwrite(File, "  for(new i; i < MAX_PLAYERS; i ++)\r\n");
  2360.             fwrite(File, "  {\r\n");
  2361.             fwrite(File, "      if(IsPlayerConnected(i))\r\n");
  2362.             fwrite(File, "      {\r\n");
  2363.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2364.             {
  2365.                 if(tData[i][T_Created])
  2366.                 {
  2367.                     format(tmpstring, sizeof(tmpstring), "          TextDrawShowForPlayer(i, Textdraw%d);\r\n", i);
  2368.                     fwrite(File, tmpstring);
  2369.                 }
  2370.             }
  2371.             fwrite(File, "      }\r\n");
  2372.             fwrite(File, "  }\r\n");
  2373.             fwrite(File, "  return 1;\r\n");
  2374.             fwrite(File, "}\r\n\r\n");
  2375.             fwrite(File, "public OnFilterScriptExit()\r\n");
  2376.             fwrite(File, "{\r\n");
  2377.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2378.             {
  2379.                 if(tData[i][T_Created])
  2380.                 {
  2381.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  2382.                     fwrite(File, tmpstring);
  2383.                     format(tmpstring, sizeof(tmpstring), "  TextDrawDestroy(Textdraw%d);\r\n", i);
  2384.                     fwrite(File, tmpstring);
  2385.                 }
  2386.             }
  2387.             fwrite(File, "  return 1;\r\n");
  2388.             fwrite(File, "}\r\n\r\n");
  2389.             fwrite(File, "public OnPlayerConnect(playerid)\r\n");
  2390.             fwrite(File, "{\r\n");
  2391.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2392.             {
  2393.                 if(tData[i][T_Created])
  2394.                 {
  2395.                     format(tmpstring, sizeof(tmpstring), "  TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2396.                     fwrite(File, tmpstring);
  2397.                 }
  2398.             }
  2399.             fwrite(File, "  return 1;\r\n");
  2400.             fwrite(File, "}\r\n");
  2401.            
  2402.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.pwn en el directorio scriptfiles como un filterscript.", CurrentProject);
  2403.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2404.         }
  2405.        
  2406.         case 2: // Show on class selection
  2407.         {
  2408.             fwrite(File, "/*\r\n");
  2409.             fwrite(File, "Filterscript generado utilizando Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2410.             fwrite(File, "Diseñado para SA-MP 0.3a.\r\n\r\n");
  2411.             new ye,mo,da,ho,mi,se;
  2412.             getdate(ye,mo,da);
  2413.             gettime(ho,mi,se);
  2414.             format(tmpstring, sizeof(tmpstring), "Hora y Fecha: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2415.             fwrite(File, tmpstring);
  2416.             fwrite(File, "Instrucciones:\r\n");
  2417.             fwrite(File, "1- Compilar este archivo utilizando el compilador provisto por el pack de server de sa-mp.\r\n");
  2418.             fwrite(File, "2- Copiar el archivo .amx generado al directorio filterscripts.\r\n");
  2419.             fwrite(File, "3- Añadir el filterscript al archivo server.cfg (más información aquí:\r\n");
  2420.             fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2421.             fwrite(File, "4- Ejecutar el servidor!\r\n\r\n");
  2422.             fwrite(File, "Licencia:\r\n");
  2423.             fwrite(File, "Tienes derechos completos sobre este archivo. Pueeds distribuirlo, modificarlo y\r\n");
  2424.             fwrite(File, "cambiarlo tanto como quieras, sin tener que dar ningún credito en especial.\r\n");
  2425.             fwrite(File, "*/\r\n\r\n");
  2426.             fwrite(File, "#include <a_samp>\r\n\r\n");
  2427.             for(new i; i < MAX_TEXTDRAWS; i++)
  2428.             {
  2429.                 if(tData[i][T_Created])
  2430.                 {
  2431.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2432.                     fwrite(File, tmpstring);
  2433.                 }
  2434.             }
  2435.             fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2436.             fwrite(File, "{\r\n");
  2437.             fwrite(File, "  print(\"Archivo de Textdraws generado utilizando\");\r\n");
  2438.             fwrite(File, "  print(\"    Zamaroht's textdraw editor fue exitosamente cargado.\");\r\n\r\n");
  2439.             fwrite(File, "  // Crear los textdraws:\r\n");
  2440.             for(new i; i < MAX_TEXTDRAWS; i++)
  2441.             {
  2442.                 if(tData[i][T_Created])
  2443.                 {
  2444.                     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]);
  2445.                     fwrite(File, tmpstring);
  2446.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2447.                     {
  2448.                         format(tmpstring, sizeof(tmpstring), "  TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2449.                         fwrite(File, tmpstring);
  2450.                     }
  2451.                     format(tmpstring, sizeof(tmpstring), "  TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2452.                     fwrite(File, tmpstring);
  2453.                     format(tmpstring, sizeof(tmpstring), "  TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2454.                     fwrite(File, tmpstring);
  2455.                     format(tmpstring, sizeof(tmpstring), "  TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2456.                     fwrite(File, tmpstring);
  2457.                     format(tmpstring, sizeof(tmpstring), "  TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2458.                     fwrite(File, tmpstring);
  2459.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2460.                     fwrite(File, tmpstring);
  2461.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2462.                     fwrite(File, tmpstring);
  2463.                     if(tData[i][T_Outline] == 0)
  2464.                     {
  2465.                         format(tmpstring, sizeof(tmpstring), "  TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2466.                         fwrite(File, tmpstring);
  2467.                     }
  2468.                     if(tData[i][T_UseBox] == 1)
  2469.                     {
  2470.                         format(tmpstring, sizeof(tmpstring), "  TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2471.                         fwrite(File, tmpstring);
  2472.                         format(tmpstring, sizeof(tmpstring), "  TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2473.                         fwrite(File, tmpstring);
  2474.                         format(tmpstring, sizeof(tmpstring), "  TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2475.                         fwrite(File, tmpstring);
  2476.                     }
  2477.                     fwrite(File, "\r\n");
  2478.                 }
  2479.             }
  2480.             fwrite(File, "  return 1;\r\n");
  2481.             fwrite(File, "}\r\n\r\n");
  2482.             fwrite(File, "public OnFilterScriptExit()\r\n");
  2483.             fwrite(File, "{\r\n");
  2484.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2485.             {
  2486.                 if(tData[i][T_Created])
  2487.                 {
  2488.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  2489.                     fwrite(File, tmpstring);
  2490.                     format(tmpstring, sizeof(tmpstring), "  TextDrawDestroy(Textdraw%d);\r\n", i);
  2491.                     fwrite(File, tmpstring);
  2492.                 }
  2493.             }
  2494.             fwrite(File, "  return 1;\r\n");
  2495.             fwrite(File, "}\r\n\r\n");
  2496.             fwrite(File, "public OnPlayerRequestClass(playerid, classid)\r\n");
  2497.             fwrite(File, "{\r\n");
  2498.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2499.             {
  2500.                 if(tData[i][T_Created])
  2501.                 {
  2502.                     format(tmpstring, sizeof(tmpstring), "  TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2503.                     fwrite(File, tmpstring);
  2504.                 }
  2505.             }
  2506.             fwrite(File, "  return 1;\r\n");
  2507.             fwrite(File, "}\r\n\r\n");
  2508.             fwrite(File, "public OnPlayerSpawn(playerid)\r\n");
  2509.             fwrite(File, "{\r\n");
  2510.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2511.             {
  2512.                 if(tData[i][T_Created])
  2513.                 {
  2514.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2515.                     fwrite(File, tmpstring);
  2516.                 }
  2517.             }
  2518.             fwrite(File, "  return 1;\r\n");
  2519.             fwrite(File, "}\r\n\r\n");
  2520.            
  2521.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.pwn en el directorio scriptfiles como un filterscript.", CurrentProject);
  2522.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2523.         }
  2524.        
  2525.         case 3: // Show while in vehicle
  2526.         {
  2527.             fwrite(File, "/*\r\n");
  2528.             fwrite(File, "Filterscript generado utilizando Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2529.             fwrite(File, "Diseñado para SA-MP 0.3a.\r\n\r\n");
  2530.             new ye,mo,da,ho,mi,se;
  2531.             getdate(ye,mo,da);
  2532.             gettime(ho,mi,se);
  2533.             format(tmpstring, sizeof(tmpstring), "Hora y Fecha: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2534.             fwrite(File, tmpstring);
  2535.             fwrite(File, "Instrucciones:\r\n");
  2536.             fwrite(File, "1- Compilar este archivo utilizando el compilador provisto por el pack de server de sa-mp.\r\n");
  2537.             fwrite(File, "2- Copiar el archivo .amx generado al directorio filterscripts.\r\n");
  2538.             fwrite(File, "3- Añadir el filterscript al archivo server.cfg (más información aquí:\r\n");
  2539.             fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2540.             fwrite(File, "4- Ejecutar el servidor!\r\n\r\n");
  2541.             fwrite(File, "Licencia:\r\n");
  2542.             fwrite(File, "Tienes derechos completos sobre este archivo. Pueeds distribuirlo, modificarlo y\r\n");
  2543.             fwrite(File, "cambiarlo tanto como quieras, sin tener que dar ningún credito en especial.\r\n");
  2544.             fwrite(File, "*/\r\n\r\n");
  2545.             fwrite(File, "#include <a_samp>\r\n\r\n");
  2546.             for(new i; i < MAX_TEXTDRAWS; i++)
  2547.             {
  2548.                 if(tData[i][T_Created])
  2549.                 {
  2550.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2551.                     fwrite(File, tmpstring);
  2552.                 }
  2553.             }
  2554.             fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2555.             fwrite(File, "{\r\n");
  2556.             fwrite(File, "  print(\"Archivo de Textdraws generado utilizando\");\r\n");
  2557.             fwrite(File, "  print(\"    Zamaroht's textdraw editor fue exitosamente cargado.\");\r\n\r\n");
  2558.             fwrite(File, "  // Crear los textdraws:\r\n");
  2559.             for(new i; i < MAX_TEXTDRAWS; i++)
  2560.             {
  2561.                 if(tData[i][T_Created])
  2562.                 {
  2563.                     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]);
  2564.                     fwrite(File, tmpstring);
  2565.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2566.                     {
  2567.                         format(tmpstring, sizeof(tmpstring), "  TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2568.                         fwrite(File, tmpstring);
  2569.                     }
  2570.                     format(tmpstring, sizeof(tmpstring), "  TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2571.                     fwrite(File, tmpstring);
  2572.                     format(tmpstring, sizeof(tmpstring), "  TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2573.                     fwrite(File, tmpstring);
  2574.                     format(tmpstring, sizeof(tmpstring), "  TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2575.                     fwrite(File, tmpstring);
  2576.                     format(tmpstring, sizeof(tmpstring), "  TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2577.                     fwrite(File, tmpstring);
  2578.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2579.                     fwrite(File, tmpstring);
  2580.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2581.                     fwrite(File, tmpstring);
  2582.                     if(tData[i][T_Outline] == 0)
  2583.                     {
  2584.                         format(tmpstring, sizeof(tmpstring), "  TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2585.                         fwrite(File, tmpstring);
  2586.                     }
  2587.                     if(tData[i][T_UseBox] == 1)
  2588.                     {
  2589.                         format(tmpstring, sizeof(tmpstring), "  TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2590.                         fwrite(File, tmpstring);
  2591.                         format(tmpstring, sizeof(tmpstring), "  TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2592.                         fwrite(File, tmpstring);
  2593.                         format(tmpstring, sizeof(tmpstring), "  TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2594.                         fwrite(File, tmpstring);
  2595.                     }
  2596.                     fwrite(File, "\r\n");
  2597.                 }
  2598.             }
  2599.             fwrite(File, "  return 1;\r\n");
  2600.             fwrite(File, "}\r\n\r\n");
  2601.             fwrite(File, "public OnFilterScriptExit()\r\n");
  2602.             fwrite(File, "{\r\n");
  2603.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2604.             {
  2605.                 if(tData[i][T_Created])
  2606.                 {
  2607.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  2608.                     fwrite(File, tmpstring);
  2609.                     format(tmpstring, sizeof(tmpstring), "  TextDrawDestroy(Textdraw%d);\r\n", i);
  2610.                     fwrite(File, tmpstring);
  2611.                 }
  2612.             }
  2613.             fwrite(File, "  return 1;\r\n");
  2614.             fwrite(File, "}\r\n\r\n");
  2615.             fwrite(File, "public OnPlayerStateChange(playerid, newstate, oldstate)\r\n");
  2616.             fwrite(File, "{\r\n");
  2617.             fwrite(File, "  if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)\r\n");
  2618.             fwrite(File, "  {\r\n");
  2619.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2620.             {
  2621.                 if(tData[i][T_Created])
  2622.                 {
  2623.                     format(tmpstring, sizeof(tmpstring), "      TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2624.                     fwrite(File, tmpstring);
  2625.                 }
  2626.             }
  2627.             fwrite(File, "  }\r\n");
  2628.             fwrite(File, "  else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)\r\n");
  2629.             fwrite(File, "  {\r\n");
  2630.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2631.             {
  2632.                 if(tData[i][T_Created])
  2633.                 {
  2634.                     format(tmpstring, sizeof(tmpstring), "      TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2635.                     fwrite(File, tmpstring);
  2636.                 }
  2637.             }
  2638.             fwrite(File, "  }\r\n");
  2639.             fwrite(File, "  return 1;\r\n");
  2640.             fwrite(File, "}\r\n");
  2641.            
  2642.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.pwn en el directorio scriptfiles como un filterscript.", CurrentProject);
  2643.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2644.         }
  2645.        
  2646.         case 4: // Use command
  2647.         {
  2648.             fwrite(File, "/*\r\n");
  2649.             fwrite(File, "Filterscript generado utilizando Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2650.             fwrite(File, "Diseñado para SA-MP 0.3a.\r\n\r\n");
  2651.             new ye,mo,da,ho,mi,se;
  2652.             getdate(ye,mo,da);
  2653.             gettime(ho,mi,se);
  2654.             format(tmpstring, sizeof(tmpstring), "Hora y Fecha: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2655.             fwrite(File, tmpstring);
  2656.             fwrite(File, "Instrucciones:\r\n");
  2657.             fwrite(File, "1- Compilar este archivo utilizando el compilador provisto por el pack de server de sa-mp.\r\n");
  2658.             fwrite(File, "2- Copiar el archivo .amx generado al directorio filterscripts.\r\n");
  2659.             fwrite(File, "3- Añadir el filterscript al archivo server.cfg (más información aquí:\r\n");
  2660.             fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2661.             fwrite(File, "4- Ejecutar el servidor!\r\n\r\n");
  2662.             fwrite(File, "Licencia:\r\n");
  2663.             fwrite(File, "Tienes derechos completos sobre este archivo. Pueeds distribuirlo, modificarlo y\r\n");
  2664.             fwrite(File, "cambiarlo tanto como quieras, sin tener que dar ningún credito en especial.\r\n");
  2665.             fwrite(File, "*/\r\n\r\n");
  2666.             fwrite(File, "#include <a_samp>\r\n\r\n");
  2667.             fwrite(File, "new Showing[MAX_PLAYERS];\r\n\r\n");
  2668.             for(new i; i < MAX_TEXTDRAWS; i++)
  2669.             {
  2670.                 if(tData[i][T_Created])
  2671.                 {
  2672.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2673.                     fwrite(File, tmpstring);
  2674.                 }
  2675.             }
  2676.             fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2677.             fwrite(File, "{\r\n");
  2678.             fwrite(File, "  print(\"Archivo de Textdraws generado utilizando\");\r\n");
  2679.             fwrite(File, "  print(\"    Zamaroht's textdraw editor fue exitosamente cargado.\");\r\n\r\n");
  2680.             fwrite(File, "  // Crear los textdraws:\r\n");
  2681.             for(new i; i < MAX_TEXTDRAWS; i++)
  2682.             {
  2683.                 if(tData[i][T_Created])
  2684.                 {
  2685.                     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]);
  2686.                     fwrite(File, tmpstring);
  2687.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2688.                     {
  2689.                         format(tmpstring, sizeof(tmpstring), "  TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2690.                         fwrite(File, tmpstring);
  2691.                     }
  2692.                     format(tmpstring, sizeof(tmpstring), "  TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2693.                     fwrite(File, tmpstring);
  2694.                     format(tmpstring, sizeof(tmpstring), "  TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2695.                     fwrite(File, tmpstring);
  2696.                     format(tmpstring, sizeof(tmpstring), "  TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2697.                     fwrite(File, tmpstring);
  2698.                     format(tmpstring, sizeof(tmpstring), "  TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2699.                     fwrite(File, tmpstring);
  2700.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2701.                     fwrite(File, tmpstring);
  2702.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2703.                     fwrite(File, tmpstring);
  2704.                     if(tData[i][T_Outline] == 0)
  2705.                     {
  2706.                         format(tmpstring, sizeof(tmpstring), "  TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2707.                         fwrite(File, tmpstring);
  2708.                     }
  2709.                     if(tData[i][T_UseBox] == 1)
  2710.                     {
  2711.                         format(tmpstring, sizeof(tmpstring), "  TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2712.                         fwrite(File, tmpstring);
  2713.                         format(tmpstring, sizeof(tmpstring), "  TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2714.                         fwrite(File, tmpstring);
  2715.                         format(tmpstring, sizeof(tmpstring), "  TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2716.                         fwrite(File, tmpstring);
  2717.                     }
  2718.                     fwrite(File, "\r\n");
  2719.                 }
  2720.             }
  2721.             fwrite(File, "  return 1;\r\n");
  2722.             fwrite(File, "}\r\n\r\n");
  2723.             fwrite(File, "public OnFilterScriptExit()\r\n");
  2724.             fwrite(File, "{\r\n");
  2725.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2726.             {
  2727.                 if(tData[i][T_Created])
  2728.                 {
  2729.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  2730.                     fwrite(File, tmpstring);
  2731.                     format(tmpstring, sizeof(tmpstring), "  TextDrawDestroy(Textdraw%d);\r\n", i);
  2732.                     fwrite(File, tmpstring);
  2733.                 }
  2734.             }
  2735.             fwrite(File, "  return 1;\r\n");
  2736.             fwrite(File, "}\r\n\r\n");
  2737.             fwrite(File, "public OnPlayerConnect(playerid)\r\n");
  2738.             fwrite(File, "{\r\n");
  2739.             fwrite(File, "  Showing[playerid] = 0;\r\n");
  2740.             fwrite(File, "}\r\n\r\n");
  2741.             fwrite(File, "public OnPlayerCommandText(playerid, cmdtext[])\r\n");
  2742.             fwrite(File, "{\r\n");
  2743.             if(pData[playerid][P_Aux] != 0)
  2744.             {
  2745.                 format(tmpstring, sizeof(tmpstring), "  if(!strcmp(cmdtext, \"%s\") && Showing[playerid] == 0)\r\n", pData[playerid][P_ExpCommand]);
  2746.                 fwrite(File, tmpstring);
  2747.             }
  2748.             else
  2749.             {
  2750.                 format(tmpstring, sizeof(tmpstring), "  if(!strcmp(cmdtext, \"%s\"))\r\n", pData[playerid][P_ExpCommand]);
  2751.                 fwrite(File, tmpstring);
  2752.             }
  2753.             fwrite(File, "  {\r\n");
  2754.             fwrite(File, "      if(Showing[playerid] == 1)\r\n");
  2755.             fwrite(File, "      {\r\n");
  2756.             fwrite(File, "          Showing[playerid] = 0;\r\n");
  2757.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2758.             {
  2759.                 if(tData[i][T_Created])
  2760.                 {
  2761.                     format(tmpstring, sizeof(tmpstring), "          TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2762.                     fwrite(File, tmpstring);
  2763.                 }
  2764.             }
  2765.             fwrite(File, "      }\r\n");
  2766.             fwrite(File, "      else\r\n");
  2767.             fwrite(File, "      {\r\n");
  2768.             fwrite(File, "          Showing[playerid] = 1;\r\n");
  2769.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2770.             {
  2771.                 if(tData[i][T_Created])
  2772.                 {
  2773.                     format(tmpstring, sizeof(tmpstring), "          TextDrawShowForPlayer(playerid, Textdraw%d);\r\n", i);
  2774.                     fwrite(File, tmpstring);
  2775.                 }
  2776.             }
  2777.             if(pData[playerid][P_Aux] != 0)
  2778.             {
  2779.                 format(tmpstring, sizeof(tmpstring), "          SetTimerEx(\"HideTextdraws\", %d, 0, \"i\", playerid);\r\n", pData[playerid][P_Aux]*1000);
  2780.                 fwrite(File, tmpstring);
  2781.             }
  2782.             fwrite(File, "      }\r\n");
  2783.             fwrite(File, "  }\r\n");
  2784.             fwrite(File, "  return 1;\r\n");
  2785.             fwrite(File, "}\r\n");
  2786.             if(pData[playerid][P_Aux] != 0)
  2787.             {
  2788.                 fwrite(File, "\r\n");
  2789.                 fwrite(File, "forward HideTextdraws(playerid);\r\n");
  2790.                 fwrite(File, "public HideTextdraws(playerid)\r\n");
  2791.                 fwrite(File, "{\r\n");
  2792.                 fwrite(File, "  Showing[playerid] = 0;\r\n");
  2793.                 for(new i; i < MAX_TEXTDRAWS; i ++)
  2794.                 {
  2795.                     if(tData[i][T_Created])
  2796.                     {
  2797.                         format(tmpstring, sizeof(tmpstring), "  TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  2798.                         fwrite(File, tmpstring);
  2799.                     }
  2800.                 }
  2801.                 fwrite(File, "}\r\n");
  2802.             }
  2803.            
  2804.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.pwn en el directorio scriptfiles como un filterscript.", CurrentProject);
  2805.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2806.         }
  2807.        
  2808.         case 5: // Every X time
  2809.         {
  2810.             fwrite(File, "/*\r\n");
  2811.             fwrite(File, "Filterscript generado utilizando Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2812.             fwrite(File, "Diseñado para SA-MP 0.3a.\r\n\r\n");
  2813.             new ye,mo,da,ho,mi,se;
  2814.             getdate(ye,mo,da);
  2815.             gettime(ho,mi,se);
  2816.             format(tmpstring, sizeof(tmpstring), "Hora y Fecha: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2817.             fwrite(File, tmpstring);
  2818.             fwrite(File, "Instrucciones:\r\n");
  2819.             fwrite(File, "1- Compilar este archivo utilizando el compilador provisto por el pack de server de sa-mp.\r\n");
  2820.             fwrite(File, "2- Copiar el archivo .amx generado al directorio filterscripts.\r\n");
  2821.             fwrite(File, "3- Añadir el filterscript al archivo server.cfg (más información aquí:\r\n");
  2822.             fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2823.             fwrite(File, "4- Ejecutar el servidor!\r\n\r\n");
  2824.             fwrite(File, "Licencia:\r\n");
  2825.             fwrite(File, "Tienes derechos completos sobre este archivo. Pueeds distribuirlo, modificarlo y\r\n");
  2826.             fwrite(File, "cambiarlo tanto como quieras, sin tener que dar ningún credito en especial.\r\n");
  2827.             fwrite(File, "*/\r\n\r\n");
  2828.             fwrite(File, "#include <a_samp>\r\n\r\n");
  2829.             fwrite(File, "new Timer;\r\n\r\n");
  2830.             for(new i; i < MAX_TEXTDRAWS; i++)
  2831.             {
  2832.                 if(tData[i][T_Created])
  2833.                 {
  2834.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2835.                     fwrite(File, tmpstring);
  2836.                 }
  2837.             }
  2838.             fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2839.             fwrite(File, "{\r\n");
  2840.             fwrite(File, "  print(\"Archivo de Textdraws generado utilizando\");\r\n");
  2841.             fwrite(File, "  print(\"    Zamaroht's textdraw editor fue exitosamente cargado.\");\r\n\r\n");
  2842.             fwrite(File, "  // Crear los textdraws:\r\n");
  2843.             for(new i; i < MAX_TEXTDRAWS; i++)
  2844.             {
  2845.                 if(tData[i][T_Created])
  2846.                 {
  2847.                     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]);
  2848.                     fwrite(File, tmpstring);
  2849.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2850.                     {
  2851.                         format(tmpstring, sizeof(tmpstring), "  TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2852.                         fwrite(File, tmpstring);
  2853.                     }
  2854.                     format(tmpstring, sizeof(tmpstring), "  TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2855.                     fwrite(File, tmpstring);
  2856.                     format(tmpstring, sizeof(tmpstring), "  TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2857.                     fwrite(File, tmpstring);
  2858.                     format(tmpstring, sizeof(tmpstring), "  TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2859.                     fwrite(File, tmpstring);
  2860.                     format(tmpstring, sizeof(tmpstring), "  TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2861.                     fwrite(File, tmpstring);
  2862.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2863.                     fwrite(File, tmpstring);
  2864.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2865.                     fwrite(File, tmpstring);
  2866.                     if(tData[i][T_Outline] == 0)
  2867.                     {
  2868.                         format(tmpstring, sizeof(tmpstring), "  TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2869.                         fwrite(File, tmpstring);
  2870.                     }
  2871.                     if(tData[i][T_UseBox] == 1)
  2872.                     {
  2873.                         format(tmpstring, sizeof(tmpstring), "  TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2874.                         fwrite(File, tmpstring);
  2875.                         format(tmpstring, sizeof(tmpstring), "  TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  2876.                         fwrite(File, tmpstring);
  2877.                         format(tmpstring, sizeof(tmpstring), "  TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  2878.                         fwrite(File, tmpstring);
  2879.                     }
  2880.                     fwrite(File, "\r\n");
  2881.                 }
  2882.             }
  2883.             format(tmpstring, sizeof(tmpstring), "  Timer = SetTimer(\"ShowMessage\", %d, 1);\r\n", pData[playerid][P_Aux]*1000);
  2884.             fwrite(File, tmpstring);
  2885.             fwrite(File, "  return 1;\r\n");
  2886.             fwrite(File, "}\r\n\r\n");
  2887.             fwrite(File, "public OnFilterScriptExit()\r\n");
  2888.             fwrite(File, "{\r\n");
  2889.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2890.             {
  2891.                 if(tData[i][T_Created])
  2892.                 {
  2893.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  2894.                     fwrite(File, tmpstring);
  2895.                     format(tmpstring, sizeof(tmpstring), "  TextDrawDestroy(Textdraw%d);\r\n", i);
  2896.                     fwrite(File, tmpstring);
  2897.                 }
  2898.             }
  2899.             fwrite(File, "  KillTimer(Timer);\r\n");
  2900.             fwrite(File, "  return 1;\r\n");
  2901.             fwrite(File, "}\r\n\r\n");
  2902.             fwrite(File, "forward ShowMessage( );\r\n");
  2903.             fwrite(File, "public ShowMessage( )\r\n");
  2904.             fwrite(File, "{\r\n");
  2905.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2906.             {
  2907.                 if(tData[i][T_Created])
  2908.                 {
  2909.                     format(tmpstring, sizeof(tmpstring), "  TextDrawShowForAll(Textdraw%d);\r\n", i);
  2910.                     fwrite(File, tmpstring);
  2911.                 }
  2912.             }
  2913.             format(tmpstring, sizeof(tmpstring), "  SetTimer(\"HideMessage\", %d, 1);\r\n", pData[playerid][P_Aux2]*1000);
  2914.             fwrite(File, tmpstring);
  2915.             fwrite(File, "}\r\n\r\n");
  2916.             fwrite(File, "forward HideMessage( );\r\n");
  2917.             fwrite(File, "public HideMessage( )\r\n");
  2918.             fwrite(File, "{\r\n");
  2919.             for(new i; i < MAX_TEXTDRAWS; i ++)
  2920.             {
  2921.                 if(tData[i][T_Created])
  2922.                 {
  2923.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  2924.                     fwrite(File, tmpstring);
  2925.                 }
  2926.             }
  2927.             fwrite(File, "}");
  2928.            
  2929.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.pwn en el directorio scriptfiles como un filterscript.", CurrentProject);
  2930.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  2931.         }
  2932.        
  2933.         case 6: // After kill
  2934.         {
  2935.             fwrite(File, "/*\r\n");
  2936.             fwrite(File, "Filterscript generado utilizando Zamaroht's TextDraw Editor Version 1.0.\r\n");
  2937.             fwrite(File, "Diseñado para SA-MP 0.3a.\r\n\r\n");
  2938.             new ye,mo,da,ho,mi,se;
  2939.             getdate(ye,mo,da);
  2940.             gettime(ho,mi,se);
  2941.             format(tmpstring, sizeof(tmpstring), "Hora y Fecha: %d-%d-%d @ %d:%d:%d\r\n\r\n", ye, mo, da, ho, mi, se);
  2942.             fwrite(File, tmpstring);
  2943.             fwrite(File, "Instrucciones:\r\n");
  2944.             fwrite(File, "1- Compilar este archivo utilizando el compilador provisto por el pack de server de sa-mp.\r\n");
  2945.             fwrite(File, "2- Copiar el archivo .amx generado al directorio filterscripts.\r\n");
  2946.             fwrite(File, "3- Añadir el filterscript al archivo server.cfg (más información aquí:\r\n");
  2947.             fwrite(File, "http://wiki.sa-mp.com/wiki/Server.cfg)\r\n");
  2948.             fwrite(File, "4- Ejecutar el servidor!\r\n\r\n");
  2949.             fwrite(File, "Licencia:\r\n");
  2950.             fwrite(File, "Tienes derechos completos sobre este archivo. Pueeds distribuirlo, modificarlo y\r\n");
  2951.             fwrite(File, "cambiarlo tanto como quieras, sin tener que dar ningún credito en especial.\r\n");
  2952.             fwrite(File, "*/\r\n\r\n");
  2953.             fwrite(File, "#include <a_samp>\r\n\r\n");
  2954.             for(new i; i < MAX_TEXTDRAWS; i++)
  2955.             {
  2956.                 if(tData[i][T_Created])
  2957.                 {
  2958.                     format(tmpstring, sizeof(tmpstring), "new Text:Textdraw%d;\r\n", i);
  2959.                     fwrite(File, tmpstring);
  2960.                 }
  2961.             }
  2962.             fwrite(File, "\r\npublic OnFilterScriptInit()\r\n");
  2963.             fwrite(File, "{\r\n");
  2964.             fwrite(File, "  print(\"Archivo de Textdraws generado utilizando\");\r\n");
  2965.             fwrite(File, "  print(\"    Zamaroht's textdraw editor fue exitosamente cargado.\");\r\n\r\n");
  2966.             fwrite(File, "  // Crear los textdraws:\r\n");
  2967.             for(new i; i < MAX_TEXTDRAWS; i++)
  2968.             {
  2969.                 if(tData[i][T_Created])
  2970.                 {
  2971.                     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]);
  2972.                     fwrite(File, tmpstring);
  2973.                     if(tData[i][T_Alignment] != 0 && tData[i][T_Alignment] != 1)
  2974.                     {
  2975.                         format(tmpstring, sizeof(tmpstring), "  TextDrawAlignment(Textdraw%d, %d);\r\n", i, tData[i][T_Alignment]);
  2976.                         fwrite(File, tmpstring);
  2977.                     }
  2978.                     format(tmpstring, sizeof(tmpstring), "  TextDrawBackgroundColor(Textdraw%d, %d);\r\n", i, tData[i][T_BackColor]);
  2979.                     fwrite(File, tmpstring);
  2980.                     format(tmpstring, sizeof(tmpstring), "  TextDrawFont(Textdraw%d, %d);\r\n", i, tData[i][T_Font]);
  2981.                     fwrite(File, tmpstring);
  2982.                     format(tmpstring, sizeof(tmpstring), "  TextDrawLetterSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_XSize], tData[i][T_YSize]);
  2983.                     fwrite(File, tmpstring);
  2984.                     format(tmpstring, sizeof(tmpstring), "  TextDrawColor(Textdraw%d, %d);\r\n", i, tData[i][T_Color]);
  2985.                     fwrite(File, tmpstring);
  2986.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetOutline(Textdraw%d, %d);\r\n", i, tData[i][T_Outline]);
  2987.                     fwrite(File, tmpstring);
  2988.                     format(tmpstring, sizeof(tmpstring), "  TextDrawSetProportional(Textdraw%d, %d);\r\n", i, tData[i][T_Proportional]);
  2989.                     fwrite(File, tmpstring);
  2990.                     if(tData[i][T_Outline] == 0)
  2991.                     {
  2992.                         format(tmpstring, sizeof(tmpstring), "  TextDrawSetShadow(Textdraw%d, %d);\r\n", i, tData[i][T_Shadow]);
  2993.                         fwrite(File, tmpstring);
  2994.                     }
  2995.                     if(tData[i][T_UseBox] == 1)
  2996.                     {
  2997.                         format(tmpstring, sizeof(tmpstring), "  TextDrawUseBox(Textdraw%d, %d);\r\n", i, tData[i][T_UseBox]);
  2998.                         fwrite(File, tmpstring);
  2999.                         format(tmpstring, sizeof(tmpstring), "  TextDrawBoxColor(Textdraw%d, %d);\r\n", i, tData[i][T_BoxColor]);
  3000.                         fwrite(File, tmpstring);
  3001.                         format(tmpstring, sizeof(tmpstring), "  TextDrawTextSize(Textdraw%d, %f, %f);\r\n", i, tData[i][T_TextSizeX], tData[i][T_TextSizeY]);
  3002.                         fwrite(File, tmpstring);
  3003.                     }
  3004.                     fwrite(File, "\r\n");
  3005.                 }
  3006.             }
  3007.             fwrite(File, "  return 1;\r\n");
  3008.             fwrite(File, "}\r\n\r\n");
  3009.             fwrite(File, "public OnFilterScriptExit()\r\n");
  3010.             fwrite(File, "{\r\n");
  3011.             for(new i; i < MAX_TEXTDRAWS; i ++)
  3012.             {
  3013.                 if(tData[i][T_Created])
  3014.                 {
  3015.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForAll(Textdraw%d);\r\n", i);
  3016.                     fwrite(File, tmpstring);
  3017.                     format(tmpstring, sizeof(tmpstring), "  TextDrawDestroy(Textdraw%d);\r\n", i);
  3018.                     fwrite(File, tmpstring);
  3019.                 }
  3020.             }
  3021.             fwrite(File, "  return 1;\r\n");
  3022.             fwrite(File, "}\r\n\r\n");
  3023.             fwrite(File, "public OnPlayerDeath(playerid, killerid, reason)\r\n");
  3024.             fwrite(File, "{\r\n");
  3025.             for(new i; i < MAX_TEXTDRAWS; i ++)
  3026.             {
  3027.                 if(tData[i][T_Created])
  3028.                 {
  3029.                     format(tmpstring, sizeof(tmpstring), "  TextDrawShowForPlayer(killerid, Textdraw%d);\r\n", i);
  3030.                     fwrite(File, tmpstring);
  3031.                 }
  3032.             }
  3033.             format(tmpstring, sizeof(tmpstring), "  SetTimerEx(\"HideMessage\", %d, 0, \"i\", killerid);\r\n", pData[playerid][P_Aux]*1000);
  3034.             fwrite(File, tmpstring);
  3035.             fwrite(File, "}\r\n\r\n");
  3036.             fwrite(File, "forward HideMessage(playerid);\r\n");
  3037.             fwrite(File, "public HideMessage(playerid)\r\n");
  3038.             fwrite(File, "{\r\n");
  3039.             for(new i; i < MAX_TEXTDRAWS; i ++)
  3040.             {
  3041.                 if(tData[i][T_Created])
  3042.                 {
  3043.                     format(tmpstring, sizeof(tmpstring), "  TextDrawHideForPlayer(playerid, Textdraw%d);\r\n", i);
  3044.                     fwrite(File, tmpstring);
  3045.                 }
  3046.             }
  3047.             fwrite(File, "}");
  3048.            
  3049.             format(tmpstring, sizeof(tmpstring), "Proyecto exportado a %s.pwn en el directorio scriptfiles como un filterscript.", CurrentProject);
  3050.             SendClientMessage(playerid, MSG_COLOR, tmpstring);
  3051.         }
  3052.     }
  3053.     fclose(File);
  3054.    
  3055.     ShowTextDrawDialog(playerid, 4);
  3056. }
  3057.  
  3058. // ================================================================================================================================
  3059. // ------------------------------------------------------- FUNCIONES AUXILIARES ---------------------------------------------------
  3060. // ================================================================================================================================
  3061.  
  3062.  
  3063. stock GetFileNameFromLst( file[], line )
  3064. {
  3065.     /*  Pasa por return la línea en la línea especificada del archivo especificado.
  3066.         @file[]:            Archivo del cual obtener la línea.
  3067.         @line:              Número de línea a pasar por return.
  3068.     */
  3069.     new string[150];
  3070.  
  3071.     new CurrLine,
  3072.         File:Handler = fopen(file, io_read);
  3073.  
  3074.     if(line >= 0 && CurrLine != line)
  3075.     {
  3076.         while(CurrLine != line)
  3077.         {
  3078.             fread(Handler, string);
  3079.             CurrLine ++;
  3080.         }
  3081.     }
  3082.  
  3083.     // Eliminar la siguiente línea, que es la pedida.
  3084.     fread(Handler, string);
  3085.     fclose(Handler);
  3086.  
  3087.     // Eliminar los últimos dos caractéres (\n)
  3088.     strmid(string, string, 0, strlen(string) - 2, 150);
  3089.  
  3090.     return string;
  3091. }
  3092.  
  3093. stock DeleteLineFromFile( file[], line )
  3094. {
  3095.     /*  Elimina una linea específica de un archivo específico.
  3096.         @file[]:        Archivo del cual eliminar la línea.
  3097.         @line:          Número de la línea a borrar.
  3098.     */
  3099.  
  3100.     if(line < 0) return false;
  3101.  
  3102.     new tmpfile[140];
  3103.     format(tmpfile, sizeof(tmpfile), "%s.tmp", file);
  3104.     fcopytextfile(file, tmpfile);
  3105.     // Copiado a un archivo temporal, ahora hay que volver a pasarlo.
  3106.  
  3107.     new CurrLine,
  3108.         File:FileFrom   = fopen(tmpfile, io_read),
  3109.         File:FileTo     = fopen(file, io_write);
  3110.  
  3111.     new tmpstring[200];
  3112.     if(CurrLine != line)
  3113.     {
  3114.         while(CurrLine != line)
  3115.         {
  3116.             fread(FileFrom, tmpstring);
  3117.             fwrite(FileTo, tmpstring);
  3118.             CurrLine ++;
  3119.         }
  3120.     }
  3121.  
  3122.     // Saltear una linea
  3123.     fread(FileFrom, tmpstring);
  3124.  
  3125.     // Escribir el resto
  3126.     while(fread(FileFrom, tmpstring))
  3127.     {
  3128.         fwrite(FileTo, tmpstring);
  3129.     }
  3130.  
  3131.     fclose(FileTo);
  3132.     fclose(FileFrom);
  3133.     // Remover archivo temporal.
  3134.     fremove(tmpfile);
  3135.     return true;
  3136. }
  3137.  
  3138. /** POR DRACOBLUE
  3139.  *  Strips Newline from the end of a string.
  3140.  *  Idea: Y_Less, Bugfixing (when length=1) by DracoBlue
  3141.  *  @param   string
  3142.  */
  3143. stock StripNewLine(string[])
  3144. {
  3145.     new len = strlen(string);
  3146.     if (string[0]==0) return ;
  3147.     if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
  3148.         string[len - 1] = 0;
  3149.         if (string[0]==0) return ;
  3150.         if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
  3151.     }
  3152. }
  3153.  
  3154. /** POR DRACOBLUE
  3155.  *  Copies a textfile (Source file won't be deleted!)
  3156.  *  @param   oldname
  3157.  *           newname
  3158.  */
  3159. stock fcopytextfile(oldname[],newname[]) {
  3160.     new File:ohnd,File:nhnd;
  3161.     if (!fexist(oldname)) return false;
  3162.     ohnd=fopen(oldname,io_read);
  3163.     nhnd=fopen(newname,io_write);
  3164.     new tmpres[256];
  3165.     while (fread(ohnd,tmpres)) {
  3166.         StripNewLine(tmpres);
  3167.         format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
  3168.         fwrite(nhnd,tmpres);
  3169.     }
  3170.     fclose(ohnd);
  3171.     fclose(nhnd);
  3172.     return true;
  3173. }
  3174.  
  3175. stock RGB( red, green, blue, alpha )
  3176. {
  3177.     /*  Combina un color y lo pasa a return, así puede ser usado en distintas funciones.
  3178.         @red:           Cantidad de color rojo.
  3179.         @green:         Cantidad de color verde.
  3180.         @blue:          Cantidad de color azul.
  3181.         @alpha:         Cantidad de transparencia en canal alpha.
  3182.  
  3183.         -Returns:
  3184.         Un entero (int) con el color formado.
  3185.     */
  3186.     return (red * 16777216) + (green * 65536) + (blue * 256) + alpha;
  3187. }
  3188.  
  3189. IsNumeric2(const string[])
  3190. {
  3191.     // Is Numeric Check 2
  3192.     // ------------------
  3193.     // Por DracoBlue... handles negative numbers
  3194.  
  3195.     new length=strlen(string);
  3196.     if (length==0) return false;
  3197.     for (new i = 0; i < length; i++)
  3198.     {
  3199.       if((string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+' && string[i]!='.') // Not a number,'+' or '-' or '.'
  3200.              || (string[i]=='-' && i!=0)                                             // A '-' but not first char.
  3201.              || (string[i]=='+' && i!=0)                                             // A '+' but not first char.
  3202.          ) return false;
  3203.     }
  3204.     if (length==1 && (string[0]=='-' || string[0]=='+' || string[0]=='.')) return false;
  3205.     return true;
  3206. }
  3207.  
  3208. /** POR DRACOBLUE
  3209.  *  Devuelve el valor de una string que estaba en hexadecimal
  3210.  *  @param string
  3211.  */
  3212. stock HexToInt(string[]) {
  3213.   if (string[0]==0) return 0;
  3214.   new i;
  3215.   new cur=1;
  3216.   new res=0;
  3217.   for (i=strlen(string);i>0;i--) {
  3218.     if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  3219.     cur=cur*16;
  3220.   }
  3221.   return res;
  3222. }
  3223.  
  3224. stock IsPlayerMinID(playerid)
  3225. {
  3226.     /*  Checkea si el jugador es la mínima ID del servidor.
  3227.         @playerid:              ID a checkear.
  3228.        
  3229.         -Returns:
  3230.         true si lo es, false si no lo es.
  3231.     */
  3232.     for(new i; i < playerid; i ++)
  3233.     {
  3234.         if(IsPlayerConnected(i))
  3235.         {
  3236.             if(IsPlayerNPC(i)) continue;
  3237.             else return false;
  3238.         }
  3239.     }
  3240.     return true;
  3241. }
  3242. // ================================================================================================================================
  3243. // --------------------------------------------------- FINAL DE FUNCIONES AUXILIARES ----------------------------------------------
  3244. // ================================================================================================================================
  3245.  
  3246. // Fin de archivo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement