Advertisement
ylleron

yEditor 0.6d (RC5)

Sep 1st, 2011
2,106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.53 KB | None | 0 0
  1. /*
  2.                         yEditor 0.6d
  3.                   YLLERON'S OBJECT EDITOR
  4.                 ---------------------------
  5.             You can edit everything you want but
  6.               this header must still unchanged.
  7.  
  8.                                                                 ylleron
  9. */
  10.  
  11.  
  12. #include <a_samp>
  13.  
  14. #define PRESSED(%0)         (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  15.  
  16. #define MAX_YOBJ    500
  17.  
  18. #define EDIT_NONE   0
  19. #define EDIT_POS    1
  20. #define EDIT_ROT    2
  21. #define EDIT_CAM    3
  22.  
  23. #define downkey     4
  24. #define upkey       512
  25.  
  26. #define D_DESTROY   100
  27. #define D_EDITOR    101
  28. #define D_CREATE    102
  29. #define D_EDIT      103
  30.  
  31. //------------------------------------------------------------------------------
  32. new StateEdit[MAX_PLAYERS] = EDIT_NONE;
  33.  
  34. enum e_ye_sVars
  35. {
  36.     yObj_SavedId[MAX_YOBJ],
  37.     yObjects[MAX_YOBJ],
  38.     yObj_curObj,    //
  39.     yObj_ChoObj,    //
  40.     yObj_count,     //
  41.     yObj_id         //
  42. }
  43.  
  44. new yEditor_sVars[e_ye_sVars];
  45. //----------------------------
  46. new Float:ObjX,Float:ObjY,Float:ObjZ;
  47. new Float:ObjrX,Float:ObjrY,Float:ObjrZ;
  48.  
  49. new KeyChecking;
  50. //------------------------------------------------------------------------------
  51. public OnFilterScriptInit()
  52. {
  53.     print("\n-----------------------");
  54.     print("yEditor 0.6b by ylleron");
  55.     print("-----------------------\n");
  56.  
  57.     //======================================
  58.     SetTimer("yUpd_CameraState", 50, true);
  59.    
  60.     AddPlayerClass(19, -1198.79931641,-85.70799255,38.97339630,0.00000000, 0, 0,0,0,0,0);
  61.     return 1;
  62. }
  63.  
  64. public OnFilterScriptExit()
  65. {
  66.     return 1;
  67. }
  68.  
  69. forward yUpd_CameraState();
  70. public yUpd_CameraState()
  71. {
  72.     for(new i=0;i<MAX_PLAYERS;i++)
  73.     {
  74.         if(IsPlayerConnected(i) && StateEdit[i])
  75.         {
  76.             GetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ);
  77.             GetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY, ObjrZ);
  78.  
  79.             //----------------------------------------------------------------
  80.             SetPlayerCameraLookAt(i, ObjX, ObjY, ObjZ);
  81.         }
  82.     }
  83.     return -1;
  84. }
  85.  
  86. public OnPlayerCommandText(playerid, cmdtext[])
  87. {
  88.     if (!strcmp(cmdtext, "/yeditor", true))
  89.     {
  90.         ShowPlayerDialog(playerid, D_EDITOR, DIALOG_STYLE_LIST, "yEditor 0.6d", "Create object\nEdit objects\nStop Edit\nDestroy Object\nGoto object pos\nSave Objects\nAbout", "OK", "Cancel");
  91.     }
  92.     return 0;
  93. }
  94.  
  95. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  96. {
  97.     if (PRESSED(KEY_FIRE) && StateEdit[playerid] != EDIT_NONE) {
  98.         StateEdit[playerid] = (StateEdit[playerid] == EDIT_POS) ? EDIT_ROT : EDIT_POS;
  99.  
  100.         switch(StateEdit[playerid])
  101.         {
  102.             case EDIT_POS: GameTextForPlayer(playerid, "YOU ARE EDITING POSITION", 1000*4, 5);
  103.             case EDIT_ROT: GameTextForPlayer(playerid, "YOU ARE EDITING ROTATION", 1000*4, 5);
  104.         }
  105.     }
  106.    
  107.     new keys, u, p;
  108.     GetPlayerKeys(playerid, keys, u, p);
  109.     if (StateEdit[playerid] == EDIT_POS) {
  110.         if (PRESSED(upkey)) {
  111.             if (keys == KEY_JUMP) {
  112.                 SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ+1.0); // fast
  113.             }
  114.             else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ+0.5);
  115.         }
  116.         if (PRESSED(downkey)) {
  117.             if (keys == KEY_JUMP) {
  118.                 SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ-1.0); // fast
  119.             }
  120.             else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ-0.5);
  121.         }
  122.     }
  123.  
  124.     if (PRESSED(KEY_ACTION)) {
  125.         if (StateEdit[playerid] != EDIT_NONE) {
  126.             yEdit_StopEdit(playerid);
  127.         }
  128.     }
  129.     return 1;
  130. }
  131.  
  132. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  133. {
  134.     if (dialogid == D_EDITOR)
  135.     {
  136.         if (response) {
  137.             switch(listitem) {
  138.                 case 0: // Create
  139.                 {
  140.                     ShowPlayerDialog(playerid, D_CREATE, DIALOG_STYLE_INPUT, "Create new object", "Please type model id of new object", "Create", "Cancel");
  141.                 }
  142.                 case 1: // Edit
  143.                 {
  144.                     ShowPlayerDialog(playerid, D_EDIT, DIALOG_STYLE_INPUT, "Move object", "Please type id of object", "Edit", "Cancel");
  145.                 }
  146.                 case 2: // Stop Edit
  147.                 {
  148.                     if (StateEdit[playerid] != EDIT_NONE)
  149.                     {
  150.                         yEdit_StopEdit(playerid);
  151.                     }
  152.                     else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: You aren't editing any object!");
  153.                 }
  154.                 case 3: // Destroy object
  155.                 {
  156.                     ShowPlayerDialog(playerid, D_DESTROY, DIALOG_STYLE_INPUT, "Destroy object", "Please type id of object", "Destroy", "Cancel");
  157.                 }
  158.                 case 4:
  159.                 {
  160.                     StateEdit[playerid] = EDIT_CAM;
  161.                 }
  162.                 case 5:
  163.                 {
  164.                     yEdit_Save(playerid);
  165.                 }
  166.                 case 6:
  167.                 {
  168.                     ShowPlayerDialog(playerid, 14, DIALOG_STYLE_MSGBOX, "yEditor 0.6d (RC5)", "yEditor v0.6d by ylleron\n\nFor normal move hold 'KEY SPRINT'\nFor fastest move hold 'KEY JUMP'\n\nTo change edit method press 'KEY FIRE' (Method: POS, Method: ROT)\nUp object - 1 (on numerical keyboard)\nDown - 0 (on numerical keyboard)\nPlease, report bugs.\nWe can make better and better scripts", "OK", "");
  169.                 }
  170.             }
  171.         }
  172.     }
  173.     if (dialogid == D_CREATE)
  174.     {
  175.         if (response)
  176.         {
  177.             if (StateEdit[playerid] == EDIT_NONE)
  178.             {
  179.                 if (IsNumeric(inputtext))
  180.                 {
  181.                     new id = strval(inputtext);
  182.                     if (strlen(inputtext) > 0)
  183.                     {
  184.                         yEdit_CreateObject(playerid, id);
  185.                     }
  186.                 }
  187.                 else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: Object id must be number");
  188.             }
  189.             else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: You are already editing one of the object!");
  190.         }
  191.     }
  192.     if (dialogid == D_EDIT)
  193.     {
  194.         if (response)
  195.         {
  196.             if (StateEdit[playerid] == EDIT_NONE)
  197.             {
  198.                 if (IsNumeric(inputtext))
  199.                 {
  200.                     new id = strval(inputtext);
  201.                     if (strlen(inputtext) > 0)
  202.                     {
  203.                         yEdit_EditObject(playerid, id);
  204.                     }
  205.                 }
  206.                 else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: Object id must be number");
  207.             }
  208.             else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: You are already editing one of the object!");
  209.         }
  210.     }
  211.     if (dialogid == D_DESTROY) {
  212.         if (response)
  213.         {
  214.             if (strlen(inputtext) > 0 && IsNumeric(inputtext)) {
  215.                 yEdit_DestroyObject(playerid, strval(inputtext));
  216.             }
  217.         }
  218.     }
  219.     if (dialogid == 14) {
  220.         if (response) return 1;
  221.     }
  222.     return 1;
  223. }
  224.  
  225. forward KeyEdit(playerid);
  226. public KeyEdit(playerid)
  227. {
  228.     if (StateEdit[playerid] == EDIT_NONE) return 0;
  229.  
  230.     // Object move -------------------------------------------------------------
  231.     new keys, updown, leftright;
  232.     GetPlayerKeys(playerid, keys, updown, leftright);
  233.  
  234.     //---------------------------------------------------------
  235.     switch(StateEdit[playerid])
  236.     {
  237.         case EDIT_POS:
  238.         {
  239.             // Y Pos --------------------------
  240.             if (updown < 0) {
  241.                 if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+0.1, ObjZ); // normal
  242.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+1.0, ObjZ); // fast
  243.                 else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+0.01, ObjZ); //slow
  244.             }
  245.             else if (updown > 0) {
  246.                 if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-0.1, ObjZ);
  247.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-1.0, ObjZ); // fastest
  248.                 else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-0.01, ObjZ);
  249.             }
  250.            
  251.             // X Pos --------------------------
  252.             if (leftright > 0) {
  253.                 if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+0.1, ObjY, ObjZ);
  254.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+1.0, ObjY, ObjZ); // fastest
  255.                 else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+0.01, ObjY, ObjZ);
  256.             }
  257.             else if (leftright < 0) {
  258.                 if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX-0.1, ObjY, ObjZ);
  259.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX-1.0, ObjY, ObjZ); // fastest
  260.                 else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX-0.01, ObjY, ObjZ);
  261.             }
  262.         }
  263.         case EDIT_ROT:
  264.         {
  265.             if (updown < 0) {
  266.                 if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY+2.0, ObjrZ);
  267.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+4.0, ObjZ); // fastest
  268.                 else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY+1.0, ObjrZ);
  269.             }
  270.             else if (updown > 0) {
  271.                 if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY-2.0, ObjrZ);
  272.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-4.0, ObjZ); // fastest
  273.                 else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY-1.0, ObjrZ);
  274.             }
  275.             if (leftright < 0) {
  276.                 if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX+2.0, ObjrY, ObjrZ);
  277.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+4.0, ObjY, ObjZ); // fastest
  278.                 else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX+1.0, ObjrY, ObjrZ);
  279.             }
  280.             else if (leftright > 0) {
  281.                 if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX-2.0, ObjrY, ObjrZ);
  282.                 else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+4.0, ObjY, ObjZ); // fastest
  283.                 else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX-1.0, ObjrY, ObjrZ);
  284.             }
  285.         }
  286.         case EDIT_CAM:
  287.         {
  288.             GetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ);
  289.        
  290.             SetPlayerCameraPos(playerid, ObjX+15, ObjY, ObjZ+15);
  291.             SetPlayerCameraLookAt(playerid, ObjX, ObjY, ObjZ);
  292.            
  293.             StateEdit[playerid] = EDIT_POS;
  294.         }
  295.     }
  296.     return 0;
  297. }
  298.  
  299. //==============================================================================
  300. stock yEdit_CreateObject(playerid, id)
  301. {
  302.     if(yEditor_sVars[yObj_count] < MAX_YOBJ)
  303.     {
  304.         yEditor_sVars[yObj_SavedId][yEditor_sVars[yObj_count]] = id;
  305.  
  306.         // Get player position to make object to him location.
  307.         new Float:PlayerX,Float:PlayerY,Float:PlayerZ;
  308.         GetPlayerPos(playerid, PlayerX, PlayerY, PlayerZ);
  309.        
  310.         yEditor_sVars[yObjects][yEditor_sVars[yObj_count]] = CreateObject(id, PlayerX, PlayerY+1, PlayerZ, 0, 0, 0);
  311.        
  312.         new _Str[100];
  313.         format(_Str, sizeof(_Str), "yEditor: Created new object! Model ID: %d | Object ID: %d", id, yEditor_sVars[yObj_count]);
  314.         SendClientMessage(playerid, 0x0000FFAA, _Str);
  315.        
  316.         // Increase created
  317.         yEditor_sVars[yObj_count]++;
  318.     }
  319.     return true;
  320. }
  321. //==============================================================================
  322. stock yEdit_DestroyObject(playerid, id)
  323. {
  324.     DestroyObject(yEditor_sVars[yObjects][id]);
  325.     yEditor_sVars[yObj_count]--;
  326.  
  327.     yEdit_StopEdit(playerid);
  328.     return 1;
  329. }
  330. //==============================================================================
  331. stock yEdit_EditObject(playerid, id)
  332. {
  333.     // Change state to editing object position
  334.     // And we freeze the player
  335.     StateEdit[playerid] = EDIT_POS;
  336.     TogglePlayerControllable(playerid, 0);
  337.     //------------------------------------
  338.     yEditor_sVars[yObj_ChoObj] = id;
  339.     yEditor_sVars[yObj_curObj] = id;
  340.  
  341.     //-----------------------------
  342.     GetObjectPos(yEditor_sVars[yObj_ChoObj], ObjX, ObjY, ObjZ);
  343.     //-----------------------------
  344.     if (ObjX == 0.0 && ObjY == 0.0 && ObjZ == 0.0) {
  345.         SendClientMessage(playerid, 0x0000FFAA, "yEditor: This object doesn't exist!");
  346.         yEdit_StopEdit(playerid);
  347.     } else {
  348.         SetPlayerCameraPos(playerid, ObjX+5, ObjY-15, ObjZ+15);
  349.         SetPlayerCameraLookAt(playerid, ObjX, ObjY, ObjZ);
  350.     }
  351.     //-----------------------------
  352.    
  353.     KeyChecking = SetTimerEx("KeyEdit", 100, 1, "i", playerid);
  354.     return 1;
  355. }
  356.  
  357. //==============================================================================
  358. stock yEdit_StopEdit(playerid)
  359. {
  360.     new str[100];
  361.     format(str,sizeof(str),"OBJECT\nID: %d\nModel: %d\n", yEditor_sVars[yObj_count], yEditor_sVars[yObj_SavedId][yEditor_sVars[yObj_count]]);
  362.     Create3DTextLabel(str, 0xFF0000AA, ObjX, ObjY, ObjZ, 40.0, 0, 0);
  363.     //-----------------------------------
  364.  
  365.     SetCameraBehindPlayer(playerid);
  366.     TogglePlayerControllable(playerid, 1);
  367.     // ----------------------------------
  368.    
  369.     yEditor_sVars[yObj_curObj] = -1;
  370.     StateEdit[playerid] = EDIT_NONE;
  371.  
  372.     KillTimer(KeyChecking);
  373.     return 1;
  374. }
  375.  
  376. // this stock isn't used, you can use it as new action in dialog
  377. stock yEdit_CloneObject(playerid, id)
  378. {
  379.     if(yEditor_sVars[yObj_count] < MAX_YOBJ)
  380.     {
  381.         // Increase created
  382.         yEditor_sVars[yObj_count]++;
  383.  
  384.         yEditor_sVars[yObj_id] = id;
  385.  
  386.         // --------------------------------
  387.         GetObjectPos(id, ObjX, ObjY, ObjZ);
  388.         GetObjectRot(id, ObjrX, ObjrY, ObjrZ);
  389.  
  390.         yEditor_sVars[yObj_SavedId][yEditor_sVars[yObj_count]] = id;
  391.         yEditor_sVars[yObjects][yEditor_sVars[yObj_count]] = CreateObject(yEditor_sVars[yObj_id], ObjX, ObjY, ObjZ, ObjrX, ObjrY, ObjrZ);
  392.  
  393.         new _Str[100];
  394.         format(_Str, sizeof(_Str), "yEditor: Cloned object created! Model ID: %d | Object ID: %d", yEditor_sVars[yObj_id], yEditor_sVars[yObjects][yEditor_sVars[yObj_count]]);
  395.         SendClientMessage(playerid, 0x0000FFAA, _Str);
  396.     }
  397. }
  398. //==============================================================================
  399. stock yEdit_Save(playerid)
  400. {
  401.     new File:gFile;
  402.     gFile = fopen("/yEditor/saved_objects.txt", io_append);
  403.  
  404.     for(new i=0;i<yEditor_sVars[yObj_count];i++)
  405.     {
  406.         //-----------------------------
  407.         GetObjectPos(i, ObjX, ObjY, ObjZ);
  408.         GetObjectRot(i, ObjrX, ObjrY, ObjrZ);
  409.         //-----------------------------
  410.         if (ObjX == 0.0 && ObjY == 0.0 && ObjZ == 0.0) return 0;
  411.         else {
  412.             new flo[168];
  413.             format(flo, sizeof(flo), "CreateObject(%d, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f);\r\n", yEditor_sVars[yObj_SavedId][i], ObjX, ObjY, ObjZ, ObjrX, ObjrY, ObjrZ);
  414.             fwrite(gFile, flo);
  415.         }
  416.     }
  417.     fclose(gFile);
  418.     //---------------------------------------------------------
  419.     SendClientMessage(playerid, 0x0000FFAA, "yEditor: All Objects saved!");
  420.     return 1;
  421. }
  422.  
  423. stock IsNumeric(string[])
  424. {
  425.     for (new i = 0, j = strlen(string); i < j; i++) {
  426.         if (string[i] > '9' || string[i] < '0') {
  427.             return 0;
  428.         }
  429.     }
  430.     return 1;
  431. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement