Advertisement
ylleron

yEditor 0.5b

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