Darky

WorldEdit

Feb 14th, 2012
757
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 63.14 KB | None | 0 0
  1. #if defined Credits
  2. ________________________________________________________________________________
  3. Hello guys ! This is WorldEdit filterscript.This script was created by DarKy
  4. (DarkyTheAngel) and please don't remove the credits.This filterscript design
  5. your world in SA:MP.With WorldEdit you can add/remove/rotate/edit objects as you
  6. want.WorldEdit - Best choise !
  7.                                                       Respectfully , DarKy !
  8. ________________________________________________________________________________
  9.                             ***** Changelog *****
  10. [2/14/2012] Post added on SA-MP.COM.
  11. [2/14/2012] Released.
  12. [2/14/2012] All object added.
  13. [2/14/2012] Multi-Language variables.
  14. [2/14/2012] Objects save function added.
  15. ________________________________________________________________________________
  16. #endif
  17. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  18.  #include      <a_samp> // Main include.
  19.  #include      <dutils> // Dutils include.
  20.  #include    <streamer> // Streamer include.
  21.  #define OBJECT_DISTANCE 300.0 // Object distance.
  22.  #pragma dynamic 9216 // Don't change this.
  23. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  24. #define COLOR_GREY                         0xAFAFAFAA
  25. #define COLOR_GREEN                        0x33AA33AA
  26. #define COLOR_RED                          0xAA3333AA
  27. #define COLOR_YELLOW                       0xFFFF00AA
  28. #define COLOR_WHITE                        0xFFFFFFAA
  29. #define COLOR_ULTRARED                     0xE60000FF
  30. #define COLOR_BLUE                         0x0000BBAA
  31. #define COLOR_LIGHTGREEN                   0x9ACD32AA
  32. #define COLOR_LIGHTBLUE                    0x33CCFFAA
  33. #define COLOR_ORANGE                       0xFF9900AA
  34. #define COLOR_RED                          0xAA3333AA
  35. #define COLOR_LIME                         0x10F441AA
  36. #define COLOR_MAGENTA                      0xFF00FFFF
  37. #define COLOR_PURPLE                       0x9900FFAA
  38. #define COLOR_ALIEN                        0x90FF87FF
  39. #define COLOR_NAVY                         0x000080AA
  40. #define COLOR_AQUA                         0xF0F8FFAA
  41. #define COLOR_CRIMSON                      0xDC143CAA
  42. #define COLOR_FLBLUE                       0x6495EDAA
  43. #define COLOR_BISQUE                       0xFFE4C4AA
  44. #define COLOR_BLACK                        0x000000AA
  45. #define COLOR_CHARTREUSE                   0x7FFF00AA
  46. #define COLOR_BROWN                        0XA52A2AAA
  47. #define COLOR_CORAL                        0xFF7F50AA
  48. #define COLOR_GOLD                         0xB8860BAA
  49. #define COLOR_GREENYELLOW                  0xADFF2FAA
  50. #define COLOR_INDIGO                       0x4B00B0AA
  51. #define COLOR_IVORY                        0xFFFF82AA
  52. #define COLOR_LAWNGREEN                    0x7CFC00AA
  53. #define COLOR_SEAGREEN                     0x20B2AAAA
  54. #define COLOR_LIMEGREEN                    0x32CD32AA
  55. #define COLOR_MIDNIGHTBLUE                 0x191970AA
  56. #define COLOR_MAROON                       0x800000AA
  57. #define COLOR_OLIVE                        0x808000AA
  58. #define COLOR_ORANGERED                    0xFF4500AA
  59. #define COLOR_PINK                         0xFFC0CBAA
  60. #define COLOR_SPRINGGREEN                  0x00FF7FAA
  61. #define COLOR_TOMATO                       0xFF6347AA
  62. #define COLOR_YELLOWGREEN                  0x9ACD32AA
  63. #define COLOR_MEDIUMAQUA                   0x83BFBFAA
  64. #define COLOR_MEDIUMMAGENTA                0x8B008BAA
  65. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  66. #define menu_add        (2565)
  67. #define INVALID_OBJECT  (-1) // Don't change this.
  68. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  69. #define W_NONE      0
  70. #define W_MOVE      1
  71. #define W_ROTATE    2
  72. #define W_MOVE_XY   3
  73. #define W_MOVE_Z    4
  74. #define W_ROTATE_XY 5
  75. #define W_ROTATE_Z  6
  76. #define AXIS_NONE       0
  77. #define AXIS_X          1
  78. #define AXIS_Y          2
  79. #define AXIS_Z          3
  80. #define VKEY_LEFT       32768
  81. #define VKEY_RIGHT      65536
  82. #define VKEY_UP         131072
  83. #define VKEY_DOWN       262144
  84. #define MM_SELECT_EDITMODE              1
  85. #define MM_SELECT_EDITMODE_DETACHONLY   2
  86. #define MM_SELECT_MULTIPLIER            3
  87. #define MM_SELECT_ADDMODE               4
  88. #define F_DIRECTORY "WorldEdit/"
  89. #define MAX_LANGS   100
  90. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  91. new plang[MAX_PLAYERS][256];
  92. new Langs[MAX_LANGS][256];
  93. new Langs_Imp=0;
  94. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  95. enum ELANG
  96. {
  97.     DESC_ADD,
  98.     DESC_COPY,
  99.     DESC_DEL,
  100.     DESC_DESEL,
  101.     DESC_FAKTOR,
  102.     DESC_GOTO,
  103.     DESC_LANG,
  104.     DESC_LISTLANG,
  105.     DESC_MODE,
  106.     DESC_NEXT,
  107.     DESC_RELEASE,
  108.     DESC_SEL,
  109.     DESC_STICK,
  110.     M_ADD,
  111.     M_ATTACH,
  112.     M_CANCEL,
  113.     M_COPY,
  114.     M_DEL,
  115.     M_DESC_ADD_CATEGORY,
  116.     M_DESC_ADD_MODELID,
  117.     M_DESC_ONAME,
  118.     M_DETACH,
  119.     M_GOTO,
  120.     M_MOVEXY,
  121.     M_MOVEZ,
  122.     M_MULT,
  123.     M_NEXTPAGE,
  124.     M_NEXT,
  125.     M_ONAME_TITLE,
  126.     M_RELOADALL,
  127.     M_ROTXY,
  128.     M_ROTZ,
  129.     M_SELECT,
  130.     M_VIEW,
  131.     MSG_ADD_OPEN,
  132.     MSG_ADDED,
  133.     MSG_CANCELED,
  134.     MSG_COPY,
  135.     MSG_COMMANDS,
  136.     MSG_DELETED,
  137.     MSG_DESELECTED,
  138.     MSG_EXISTS,
  139.     MSG_FNOTFOUND,
  140.     MSG_LANG,
  141.     MSG_LANGDEF,
  142.     MSG_LANGSEL,
  143.     MSG_LANGINV,
  144.     MSG_MOVEENABLED,
  145.     MSG_MOVEDISABLED,
  146.     MSG_MULTIPLER,
  147.     MSG_NOSELECTED,
  148.     MSG_NEWMODE,
  149.     MSG_NEAREST,
  150.     MSG_NOTFOUND,
  151.     MSG_PAGE,
  152.     MSG_RELEASE,
  153.     MSG_SAVEDALL,
  154.     MSG_SELECTED,
  155.     MSG_STICK,
  156.     MSG_SYNTAX
  157. };
  158. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  159. forward Float:strflt(string[]);
  160. forward Float:GetDistanceBetweenCoords(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2);
  161. forward Float:FloatBubbleSort(Float:lArray[MAX_OBJECTS][2], lArraySize);
  162. forward ObjectEditTimer(playerid, editmode, axis, Float:value);
  163. forward UpDownLeftRightAdditionTimer();
  164. forward SetObjectCoords(playerid, obj_id);
  165. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  166. enum OBJECTDATA() {
  167.     id_o,
  168.     ModelID,
  169.     Float:obj_x,
  170.     Float:obj_y,
  171.     Float:obj_z,
  172.     Float:rot_x,
  173.     Float:rot_y,
  174.     Float:rot_z,
  175.     Name[MAX_STRING],
  176.     bool:savetofile
  177. }
  178. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  179. enum PLAYERDATA {
  180.     Name[25],
  181.     vfile[256],
  182.     vindex,
  183.     id_sel
  184. }
  185. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  186. enum EDITINGOBJECT {
  187.     object_id,
  188.     mode,
  189.     bool:domove,
  190.     Float:movestep,
  191.     Float:rotatestep,
  192.     Float:StickDistance,
  193.     Float:EditMultiplier,
  194.     bool:stuck
  195. }
  196. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  197. new listcat[4096], lista[MAX_PLAYERS][4096];
  198. new gPlayer[MAX_PLAYERS][PLAYERDATA];
  199. new gObjects[150][OBJECTDATA];  
  200. new gEditingObject[MAX_PLAYERS][EDITINGOBJECT];
  201. new gObjectEditTimer[MAX_PLAYERS];
  202. new gCameraSetTimer[MAX_PLAYERS];
  203. new gLastPlayerKeys[MAX_PLAYERS][2];
  204. new bool:gPlayerMenu[MAX_PLAYERS];
  205. new gSelectedMultiplier[MAX_PLAYERS];
  206. new Menu:gMenus[MAX_PLAYERS];
  207. new gMenuMode[MAX_PLAYERS];
  208. new gObjectCount=0;
  209. new Timer;
  210. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  211. public OnFilterScriptInit() {
  212.     ReadLangs();
  213.     ReadListObjetects(listcat);
  214.     ReadObjects();
  215.     Timer = SetTimer("UpDownLeftRightAdditionTimer", 50, 1);
  216.     for(new playerid=0; playerid<MAX_PLAYERS; playerid++)
  217.     OnPlayerConnect(playerid);
  218.     print("               ,        ,");
  219.     print("              /(        )`");
  220.     print("              | |___   / ||");
  221.     print("              /- _  `-/  '");
  222.     print("             (/|/ | |   /|");
  223.     print("             / /   | `    |");
  224.     print("             O O   ) /    |");
  225.     print("             `-^--'`<     '");
  226.     print("            (_.)  _  )   /");
  227.     print("             `.___/`    /");
  228.     print("               `-----' /");
  229.     print("  <----.     __ / __   |");
  230.     print("  <----|====O)))==) |) /====");
  231.     print("  <----'    `--' `.__,' |");
  232.     print("               |        |");
  233.     print("                |       /");
  234.     print("           ______( (_  / |______");
  235.     print("         ,'  ,-----'   |        |");
  236.     print("         `--{__________)       //");
  237.     print("+----------------------------+");
  238.     print("|          WorldEdit         |");
  239.     print("|            v1.0            |");
  240.     print("|      Created by DarKy      |");
  241.     print("|     Design your world !    |");
  242.     print("|           LOADED!          |");
  243.     print("+----------------------------+");
  244.     return 1;
  245. }
  246. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  247. public OnFilterScriptExit() {
  248.     for(new playerid=0; playerid<MAX_PLAYERS; playerid++)
  249.     CancelEditObject(playerid);
  250.     SaveObjects();
  251.     DestroyObjects();
  252.     KillTimer(Timer);
  253.     print("               ,        ,");
  254.     print("              /(        )`");
  255.     print("              | |___   / ||");
  256.     print("              /- _  `-/  '");
  257.     print("             (/|/ | |   /|");
  258.     print("             / /   | `    |");
  259.     print("             O O   ) /    |");
  260.     print("             `-^--'`<     '");
  261.     print("            (_.)  _  )   /");
  262.     print("             `.___/`    /");
  263.     print("               `-----' /");
  264.     print("  <----.     __ / __   |");
  265.     print("  <----|====O)))==) |) /====");
  266.     print("  <----'    `--' `.__,' |");
  267.     print("               |        |");
  268.     print("                |       /");
  269.     print("           ______( (_  / |______");
  270.     print("         ,'  ,-----'   |        |");
  271.     print("         `--{__________)       //");
  272.     print("+----------------------------+");
  273.     print("|          WorldEdit         |");
  274.     print("|            v1.0            |");
  275.     print("|      Created by DarKy      |");
  276.     print("|     Design your world !    |");
  277.     print("|          UNLOADED!         |");
  278.     print("+----------------------------+");
  279. }    
  280. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  281. public OnPlayerConnect(playerid) {
  282.     new name[25];
  283.     GetPlayerName(playerid, name, sizeof name);
  284.     gPlayer[playerid][Name] = name;
  285.     gEditingObject[playerid][domove] = false;
  286.     gPlayerMenu[playerid] = false;
  287.     gEditingObject[playerid][EditMultiplier]  = 1;
  288.     gSelectedMultiplier[playerid] = 3;
  289.     gEditingObject[playerid][object_id] = INVALID_OBJECT;
  290.     set(plang[playerid],Langs[0]);
  291.     return 1;
  292. }
  293. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  294. public OnPlayerCommandText(playerid, cmdtext[]) {
  295.     new cmd[MAX_STRING], idx;
  296.     new syntax[MAX_STRING];
  297.     new Float:x, Float:y, Float:z, Float:angle;
  298.     new msg[MAX_STRING];
  299.  
  300.     if (IsPlayerInAnyVehicle(playerid)) {
  301.         GetVehiclePos(GetPlayerVehicleID(playerid),x, y, z);
  302.         GetVehicleZAngle(GetPlayerVehicleID(playerid), angle);
  303.     }
  304.     else {
  305.         GetPlayerPos(playerid, x, y, z);
  306.         GetPlayerFacingAngle(playerid, angle);
  307.     }
  308.  
  309.     cmd = strtok(cmdtext, idx);
  310.  
  311.     if (IsPlayerAdmin(playerid)) {
  312.  
  313.         if (strcmp(cmd, "/wadd", true) == 0) {
  314.             new modelid, name[MAX_STRING], newoid;
  315.             set(syntax,GetLMsg(playerid,MSG_SYNTAX));
  316.             strcat(syntax,"/wadd ");
  317.             strcat(syntax,GetLMsg(playerid,DESC_ADD));
  318.  
  319.             cmd = strtok(cmdtext, idx);
  320.             if (!(strlen(cmd))) {
  321.                 SystemMessage(playerid, GetLMsg(playerid,MSG_ADD_OPEN), COLOR_YELLOW);
  322.                 ShowPlayerDialog(playerid, menu_add, DIALOG_STYLE_LIST, GetLMsg(playerid,M_DESC_ADD_CATEGORY), listcat, GetLMsg(playerid,M_VIEW), GetLMsg(playerid,M_CANCEL));
  323.                 return 1;
  324.             } else {
  325.                 modelid = strval(cmd);
  326.             }
  327.  
  328.             strmid(cmd, cmdtext, idx, strlen(cmdtext));
  329.             if (!(strlen(cmd))) {
  330.                 SystemMessage(playerid, syntax, COLOR_YELLOW);
  331.                 return 1;
  332.             } else {
  333.                 name = cmd;
  334.             }
  335.            
  336.             for (new i=0;i<gObjectCount;i++) {
  337.                 if (strlen(gObjects[i][Name]) != 0 && strcmp(gObjects[i][Name], name, true) == 0){
  338.                     SystemMessage(playerid, GetLMsg(playerid,MSG_EXISTS), COLOR_RED);
  339.                     return 1;
  340.                 }
  341.             }
  342.  
  343.             CancelEditObject(playerid);
  344.  
  345.             newoid = AddNewObjectToScript(modelid, x, y + 2, z, 0, 0, 0, name);
  346.             gEditingObject[playerid][object_id] = newoid;
  347.             if (gEditingObject[playerid][mode] == W_NONE) gEditingObject[playerid][mode] = W_MOVE_XY;
  348.             gEditingObject[playerid][EditMultiplier]  = 1;
  349.             gSelectedMultiplier[playerid] = 3;
  350.             gEditingObject[playerid][movestep] = 0.05;
  351.             gEditingObject[playerid][rotatestep] = 1.0;
  352.             gObjects[newoid][savetofile] = true;
  353.             if (gEditingObject[playerid][EditMultiplier] == 0) gEditingObject[playerid][EditMultiplier] = 1;
  354.  
  355.             SaveObjects();
  356.  
  357.             format(msg, sizeof msg, "'%s' ModelID: %d - %s ", name, gObjects[newoid][ModelID], GetLMsg(playerid,MSG_ADDED));
  358.             SystemMessage(playerid, msg, COLOR_GREEN);
  359.  
  360.             return 1;
  361.         }
  362.        
  363.         else if (strcmp(cmd, "/wlang", true) == 0) {
  364.             new id;
  365.             set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  366.             strcat(syntax, ": /wlang ");
  367.             strcat(syntax, GetLMsg(playerid,DESC_LANG));
  368.  
  369.             cmd = strtok(cmdtext, idx);
  370.             if (!(strlen(cmd))) {
  371.                 SystemMessage(playerid, syntax, COLOR_YELLOW);
  372.                 return 1;
  373.             } else {
  374.                 id = strval(cmd);
  375.                 if(id < Langs_Imp)
  376.                 {
  377.                     set(plang[playerid], Langs[id]);
  378.                     SystemMessage(playerid, GetLMsg(playerid, MSG_LANGSEL), COLOR_YELLOW);
  379.                 }
  380.                 else
  381.                     SystemMessage(playerid, GetLMsg(playerid, MSG_LANGINV), COLOR_RED);
  382.             }
  383.             return 1;
  384.         }
  385.        
  386.         else if (strcmp(cmd, "/wlistlangs", true) == 0) {
  387.             new str[256];
  388.             SystemMessage(playerid, GetLMsg(playerid,MSG_LANG), COLOR_GREEN);
  389.             format(str, sizeof(str), "0 - %s - %s", Langs[0], GetLMsg(playerid,MSG_LANGDEF));
  390.             SystemMessage(playerid, str, COLOR_YELLOW);
  391.             for(new i=1; i<Langs_Imp; i++)
  392.             {
  393.                 format(str, sizeof(str), "%d - %s", i, Langs[i]);
  394.                 SystemMessage(playerid, str, COLOR_YELLOW);
  395.             }
  396.             return 1;
  397.         }
  398.  
  399.         else if (strcmp(cmd, "/wcopy", true) == 0) {
  400.             new name[MAX_STRING], newoid;
  401.             new Float:rx, Float:ry, Float:rz;
  402.             set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  403.             strcat(syntax, ": /wcopy ");
  404.             strcat(syntax, GetLMsg(playerid,DESC_COPY));
  405.  
  406.             strmid(cmd, cmdtext, 7, strlen(cmdtext));
  407.             if (!(strlen(cmd))) {
  408.                 SystemMessage(playerid, syntax, COLOR_YELLOW);
  409.                 return 1;
  410.             } else {
  411.                 name = cmd;
  412.             }
  413.  
  414.             CancelEditObject(playerid);
  415.  
  416.             x = gObjects[gEditingObject[playerid][object_id]][obj_x];
  417.             y = gObjects[gEditingObject[playerid][object_id]][obj_y];
  418.             z = gObjects[gEditingObject[playerid][object_id]][obj_z];
  419.             rx = gObjects[gEditingObject[playerid][object_id]][rot_x];
  420.             ry = gObjects[gEditingObject[playerid][object_id]][rot_y];
  421.             rz = gObjects[gEditingObject[playerid][object_id]][rot_z];
  422.  
  423.             newoid = AddNewObjectToScript(gObjects[gEditingObject[playerid][object_id]][ModelID], x, y, z, rx, ry, rz, name);
  424.             gEditingObject[playerid][object_id] = newoid;
  425.             if (gEditingObject[playerid][mode] == W_NONE) gEditingObject[playerid][mode] = W_MOVE_XY;
  426.             gEditingObject[playerid][movestep] = 0.05;
  427.             gEditingObject[playerid][rotatestep] = 1.0;
  428.            
  429.             gEditingObject[playerid][EditMultiplier]  = 1;
  430.             gSelectedMultiplier[playerid] = 3;
  431.            
  432.             gObjects[newoid][savetofile] = true;
  433.             if (gEditingObject[playerid][EditMultiplier] == 0) gEditingObject[playerid][EditMultiplier] = 1;
  434.  
  435.             SaveObjects();
  436.  
  437.             format(msg, sizeof msg, "'%s' ModelID: %d - %s", name, gObjects[newoid][ModelID], GetLMsg(playerid,MSG_COPY));
  438.             SystemMessage(playerid, msg, COLOR_GREEN);
  439.  
  440.             return 1;
  441.         }
  442.  
  443.         else if (strcmp(cmd, "/wdel", true) == 0) {
  444.             if (gEditingObject[playerid][object_id] > INVALID_OBJECT) {
  445.                 new oid = gEditingObject[playerid][object_id];
  446.                 format(msg, sizeof msg, "'%s' (ModelID:%d) - %s",  gObjects[oid][Name], gObjects[oid][ModelID], GetLMsg(playerid,MSG_DELETED));
  447.                 gObjects[oid][savetofile] = false;
  448.                 gEditingObject[playerid][object_id] = INVALID_OBJECT;
  449.  
  450.                 CancelEditObject(playerid);
  451.  
  452.                 DestroyObjects();
  453.                 ReadObjects();
  454.                 SystemMessage(playerid, msg, COLOR_GREEN);
  455.                 return 1;
  456.             } else {
  457.                 SystemMessage(playerid, GetLMsg(playerid,MSG_NOSELECTED), COLOR_YELLOW);
  458.                 return 1;
  459.             }
  460.         }
  461.  
  462.         else if (strcmp(cmd, "/wmode", true) == 0) {
  463.             if (gEditingObject[playerid][object_id] > INVALID_OBJECT) {
  464.                 new newmode;
  465.                 set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  466.                 strcat(syntax, ": /wmode [m_xy|m_z|r_xy|r_z]: ");
  467.                 strcat(syntax, GetLMsg(playerid,DESC_MODE));
  468.  
  469.                 cmd = strtok(cmdtext, idx);
  470.                 if (!(strlen(cmd))) {
  471.                     SystemMessage(playerid, syntax, COLOR_YELLOW);
  472.                     return 1;
  473.                 } else {
  474.                     if (strcmp(cmd, "m_xy", true) == 0) newmode = W_MOVE_XY;
  475.                     if (strcmp(cmd, "m_z", true) == 0) newmode = W_MOVE_Z;
  476.                     if (strcmp(cmd, "r_xy", true) == 0) newmode = W_ROTATE_XY;
  477.                     if (strcmp(cmd, "r_z", true) == 0) newmode = W_ROTATE_Z;
  478.                 }
  479.  
  480.                 if (!(newmode == 0)) {
  481.                     gEditingObject[playerid][mode] = newmode;
  482.  
  483.                     SystemMessage(playerid, GetLMsg(playerid,MSG_NEWMODE), COLOR_GREEN);
  484.                     return 1;
  485.                 } else {
  486.                     SystemMessage(playerid, syntax, COLOR_YELLOW);
  487.                     return 1;
  488.                 }
  489.             } else {
  490.                 SystemMessage(playerid, GetLMsg(playerid,MSG_NOSELECTED), COLOR_YELLOW);
  491.             }
  492.         }
  493.  
  494.         else if (strcmp(cmd, "/wnext", true) == 0) {
  495.             new objects[24], oid, objnames[MAX_STRING];
  496.             objects = GetPlayerNearestObjects(playerid);
  497.  
  498.             for (new i=0;(i<gObjectCount) && (i<24);i++) {
  499.                 oid = objects[i];
  500.  
  501.                 strcat(objnames, gObjects[oid][Name]);
  502.                 strcat(objnames, ", ");
  503.             }
  504.  
  505.             if (strlen(objnames)) {
  506.                 strmid(objnames, objnames, 0, strlen(objnames) - 2);
  507.             }
  508.  
  509.             format(objnames, sizeof objnames, "%s %s", objnames, GetLMsg(playerid,MSG_NEAREST));
  510.             SystemMessage(playerid, objnames, COLOR_YELLOW);
  511.             return 1;
  512.         }
  513.  
  514.         else if (strcmp(cmd, "/wsel", true) == 0) {
  515.             new name[MAX_STRING], oid;
  516.             set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  517.             strcat(syntax, ": /wsel ");
  518.             strcat(syntax, GetLMsg(playerid,DESC_SEL));
  519.  
  520.             strmid(cmd, cmdtext, 6, strlen(cmdtext));
  521.             if (!(strlen(cmd))) {
  522.                 SystemMessage(playerid, syntax, COLOR_YELLOW);
  523.                 return 1;
  524.             } else {
  525.                 name = cmd;
  526.             }
  527.            
  528.             new i;
  529.             for (i=0;i<gObjectCount;i++) {
  530.                 if (strlen(gObjects[i][Name]) != 0 && strcmp(gObjects[i][Name], name, true) == 0){
  531.                     oid = i;
  532.                     break;
  533.                 }
  534.             }
  535.  
  536.             if (i < gObjectCount) {
  537.                 CancelEditObject(playerid);
  538.  
  539.                 gEditingObject[playerid][object_id] = oid;
  540.                 if (gEditingObject[playerid][mode] == W_NONE) gEditingObject[playerid][mode] = W_MOVE_XY;
  541.                 gEditingObject[playerid][movestep] = 0.05;
  542.                 gEditingObject[playerid][rotatestep] = 1.0;
  543.                
  544.                 gEditingObject[playerid][EditMultiplier]  = 1;
  545.                 gSelectedMultiplier[playerid] = 3;
  546.  
  547.                 format(msg, sizeof msg, "'%s' (ModelID: %d) - %s", name, gObjects[oid][ModelID], GetLMsg(playerid,MSG_SELECTED));
  548.                 SystemMessage(playerid, msg, COLOR_GREEN);
  549.                 return 1;
  550.             } else {
  551.                 format(msg, sizeof msg, "'%s' %s", name, GetLMsg(playerid,MSG_NOTFOUND));
  552.                 SystemMessage(playerid, msg, COLOR_YELLOW);
  553.                 return 1;
  554.             }
  555.         }
  556.        
  557.         else if (strcmp(cmd, "/wdesel",true) == 0){
  558.             new oid = gEditingObject[playerid][object_id];
  559.             if(oid > INVALID_OBJECT)
  560.             {
  561.                 format(msg, sizeof msg, "'%s' (ModelID:%d) - ",  gObjects[oid][Name], gObjects[oid][ModelID], GetLMsg(playerid,MSG_DESELECTED));
  562.                 gEditingObject[playerid][object_id] = INVALID_OBJECT;
  563.                 gEditingObject[playerid][mode] = W_NONE;
  564.                
  565.                 CancelEditObject(playerid);
  566.             }
  567.             else
  568.                 format(msg, sizeof msg,GetLMsg(playerid,MSG_NOSELECTED));
  569.             SystemMessage(playerid, msg, COLOR_YELLOW);
  570.             return 1;
  571.         }
  572.        
  573.         else if (strcmp(cmd, "/wgoto", true) == 0) {
  574.             new name[MAX_STRING], oid;
  575.             set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  576.             strcat(syntax, ": /wgoto ");
  577.             strcat(syntax, GetLMsg(playerid,DESC_GOTO));
  578.  
  579.             strmid(cmd, cmdtext, 7, strlen(cmdtext));
  580.             if (!(strlen(cmd))) {
  581.                 SystemMessage(playerid, syntax, COLOR_YELLOW);
  582.                 return 1;
  583.             } else {
  584.                 name = cmd;
  585.             }
  586.            
  587.             new i;
  588.             for (i=0;i<gObjectCount;i++) {
  589.                 if (strlen(gObjects[i][Name]) && strcmp(gObjects[i][Name], name, true) == 0){
  590.                     oid = i;
  591.                     break;
  592.                 }
  593.             }
  594.  
  595.             if (i < gObjectCount) {
  596.            
  597.                 CancelEditObject(playerid);
  598.  
  599.                 gEditingObject[playerid][object_id] = oid;
  600.                 if (gEditingObject[playerid][mode] == W_NONE) gEditingObject[playerid][mode] = W_MOVE_XY;
  601.                 gEditingObject[playerid][movestep] = 0.05;
  602.                 gEditingObject[playerid][rotatestep] = 1.0;
  603.                
  604.                 gEditingObject[playerid][EditMultiplier]  = 1;
  605.                 gSelectedMultiplier[playerid] = 3;
  606.            
  607.                 new Float:lx,Float:ly,Float:lz;
  608.                 lx = gObjects[gEditingObject[playerid][object_id]][obj_x];
  609.                 ly = gObjects[gEditingObject[playerid][object_id]][obj_y];
  610.                 lz = gObjects[gEditingObject[playerid][object_id]][obj_z];
  611.                 SetPlayerPos(playerid,lx,ly,lz);
  612.  
  613.                 format(msg, sizeof msg, "'%s' (ModelID: %d) - %s", name, gObjects[oid][ModelID], GetLMsg(playerid,MSG_SELECTED));
  614.                 SystemMessage(playerid, msg, COLOR_GREEN);
  615.                 return 1;
  616.             } else {
  617.                 format(msg, sizeof msg, "'%s' %s", name, GetLMsg(playerid,MSG_NOTFOUND));
  618.                 SystemMessage(playerid, msg, COLOR_YELLOW);
  619.                 return 1;
  620.             }
  621.         }        
  622.  
  623.         else if (strcmp(cmd, "/wstick", true) == 0) {
  624.             new Float:distance;
  625.             set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  626.             strcat(syntax, ": /wstick ");
  627.             strcat(syntax, GetLMsg(playerid,DESC_STICK));
  628.             cmd = strtok(cmdtext, idx);
  629.             if (!(strlen(cmd))) {
  630.                 distance = 2;
  631.             } else {
  632.                 distance = floatstr(cmd);
  633.             }
  634.  
  635.             CancelEditObject(playerid);
  636.  
  637.             gEditingObject[playerid][StickDistance] = distance;
  638.             gEditingObject[playerid][stuck] = true;
  639.  
  640.             AttachObjectToPlayer(gObjects[gEditingObject[playerid][object_id]][id_o],playerid, 0, gEditingObject[playerid][StickDistance], 0, 0, 0, 0);
  641.            
  642.             SystemMessage(playerid, GetLMsg(playerid,MSG_STICK), COLOR_YELLOW);
  643.             return 1;
  644.         }
  645.  
  646.         else if (strcmp(cmd, "/wrelease", true) == 0) {
  647.             new oid;
  648.             new model_id;
  649.             new Float:x2, Float:y2;
  650.             new objname[MAX_STRING];
  651.  
  652.             if (gEditingObject[playerid][stuck]) {
  653.                 gEditingObject[playerid][stuck] = false;
  654.  
  655.                 oid = gEditingObject[playerid][object_id];
  656.                 model_id = gObjects[oid][ModelID];
  657.                 format(objname, sizeof objname, "%s", gObjects[oid][Name]);
  658.  
  659.                 x2 = x + (gEditingObject[playerid][StickDistance] * floatsin(-angle, degrees));
  660.                 y2 = y + (gEditingObject[playerid][StickDistance] * floatcos(-angle, degrees));
  661.  
  662.                 DestroyObject(gObjects[oid][id_o]);
  663.  
  664.                 oid = AddNewObjectToScript(model_id, x2, y2, z, 0, 0, angle, objname, oid);
  665.                 gEditingObject[playerid][mode] = W_MOVE_XY;
  666.                 gEditingObject[playerid][movestep] = 0.05;
  667.                 gEditingObject[playerid][rotatestep] = 1.0;
  668.                 gObjects[oid][savetofile] = true;
  669.  
  670.                 SaveObjects();
  671.                
  672.                 SystemMessage(playerid, GetLMsg(playerid,MSG_RELEASE), COLOR_YELLOW);
  673.             }
  674.             return 1;
  675.         }
  676.  
  677.         else if (strcmp(cmd, "/wfaktor", true) == 0) {
  678.             set(syntax, GetLMsg(playerid,MSG_SYNTAX));
  679.             strcat(syntax, ": /wfaktor ");
  680.             strcat(syntax, GetLMsg(playerid,DESC_FAKTOR));
  681.             new Float:mul;
  682.  
  683.             cmd = strtok(cmdtext, idx);
  684.             if (!(strlen(cmd))) {
  685.                 SystemMessage(playerid, syntax, COLOR_YELLOW);
  686.                 return 1;
  687.             } else {
  688.                 mul = floatstr(cmd);
  689.             }
  690.  
  691.             gEditingObject[playerid][EditMultiplier] = mul;
  692.             format(msg, sizeof msg, "%f %s", mul, GetLMsg(playerid,MSG_MULTIPLER));
  693.             SystemMessage(playerid, msg, COLOR_GREEN);
  694.             return 1;
  695.         }
  696.         else if (strcmp(cmd, "/whelp", true) == 0) {
  697.             SystemMessage(playerid, GetLMsg(playerid,MSG_COMMANDS), COLOR_YELLOW);
  698.            
  699.             format(msg, sizeof(msg), "/wadd %s", GetLMsg(playerid,DESC_ADD));
  700.             SystemMessage(playerid, msg, COLOR_YELLOW);
  701.            
  702.             format(msg, sizeof(msg), "/wcopy %s", GetLMsg(playerid,DESC_ADD));
  703.             SystemMessage(playerid, msg, COLOR_YELLOW);
  704.            
  705.             format(msg, sizeof(msg), "/wdel %s", GetLMsg(playerid,DESC_DEL));
  706.             SystemMessage(playerid, msg, COLOR_YELLOW);
  707.            
  708.             format(msg, sizeof(msg), "/wlang [id] %s", GetLMsg(playerid,DESC_LANG));
  709.             SystemMessage(playerid, msg, COLOR_YELLOW);
  710.            
  711.             format(msg, sizeof(msg), "/wlistlangs %s", GetLMsg(playerid,DESC_LISTLANG));
  712.             SystemMessage(playerid, msg, COLOR_YELLOW);
  713.            
  714.             format(msg, sizeof(msg), "/wmode [m_xy|m_z|r_xy|r_z] %s", GetLMsg(playerid,DESC_MODE));
  715.             SystemMessage(playerid, msg, COLOR_YELLOW);
  716.            
  717.             format(msg, sizeof(msg), "/wnext %s", GetLMsg(playerid,DESC_NEXT));
  718.             SystemMessage(playerid, msg, COLOR_YELLOW);
  719.            
  720.             format(msg, sizeof(msg), "/wsel %s", GetLMsg(playerid,DESC_SEL));
  721.             SystemMessage(playerid, msg, COLOR_YELLOW);
  722.            
  723.             format(msg, sizeof(msg), "/wdesel %s", GetLMsg(playerid,DESC_DESEL));
  724.             SystemMessage(playerid, msg, COLOR_YELLOW);
  725.            
  726.             format(msg, sizeof(msg), "/wstick %s", GetLMsg(playerid,DESC_STICK));
  727.             SystemMessage(playerid, msg, COLOR_YELLOW);
  728.            
  729.             format(msg, sizeof(msg), "/wrelease %s", GetLMsg(playerid,DESC_RELEASE));
  730.             SystemMessage(playerid, msg, COLOR_YELLOW);
  731.            
  732.             format(msg, sizeof(msg), "/wfaktor %s", GetLMsg(playerid,DESC_FAKTOR));
  733.             SystemMessage(playerid, msg, COLOR_YELLOW);
  734.            
  735.             format(msg, sizeof(msg), "/wgoto %s", GetLMsg(playerid,DESC_GOTO));
  736.             SystemMessage(playerid, msg, COLOR_YELLOW);
  737.             return 1;
  738.         }
  739.         else if (strcmp(cmd, "/wsaveall", true) == 0) {
  740.             SaveObjects();          
  741.             format(msg, sizeof msg, "%d %s", gObjectCount, GetLMsg(playerid,MSG_SAVEDALL));
  742.             SystemMessage(playerid, msg, COLOR_GREEN);
  743.             return 1;
  744.         }        
  745.     }
  746.  
  747.     return 0;
  748. }
  749. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  750. stock CancelEditObject(playerid)
  751. {
  752.     if(!IsPlayerConnected(playerid))
  753.         return;
  754.     new oid = gEditingObject[playerid][object_id];
  755.     if (!(gObjectEditTimer[playerid] == 0)) {
  756.         KillTimer(gObjectEditTimer[playerid]);
  757.         gObjectEditTimer[playerid] = 0;
  758.     }
  759.     if (!(gCameraSetTimer[playerid] == 0)) {
  760.         KillTimer(gCameraSetTimer[playerid]);
  761.         gCameraSetTimer[playerid] = 0;
  762.         SetCameraBehindPlayer(playerid);
  763.     }
  764.     if(oid > INVALID_OBJECT)
  765.         StopObject(gObjects[oid][id_o]);
  766.        
  767.     if(gEditingObject[playerid][domove])
  768.         gEditingObject[playerid][domove] = false;
  769.    
  770.     if (gEditingObject[playerid][stuck]) {
  771.         new Float:x, Float:y, Float:z, Float:angle;
  772.  
  773.         if (IsPlayerInAnyVehicle(playerid)) {
  774.             GetVehiclePos(GetPlayerVehicleID(playerid),x, y, z);
  775.             GetVehicleZAngle(GetPlayerVehicleID(playerid), angle);
  776.         }
  777.         else {
  778.             GetPlayerPos(playerid, x, y, z);
  779.             GetPlayerFacingAngle(playerid, angle);
  780.         }
  781.        
  782.         new model_id;
  783.         new Float:x2, Float:y2;
  784.         new objname[MAX_STRING];
  785.  
  786.         gEditingObject[playerid][stuck] = false;
  787.  
  788.         model_id = gObjects[oid][ModelID];
  789.        
  790.         set(objname, gObjects[oid][Name]);
  791.  
  792.         x2 = x + (gEditingObject[playerid][StickDistance] * floatsin(-angle, degrees));
  793.         y2 = y + (gEditingObject[playerid][StickDistance] * floatcos(-angle, degrees));
  794.  
  795.         DestroyObject(gObjects[oid][id_o]);
  796.  
  797.         oid = AddNewObjectToScript(model_id, x2, y2, z, 0, 0, angle, objname, oid);
  798.         gEditingObject[playerid][mode] = W_MOVE_XY;
  799.         gEditingObject[playerid][movestep] = 0.05;
  800.         gEditingObject[playerid][rotatestep] = 1.0;
  801.         gObjects[oid][savetofile] = true;
  802.     }
  803.    
  804.     TogglePlayerControllable(playerid, 1);
  805.    
  806.     SaveObjects();
  807. }
  808. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  809. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  810.  
  811.     new msg[MAX_STRING];
  812.     new axis_updown, axis_leftright;
  813.     new editmode;
  814.     new Float:value;
  815.     new Float:x, Float:y, Float:z, Float:angle;
  816.  
  817.     if (IsPlayerInAnyVehicle(playerid)) {
  818.         GetVehiclePos(GetPlayerVehicleID(playerid),x, y, z);
  819.         GetVehicleZAngle(GetPlayerVehicleID(playerid), angle);
  820.     } else {
  821.         GetPlayerPos(playerid, x, y, z);
  822.         GetPlayerFacingAngle(playerid, angle);
  823.     }
  824.  
  825.     if (IsPlayerAdmin(playerid))
  826.     {
  827.             if ((gEditingObject[playerid][object_id]) > INVALID_OBJECT)
  828.             {
  829.                 new oid = gEditingObject[playerid][object_id];
  830.  
  831.                 if ((gEditingObject[playerid][domove]) && (!gPlayerMenu[playerid]))  {
  832.                     switch(gEditingObject[playerid][mode]) {
  833.                     case W_MOVE_XY:
  834.                         {
  835.                             editmode = W_MOVE;
  836.                             axis_updown = AXIS_Y;
  837.                             axis_leftright = AXIS_X;
  838.                             value = gEditingObject[playerid][movestep];
  839.                         }
  840.                     case W_MOVE_Z:
  841.                         {
  842.                             editmode = W_MOVE;
  843.                             axis_updown = AXIS_Z;
  844.                             axis_leftright = AXIS_NONE;
  845.                             value = gEditingObject[playerid][movestep];
  846.                         }
  847.                     case W_ROTATE_XY:
  848.                         {
  849.                             editmode = W_ROTATE;
  850.                             axis_updown = AXIS_X;
  851.                             axis_leftright = AXIS_Y;
  852.                             value = gEditingObject[playerid][rotatestep];
  853.                         }
  854.                     case W_ROTATE_Z:
  855.                         {
  856.                             editmode = W_ROTATE;
  857.                             axis_updown = AXIS_NONE;
  858.                             axis_leftright = AXIS_Z;
  859.                             value = gEditingObject[playerid][rotatestep];
  860.                         }
  861.                     }
  862.  
  863.                     if (!(gObjectEditTimer[playerid] == 0)) {
  864.                         axis_updown = AXIS_NONE;
  865.                         axis_leftright = AXIS_NONE;
  866.                     }
  867.  
  868.                     if (newkeys & VKEY_UP) {
  869.                         if (editmode == W_ROTATE) {
  870.                             if (!(axis_updown == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_updown, value);
  871.                         } else if (editmode == W_MOVE) {
  872.                             switch (axis_updown) {
  873.                             case AXIS_Y: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y]+2000,gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10);
  874.                             case AXIS_Z: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y],gObjects[oid][obj_z]+2000,value*gEditingObject[playerid][EditMultiplier]*10);
  875.                             }
  876.                         }
  877.                     }
  878.                     if (newkeys & VKEY_DOWN) {
  879.                         if (editmode == W_ROTATE) {
  880.                             if (!(axis_updown == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_updown, -value);
  881.                         } else if (editmode == W_MOVE) {
  882.                             switch (axis_updown) {
  883.                             case AXIS_Y: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y]-2000,gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10);
  884.                             case AXIS_Z: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y],gObjects[oid][obj_z]-2000,value*gEditingObject[playerid][EditMultiplier]*10);
  885.                             }
  886.                         }
  887.                     }
  888.                     if (newkeys & VKEY_LEFT) {
  889.                         if (editmode == W_ROTATE) {
  890.                             if (!(axis_leftright == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_leftright, -value);
  891.                         } else if (editmode == W_MOVE) {
  892.                             switch (axis_leftright) {
  893.                             case AXIS_X: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x]-2000,gObjects[oid][obj_y],gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10);
  894.                             }
  895.                         }
  896.                     }
  897.                     if (newkeys & VKEY_RIGHT) {
  898.                         if (editmode == W_ROTATE) {
  899.                             if (!(axis_leftright == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_leftright, value);
  900.                         } else if (editmode == W_MOVE) {
  901.                             switch (axis_leftright) {
  902.                             case AXIS_X: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x]+2000,gObjects[oid][obj_y],gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10);
  903.                             }
  904.                         }
  905.                     }
  906.  
  907.  
  908.                     if ((oldkeys & VKEY_UP) |
  909.                         (oldkeys & VKEY_DOWN) |
  910.                         (oldkeys & VKEY_LEFT) |
  911.                         (oldkeys & VKEY_RIGHT))  {
  912.  
  913.                         if (!(gObjectEditTimer[playerid] == 0)) {
  914.                             KillTimer(gObjectEditTimer[playerid]);
  915.                             gObjectEditTimer[playerid] = 0;
  916.                         }
  917.  
  918.                         StopObject(gObjects[oid][id_o]);
  919.                         SaveObjects();
  920.                     }
  921.                 }
  922.  
  923.                 if (newkeys & KEY_WALK) {
  924.                         format(msg, sizeof msg, "- %s -", gObjects[gEditingObject[playerid][object_id]][Name]);
  925.                         gMenus[playerid] = CreateMenu(msg, 1, 350, 190, 250, 0);
  926.                         if (gEditingObject[playerid][stuck]) {
  927.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_DETACH));
  928.                             gMenuMode[playerid] = MM_SELECT_EDITMODE_DETACHONLY;
  929.                         } else {
  930.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ATTACH));
  931.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MOVEXY));
  932.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MOVEZ));
  933.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ROTXY));
  934.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ROTZ));
  935.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ADD));
  936.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_COPY));
  937.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_DEL));
  938.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MULT));
  939.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_CANCEL));
  940.                             AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_GOTO));
  941.  
  942.                             gMenuMode[playerid] = MM_SELECT_EDITMODE;
  943.                         }
  944.                         if (!(gObjectEditTimer[playerid] == 0)) {
  945.                             KillTimer(gObjectEditTimer[playerid]);
  946.                             gObjectEditTimer[playerid] = 0;
  947.                         }
  948.  
  949.                         StopObject(gObjects[oid][id_o]);
  950.                         SaveObjects();
  951.  
  952.                         TogglePlayerControllable(playerid, 0);
  953.                         ShowMenuForPlayer(gMenus[playerid], playerid);
  954.                         gPlayerMenu[playerid] = true;
  955.                 }
  956.  
  957.                 if (newkeys & KEY_CROUCH) {
  958.                     gEditingObject[playerid][domove] = !gEditingObject[playerid][domove];
  959.                     if (gEditingObject[playerid][domove]) {
  960.                         format(msg, sizeof msg, "%s - %s", gObjects[gEditingObject[playerid][object_id]][Name], GetLMsg(playerid,MSG_MOVEENABLED));
  961.                         OnPlayerCommandText(playerid, "/wrelease");
  962.                         TogglePlayerControllable(playerid, 0);
  963.                         if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, oid);
  964.                     } else {
  965.                         CancelEditObject(playerid);
  966.  
  967.                         format(msg, sizeof msg, "%s - %s", gObjects[gEditingObject[playerid][object_id]][Name], GetLMsg(playerid,MSG_MOVEDISABLED));
  968.                     }
  969.                     SystemMessage(playerid, msg, COLOR_YELLOW);
  970.                 }
  971.             }
  972.             else if (newkeys & KEY_WALK)
  973.             {
  974.                 gMenus[playerid] = CreateMenu(GetLMsg(playerid,M_SELECT), 1, 350, 200, 250, 0);
  975.                 AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ADD));
  976.                 AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_RELOADALL));
  977.                 AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MULT));
  978.                 AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_CANCEL));
  979.                 gMenuMode[playerid] = MM_SELECT_ADDMODE;
  980.                 TogglePlayerControllable(playerid, 0);
  981.                 ShowMenuForPlayer(gMenus[playerid], playerid);
  982.                 gPlayerMenu[playerid] = true;
  983.             }
  984.     }
  985.  
  986.     return 1;
  987. }
  988. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  989. public OnPlayerExitedMenu(playerid) {
  990.     if(gPlayerMenu[playerid])
  991.     {
  992.         HideMenuForPlayer(gMenus[playerid], playerid);
  993.         DestroyMenu(gMenus[playerid]);
  994.         gPlayerMenu[playerid] = false;
  995.         TogglePlayerControllable(playerid, !(gEditingObject[playerid][domove]));
  996.     }
  997.     return 1;
  998. }
  999. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1000. public OnPlayerSelectedMenuRow(playerid, row) {
  1001.     new Menu:current = GetPlayerMenu(playerid);
  1002.    
  1003.     if(current == gMenus[playerid])
  1004.     {
  1005.         TogglePlayerControllable(playerid, !(gEditingObject[playerid][domove]));
  1006.         new obj_id = gEditingObject[playerid][object_id];
  1007.        
  1008.         HideMenuForPlayer(gMenus[playerid], playerid);
  1009.         DestroyMenu(gMenus[playerid]);
  1010.         gPlayerMenu[playerid] = false;
  1011.        
  1012.         new temp[MAX_STRING];
  1013.         new items[10][MAX_STRING] = {
  1014.             "0.005x",
  1015.             "0.05x",
  1016.             "0.5x",
  1017.             "1x",
  1018.             "2x",
  1019.             "5x",
  1020.             "10x",
  1021.             "20x",
  1022.             "25x",
  1023.             "45x"
  1024.          };
  1025.  
  1026.         switch (gMenuMode[playerid]) {
  1027.             case MM_SELECT_EDITMODE:
  1028.                 {
  1029.                     switch (row) {
  1030.                     case 0:
  1031.                         {
  1032.                             OnPlayerCommandText(playerid, "/wstick");
  1033.                         }
  1034.                     case 1:
  1035.                         {
  1036.                             gEditingObject[playerid][domove] = true;
  1037.                             TogglePlayerControllable(playerid, 0);
  1038.                             if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id);
  1039.                             OnPlayerCommandText(playerid, "/wmode m_xy");
  1040.                         }
  1041.                     case 2:
  1042.                         {
  1043.                             gEditingObject[playerid][domove] = true;
  1044.                             TogglePlayerControllable(playerid, 0);
  1045.                             if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id);
  1046.                             OnPlayerCommandText(playerid, "/wmode m_z");
  1047.                         }
  1048.                     case 3:
  1049.                         {
  1050.                             gEditingObject[playerid][domove] = true;
  1051.                             TogglePlayerControllable(playerid, 0);
  1052.                             if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id);
  1053.                             OnPlayerCommandText(playerid, "/wmode r_xy");
  1054.                         }
  1055.                     case 4:
  1056.                         {
  1057.                             gEditingObject[playerid][domove] = true;
  1058.                             TogglePlayerControllable(playerid, 0);
  1059.                             if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id);
  1060.                             OnPlayerCommandText(playerid, "/wmode r_z");
  1061.                         }
  1062.                     case 5:
  1063.                         {
  1064.                             ShowPlayerDialog(playerid, menu_add, DIALOG_STYLE_LIST, GetLMsg(playerid,M_DESC_ADD_CATEGORY), listcat, GetLMsg(playerid,M_VIEW), GetLMsg(playerid,M_CANCEL));
  1065.                         }
  1066.                     case 6:
  1067.                         {
  1068.                             new objname[MAX_STRING];
  1069.                             format(objname, sizeof objname, "/wcopy cpy_%s", gObjects[obj_id][Name]);
  1070.                             OnPlayerCommandText(playerid, objname);
  1071.                         }
  1072.                     case 7:
  1073.                         {
  1074.                             OnPlayerCommandText(playerid, "/wdel");
  1075.                         }
  1076.                     case 8:
  1077.                         {
  1078.                             gMenus[playerid] = CreateMenu(GetLMsg(playerid,M_MULT), 1, 350,180, 250, 0);
  1079.                             temp = "~w~";
  1080.                             strcat(temp, items[gSelectedMultiplier[playerid]]);
  1081.                             items[gSelectedMultiplier[playerid]] = temp;
  1082.  
  1083.                             for(new i=0;i<=9;i++) {
  1084.                                 AddMenuItem(gMenus[playerid], 0, items[i]);
  1085.                             }
  1086.  
  1087.                             gMenuMode[playerid] = MM_SELECT_MULTIPLIER;
  1088.                             TogglePlayerControllable(playerid, 0);
  1089.                             ShowMenuForPlayer(gMenus[playerid], playerid);
  1090.                             gPlayerMenu[playerid] = true;
  1091.                         }
  1092.                     case 9:
  1093.                         {
  1094.                            CancelEditObject(playerid);
  1095.                         }
  1096.                     case 10:
  1097.                         {
  1098.                             new str[256];
  1099.                             format(str,sizeof(str),"/wgoto %s", gObjects[obj_id][Name]);
  1100.                             OnPlayerCommandText(playerid, str);
  1101.                         }
  1102.                     }
  1103.                 }
  1104.             case MM_SELECT_EDITMODE_DETACHONLY:
  1105.                 {
  1106.                     switch (row) {
  1107.                     case 0:
  1108.                         {
  1109.                             OnPlayerCommandText(playerid, "/wrelease");
  1110.                         }
  1111.                     }
  1112.                 }
  1113.             case MM_SELECT_MULTIPLIER:
  1114.                 {
  1115.                     switch (row) {
  1116.                     case 0: gEditingObject[playerid][EditMultiplier]  = 0.005;      
  1117.                     case 1: gEditingObject[playerid][EditMultiplier]  = 0.050;
  1118.                     case 2: gEditingObject[playerid][EditMultiplier]  = 0.5;      
  1119.                     case 3: gEditingObject[playerid][EditMultiplier]  = 1;      
  1120.                     case 4: gEditingObject[playerid][EditMultiplier]  = 2;      
  1121.                     case 5: gEditingObject[playerid][EditMultiplier]  = 5;      
  1122.                     case 6: gEditingObject[playerid][EditMultiplier]  = 10;    
  1123.                     case 7: gEditingObject[playerid][EditMultiplier]  = 20;      
  1124.                     case 8: gEditingObject[playerid][EditMultiplier]  = 25;      
  1125.                     case 9: gEditingObject[playerid][EditMultiplier]  = 45;    
  1126.                     }
  1127.  
  1128.                     gSelectedMultiplier[playerid] = row;
  1129.                     TogglePlayerControllable(playerid, !gEditingObject[playerid][domove]);
  1130.                 }
  1131.             case MM_SELECT_ADDMODE:
  1132.                 {
  1133.                     switch (row) {
  1134.                         case 0:
  1135.                             ShowPlayerDialog(playerid, menu_add, DIALOG_STYLE_LIST, GetLMsg(playerid,M_DESC_ADD_CATEGORY), listcat, GetLMsg(playerid,M_VIEW), GetLMsg(playerid,M_CANCEL));
  1136.                         case 1:
  1137.                         {
  1138.                             SaveObjects();
  1139.                             DestroyObjects();
  1140.                             ReadObjects();
  1141.                         }
  1142.                         case 2:
  1143.                         {
  1144.                                 gMenus[playerid] = CreateMenu(GetLMsg(playerid,M_MULT), 1, 350,180, 250, 0);
  1145.                                 temp = "~w~";
  1146.                                 strcat(temp, items[gSelectedMultiplier[playerid]]);
  1147.                                 items[gSelectedMultiplier[playerid]] = temp;
  1148.                                 for(new i=0;i<=9;i++) {
  1149.                                     AddMenuItem(gMenus[playerid], 0, items[i]);
  1150.                                 }
  1151.                                 gMenuMode[playerid] = MM_SELECT_MULTIPLIER;
  1152.                                 TogglePlayerControllable(playerid, 0);
  1153.                                 ShowMenuForPlayer(gMenus[playerid], playerid);
  1154.                                 gPlayerMenu[playerid] = true;
  1155.                         }
  1156.                         case 3:
  1157.                         {
  1158.                             CancelEditObject(playerid);
  1159.                         }
  1160.                     }
  1161.                 }
  1162.         }
  1163.     }
  1164.     return 1;
  1165. }
  1166. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1167. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  1168. {
  1169.     if(dialogid == menu_add)
  1170.     {
  1171.         if(response)
  1172.         {
  1173.             new file[256], n;
  1174.             set(file,inputtext);
  1175.             strcat(file,".txt");
  1176.             n = GetNumberObjects(file);
  1177.             if(n <=80)
  1178.             {
  1179.                 ReadListObjetects(lista[playerid],file);
  1180.                 format(file, sizeof(file), "%s", inputtext);
  1181.                 ShowPlayerDialog(playerid, menu_add+2, DIALOG_STYLE_LIST, file, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_CANCEL));
  1182.             }
  1183.             else
  1184.             {
  1185.                 gPlayer[playerid][vindex] = 1;
  1186.                 set(gPlayer[playerid][vfile],file);
  1187.                 ReadListObjetects(lista[playerid],file);
  1188.                 format(file, sizeof(file), "%s - Page 1", inputtext);
  1189.                 ShowPlayerDialog(playerid, menu_add+3, DIALOG_STYLE_LIST, file, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_NEXTPAGE));
  1190.             }
  1191.         }
  1192.         else
  1193.             SystemMessage(playerid, GetLMsg(playerid,MSG_CANCELED), COLOR_RED);
  1194.     }
  1195.     else if(dialogid == menu_add+1)
  1196.     {
  1197.         if(response)
  1198.         {
  1199.             new str[256];
  1200.             format(str, sizeof(str), "/wadd %d %s", gPlayer[playerid][id_sel], inputtext);
  1201.             OnPlayerCommandText(playerid, str);
  1202.         }
  1203.         else
  1204.             SystemMessage(playerid, GetLMsg(playerid,MSG_CANCELED), COLOR_RED);
  1205.     }
  1206.     else if(dialogid == menu_add+2)
  1207.     {
  1208.         if(response)
  1209.         {
  1210.             new i=0;
  1211.             gPlayer[playerid][id_sel] = strval(strtok(inputtext,i,'-'));
  1212.             ShowPlayerDialog(playerid, menu_add+1, DIALOG_STYLE_INPUT, GetLMsg(playerid,M_ONAME_TITLE), GetLMsg(playerid,M_DESC_ONAME), GetLMsg(playerid,M_ADD), GetLMsg(playerid,M_CANCEL));
  1213.         }
  1214.         else
  1215.             SystemMessage(playerid, GetLMsg(playerid,MSG_CANCELED), COLOR_RED);
  1216.     }
  1217.     else if(dialogid == menu_add+3)
  1218.     {
  1219.         if(response)
  1220.         {
  1221.             new i=0;
  1222.             gPlayer[playerid][id_sel] = strval(strtok(inputtext,i,'-'));
  1223.             ShowPlayerDialog(playerid, menu_add+1, DIALOG_STYLE_INPUT, GetLMsg(playerid,M_ONAME_TITLE), GetLMsg(playerid,M_DESC_ONAME), GetLMsg(playerid,M_ADD), GetLMsg(playerid,M_CANCEL));
  1224.         }
  1225.         else
  1226.         {
  1227.             gPlayer[playerid][vindex]++;
  1228.             new n = GetNumberObjectsPage(gPlayer[playerid][vfile], gPlayer[playerid][vindex]);
  1229.             new str[256];
  1230.             ReadListObjetects(lista[playerid],gPlayer[playerid][vfile],gPlayer[playerid][vindex]);
  1231.             strmid(str,gPlayer[playerid][vfile],0,strlen(gPlayer[playerid][vfile])-5);
  1232.             format(str, sizeof(str), "%s - Page %d", str, gPlayer[playerid][vindex]);
  1233.             if(n == 80)
  1234.                 ShowPlayerDialog(playerid, menu_add+3, DIALOG_STYLE_LIST, str, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_NEXTPAGE));
  1235.             else
  1236.                 ShowPlayerDialog(playerid, menu_add+2, DIALOG_STYLE_LIST, str, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_CANCEL));
  1237.         }
  1238.     }
  1239.     return 1;
  1240. }
  1241. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1242. stock SystemMessage(playerid, text[], color) {
  1243.     new msg[MAX_STRING];
  1244.  
  1245.     format(msg, sizeof msg, "[WorldEdit] %s", text);
  1246.  
  1247.     if (playerid == -1) {  
  1248.         SendClientMessageToAll(color, msg);
  1249.     } else {
  1250.         if (IsPlayerConnected(playerid)) {
  1251.             SendClientMessage(playerid, color, msg);
  1252.         }
  1253.     }
  1254.  
  1255.     return 1;
  1256. }
  1257. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1258. stock ReadObjects() {
  1259.     new File:hFile;
  1260.     new tmpres[MAX_STRING],i=0;
  1261.  
  1262.     new newoid;
  1263.  
  1264.     new modelid;
  1265.     new Float:x;
  1266.     new Float:y;
  1267.     new Float:z;
  1268.     new Float:rotx;
  1269.     new Float:roty;
  1270.     new Float:rotz;
  1271.     new ObjectName[MAX_STRING];
  1272.    
  1273.     new file[256];
  1274.     set(file, F_DIRECTORY);
  1275.     strcat(file,"Saved_Objects.TXT");
  1276.  
  1277.     if (!(fexist(file))) {
  1278.         new msg[256];
  1279.         format(msg,sizeof(msg), "[WorldEdit] %s File: '%s'", GetLMsg(-1,MSG_FNOTFOUND), file);
  1280.         printf("[OED] %s", msg);
  1281.         return 0;
  1282.     }
  1283.     else {
  1284.         hFile = fopen(file, io_read);
  1285.         tmpres[0]=0;
  1286.         while (fread(hFile, tmpres)) {
  1287.             StripNewLine(tmpres);
  1288.             if (tmpres[0]!=0) {      
  1289.                 modelid = strval(strtok(tmpres,i,','));
  1290.                 x = Float:floatstr(strtok(tmpres,i,','));
  1291.                 y = Float:floatstr(strtok(tmpres,i,','));
  1292.                 z = Float:floatstr(strtok(tmpres,i,','));
  1293.                 rotx = Float:floatstr(strtok(tmpres,i,','));
  1294.                 roty = Float:floatstr(strtok(tmpres,i,','));
  1295.                 rotz = Float:floatstr(strtok(tmpres,i,','));
  1296.                 set(ObjectName,strtok(tmpres,i,','));
  1297.                 if (gObjectCount < MAX_OBJECTS) {
  1298.                     newoid = gObjectCount;
  1299.                     gObjects[newoid][id_o] = CreateObject(modelid, x, y, z, rotx, roty, rotz, OBJECT_DISTANCE);
  1300.                     gObjects[newoid][ModelID] = modelid;
  1301.                     gObjects[newoid][obj_x] = x;
  1302.                     gObjects[newoid][obj_y] = y;
  1303.                     gObjects[newoid][obj_z] = z;
  1304.                     gObjects[newoid][rot_x] = rotx;
  1305.                     gObjects[newoid][rot_y] = roty;
  1306.                     gObjects[newoid][rot_z] = rotz;
  1307.                     gObjects[newoid][Name] = ObjectName;
  1308.                     gObjects[newoid][savetofile] = true;
  1309.                     gObjectCount++;
  1310.                 }
  1311.             }
  1312.             tmpres[0]=0;
  1313.             i=0;
  1314.         }
  1315.         fclose(hFile);
  1316.         return 1;
  1317.     }
  1318. }
  1319. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1320. stock DestroyObjects() {
  1321.     for(new i=0; i<gObjectCount;i++)
  1322.     {
  1323.         DestroyObject(gObjects[i][id_o]);
  1324.     }
  1325.     gObjectCount = 0;
  1326. }
  1327. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1328.  
  1329. stock SaveObjects() {
  1330.     new File:hFile;
  1331.     new line[MAX_STRING];
  1332.    
  1333.     new file[256];
  1334.     set(file, F_DIRECTORY);
  1335.     strcat(file,"Saved_Objects.TXT");
  1336.  
  1337.     hFile = fopen(file, io_write);
  1338.  
  1339.     for (new i=0;i<gObjectCount;i++) {
  1340.         if (gObjects[i][savetofile]) {
  1341.             format(line, sizeof line, "%d,%f,%f,%f,%f,%f,%f,%s\r\n", gObjects[i][ModelID], gObjects[i][obj_x], gObjects[i][obj_y], gObjects[i][obj_z], gObjects[i][rot_x], gObjects[i][rot_y], gObjects[i][rot_z], gObjects[i][Name]);
  1342.             fwrite(hFile, line);
  1343.         }
  1344.     }
  1345.  
  1346.     fclose(hFile);
  1347.  
  1348.     return 1;
  1349. }
  1350. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1351. stock AddNewObjectToScript(modelid,Float:x,Float:y,Float:z,Float:rotx,Float:roty,Float:rotz,ObjectName[MAX_STRING], oid=INVALID_OBJECT) {
  1352.     new newoid;
  1353.  
  1354.     if(oid > INVALID_OBJECT)
  1355.         newoid = oid;
  1356.     else if(gObjectCount < MAX_OBJECTS)
  1357.     {
  1358.         newoid = gObjectCount;
  1359.         gObjectCount++;
  1360.     }
  1361.  
  1362.     if (gObjectCount < MAX_OBJECTS) {
  1363.    
  1364.         gObjects[newoid][id_o] = CreateObject(modelid, x, y, z, rotx, roty, rotz, OBJECT_DISTANCE);
  1365.         gObjects[newoid][ModelID] = modelid;
  1366.         gObjects[newoid][obj_x] = x;
  1367.         gObjects[newoid][obj_y] = y;
  1368.         gObjects[newoid][obj_z] = z;
  1369.         gObjects[newoid][rot_x] = rotx;
  1370.         gObjects[newoid][rot_y] = roty;
  1371.         gObjects[newoid][rot_z] = rotz;
  1372.         gObjects[newoid][Name] = ObjectName;
  1373.  
  1374.         return newoid;
  1375.     } else {
  1376.         return 0;
  1377.     }
  1378. }
  1379. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1380. stock GetPlayerNearestObjects(playerid) {
  1381.     new Float:x1, Float:y1, Float:z1;
  1382.     new Float:x2, Float:y2, Float:z2;
  1383.     new Float:distances[MAX_OBJECTS][2];
  1384.     new j;
  1385.     new objects[24];
  1386.  
  1387.     GetPlayerPos(playerid, x1, y1, z1);
  1388.  
  1389.     for (new i=0;i<gObjectCount;i++) {
  1390.         GetObjectPos(gObjects[i][id_o], x2, y2, z2);
  1391.         distances[i][0] = GetDistanceBetweenCoords(x1, y1, z1, x2, y2, z2);
  1392.         distances[i][1] = float(i);
  1393.     }
  1394.  
  1395.     distances = FloatBubbleSort(distances, MAX_OBJECTS);
  1396.  
  1397.     for (new i=0;i<MAX_OBJECTS;i++) {
  1398.         if (!(floatround(distances[i][1]) == 0)) {
  1399.             if (j < 24) {
  1400.                 j++;
  1401.                 objects[j] = floatround(distances[i][1]);
  1402.             }
  1403.         }
  1404.     }
  1405.  
  1406.     return objects;
  1407. }
  1408. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1409. stock Float:GetDistanceBetweenCoords(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
  1410.     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
  1411. }
  1412. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1413. stock Float:FloatBubbleSort(Float:lArray[MAX_OBJECTS][2], lArraySize) {
  1414.     new Float:lSwap;
  1415.     new bool:bSwapped = true;
  1416.     new I;
  1417.  
  1418.     while(bSwapped) {
  1419.         bSwapped = false;
  1420.         for(I = 0; I < lArraySize - 1; I++) {
  1421.             if(lArray[I+1][0] < lArray[I][0]) {
  1422.                 lSwap = lArray[I][0];
  1423.                 lArray[I][0] = lArray[I+1][0];
  1424.                 lArray[I+1][0] = lSwap;
  1425.  
  1426.                 lSwap = lArray[I][1];
  1427.                 lArray[I][1] = lArray[I+1][1];
  1428.                 lArray[I+1][1] = lSwap;
  1429.  
  1430.                 bSwapped = true;
  1431.             }
  1432.         }
  1433.     }
  1434.  
  1435.     return lArray;
  1436. }
  1437. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1438. public ObjectEditTimer(playerid, editmode, axis, Float:value){
  1439.     new Float:x, Float:y, Float:z;
  1440.     new Float:rotx, Float:roty, Float:rotz;
  1441.     new oid;
  1442.  
  1443.     if ((gEditingObject[playerid][domove]) && (gEditingObject[playerid][object_id] > INVALID_OBJECT)) {
  1444.         value = floatmul(value, gEditingObject[playerid][EditMultiplier]);
  1445.  
  1446.         oid = gEditingObject[playerid][object_id];
  1447.  
  1448.         GetObjectPos(gObjects[oid][id_o], x, y, z);
  1449.         GetObjectRot(gObjects[oid][id_o], rotx, roty, rotz);
  1450.  
  1451.         switch(axis) {
  1452.         case AXIS_X:
  1453.             {
  1454.                 x = floatadd(x, value);
  1455.                 rotx = floatadd(rotx, value);
  1456.             }
  1457.         case AXIS_Y:
  1458.             {
  1459.                 y = floatadd(y, value);
  1460.                 roty = floatadd(roty, value);
  1461.             }
  1462.         case AXIS_Z:
  1463.             {
  1464.                 z = floatadd(z, value);
  1465.                 rotz = floatadd(rotz, value);
  1466.             }
  1467.         }
  1468.  
  1469.         switch (editmode) {
  1470.         case W_MOVE:
  1471.             {
  1472.                 SetObjectPos(gObjects[oid][id_o], x, y, z);
  1473.                 gObjects[oid][obj_x] = x;
  1474.                 gObjects[oid][obj_y] = y;
  1475.                 gObjects[oid][obj_z] = z;
  1476.             }
  1477.         case W_ROTATE:
  1478.             {
  1479.                 SetObjectRot(gObjects[oid][id_o], rotx, roty, rotz);
  1480.                 gObjects[oid][rot_x] = rotx;
  1481.                 gObjects[oid][rot_y] = roty;
  1482.                 gObjects[oid][rot_z] = rotz;
  1483.             }
  1484.         }
  1485.     }
  1486.  
  1487.     return 1;
  1488. }
  1489. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1490. public UpDownLeftRightAdditionTimer() {
  1491.     new keys, leftright, updown;
  1492.     new oldkeys;
  1493.  
  1494.     for (new i=0;i<MAX_PLAYERS;i++) {
  1495.         if (IsPlayerConnected(i) && IsPlayerAdmin(i)) {
  1496.             GetPlayerKeys(i, keys, updown, leftright);
  1497.             if (leftright == KEY_LEFT) {
  1498.                 if (!(gLastPlayerKeys[i][0] == leftright)) OnPlayerKeyStateChange(i, VKEY_LEFT, 0);
  1499.             } else if (leftright == KEY_RIGHT) {
  1500.                 if (!(gLastPlayerKeys[i][0] == leftright)) OnPlayerKeyStateChange(i, VKEY_RIGHT, 0);
  1501.             } else {
  1502.                 if (gLastPlayerKeys[i][0] == KEY_LEFT) {
  1503.                     oldkeys = VKEY_LEFT;
  1504.                 } else if (gLastPlayerKeys[i][0] == KEY_RIGHT) {
  1505.                     oldkeys = VKEY_DOWN;
  1506.                 }
  1507.                 if (!(gLastPlayerKeys[i][0] == leftright)) OnPlayerKeyStateChange(i, 0, oldkeys);
  1508.             }
  1509.             if (updown == KEY_UP) {
  1510.                 if (!(gLastPlayerKeys[i][1] == updown)) OnPlayerKeyStateChange(i, VKEY_UP, 0);
  1511.             } else if (updown == KEY_DOWN) {
  1512.                 if (!(gLastPlayerKeys[i][1] == updown)) OnPlayerKeyStateChange(i, VKEY_DOWN, 0);
  1513.             } else {
  1514.                 if (gLastPlayerKeys[i][1] == KEY_UP) {
  1515.                     oldkeys = VKEY_UP;
  1516.                 } else if (gLastPlayerKeys[i][1] == KEY_DOWN){
  1517.                     oldkeys = VKEY_DOWN;
  1518.                 }
  1519.                 if (!(gLastPlayerKeys[i][1] == updown)) OnPlayerKeyStateChange(i, 0, oldkeys);
  1520.             }
  1521.  
  1522.             gLastPlayerKeys[i][0] = leftright;
  1523.             gLastPlayerKeys[i][1] = updown;
  1524.         }
  1525.     }
  1526.  
  1527.     return 1;
  1528. }
  1529. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1530. public SetObjectCoords(playerid, obj_id) {
  1531.     new Float:x, Float:y, Float:z;
  1532.  
  1533.     GetObjectPos(gObjects[obj_id][id_o], x, y, z);
  1534.  
  1535.     if (!((x == gObjects[obj_id][obj_x]) &&
  1536.           (y == gObjects[obj_id][obj_y]) &&
  1537.           (z == gObjects[obj_id][obj_z]))) {
  1538.  
  1539.         gObjects[obj_id][obj_x] = x;
  1540.         gObjects[obj_id][obj_y] = y;
  1541.         gObjects[obj_id][obj_z] = z;
  1542.     }
  1543.  
  1544.     GetPlayerPos(playerid, x, y, z);
  1545.     SetPlayerCameraPos(playerid, x, y, z);
  1546.     SetPlayerCameraLookAt(playerid, gObjects[obj_id][obj_x], gObjects[obj_id][obj_y], gObjects[obj_id][obj_z]);
  1547.  
  1548.     return 1;
  1549. }
  1550. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1551. stock ReadListObjetects(list [], file[]="index.ini", index=1)
  1552. {
  1553.     new farq[256];
  1554.     set(farq,file);
  1555.     format(file,MAX_STRING,"%sObjects/%s",F_DIRECTORY, file);
  1556.     new line[256], File:fl = fopen(file,io_append), first=(index-1)*80, i=0, last = index*80;
  1557.     list[0] = 0;
  1558.     fclose(fl);
  1559.     fl = fopen(file,io_read);
  1560.     while(i < last && fread(fl, line))
  1561.     {
  1562.         if(i < first)
  1563.         {
  1564.             i++;
  1565.             continue;
  1566.         }
  1567.         StripNewLine(line);
  1568.         if(line[0] == '/')
  1569.             continue;
  1570.         strcat(list,line,4096);
  1571.         strcat(list,"\n",4096);
  1572.         i++;
  1573.     }
  1574.     if(list[strlen(list)-1] == '\n')
  1575.         list[strlen(list)-1] = 0;
  1576.     fclose(fl);
  1577.     set(file,farq);
  1578.     return list;
  1579. }
  1580. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1581. stock GetNumberObjects(file[]="index.ini")
  1582. {
  1583.     new farq[256];
  1584.     set(farq,file);
  1585.     format(file,MAX_STRING,"%sObjects/%s",F_DIRECTORY, file);
  1586.     new line[256], File:fl = fopen(file,io_append), i=0;
  1587.     fclose(fl);
  1588.     fl = fopen(file,io_read);
  1589.     while(fread(fl, line))
  1590.         i++;
  1591.     fclose(fl);
  1592.     set(file,farq);
  1593.     return i;
  1594. }
  1595. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1596. stock GetNumberObjectsPage(file[]="index.ini", index)
  1597. {
  1598.     new farq[256];
  1599.     set(farq,file);
  1600.     format(file,MAX_STRING,"%sObjects/%s",F_DIRECTORY, file);
  1601.     new line[256], File:fl = fopen(file,io_append), first=(index-1)*80, i=0, last = index*80;
  1602.     fclose(fl);
  1603.     fl = fopen(file,io_read);
  1604.     while(i < last && fread(fl, line))
  1605.     {
  1606.         if(i < first)
  1607.         {
  1608.             i++;
  1609.             continue;
  1610.         }
  1611.         i++;
  1612.     }
  1613.     fclose(fl);
  1614.     set(file,farq);
  1615.     return (i-first);
  1616. }
  1617. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1618. stock ReadLangs()
  1619. {
  1620.     new file[256], line[256], i=0;
  1621.     format(file,MAX_STRING,"%sLanguages/index.ini",F_DIRECTORY);
  1622.     new File:fl = fopen(file,io_append);
  1623.     fclose(fl);
  1624.     fl = fopen(file,io_read);
  1625.     while(i < MAX_LANGS && fread(fl, line))
  1626.     {
  1627.         StripNewLine(line);
  1628.         set(Langs[i], line);
  1629.         i++;
  1630.     }
  1631.     Langs_Imp = i;
  1632.     fclose(fl);
  1633. }
  1634. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
  1635. stock GetLMsg(playerid, ELANG:message)
  1636. {
  1637.     new lfile[256];
  1638.     if(playerid > -1)
  1639.         format(lfile,sizeof(lfile),"%sLanguages/%s.txt",F_DIRECTORY,plang[playerid]);
  1640.     else
  1641.         format(lfile,sizeof(lfile),"%sLanguages/%s.txt",F_DIRECTORY,Langs[0]);
  1642.     new ret[256], line[256], File:fl, i=0;
  1643.     ret[0] = 0;
  1644.     fl = fopen(lfile,io_read);
  1645.     if(!fl)
  1646.     {
  1647.         printf("[OED] %s File: %s", GetLMsg(-1,MSG_FNOTFOUND), lfile);
  1648.         return ret;
  1649.     }
  1650.     while(ELANG: i < message && fread(fl, line))
  1651.     {
  1652.         i++;
  1653.         StripNewLine(line);
  1654.     }
  1655.     if(fread(fl, line))
  1656.     {
  1657.         StripNewLine(line);
  1658.         set(ret,line);
  1659.     }
  1660.     fclose(fl);
  1661.     return ret;
  1662. }
  1663. /* -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ */
Advertisement
Add Comment
Please, Sign In to add comment