TYUI

Create Object Editor by Miroslav

Jun 13th, 2013
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.51 KB | None | 0 0
  1. #include <a_samp>
  2. #include <streamer>
  3. #include <zcmd>
  4. #define DEF_MAX_OBJECTS 5000
  5. #define DEF_COL_WHITE   0xFFFFFFFF
  6. #define DEF_COL_RED     0xAE0000FF
  7.  
  8. new DB:EDITOR_DATABASE;
  9.  
  10. forward FUNCTION_LoadObjects();
  11.  
  12. enum OBJECT_INFO
  13. {
  14.     OBJ_ID,
  15.     OBJ_DB_ID,
  16.     OBJ_MODEL,
  17.     Float:OBJ_X,
  18.     Float:OBJ_Y,
  19.     Float:OBJ_Z,
  20.     Float:OBJ_RX,
  21.     Float:OBJ_RY,
  22.     Float:OBJ_RZ,
  23.     OBJ_VW,
  24.     OBJ_INTERIOR,
  25.     Float:OBJ_STREAM_DISTANCE,
  26. };
  27.  
  28. new EDITOR_OBJECT[DEF_MAX_OBJECTS][OBJECT_INFO];
  29. new EDIT_OBJECT_ID[MAX_PLAYERS];
  30.  
  31. stock Numbers(const string[])
  32. {
  33.     for (new i = 0, z = strlen(string); i < z; i++)
  34.     {
  35.         if (string[i] > '9' || string[i] < '0') return 0;
  36.     }
  37.     return 1;
  38. }
  39.  
  40. public OnFilterScriptInit()
  41. {
  42.     print("\n--------------------------------------");
  43.     print("SA-MP Object Edit-Save-Load by Miroslav");
  44.     print("--------------------------------------\n");
  45.     EDITOR_DATABASE = db_open("objects.db");
  46.     FUNCTION_LoadObjects();
  47.     return 1;
  48. }
  49.  
  50. public OnFilterScriptExit()
  51. {
  52. return 1;
  53. }
  54.  
  55. CMD:editobject(playerid,params[])
  56. {
  57. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,DEF_COL_RED,"You are not allowed to use this function");
  58. ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  59. SendClientMessage(playerid,DEF_COL_WHITE,"You are not editing the last object you made.");
  60. return 1;
  61. }
  62.  
  63. CMD:selectobject(playerid,params[])
  64. {
  65. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,DEF_COL_RED,"You are not allowed to use this function");
  66. SelectObject(playerid);
  67. SendClientMessage(playerid,DEF_COL_WHITE,"Select a object that you like to edit. You only can edit objects that you created with this filterscript.");
  68. return 1;
  69. }
  70.  
  71. CMD:createobject(playerid,params[])
  72. {
  73. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,DEF_COL_RED,"You are not allowed to use this function");
  74. ShowPlayerDialog(playerid,10000,DIALOG_STYLE_INPUT,"{A80000}Insert Object ID","Insert the object ID that you wan't to create.","Create","Close");
  75. return 1;
  76. }
  77.  
  78. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  79. {
  80.     EDITOR_OBJECT[objectid][OBJ_X] = x;
  81.     EDITOR_OBJECT[objectid][OBJ_Y] = y;
  82.     EDITOR_OBJECT[objectid][OBJ_Z] = z;
  83.     EDITOR_OBJECT[objectid][OBJ_RX] = rx;
  84.     EDITOR_OBJECT[objectid][OBJ_RY] = ry;
  85.     EDITOR_OBJECT[objectid][OBJ_RZ] = rz;
  86.     SetDynamicObjectPos(objectid,x,y,z);
  87.     SetDynamicObjectRot(objectid,rx,ry,rz);
  88.     new EDITOR_QUERY[256];
  89.     format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "UPDATE `OBJECTS` SET `X`='%f', `Y`='%f', `Z`='%f', `RX`='%f', `RY`='%f', `RZ`='%f' WHERE `ID`=%d",
  90.     EDITOR_OBJECT[objectid][OBJ_X],
  91.     EDITOR_OBJECT[objectid][OBJ_Y],
  92.     EDITOR_OBJECT[objectid][OBJ_Z],
  93.     EDITOR_OBJECT[objectid][OBJ_RX],
  94.     EDITOR_OBJECT[objectid][OBJ_RY],
  95.     EDITOR_OBJECT[objectid][OBJ_RZ],
  96.     EDITOR_OBJECT[objectid][OBJ_DB_ID]);
  97.     db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  98.     return 1;
  99. }
  100. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
  101. {
  102.     if(EDITOR_OBJECT[objectid][OBJ_MODEL] != 0)
  103.     {
  104.         EDIT_OBJECT_ID[playerid] = objectid;
  105.         ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  106.     } else return SendClientMessage(playerid,DEF_COL_RED,"It seems you didn't selected a object that belows to this filterscript");
  107.     return 1;
  108. }
  109.  
  110. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  111. {
  112.     if(dialogid == 10002 && response)
  113.     {
  114.         if(!Numbers(inputtext) && strval(inputtext) != -1) return SendClientMessage(playerid,DEF_COL_RED,"You only can use numbers!"),ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  115.         new id = EDIT_OBJECT_ID[playerid];
  116.         new EDITOR_QUERY[256];
  117.         format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "UPDATE `OBJECTS` SET `VW`=%d WHERE `ID`=%d",
  118.         strval(inputtext),
  119.         EDITOR_OBJECT[id][OBJ_DB_ID]);
  120.         db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  121.         SendClientMessage(playerid,DEF_COL_WHITE,"You successful changed to virtualworld of this object.");
  122.         return ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  123.     }
  124.     if(dialogid == 10003 && response)
  125.     {
  126.         if(!Numbers(inputtext) && strval(inputtext) != -1) return SendClientMessage(playerid,DEF_COL_RED,"You only can use numbers!"),ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  127.         new id = EDIT_OBJECT_ID[playerid];
  128.         new EDITOR_QUERY[256];
  129.         format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "UPDATE `OBJECTS` SET `INT`=%d WHERE `ID`=%d",
  130.         strval(inputtext),
  131.         EDITOR_OBJECT[id][OBJ_DB_ID]);
  132.         db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  133.         SendClientMessage(playerid,DEF_COL_WHITE,"You successful changed to interior of this object.");
  134.         return ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  135.     }
  136.     if(dialogid == 10004 && response)
  137.     {
  138.         if(!Numbers(inputtext) && strval(inputtext) != -1) return SendClientMessage(playerid,DEF_COL_RED,"You only can use numbers!"),ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  139.         new id = EDIT_OBJECT_ID[playerid];
  140.         new EDITOR_QUERY[256];
  141.         format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "UPDATE `OBJECTS` SET `DISTANCE`=%d WHERE `ID`=%d",
  142.         strval(inputtext),
  143.         EDITOR_OBJECT[id][OBJ_DB_ID]);
  144.         db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  145.         SendClientMessage(playerid,DEF_COL_WHITE,"You successful changed to distance of this object.");
  146.         return ShowPlayerDialog(playerid,10001,DIALOG_STYLE_LIST,"{A80000}Edit Object","Position\nVirtual World\nInterior ID\nStream Distance\nDelete Object","Next","Close");
  147.     }
  148.     if(dialogid == 10001 && response)
  149.     {
  150.         if(listitem == 0)
  151.         {
  152.             EditDynamicObject(playerid, EDIT_OBJECT_ID[playerid]);
  153.             return SendClientMessage(playerid,DEF_COL_WHITE,"Usage ESC or the save icon to save the position.");
  154.         }
  155.         if(listitem == 1)
  156.         {
  157.             ShowPlayerDialog(playerid,10002,DIALOG_STYLE_INPUT,"{A80000}Virtual World","Insert the virtualworld you wan't to only stream this object in.\nUsage -1 to show it in all virtualworlds.","Save","Close");
  158.         }
  159.         if(listitem == 2)
  160.         {
  161.             ShowPlayerDialog(playerid,10003,DIALOG_STYLE_INPUT,"{A80000}Virtual World","Insert the interior you wan't to only stream this object in.\nUsage -1 to show it in all interior\nUsage /interior to see your currently interior.","Save","Close");
  162.         }
  163.         if(listitem == 3)
  164.         {
  165.             ShowPlayerDialog(playerid,10004,DIALOG_STYLE_INPUT,"{A80000}Virtual World","Insert the stream distance of this object. Default is 100.","Save","Close");
  166.         }
  167.         if(listitem == 4)
  168.         {
  169.             new EDITOR_QUERY[256];
  170.             format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "DELETE FROM `OBJECTS` WHERE `ID`=%d",EDITOR_OBJECT[EDIT_OBJECT_ID[playerid]][OBJ_DB_ID]);
  171.             db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  172.             DestroyDynamicObject(EDIT_OBJECT_ID[playerid]);
  173.             return SendClientMessage(playerid,DEF_COL_WHITE,"You succesful deleted this object.");
  174.         }
  175.     }
  176.     if(dialogid == 10000 && response)
  177.     {
  178.         if(!Numbers(inputtext)) return SendClientMessage(playerid,DEF_COL_RED,"You only can use numbers!"),ShowPlayerDialog(playerid,10000,DIALOG_STYLE_INPUT,"{A80000}Insert Object ID","Insert the object ID that you wan't to create.","Create","Close");
  179.         new Float:editor[3],id;
  180.         GetPlayerPos(playerid,editor[0],editor[1],editor[2]);
  181.         id = CreateDynamicObject(strval(inputtext), editor[0]+1, editor[1]+1, editor[2], 0.0,0.0,0.0, -1, -1, -1, 100.0);
  182.  
  183.         if(id > DEF_MAX_OBJECTS) return SendClientMessageToAll(DEF_COL_WHITE,"Error while creating object, it seems you are trying to create more objects then the max amount of objects.");
  184.        
  185.         EDITOR_OBJECT[id][OBJ_MODEL] = strval(inputtext);
  186.         EDITOR_OBJECT[id][OBJ_X] = editor[0]+1;
  187.         EDITOR_OBJECT[id][OBJ_Y] = editor[1]+1;
  188.         EDITOR_OBJECT[id][OBJ_Z] = editor[2];
  189.         EDITOR_OBJECT[id][OBJ_RX] = 0.0;
  190.         EDITOR_OBJECT[id][OBJ_RY] = 0.0;
  191.         EDITOR_OBJECT[id][OBJ_RZ] = 0.0;
  192.         EDITOR_OBJECT[id][OBJ_VW] = -1;
  193.         EDITOR_OBJECT[id][OBJ_INTERIOR] = -1;
  194.         EDITOR_OBJECT[id][OBJ_STREAM_DISTANCE] = 100.0;
  195.         EDIT_OBJECT_ID[playerid] = id;
  196.         EditDynamicObject(playerid, id);
  197.        
  198.         new EDITOR_QUERY[256];
  199.         format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "INSERT INTO `OBJECTS` (`MODEL`, `X`, `Y`, `Z`, `INT`) VALUES (%d,'%f','%f','%f',%d)",
  200.         EDITOR_OBJECT[id][OBJ_MODEL],
  201.         EDITOR_OBJECT[id][OBJ_X],
  202.         EDITOR_OBJECT[id][OBJ_Y],
  203.         EDITOR_OBJECT[id][OBJ_Z],
  204.         id+1000);
  205.         db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  206.         new DBResult:EDITOR_RESULT;
  207.         format(EDITOR_QUERY,sizeof(EDITOR_QUERY),"SELECT `ID` FROM `OBJECTS` WHERE `INT`=%d",id+1000);
  208.         EDITOR_RESULT = db_query(EDITOR_DATABASE,EDITOR_QUERY);
  209.         if(db_num_rows(EDITOR_RESULT) == 1)
  210.         {
  211.             new temp[16];
  212.             db_get_field(EDITOR_RESULT,0,temp,16);
  213.             EDITOR_OBJECT[id][OBJ_DB_ID] = strval(temp);
  214.             SendClientMessage(playerid,DEF_COL_WHITE,"Object ID received.");
  215.         }
  216.         db_free_result(EDITOR_RESULT);
  217.         format(EDITOR_QUERY, sizeof(EDITOR_QUERY), "UPDATE `OBJECTS` SET `INT`=-1 WHERE `ID`=%d",EDITOR_OBJECT[id][OBJ_DB_ID]);
  218.         db_free_result(db_query(EDITOR_DATABASE, EDITOR_QUERY));
  219.         SendClientMessage(playerid,DEF_COL_WHITE,"Object saved to database, Usage /editobject or /selectobject to edit this object.");
  220.     }
  221.     return 1;
  222. }
  223.  
  224. public FUNCTION_LoadObjects()
  225. {
  226.     new DBResult:EDITOR_RESULT,IDX;
  227.     EDITOR_RESULT = db_query(EDITOR_DATABASE,  "SELECT * FROM `OBJECTS`");
  228.     if(db_num_rows(EDITOR_RESULT) > 0) // Logged In
  229.     {
  230.         new EDITOR_VALEU[26][11],id;
  231.         for (new x=0; x<db_num_rows(EDITOR_RESULT); x++)
  232.         {
  233.             IDX = 0;
  234.             db_get_field_assoc(EDITOR_RESULT, "ID", EDITOR_VALEU[IDX], 26),IDX++;
  235.             db_get_field_assoc(EDITOR_RESULT, "MODEL", EDITOR_VALEU[IDX], 26),IDX++;
  236.             db_get_field_assoc(EDITOR_RESULT, "X", EDITOR_VALEU[IDX],26),IDX++;
  237.             db_get_field_assoc(EDITOR_RESULT, "Y", EDITOR_VALEU[IDX],26),IDX++;
  238.             db_get_field_assoc(EDITOR_RESULT, "Z", EDITOR_VALEU[IDX],26),IDX++;
  239.             db_get_field_assoc(EDITOR_RESULT, "RX", EDITOR_VALEU[IDX],26),IDX++;
  240.             db_get_field_assoc(EDITOR_RESULT, "RY", EDITOR_VALEU[IDX],26),IDX++;
  241.             db_get_field_assoc(EDITOR_RESULT, "RZ", EDITOR_VALEU[IDX],26),IDX++;
  242.             db_get_field_assoc(EDITOR_RESULT, "VW", EDITOR_VALEU[IDX],26),IDX++;
  243.             db_get_field_assoc(EDITOR_RESULT, "INT", EDITOR_VALEU[IDX],26),IDX++;
  244.             db_get_field_assoc(EDITOR_RESULT, "DISTANCE", EDITOR_VALEU[IDX],26);
  245.  
  246.             id = CreateDynamicObject(strval(EDITOR_VALEU[1]), floatstr( EDITOR_VALEU[2]),floatstr(EDITOR_VALEU[3]),floatstr(EDITOR_VALEU[4]), floatstr( EDITOR_VALEU[5]),floatstr(EDITOR_VALEU[6]),floatstr(EDITOR_VALEU[7]), strval(EDITOR_VALEU[8]), strval(EDITOR_VALEU[9]),-1, floatstr(EDITOR_VALEU[10]));
  247.  
  248.             if(id > DEF_MAX_OBJECTS) return SendClientMessageToAll(DEF_COL_WHITE,"Error while loading objects, it seems you are trying to load more objects then the max amount of objects.");
  249.            
  250.             EDITOR_OBJECT[id][OBJ_DB_ID] = strval(EDITOR_VALEU[0]);
  251.             EDITOR_OBJECT[id][OBJ_MODEL] = strval(EDITOR_VALEU[1]);
  252.             EDITOR_OBJECT[id][OBJ_X] = floatstr(EDITOR_VALEU[2]);
  253.             EDITOR_OBJECT[id][OBJ_Y] = floatstr(EDITOR_VALEU[3]);
  254.             EDITOR_OBJECT[id][OBJ_Z] = floatstr(EDITOR_VALEU[4]);
  255.             EDITOR_OBJECT[id][OBJ_RX] = floatstr(EDITOR_VALEU[5]);
  256.             EDITOR_OBJECT[id][OBJ_RY] = floatstr(EDITOR_VALEU[6]);
  257.             EDITOR_OBJECT[id][OBJ_RZ] = floatstr(EDITOR_VALEU[7]);
  258.             EDITOR_OBJECT[id][OBJ_VW] = strval(EDITOR_VALEU[8]);
  259.             EDITOR_OBJECT[id][OBJ_INTERIOR] = strval(EDITOR_VALEU[9]);
  260.             EDITOR_OBJECT[id][OBJ_STREAM_DISTANCE] = floatstr(EDITOR_VALEU[10]);
  261.             db_next_row(EDITOR_RESULT);
  262.         }
  263.     }
  264.     new string[128];
  265.     format(string,sizeof(string),"%d objects have been loaded.",db_num_rows(EDITOR_RESULT));
  266.     SendClientMessageToAll(DEF_COL_WHITE,string);
  267.     db_free_result(EDITOR_RESULT);
  268.     return 1;
  269. }
Advertisement
Add Comment
Please, Sign In to add comment