Fitri_Fahim

Co

Apr 5th, 2013
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 58.73 KB | None | 0 0
  1.  
  2. /// 1/4/2012 - added /gc or /givecash
  3. // update: now no longer acces by annonymous to abuse make obnject now: accept all admin level :) if(!IsPlayerLuxAdmin(playerid))
  4. // if(!IsPlayerLuxAdmin(playerid)) try now remove ! now= if(IsPlayerLuxAdmin(playerid))
  5.  
  6. //==============================================================================
  7. //                              Includes
  8. //==============================================================================
  9. #include <a_samp> // Credits to the SA:MP Developement Team
  10. #include <sscanf2> // Credits to Y_Less
  11. #include ladmin
  12.  
  13.  
  14. // this include just a for ALL Level admin can use the /garobject or /co to make object fun ingame
  15.  
  16. //==============================================================================
  17. //                                  Configuration
  18. //==============================================================================
  19. #undef MAX_PLAYERS
  20.  
  21. //#define IsPlayerLuxAdmin
  22.  
  23. #define MAX_PLAYERS 15 // Change it to the amount of server slots!!
  24. //#define G_OBJ_AUTOSAVE // Uncomment to enable autosave of objects on disconnect/filterscript exit. Objects will be saved in <PlayerName>.txt
  25. //#define G_OBJ_USE_SHORTCUTS // Unomment to enable command shortcuts.
  26. //#define GO_DEBUG_CMDS // Uncomment to enable debug commands like /getmypos.
  27. #define GOBJ_MAX_OBJECTS_CREATED    9000 // Max objects an admin can create (Remember the limit is 400 in SA:MP 0.3b/0.3c...) now 0.3e can 1000 Object
  28. #define G_OBJ_DID   12301
  29. #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  30. #define Loop(%0,%1) for(new %0 = 0; %0 < %1; %0++)
  31. new Objects[MAX_PLAYERS][GOBJ_MAX_OBJECTS_CREATED], ObjectCreator[MAX_OBJECTS];
  32. new Float:oOffset[MAX_OBJECTS][3], Float:oRot[MAX_OBJECTS][3], Float:oPos[MAX_OBJECTS][3], ModelID[MAX_OBJECTS];
  33. new Float:oStart[MAX_OBJECTS][3], Float:oEnd[MAX_OBJECTS][3], oMoving[MAX_OBJECTS], oLap[MAX_OBJECTS], Float:oMSpeed[MAX_OBJECTS];
  34. new AttachedVehicle[MAX_OBJECTS], AttachedPlayer[MAX_OBJECTS];
  35. new Float:X, Float:Y, Float:Z;
  36. //==============================================================================
  37. //                              Colours
  38. //==============================================================================
  39. #define COLOUR_INFO                     0x00FFFFFF
  40. #define COLOUR_SYSTEM                   0xB60000FF
  41.  
  42.  
  43.  
  44.  
  45.  
  46. //==============================================================================
  47. //                              Awesomeness
  48. //==============================================================================
  49. public OnFilterScriptInit()
  50. {
  51.     Loop(obj, MAX_OBJECTS)
  52.     {
  53.         ObjectCreator[obj] = INVALID_PLAYER_ID;
  54.         ModelID[obj] = -1;
  55.     }
  56.     Loop(i, MAX_PLAYERS)
  57.     {
  58.         Loop(o, GOBJ_MAX_OBJECTS_CREATED)
  59.         {
  60.             Objects[i][o] = INVALID_OBJECT_ID;
  61.         }
  62.     }
  63.     print("\n>> GarObject v1.3 By [03]Garsino Loaded <<\n");
  64.     return 1;
  65. }
  66. public OnFilterScriptExit()
  67. {
  68.     #if defined G_OBJ_AUTOSAVE
  69.     new filename[MAX_PLAYER_NAME+4];
  70.     Loop(i, MAX_PLAYERS)
  71.     {
  72.         if(!IsPlayerLuxAdmin(i) || !IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
  73.         format(filename, sizeof(filename), "%s.txt", pNick(i));
  74.         SaveObjectsToFile(i, filename, 0);
  75.         SaveHObjectsToFile(i, filename, 0);
  76.     }
  77.     #endif
  78.     Loop(obj, MAX_OBJECTS)
  79.     {
  80.         if(ObjectCreator[obj] != INVALID_PLAYER_ID && ModelID[obj] != -1)
  81.         {
  82.             DestroyObject(obj);
  83.             ModelID[obj] = -1;
  84.         }
  85.     }
  86.     print("\n>> GarObject v1.3 By [03]Garsino Unloaded <<\n");
  87.     return 1;
  88. }
  89. public OnPlayerConnect(playerid)
  90. {
  91.     if(IsPlayerLuxAdmin(playerid))
  92.     {
  93.     SendClientMessage(playerid,COLOUR_SYSTEM," use /objecthelp to fun make an object in game. but use /search to get ID before /co ID");
  94.     return 1;
  95.     }
  96.     Loop(o, GOBJ_MAX_OBJECTS_CREATED)
  97.     {
  98.         Objects[playerid][o] = INVALID_OBJECT_ID;
  99.     }
  100.     return 1;
  101. }
  102. public OnPlayerDisconnect(playerid, reason)
  103. {   Loop(o, MAX_OBJECTS)
  104.     {
  105.         if(ObjectCreator[o] == playerid)
  106.         {
  107.             if(ModelID[o] != -1)
  108.             {
  109.                 DestroyObject(o);
  110.                 ModelID[o] = -1;
  111.             }
  112.             ObjectCreator[o] = INVALID_PLAYER_ID;
  113.         }
  114.     }
  115.     Loop(o2, GOBJ_MAX_OBJECTS_CREATED)
  116.     {
  117.         Objects[playerid][o2] = INVALID_OBJECT_ID;
  118.     }
  119.     return 1;
  120. }
  121. public OnPlayerCommandText(playerid, cmdtext[])
  122. {
  123. //
  124.     dcmd(objecthelp,10,cmdtext);
  125.     dcmd(co,2,cmdtext);
  126.     dcmd(dao,3,cmdtext);
  127.     dcmd(do,2,cmdtext);
  128.     dcmd(mvo,3,cmdtext); // /moveobject
  129.     dcmd(mov,3,cmdtext);
  130.     dcmd(rto,3,cmdtext); // /rotateobject
  131. //
  132.     dcmd(stopallobjectloop, 17, cmdtext);
  133.     dcmd(stopobjectloop, 14, cmdtext);
  134.     dcmd(startallobjectloop, 18, cmdtext);
  135.     dcmd(startobjectloop, 15, cmdtext);
  136.     dcmd(createobject, 12, cmdtext);
  137.     dcmd(rotateobject, 12, cmdtext);
  138.     dcmd(attachpobject, 13, cmdtext);
  139.     dcmd(deattachpobject, 15, cmdtext);
  140.     dcmd(attachvobject, 13, cmdtext);
  141.     dcmd(deattachvobject, 15, cmdtext);
  142.     dcmd(rotateallobject, 15, cmdtext);
  143.     dcmd(destroyobject, 13, cmdtext);
  144.     dcmd(destroyallobject, 16, cmdtext);
  145.     dcmd(stopobject, 10, cmdtext);
  146.     dcmd(stopallobject, 13, cmdtext);
  147.     dcmd(moveobject, 10, cmdtext);
  148.     dcmd(moveallobject, 13, cmdtext);
  149.     dcmd(getobject, 9, cmdtext);
  150.     dcmd(getallobject, 12, cmdtext);
  151.     dcmd(objecttele, 10, cmdtext);
  152.     dcmd(sethobj, 7, cmdtext);
  153.     dcmd(stophobj, 8, cmdtext);
  154.     dcmd(stopallhobj, 11, cmdtext);
  155.     dcmd(saveobject, 10, cmdtext);
  156.     dcmd(loadobject, 10, cmdtext);
  157.     dcmd(savehobject, 11, cmdtext);
  158.     dcmd(loadhobject, 11, cmdtext);
  159.     dcmd(copyobject, 10, cmdtext);
  160.     dcmd(garobject, 9, cmdtext);
  161.    
  162.     dcmd(gc,2,cmdtext);
  163.     dcmd(givecash,8,cmdtext);
  164.     dcmd(plate,5,cmdtext);
  165.    
  166.     #if defined G_OBJ_USE_SHORTCUTS
  167.     dcmd(oc, 2, cmdtext); // /createobject
  168.     dcmd(or, 2, cmdtext); // /rotateobject
  169.     dcmd(apo, 3, cmdtext); // /attachpobject
  170.     dcmd(deapo, 5, cmdtext); // /deattachpobject
  171.     dcmd(avo, 3, cmdtext); // /attachvobject
  172.     dcmd(deavo, 5, cmdtext); // /deattachvobject
  173.     dcmd(orall, 5, cmdtext); // /rotateallobject
  174.     dcmd(od, 2, cmdtext); // /destroyobject
  175.     dcmd(odall, 5, cmdtext); // /destroyallobject
  176.     dcmd(os, 2, cmdtext); // /stopobject
  177.     dcmd(osall, 5, cmdtext); // /stopallobject
  178.     dcmd(om, 2, cmdtext); // /moveobject
  179.     dcmd(omall, 5, cmdtext); // /moveallobject
  180.     dcmd(og, 2, cmdtext); // /getobject
  181.     dcmd(ogall, 5, cmdtext); // /getallobject
  182.     dcmd(ot, 2, cmdtext); // /objecttele
  183.     dcmd(setho, 5, cmdtext); // /sethobj
  184.     dcmd(stopho, 6, cmdtext); // /stophobj
  185.     dcmd(stopallho, 9, cmdtext); // /stopallhobj
  186.     dcmd(so, 2, cmdtext); // /saveobject
  187.     dcmd(lo, 2, cmdtext); // /loadobject
  188.     dcmd(sho, 3, cmdtext); // /savehobject
  189.     dcmd(lho, 3, cmdtext); // /loadhobject
  190.     dcmd(co, 2, cmdtext); // /copyobject
  191.     dcmd(sallol, 6, cmdtext); // /startallobjectloop
  192.     dcmd(sol, 3, cmdtext); // /startobjectloop
  193.     dcmd(stopallol, 6, cmdtext); // /stopallobjectloop
  194.     dcmd(stopol, 3, cmdtext); // /stopobjectloop
  195.     dcmd(gobj, 4, cmdtext); // /garobject
  196.     #endif
  197.     #if defined GO_DEBUG_CMDS
  198.     dcmd(getmypos, 8, cmdtext);
  199.     #endif
  200.     return 0;
  201. }
  202. //
  203. dcmd_plate(playerid, params[])
  204. {
  205.     new vehicleid, engine, lights, alarm, doors, bonnet, boot, objective, Plate[32];
  206.     //if(PlayerInfo[playerid][AdminLevel] >= 1)
  207.     //{
  208.     vehicleid = GetPlayerVehicleID(playerid);
  209.     if (vehicleid != 0)
  210.     {
  211.     if (sscanf(params, "s[32]", Plate)) SendClientMessage(playerid, 0xFF0000AA, "Usage: /plate <NumberPlate OR YourName>");
  212.     else
  213.     {
  214.     SetVehicleNumberPlate(vehicleid, Plate);
  215.     RemovePlayerFromVehicle(playerid);
  216.     SetVehicleToRespawn(vehicleid);
  217.     PutPlayerInVehicle(playerid, vehicleid, 0);
  218.     GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
  219.     SetVehicleParamsEx(vehicleid, 1, 1, alarm, doors, bonnet, boot, objective);
  220.     }
  221.     }
  222.     else SendClientMessage(playerid, 0x00FF00FF, "You must be inside a vehicle to change your numberplate");
  223.     //}
  224.     //else
  225.     //return 0;
  226.     return 1;
  227. }
  228. //
  229. dcmd_gc(playerid,params[]) return dcmd_givecash(playerid, params);
  230. dcmd_givecash(playerid, params[])
  231. {
  232.    new giveplayerid, amount;
  233.     //GetPlayerName(giveplayerid, sizeof(giveplayerid));
  234.    //new pname[MAX_PLAYER_NAME];
  235.    new pname[MAX_PLAYER_NAME];
  236.    GetPlayerName(playerid, pname, sizeof(pname));
  237.  
  238.    if(sscanf(params, "ud", giveplayerid, amount)) SendClientMessage(playerid, 0xFF0000AA, "Usage: /(g)ive(c)ash [playerid/partname] [amount]");
  239.    else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Player not found");
  240.    else if (amount > GetPlayerMoney(playerid)) SendClientMessage(playerid, 0xFF0000AA, "Insufficient Funds");
  241.    else
  242.    {
  243.       GivePlayerMoney(giveplayerid, amount);
  244.       GivePlayerMoney(playerid, 0 - amount);
  245.       //SendClientMessage(playerid, 0x00FF00AA, "Money sent");
  246.       //SendClientMessage(giveplayerid, 0x00FF00AA, "Money received");
  247.       //
  248.       new string2[128];
  249.       format(string2,sizeof(string2),"Money Received: from %s And money $%d ",pname,amount);
  250.       SendClientMessage(giveplayerid,COLOUR_SYSTEM,string2);
  251.     //
  252.       new string3[128];
  253.       format(string3,sizeof(string3),"Money Sent: for %s And money $%d ",giveplayerid,amount);
  254.       SendClientMessage(playerid,COLOUR_SYSTEM,string3);
  255.       //
  256.    }
  257.    return 1;
  258. }
  259. //
  260. dcmd_objecthelp(playerid,params[])
  261. {
  262.     if(IsPlayerLuxAdmin(playerid))
  263.     {
  264.     #pragma unused params
  265.     SendClientMessage(playerid,COLOUR_SYSTEM,"use: /co = Create An Object /dao = Destroyallobject /do = Destroy object \n /mvo = Moveobject /rto = rotateobject");
  266.     SendClientMessage(playerid,COLOUR_SYSTEM," now is samp version: 0.3e u can map! maximum object can be create is 1000");
  267.     SendClientMessage(playerid,COLOUR_SYSTEM," 0.3c limit is 400 object. more info limits: http://wiki.sa-mp.com/wiki/Limits ");
  268.     }
  269.     return 1;
  270. }
  271. dcmd_co(playerid,params[]) return dcmd_createobject(playerid,params);
  272. //dcmd_co(playerid,params[]) return dcmd_createobject();
  273. dcmd_createobject(playerid, params[])
  274. {
  275.     //if(IsPlayerAdmin(playerid))
  276.     if(IsPlayerLuxAdmin(playerid))
  277.     {
  278.         new modelid, Float:rX, Float:rY, Float:rZ, string[128], objid = GetFreeObjectID(playerid);
  279.         if(sscanf(params, "dF(0)F(0)F(0)", modelid, rX, rY, rZ)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /createobject (object id) (rotX) (rotY) (rotZ)");
  280.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT && !IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "You need to spawn to be able to use this command.");
  281.         if(GetTotalNativeObjects() >= (MAX_OBJECTS-1)) return SendClientMessage(playerid, COLOUR_SYSTEM, "The SA:MP object limit has been reached. You can not spawn any more objects.");
  282.         if(objid < 0)  return SendClientMessage(playerid, COLOUR_SYSTEM, "You can not spawn any more objects. Please delete one of the current ones first.");
  283.         else
  284.         {
  285.             GetPlayerPos(playerid, X, Y, Z);
  286.             Objects[playerid][objid] = CreateObject(modelid, X, Y, Z, rX, rY, rZ);
  287.             new o = Objects[playerid][objid];
  288.             ModelID[o] = modelid;
  289.             ObjectCreator[o] = playerid;
  290.             oPos[o][0] = X, oPos[o][1] = Y, oPos[o][2] = Z;
  291.             oRot[o][0] = rX, oRot[o][1] = rY, oRot[o][2] = rZ;
  292.             AttachedVehicle[o] = INVALID_VEHICLE_ID, AttachedPlayer[o] = INVALID_PLAYER_ID;
  293.             format(string, sizeof(string), "Object ID %d created. Modelid: %d. Rotation: X: %0.2f | Y: %0.2f | Z: %0.2f.", objid, modelid, rX, rY, rZ);
  294.             SendClientMessage(playerid, COLOUR_INFO, string);
  295.     }
  296.         return 1;
  297.     }
  298.     else return 0;
  299. }
  300. dcmd_copyobject(playerid, params[])
  301. {
  302. //  if(IsPlayerAdmin(playerid))
  303.     if(IsPlayerLuxAdmin(playerid))
  304.     {
  305.         new string[128], objectid, objid = GetFreeObjectID(playerid);
  306.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /copyobject (objectid)");
  307.         if(GetTotalNativeObjects() >= (MAX_OBJECTS-1)) return SendClientMessage(playerid, COLOUR_SYSTEM, "The SA:MP object limit has been reached. You can not spawn any more objects.");
  308.         if(objid < 0) return SendClientMessage(playerid, COLOUR_SYSTEM, "You can not spawn any more objects. Please delete one of the current ones first.");
  309.         else
  310.         {
  311.             new o2 = Objects[playerid][objectid];
  312.             Objects[playerid][objid] = CreateObject(ModelID[o2], oPos[o2][0], oPos[o2][1], oPos[o2][2], oRot[o2][0], oRot[o2][1], oRot[o2][2]);
  313.             new o = Objects[playerid][objid];
  314.             ModelID[o] = ModelID[o2];
  315.             ObjectCreator[o] = playerid;
  316.             oPos[o][0] = oPos[o2][0], oPos[o][1] = oPos[o2][1], oPos[o][2] = oPos[o2][2];
  317.             oRot[o][0] = oRot[o2][0], oRot[o][1] = oRot[o2][1], oRot[o][2] = oRot[o2][2];
  318.             AttachedVehicle[o] = AttachedVehicle[o2], AttachedPlayer[o] = AttachedPlayer[o2];
  319.             if(AttachedVehicle[o] != INVALID_VEHICLE_ID)
  320.             {
  321.                 oOffset[o][0] = oOffset[o2][0], oOffset[o][1] = oOffset[o2][1], oOffset[o][2] = oOffset[o2][2];
  322.                 oRot[o][0] = oRot[o][0], oRot[o][1] = oRot[o2][1], oRot[o][2] = oRot[o2][2];
  323.                 AttachObjectToVehicle(o, AttachedVehicle[o], oOffset[o2][0], oOffset[o2][1], oOffset[o2][2], oRot[o2][0], oRot[o2][1], oRot[o2][2]);
  324.             }
  325.             if(AttachedPlayer[o] != INVALID_PLAYER_ID)
  326.             {
  327.                 oOffset[o][0] = oOffset[o2][0], oOffset[o][1] = oOffset[o2][1], oOffset[o][2] = oOffset[o2][2];
  328.                 oRot[o][0] = oRot[o][0], oRot[o][1] = oRot[o2][1], oRot[o][2] = oRot[o2][2];
  329.                 AttachObjectToVehicle(o, AttachedPlayer[o], oOffset[o2][0], oOffset[o2][1], oOffset[o2][2], oRot[o2][0], oRot[o2][1], oRot[o2][2]);
  330.             }
  331.             format(string, sizeof(string), "Object ID %d copied. Object ID for the copied object is %d.", objectid, objid);
  332.             SendClientMessage(playerid, COLOUR_INFO, string);
  333.         }
  334.         return 1;
  335.     }
  336.     else return 0;
  337. }
  338. dcmd_rto(playerid,params[]) return dcmd_rotateobject(playerid,params);
  339. dcmd_rotateobject(playerid, params[])
  340. {
  341.     //if(IsPlayerAdmin(playerid))
  342.     if(IsPlayerLuxAdmin(playerid))
  343.     {
  344.         new objectid, Float:rX, Float:rY, Float:rZ, string[128];
  345.         if(sscanf(params, "dF(0)F(0)F(0)", objectid, rX, rY, rZ)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /rotateobject (object id) (rotX) (rotY) (rotZ)");
  346.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  347.         else
  348.         {
  349.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  350.             {
  351.                 new o = Objects[playerid][objectid];
  352.                 SetObjectRot(o, rX, rY, rZ);
  353.                 oRot[o][0] = rX, oRot[o][1] = rY, oRot[o][2] = rZ;
  354.                 format(string, sizeof(string), "Object ID %d rotated. New rotation: X: %0.2f | Y: %0.2f | Z: %0.2f.", objectid, rX, rY, rZ);
  355.                 SendClientMessage(playerid, COLOUR_INFO, string);
  356.             }
  357.         }
  358.         return 1;
  359.     }
  360.     else return 0;
  361. }
  362. dcmd_attachpobject(playerid, params[])
  363. {
  364. //  if(IsPlayerAdmin(playerid))
  365.     if(IsPlayerLuxAdmin(playerid))
  366.     {
  367.     //{
  368.         new id, objectid, Float:ofsX, Float:ofsY, Float:ofsZ, Float:rX, Float:rY, Float:rZ, string[128];
  369.         if(sscanf(params, "duF(0)F(0)F(0)F(0)F(0)F(0)", objectid, id, ofsX, ofsY, ofsZ, rX, rY, rZ)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /attachpobject (object id) (nick/id) (offset X) (offset Y) (offset Z) (rotation X) (rotation Y) (rotation Z)");
  370.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  371.         if(AttachedVehicle[Objects[playerid][objectid]] != INVALID_VEHICLE_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "You can not attach an object to a player wich is already attached to a vehicle!");
  372.         if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOUR_SYSTEM, "This player is not connected!");
  373.         else
  374.         {
  375.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  376.             {
  377.                 new o = Objects[playerid][objectid];
  378.                 oOffset[o][0] = ofsX, oOffset[o][1] = ofsY, oOffset[o][2] = ofsZ;
  379.                 oRot[o][0] = rX, oRot[o][1] = rY, oRot[o][2] = rZ;
  380.                 AttachedPlayer[o] = id;
  381.                 AttachObjectToPlayer(o, id, ofsX, ofsY, ofsZ, rX, rY, rZ);
  382.                 format(string, sizeof(string), "Object ID %d attached to %s (%d). Offset: X: %0.2f | Y: %0.2f | Z: %0.2f | Rotation: X: %0.2f | Y: %0.2f | Z: %0.2f.", objectid, pNick(id), id, ofsX, ofsY, ofsZ, rX, rY, rZ);
  383.                 SendClientMessage(playerid, COLOUR_INFO, string);
  384.             }
  385.         }
  386.         return 1;
  387.     }
  388.     else return 0;
  389. }
  390. dcmd_deattachpobject(playerid, params[])
  391. {
  392.     if(IsPlayerLuxAdmin(playerid))
  393.     {
  394.         new objectid, string[128], o, o2;
  395.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /deattachpobject (object id)");
  396.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  397.         else
  398.         {
  399.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  400.             {
  401.                 DestroyObject(Objects[playerid][objectid]);
  402.                 ObjectCreator[Objects[playerid][objectid]] = INVALID_PLAYER_ID;
  403.                 o = Objects[playerid][objectid];
  404.                 Objects[playerid][objectid] = CreateObject(ModelID[o], (oPos[o][0] + oOffset[o][0]), (oPos[o][1] + oOffset[o][1]), (oPos[o][2] + oOffset[o][2]), oRot[o][0], oRot[o][1], oRot[o][2]);
  405.                 o2 = Objects[playerid][objectid];
  406.                 ModelID[o2] = ModelID[o], oPos[o2][0] = (oPos[o][0] + oOffset[o][0]), oPos[o2][1] = (oPos[o][1] + oOffset[o][1]), oPos[o2][2] = (oPos[o][2] + oOffset[o][2]), oRot[o2][0] = oRot[o][0], oRot[o2][1] = oRot[o][1], oRot[o2][2] = oRot[o][2];
  407.                 ObjectCreator[o2] = playerid;
  408.                 format(string, sizeof(string), "Object ID %d de-attached from %s (%d).", objectid, pNick(AttachedPlayer[o]), AttachedPlayer[o]);
  409.                 SendClientMessage(playerid, COLOUR_INFO, string);
  410.                 AttachedPlayer[o2] = INVALID_PLAYER_ID, AttachedPlayer[o] = INVALID_PLAYER_ID;
  411.             }
  412.         }
  413.         return 1;
  414.     }
  415.     else return 0;
  416. }
  417. dcmd_attachvobject(playerid, params[])
  418. {
  419.     //if(IsPlayerAdmin(playerid))
  420.     if(IsPlayerLuxAdmin(playerid))
  421.     {
  422.         new vehicleid, objectid, Float:ofsX, Float:ofsY, Float:ofsZ, Float:rX, Float:rY, Float:rZ, string[128];
  423.         if(sscanf(params, "ddF(0)F(0)F(0)F(0)F(0)F(0)", objectid, vehicleid, ofsX, ofsY, ofsZ, rX, rY, rZ)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /attachpobject (object id) (vehicleid) (offset X) (offset Y) (offset Z) (rotation X) (rotation Y) (rotation Z)");
  424.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  425.         if(AttachedPlayer[Objects[playerid][objectid]] != INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "You can not attach an object to a vehicle wich is already attached to a player!");
  426.         if(vehicleid == INVALID_VEHICLE_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid vehicle ID!");
  427.         else
  428.         {
  429.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  430.             {
  431.                 new o = Objects[playerid][objectid];
  432.                 oOffset[o][0] = ofsX, oOffset[o][1] = ofsY, oOffset[o][2] = ofsZ;
  433.                 oRot[o][0] = rX, oRot[o][1] = rY, oRot[o][2] = rZ;
  434.                 AttachedVehicle[o] = vehicleid;
  435.                 AttachObjectToVehicle(o, vehicleid, ofsX, ofsY, ofsZ, rX, rY, rZ);
  436.                 format(string, sizeof(string), "Object ID %d attached to vehicle ID %d. Offset: X: %0.2f | Y: %0.2f | Z: %0.2f | Rotation: X: %0.2f | Y: %0.2f | Z: %0.2f.", objectid, vehicleid, ofsX, ofsY, ofsZ, rX, rY, rZ);
  437.                 SendClientMessage(playerid, COLOUR_INFO, string);
  438.             }
  439.         }
  440.         return 1;
  441.     }
  442.     else return 0;
  443. }
  444. dcmd_deattachvobject(playerid, params[])
  445. {
  446.     if(IsPlayerLuxAdmin(playerid))
  447.     {
  448.         new objectid, string[128], o, o2;
  449.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /deattachpobject (object id)");
  450.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  451.         else
  452.         {
  453.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  454.             {
  455.                 DestroyObject(Objects[playerid][objectid]);
  456.                 ObjectCreator[Objects[playerid][objectid]] = INVALID_PLAYER_ID;
  457.                 o = Objects[playerid][objectid];
  458.                 GetVehiclePos(AttachedVehicle[o], oPos[o][0], oPos[o][1], oPos[o][2]);
  459.                 Objects[playerid][objectid] = CreateObject(ModelID[o], (oPos[o][0] + oOffset[o][0]), (oPos[o][1] + oOffset[o][1]), (oPos[o][2] + oOffset[o][2]), oRot[o][0], oRot[o][1], oRot[o][2]);
  460.                 o2 = Objects[playerid][objectid];
  461.                 ObjectCreator[o2] = playerid;
  462.                 format(string, sizeof(string), "Object %d de-attached from vehicle ID %d.", objectid, AttachedVehicle[o]);
  463.                 SendClientMessage(playerid, COLOUR_INFO, string);
  464.                 ModelID[o2] = ModelID[o], oPos[o2][0] = (oPos[o][0] + oOffset[o][0]), oPos[o2][1] = (oPos[o][1] + oOffset[o][1]), oPos[o2][2] = (oPos[o][2] + oOffset[o][2]), oRot[o2][0] = oRot[o][0], oRot[o2][1] = oRot[o][1], oRot[o2][2] = oRot[o][2];
  465.                 AttachedVehicle[o2] = INVALID_VEHICLE_ID, AttachedVehicle[o] = INVALID_VEHICLE_ID;
  466.             }
  467.         }
  468.         return 1;
  469.     }
  470.     else return 0;
  471. }
  472. dcmd_sethobj(playerid, params[])
  473. {
  474. //  if(IsPlayerAdmin(playerid))
  475.     if(IsPlayerLuxAdmin(playerid))
  476.     {
  477.         new id, modelid, slot, Float:rX[3], Float:rY[3], Float:rZ[3], string[128], bodypart[36], bid;
  478.         if(sscanf(params, "udds[36]F(0)F(0)F(0)F(0)F(0)F(0)F(1)F(1)F(1)", id, modelid, slot, bodypart, rX[0], rY[0], rZ[0], rX[1], rY[1], rZ[1], rX[2], rY[2], rZ[2])) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /sethobj (nick/id) (modelid) (slot: 0-4) (bodypart: name/id) (rotX) (rotY) (rotZ) (rotX) (rotY) (rotZ) (sizeX) (sizeY) (sizeZ)");
  479.         if(strlen(bodypart) < 1 || bodypart[35] || GetBodypartIDFromName(bodypart) == -1) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid Bodypart Name/ID.");
  480.         if(slot < 0 || slot > 4) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid slot ID. Valid slot IDs are between 0-4.");
  481.         if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOUR_SYSTEM, "This player is not connected!");
  482.         else
  483.         {
  484.             if(IsPlayerAttachedObjectSlotUsed(id, slot))
  485.             {
  486.                 RemovePlayerAttachedObject(id, slot);
  487.             }
  488.             bid = GetBodypartIDFromName(bodypart);
  489.             SetPlayerAttachedObject(id, slot, modelid, bid, rX[0], rY[0], rZ[0], rX[1], rY[1], rZ[1], rX[2], rY[2], rZ[2]);
  490.             format(string, sizeof(string), "Modelid %d has been attached to %s's (%d) Bodypart [%s].", modelid, pNick(id), id, GetBodypartName(bodypart));
  491.             SendClientMessage(playerid, COLOUR_INFO, string);
  492.             SetHOPVar(playerid, "HOIndex", slot, slot);
  493.             SetHOPVar(playerid, "HOModel", modelid, slot);
  494.             SetHOPVar(playerid, "HOBone", bid, slot);
  495.             SetHOPFloat(playerid, "HOOX", rX[0], slot);
  496.             SetHOPFloat(playerid, "HOOY", rY[0], slot);
  497.             SetHOPFloat(playerid, "HOOZ", rZ[0], slot);
  498.             SetHOPFloat(playerid, "HORX", rX[1], slot);
  499.             SetHOPFloat(playerid, "HORY", rY[1], slot);
  500.             SetHOPFloat(playerid, "HORZ", rZ[1], slot);
  501.             SetHOPFloat(playerid, "HOSX", rX[2], slot);
  502.             SetHOPFloat(playerid, "HOSY", rY[2], slot);
  503.             SetHOPFloat(playerid, "HOSZ", rZ[2], slot);
  504.         }
  505.         return 1;
  506.     }
  507.     else return 0;
  508. }
  509. dcmd_stophobj(playerid, params[])
  510. {
  511.     //if(IsPlayerAdmin(playerid))
  512.     if(IsPlayerLuxAdmin(playerid))
  513.     {
  514.         new id, string[128], slot;
  515.         if(sscanf(params, "ud", id, slot)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /stophobj (nick/id) (slot: 0-4)");
  516.         if(slot < 0 || slot > 4) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid slot ID. Valid slot IDs are between 0-4.");
  517.         if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOUR_SYSTEM, "This player is not connected!");
  518.         else
  519.         {
  520.             RemovePlayerAttachedObject(id, slot);
  521.             format(string, sizeof(string), "Attached object in slot ID %d removed from %s's (%d) bodypart.", slot, pNick(id), id);
  522.             SendClientMessage(playerid, COLOUR_INFO, string);
  523.         }
  524.         return 1;
  525.     }
  526.     else return 0;
  527. }
  528. dcmd_stopallhobj(playerid, params[])
  529. {
  530.     //if(IsPlayerAdmin(playerid))
  531.     if(IsPlayerLuxAdmin(playerid))
  532.     {
  533.         new id, string[128], count;
  534.         if(sscanf(params, "u", id)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /stopallhobj (nick/id)");
  535.         if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOUR_SYSTEM, "This player is not connected!");
  536.         else
  537.         {
  538.             Loop(slot, 5)
  539.             {
  540.                 if(IsPlayerAttachedObjectSlotUsed(id, slot))
  541.                 {
  542.                     count++;
  543.                     RemovePlayerAttachedObject(id, slot);
  544.                 }
  545.             }
  546.             format(string, sizeof(string), "All attached objects removed from %s's (%d) bodyparts (%d in total).", pNick(id), id, count);
  547.             SendClientMessage(playerid, COLOUR_INFO, string);
  548.         }
  549.         return 1;
  550.     }
  551.     else return 0;
  552. }
  553. stock GetBodypartName(bodypart[])
  554. {
  555.     new string[25];
  556.     if(!strcmp(bodypart, "0", true)) format(string, sizeof(string), "-1");
  557.     if(!strcmp(bodypart, "Spine", true) || !strcmp(bodypart, "1", true)) format(string, sizeof(string), "Spine - 1");
  558.     if(!strcmp(bodypart, "Head", true) || !strcmp(bodypart, "2", true)) format(string, sizeof(string), "Head - 2");
  559.     if(!strcmp(bodypart, "Left upper arm", true) || !strcmp(bodypart, "3", true)) format(string, sizeof(string), "Left upper arm - 3");
  560.     if(!strcmp(bodypart, "Right upper arm", true) || !strcmp(bodypart, "4", true)) format(string, sizeof(string), "Right upper arm - 4");
  561.     if(!strcmp(bodypart, "Left hand", true) || !strcmp(bodypart, "5", true)) format(string, sizeof(string), "Left hand - 5");
  562.     if(!strcmp(bodypart, "Right hand", true) || !strcmp(bodypart, "6", true)) format(string, sizeof(string), "Right hand - 6");
  563.     if(!strcmp(bodypart, "Left thigh ", true) || !strcmp(bodypart, "7", true)) format(string, sizeof(string), "Left thigh  - 7");
  564.     if(!strcmp(bodypart, "Right thigh ", true) || !strcmp(bodypart, "8", true)) format(string, sizeof(string), "Right thigh  - 8");
  565.     if(!strcmp(bodypart, "Left foot", true) || !strcmp(bodypart, "9", true)) format(string, sizeof(string), "Left foot - 9");
  566.     if(!strcmp(bodypart, "Right foot", true) || !strcmp(bodypart, "10", true)) format(string, sizeof(string), "Right foot - 10");
  567.     if(!strcmp(bodypart, "Left calf ", true) || !strcmp(bodypart, "11", true)) format(string, sizeof(string), "Left calf  - 11");
  568.     if(!strcmp(bodypart, "Right calf ", true) || !strcmp(bodypart, "12", true)) format(string, sizeof(string), "Right calf  - 12");
  569.     if(!strcmp(bodypart, "Left forearm", true) || !strcmp(bodypart, "13", true)) format(string, sizeof(string), "Left forearm - 13");
  570.     if(!strcmp(bodypart, "Right forearm ", true) || !strcmp(bodypart, "14", true)) format(string, sizeof(string), "Right forearm  - 14");
  571.     if(!strcmp(bodypart, "Left clavicle ", true) || !strcmp(bodypart, "15", true)) format(string, sizeof(string), "Left clavicle  - 15");
  572.     if(!strcmp(bodypart, "Right clavicle ", true) || !strcmp(bodypart, "16", true)) format(string, sizeof(string), "Right clavicle  - 16");
  573.     if(!strcmp(bodypart, "Neck", true) || !strcmp(bodypart, "17", true)) format(string, sizeof(string), "Neck - 17");
  574.     if(!strcmp(bodypart, "Jew", true) || !strcmp(bodypart, "18", true)) format(string, sizeof(string), "Jew - 18");
  575.     return string;
  576. }
  577. stock GetBodypartIDFromName(bodypart[])
  578. {
  579.     if(!strcmp(bodypart, "0", true)) return -1;
  580.     if(!strcmp(bodypart, "Spine", true) || strval(bodypart) == 1) return 1;
  581.     if(!strcmp(bodypart, "Head", true) || strval(bodypart) == 2) return 2;
  582.     if(!strcmp(bodypart, "Left upper arm", true) || strval(bodypart) == 3) return 3;
  583.     if(!strcmp(bodypart, "Right upper arm", true) || strval(bodypart) == 4) return 4;
  584.     if(!strcmp(bodypart, "Left hand", true) || strval(bodypart) == 5) return 5;
  585.     if(!strcmp(bodypart, "Right hand", true) || strval(bodypart) == 6) return 6;
  586.     if(!strcmp(bodypart, "Left thigh ", true) || strval(bodypart) == 7) return 7;
  587.     if(!strcmp(bodypart, "Right thigh ", true) || strval(bodypart) == 8) return 8;
  588.     if(!strcmp(bodypart, "Left foot", true) || strval(bodypart) == 9) return 9;
  589.     if(!strcmp(bodypart, "Right foot", true) || strval(bodypart) == 10) return 10;
  590.     if(!strcmp(bodypart, "Left calf ", true) || strval(bodypart) == 11) return 11;
  591.     if(!strcmp(bodypart, "Right calf ", true) || strval(bodypart) == 12) return 12;
  592.     if(!strcmp(bodypart, "Left forearm", true) || strval(bodypart) == 13) return 13;
  593.     if(!strcmp(bodypart, "Right forearm ", true) || strval(bodypart) == 14) return 14;
  594.     if(!strcmp(bodypart, "Left clavicle ", true) || strval(bodypart) == 15) return 15;
  595.     if(!strcmp(bodypart, "Right clavicle ", true) || strval(bodypart) == 16) return 16;
  596.     if(!strcmp(bodypart, "Neck", true) || strval(bodypart) == 17) return 17;
  597.     if(!strcmp(bodypart, "Jew", true) || strval(bodypart) == 18) return 18;
  598.     else return -1;
  599. }
  600. dcmd_rotateallobject(playerid, params[])
  601. {
  602.     if(IsPlayerLuxAdmin(playerid))
  603.     {
  604.         new Float:rX, Float:rY, Float:rZ, string[128];
  605.         if(sscanf(params, "F(0)F(0)F(0)", rX, rY, rZ)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /rotateallobject (rotX) (rotY) (rotZ)");
  606.         else
  607.         {
  608.             Loop(o, MAX_OBJECTS)
  609.             {
  610.                 if(ObjectCreator[o] == playerid)
  611.                 {
  612.                     SetObjectRot(o, rX, rY, rZ);
  613.                     oRot[o][0] = rX, oRot[o][1] = rY, oRot[o][2] = rZ;
  614.                 }
  615.             }
  616.             format(string, sizeof(string), "All of your objects have been rotated. New rotation: X: %0.2f | Y: %0.2f | Z: %0.2f.", rX, rY, rZ);
  617.             SendClientMessage(playerid, COLOUR_INFO, string);
  618.         }
  619.         return 1;
  620.     }
  621.     else return 0;
  622. }
  623. dcmd_do(playerid,params[]) return dcmd_destroyobject(playerid,params);
  624. dcmd_destroyobject(playerid, params[])
  625. {
  626.     //if(IsPlayerAdmin(playerid))
  627.     if(IsPlayerLuxAdmin(playerid))
  628.     {
  629.         new objectid, string[128];
  630.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /destroyobject (object id)");
  631.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  632.         else
  633.         {
  634.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  635.             {
  636.                 new o = Objects[playerid][objectid];
  637.                 if(ModelID[o] != -1)
  638.                 {
  639.                     DestroyObject(o);
  640.                     ModelID[o] = -1;
  641.                 }
  642.                 ObjectCreator[o] = INVALID_PLAYER_ID;
  643.                 oOffset[o][0] = -1, oOffset[o][1] = -1, oOffset[o][2] = -1;
  644.                 oPos[o][0] = -1, oPos[o][1] = -1, oPos[o][2] = -1;
  645.                 oRot[o][0] = -1, oRot[o][1] = -1, oRot[o][2] = -1;
  646.                 AttachedVehicle[o] = INVALID_VEHICLE_ID, AttachedPlayer[o] = INVALID_PLAYER_ID;
  647.                 format(string, sizeof(string), "Object ID %d destroyed.", objectid);
  648.                 SendClientMessage(playerid, COLOUR_INFO, string);
  649.                 Objects[playerid][objectid] = INVALID_OBJECT_ID;
  650.             }
  651.         }
  652.         return 1;
  653.     }
  654.     else return 0;
  655. }
  656. dcmd_dao(playerid,params[]) return dcmd_destroyallobject(playerid,params);
  657. dcmd_destroyallobject(playerid, params[])
  658. {
  659.     #pragma unused params
  660.     //if(IsPlayerAdmin(playerid))
  661.     if(IsPlayerLuxAdmin(playerid))
  662.     {
  663.         if(GetFreeObjectID(playerid) >= GOBJ_MAX_OBJECTS_CREATED-1) return SendClientMessage(playerid, COLOUR_SYSTEM, "You haven't created any objects.");
  664.         else
  665.         {
  666.             Loop(o, MAX_OBJECTS)
  667.             {
  668.                 if(ObjectCreator[o] == playerid)
  669.                 {
  670.                     if(ModelID[o] != -1)
  671.                     {
  672.                         DestroyObject(o);
  673.                         ModelID[o] = -1;
  674.                     }
  675.                     ObjectCreator[o] = INVALID_PLAYER_ID;
  676.                     oOffset[o][0] = -1, oOffset[o][1] = -1, oOffset[o][2] = -1;
  677.                     oPos[o][0] = -1, oPos[o][1] = -1, oPos[o][2] = -1;
  678.                     oRot[o][0] = -1, oRot[o][1] = -1, oRot[o][2] = -1;
  679.                     AttachedVehicle[o] = INVALID_VEHICLE_ID, AttachedPlayer[o] = INVALID_PLAYER_ID;
  680.                 }
  681.             }
  682.             Loop(o2, GOBJ_MAX_OBJECTS_CREATED)
  683.             {
  684.                 Objects[playerid][o2] = INVALID_OBJECT_ID;
  685.             }
  686.             SendClientMessage(playerid, COLOUR_SYSTEM, "All of your objects have been destroyed.");
  687.             return 1;
  688.         }
  689.     }
  690.     else return 0;
  691. }
  692. dcmd_stopobject(playerid, params[])
  693. {
  694.     //if(IsPlayerAdmin(playerid))
  695.     if(IsPlayerLuxAdmin(playerid))
  696.     {
  697.         new objectid, string[128];
  698.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /stopobject (object id)");
  699.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  700.         else
  701.         {
  702.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  703.             {
  704.                 new o = Objects[playerid][objectid];
  705.                 StopObject(o);
  706.                 GetObjectPos(o, oPos[o][0], oPos[o][1], oPos[o][2]);
  707.                 format(string, sizeof(string), "You have stopped the movement of object ID %d.", objectid);
  708.                 SendClientMessage(playerid, COLOUR_INFO, string);
  709.             }
  710.         }
  711.         return 1;
  712.     }
  713.     else return 0;
  714. }
  715. dcmd_stopallobject(playerid, params[])
  716. {
  717.     #pragma unused params
  718.     if(IsPlayerLuxAdmin(playerid))
  719.     {
  720.         Loop(o, MAX_OBJECTS)
  721.         {
  722.             if(ObjectCreator[o] == playerid)
  723.             {
  724.                 StopObject(o);
  725.                 GetObjectPos(o, oPos[o][0], oPos[o][1], oPos[o][2]);
  726.             }
  727.         }
  728.         return 1;
  729.     }
  730.     else return 0;
  731. }
  732. dcmd_mvo(playerid,params[]) return dcmd_moveobject(playerid,params);
  733. dcmd_moveobject(playerid, params[]) return dcmd_mov(playerid,params);
  734. dcmd_mov(playerid, params[])
  735. {
  736. //  if(IsPlayerAdmin(playerid))
  737.     if(IsPlayerLuxAdmin(playerid))
  738.     {
  739.         new objectid, direction[6], Float:amount, Float:speed, string[128];
  740.         if(sscanf(params, "ds[6]F(10)F(10)", objectid, direction, amount, speed)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /moveobject (object id) (direction) (amount) (speed) - Accepted directions are: north, south, east, west, up and down.");
  741.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  742.         if(strlen(direction) < 2 || strlen(direction) > 5) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid direction. Accepted directions are: north, south, east, west, up and down.");
  743.         if(strcmp(direction, "north", true) && strcmp(direction, "south", true) && strcmp(direction, "east", true) && strcmp(direction, "west", true) && strcmp(direction, "up", true) && strcmp(direction, "down", true)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid direction. Accepted directions are: north, south, east, west, up and down.");
  744.         else
  745.         {
  746.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  747.             {
  748.                 new o = Objects[playerid][objectid];
  749.                 GetObjectPos(o, X, Y, Z);
  750.                 if(!strcmp(direction, "north", true)) MoveObject(o, X, Y+amount, Z, speed), oPos[o][1]+=amount;
  751.                 if(!strcmp(direction, "south", true)) MoveObject(o, X, Y-amount, Z, speed), oPos[o][1]-=amount;
  752.                 if(!strcmp(direction, "east", true)) MoveObject(o, X+amount, Y, Z, speed), oPos[o][0]+=amount;
  753.                 if(!strcmp(direction, "west", true)) MoveObject(o, X-amount, Y, Z, speed), oPos[o][0]-=amount;
  754.                 if(!strcmp(direction, "up", true)) MoveObject(o, X, Y, Z+amount, speed), oPos[o][2]+=amount;
  755.                 if(!strcmp(direction, "down", true)) MoveObject(o, X, Y, Z-amount, speed), oPos[o][2]-=amount;
  756.                 format(string, sizeof(string), "Object ID %d moved. Direction: %s (%d meters, %0.2f speed).", objectid, direction, speed);
  757.                 SendClientMessage(playerid, COLOUR_INFO, string);
  758.             }
  759.         }
  760.         return 1;
  761.     }
  762.     else return 0;
  763. }
  764. dcmd_moveallobject(playerid, params[])
  765. {
  766.     //if(IsPlayerAdmin(playerid))
  767.     if(IsPlayerLuxAdmin(playerid))
  768.     {
  769.         new direction[6], Float:amount, Float:speed, string[128], count;
  770.         if(sscanf(params, "s[6]F(10)F(10)", direction, amount, speed)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /moveallobject (direction) (amount) (speed) - Accepted directions are: north, south, east, west, up and down.");
  771.         if(strlen(direction) < 2 || strlen(direction) > 5) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid direction. Accepted directions are: north, south, east, west, up and down.");
  772.         if(strcmp(direction, "north", true) && strcmp(direction, "south", true) && strcmp(direction, "east", true) && strcmp(direction, "west", true) && strcmp(direction, "up", true) && strcmp(direction, "down", true)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid direction. Accepted directions are: north, south, east, west, up and down.");
  773.         else
  774.         {
  775.             Loop(o, MAX_OBJECTS)
  776.             {
  777.                 if(ObjectCreator[o] == playerid)
  778.                 {
  779.                     GetObjectPos(o, X, Y, Z);
  780.                     if(!strcmp(direction, "north", true)) MoveObject(o, X, Y+amount, Z, speed), oPos[o][1]+=amount;
  781.                     if(!strcmp(direction, "south", true)) MoveObject(o, X, Y-amount, Z, speed), oPos[o][1]-=amount;
  782.                     if(!strcmp(direction, "east", true)) MoveObject(o, X+amount, Y, Z, speed), oPos[o][0]+=amount;
  783.                     if(!strcmp(direction, "west", true)) MoveObject(o, X-amount, Y, Z, speed), oPos[o][0]-=amount;
  784.                     if(!strcmp(direction, "up", true)) MoveObject(o, X, Y, Z+amount, speed), oPos[o][2]+=amount;
  785.                     if(!strcmp(direction, "down", true)) MoveObject(o, X, Y, Z-amount, speed), oPos[o][2]-=amount;
  786.                     count++;
  787.                 }
  788.             }
  789.             format(string, sizeof(string), "Moved %d objects. Direction: %s (%d meters, %0.2f speed).", count, direction, speed);
  790.             SendClientMessage(playerid, COLOUR_INFO, string);
  791.         }
  792.         return 1;
  793.     }
  794.     else return 0;
  795. }
  796. dcmd_startobjectloop(playerid, params[])
  797. {
  798.     //if(IsPlayerAdmin(playerid))
  799.     if(IsPlayerLuxAdmin(playerid))
  800.     {
  801.         new objectid, Float:Pos[6], Float:speed, string[128];
  802.         if(sscanf(params, "dffffffF(10.0)", objectid, Pos[0], Pos[1], Pos[2], Pos[3], Pos[4], Pos[5], speed)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /startobjectloop (object id) (x1) (y1) (z1) (x2) (y2) (z2) (speed)");
  803.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  804.         else
  805.         {
  806.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  807.             {
  808.                 new o = Objects[playerid][objectid];
  809.                 SetObjectPos(o, Pos[0], Pos[1], Pos[2]);
  810.                 oMoving[o] = 1, oLap[o] = 1, oMSpeed[o] = speed;
  811.                 oStart[o][0] = Pos[0], oStart[o][1] = Pos[1], oStart[o][2] = Pos[2];
  812.                 oEnd[o][0] = Pos[3], oEnd[o][1] = Pos[4], oEnd[o][2] = Pos[5];
  813.                 MoveObject(o, Pos[3], Pos[4], Pos[5], speed);
  814.                 format(string, sizeof(string), "Object loop for object ID %d started.", objectid);
  815.                 SendClientMessage(playerid, COLOUR_INFO, string);
  816.             }
  817.         }
  818.         return 1;
  819.     }
  820.     else return 0;
  821. }
  822. dcmd_startallobjectloop(playerid, params[])
  823. {
  824. //  if(IsPlayerAdmin(playerid))
  825.     if(IsPlayerLuxAdmin(playerid))
  826.     {
  827.         new Float:Pos[6], Float:speed, string[128], count;
  828.         if(sscanf(params, "ffffffF(10.0)", Pos[0], Pos[1], Pos[2], Pos[3], Pos[4], Pos[5], speed)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /startallobjectloop (x1) (y1) (z1) (x2) (y2) (z2) (speed)");
  829.         else
  830.         {
  831.             Loop(o, MAX_OBJECTS)
  832.             {
  833.                 if(ObjectCreator[o] == playerid)
  834.                 {
  835.                     SetObjectPos(o, Pos[0], Pos[1], Pos[2]);
  836.                     oMoving[o] = 1, oLap[o] = 1, oMSpeed[o] = speed;
  837.                     oStart[o][0] = Pos[0], oStart[o][1] = Pos[1], oStart[o][2] = Pos[2];
  838.                     oEnd[o][0] = Pos[3], oEnd[o][1] = Pos[4], oEnd[o][2] = Pos[5];
  839.                     MoveObject(o, Pos[3], Pos[4], Pos[5], speed);
  840.                     count++;
  841.                 }
  842.             }
  843.             format(string, sizeof(string), "Object loop for %d objects started.", count);
  844.             SendClientMessage(playerid, COLOUR_INFO, string);
  845.         }
  846.         return 1;
  847.     }
  848.     else return 0;
  849. }
  850. dcmd_stopobjectloop(playerid, params[])
  851. {
  852.     //if(IsPlayerAdmin(playerid))
  853.     if(IsPlayerLuxAdmin(playerid))
  854.     {
  855.         new objectid, string[128];
  856.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /stopobjectloop (object id)");
  857.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  858.         else
  859.         {
  860.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  861.             {
  862.                 oMoving[Objects[playerid][objectid]] = 0;
  863.                 StopObject(Objects[playerid][objectid]);
  864.                 format(string, sizeof(string), "Stopped the object loop for object ID %d.", objectid);
  865.                 SendClientMessage(playerid, COLOUR_INFO, string);
  866.             }
  867.         }
  868.         return 1;
  869.     }
  870.     else return 0;
  871. }
  872. #if defined GO_DEBUG_CMDS
  873. dcmd_getmypos(playerid, params[])
  874. {
  875.     //if(IsPlayerAdmin(playerid))
  876.     if(IsPlayerLuxAdmin(playerid))
  877.     {
  878.         new Float:Pos[3], string[128];
  879.         switch(IsPlayerInAnyVehicle(playerid))
  880.         {
  881.             case 0:
  882.             {
  883.                 GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
  884.                 format(string, sizeof(string), "Position: X: %0.2f | Y: %0.2f | Z: %0.2f", Pos[0], Pos[1], Pos[2]);
  885.             }
  886.             case 1:
  887.             {
  888.                 GetVehiclePos(GetPlayerVehicleID(playerid), Pos[0], Pos[1], Pos[2]);
  889.                 format(string, sizeof(string), "Position: X: %0.2f | Y: %0.2f | Z: %0.2f", Pos[0], Pos[1], Pos[2]);
  890.             }
  891.         }
  892.         SendClientMessage(playerid, COLOUR_INFO, string);
  893.         return 1;
  894.     }
  895. }
  896. #endif
  897. dcmd_stopallobjectloop(playerid, params[])
  898. {
  899.     #pragma unused params
  900. //  if(IsPlayerAdmin(playerid))
  901. //
  902.     if(IsPlayerLuxAdmin(playerid))
  903.     {
  904.         new string[128], count;
  905.         Loop(o, MAX_OBJECTS)
  906.         {
  907.             if(ObjectCreator[o] == playerid)
  908.             {
  909.                 oMoving[o] = 0;
  910.                 StopObject(o);
  911.                 count++;
  912.             }
  913.         }
  914.         format(string, sizeof(string), "Stopped the object loop for %d objects.", count);
  915.         SendClientMessage(playerid, COLOUR_INFO, string);
  916.         return 1;
  917.     }
  918.     else return 0;
  919. }
  920. public OnObjectMoved(objectid)
  921. {
  922.     if(oMoving[objectid] == 1)
  923.     {
  924.         switch(oLap[objectid])
  925.         {
  926.             case 0:
  927.             {
  928.                 MoveObject(objectid, oEnd[objectid][0], oEnd[objectid][1], oEnd[objectid][2], oMSpeed[objectid]);
  929.                 oLap[objectid] = 1;
  930.             }
  931.             case 1:
  932.             {
  933.                 MoveObject(objectid, oStart[objectid][0], oStart[objectid][1], oStart[objectid][2], oMSpeed[objectid]);
  934.                 oLap[objectid] = 0;
  935.             }
  936.         }
  937.     }
  938.     return 1;
  939. }
  940. dcmd_getobject(playerid, params[])
  941. {
  942. //  if(IsPlayerAdmin(playerid))
  943.     if(IsPlayerLuxAdmin(playerid))
  944.     {
  945.         new objectid;
  946.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /getobject (object id)");
  947.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  948.         else
  949.         {
  950.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  951.             {
  952.                 new o = Objects[playerid][objectid];
  953.                 GetPlayerPos(playerid, X, Y, Z);
  954.                 SetObjectPos(o, X, Y, Z);
  955.                 GetObjectPos(o, oPos[o][0], oPos[o][1], oPos[o][2]);
  956.             }
  957.         }
  958.         return 1;
  959.     }
  960.     else return 0;
  961. }
  962. dcmd_getallobject(playerid, params[])
  963. {
  964.     #pragma unused params
  965.     if(IsPlayerLuxAdmin(playerid))
  966. //  if(IsPlayerAdmin(playerid))
  967.     {
  968.         GetPlayerPos(playerid, X, Y, Z);
  969.         Loop(o, MAX_OBJECTS)
  970.         {
  971.             if(ObjectCreator[o] == playerid)
  972.             {
  973.                 SetObjectPos(o, X, Y, Z);
  974.                 GetObjectPos(o, oPos[o][0], oPos[o][1], oPos[o][2]);
  975.             }
  976.         }
  977.         return 1;
  978.     }
  979.     else return 0;
  980. }
  981. dcmd_objecttele(playerid, params[])
  982. {
  983.     //if(IsPlayerAdmin(playerid))
  984.     if(IsPlayerLuxAdmin(playerid))
  985.     {
  986.         new objectid;
  987.         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "Usage: /objecttele (objectid)");
  988.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT && !IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOUR_SYSTEM, "You need to spawn to be able to use this command.");
  989.         if(objectid < 0 || objectid >= GOBJ_MAX_OBJECTS_CREATED-1 || Objects[playerid][objectid] == INVALID_OBJECT_ID) return SendClientMessage(playerid, COLOUR_SYSTEM, "Invalid object ID!");
  990.         else
  991.         {
  992.             if(ObjectCreator[Objects[playerid][objectid]] == playerid)
  993.             {
  994.                 GetObjectPos(Objects[playerid][objectid], X, Y, Z);
  995.                 SetPlayerPos(playerid, X, Y, Z+1);
  996.             }
  997.         }
  998.         return 1;
  999.     }
  1000.     else return 0;
  1001. }
  1002. dcmd_saveobject(playerid, params[])
  1003. {
  1004.     #pragma unused params
  1005.     //if(IsPlayerAdmin(playerid))
  1006.     if(IsPlayerLuxAdmin(playerid))
  1007.     {
  1008.     //ShowPlayerDialog(playerid, G_OBJ_DID, DIALOG_STYLE_INPUT, "{009900}GarObject - Object Saving", "{FF0000}Warning! {FFFFFF}You're about to save objects to a file.\nYou must include the .txt tag at the end of the filename.\nAll existing text in the file you're saving to will be overwritten.\n\nEnter the filename where you want to save the objects below:", "Save", "Cancel");
  1009.     ShowPlayerDialog(playerid, G_OBJ_DID, DIALOG_STYLE_INPUT, "{009900}GarObject - Object Saving", "{FF0000}Warning! {FFFFFF}You're about to save objects to a file.\nYou must include the .txt tag at the end of the filename.\nAll existing text in the file you're saving to will be overwritten.\n\nEnter the filename where you want to save the objects below:", "Save", "Cancel");
  1010.     //}
  1011.     return 1;
  1012.     }
  1013.     else return 0;
  1014. }
  1015. dcmd_loadobject(playerid, params[])
  1016. {
  1017.     #pragma unused params
  1018.     if(IsPlayerLuxAdmin(playerid))
  1019.     {
  1020.         return ShowPlayerDialog(playerid, (G_OBJ_DID+1), DIALOG_STYLE_INPUT, "{009900}GarObject - Object Loading", "{FF0000}Warning! {FFFFFF}You're about to load objects from a file.\nYou must include the .txt tag at the end of the filename.\n\nEnter the filename where you want to load the objects from below:", "Load", "Cancel");
  1021.     }
  1022.     else return 0;
  1023. }
  1024. dcmd_savehobject(playerid, params[])
  1025. {
  1026.     #pragma unused params
  1027.     //if(IsPlayerAdmin(playerid))
  1028.     if(IsPlayerLuxAdmin(playerid))
  1029.     {
  1030.     ShowPlayerDialog(playerid, (G_OBJ_DID+2), DIALOG_STYLE_INPUT, "{009900}GarObject - Object Saving", "{FF0000}Warning! {FFFFFF}You're about to save objects to a file.\nYou must include the .txt tag at the end of the filename.\nAll existing text in the file you're saving to will be overwritten.\n\nEnter the filename where you want to save the objects below:", "Save", "Cancel");
  1031.     return 1;
  1032. }
  1033.     else return 0;
  1034. }
  1035. dcmd_loadhobject(playerid, params[])
  1036. {
  1037.     #pragma unused params
  1038.     if(IsPlayerLuxAdmin(playerid))
  1039. //  if(IsPlayerAdmin(playerid))
  1040.     {
  1041.     ShowPlayerDialog(playerid, (G_OBJ_DID+3), DIALOG_STYLE_INPUT, "{009900}GarObject - Object Loading", "{FF0000}Warning! {FFFFFF}You're about to load objects from a file.\nYou must include the .txt tag at the end of the filename.\n\nEnter the filename where you want to load the objects from below:", "Load", "Cancel");
  1042.     return 1;
  1043.     }
  1044.     else return 0;
  1045. }
  1046. dcmd_garobject(playerid, params[])
  1047. {
  1048. //  if(IsPlayerAdmin(playerid))
  1049.     if(IsPlayerLuxAdmin(playerid))
  1050.     {
  1051.         #pragma unused params
  1052.         #if !defined G_OBJ_USE_SHORTCUTS
  1053.         ShowPlayerDialog(playerid, (G_OBJ_DID+4), DIALOG_STYLE_MSGBOX, "{00BC00}GarObject {FF0000}v1.3 {00BC00}by {FF0000}[03]Garsino", "/createobject\n/destroy(all)object\n/rotate(all)object\n/stop(all)object\n/move(all)object\n/objecttele\n/(de)attachpobject\n/get(all)object\n/sethobj\n/(de)attachvobject\n/stop(all)hobj\n/copyobject\n/saveobject\n/loadobject\n/savehobject\n/loadhobject\n/start(all)objectloop\n/stop(all)objectloop\n\n{00BC00}Available at the {FF0000}SA:MP {00BC00}forum.", "Close", "");
  1054.         #endif
  1055.         #if defined G_OBJ_USE_SHORTCUTS
  1056.         new string[500];
  1057.         strcat(string, "/createobject\t\t/oc\n/destroy(all)object\t/od(all)\n/rotate(all)object\t/orot(all)\n/stop(all)object\t/os(all)\n/move(all)object\t/om(all)\n/objecttele\t\t/ot\n");
  1058.         strcat(string, "/(de)attachpobject\t/(de)apo\n/get(all)object\t\t/og(all)\n/sethobj\t\t/setho\n/(de)attachvobject\t/(de)avo\n/stop(all)hobj\t\t/stop(all)ho\n/copyobject\t\t/co\n/saveobject\t\t/so\n/loadobject\t\t/lo\n/savehobject\t\t/sho\n/loadhobject\t\t/lho\n/start(all)objectloop\t/s(all)ol\n/stop(all)objectloop\t/stop(all)ol\n\n{00BC00}Available at the {FF0000}SA:MP {00BC00}forum.");
  1059.         ShowPlayerDialog(playerid, (G_OBJ_DID+4), DIALOG_STYLE_MSGBOX, "{00BC00}GarObject {FF0000}v1.3 {00BC00}by {FF0000}[03]Garsino", string, "Close", "");
  1060.         #endif
  1061.         return 1;
  1062.     }
  1063.     else return 0;
  1064. }
  1065. #if defined G_OBJ_USE_SHORTCUTS
  1066. dcmd_stopallol(playerid, params[]) return dcmd_stopallobjectloop(playerid, params);
  1067. dcmd_stopol(playerid, params[]) return dcmd_stopobjectloop(playerid, params);
  1068. dcmd_sallol(playerid, params[]) return dcmd_startallobjectloop(playerid, params);
  1069. dcmd_sol(playerid, params[]) return dcmd_startobjectloop(playerid, params);
  1070. dcmd_oc(playerid, params[]) return dcmd_createobject(playerid, params);
  1071. dcmd_or(playerid, params[]) return dcmd_rotateobject(playerid, params);
  1072. dcmd_apo(playerid, params[]) return dcmd_attachpobject(playerid, params);
  1073. dcmd_deapo(playerid, params[]) return dcmd_deattachpobject(playerid, params);
  1074. dcmd_avo(playerid, params[]) return dcmd_attachvobject(playerid, params);
  1075. dcmd_deavo(playerid, params[]) return dcmd_deattachvobject(playerid, params);
  1076. dcmd_orall(playerid, params[]) return dcmd_rotateallobject(playerid, params);
  1077. dcmd_od(playerid, params[]) return dcmd_destroyobject(playerid, params);
  1078. dcmd_odall(playerid, params[]) return dcmd_destroyallobject(playerid, params);
  1079. dcmd_os(playerid, params[]) return dcmd_stopobject(playerid, params);
  1080. dcmd_osall(playerid, params[]) return dcmd_stopallobject(playerid, params);
  1081. dcmd_om(playerid, params[]) return dcmd_moveobject(playerid, params);
  1082. dcmd_omall(playerid, params[]) return dcmd_moveallobject(playerid, params);
  1083. dcmd_og(playerid, params[]) return dcmd_getobject(playerid, params);
  1084. dcmd_ogall(playerid, params[]) return dcmd_getallobject(playerid, params);
  1085. dcmd_ot(playerid, params[]) return dcmd_objecttele(playerid, params);
  1086. dcmd_setho(playerid, params[]) return dcmd_sethobj(playerid, params);
  1087. dcmd_stopho(playerid, params[]) return dcmd_stophobj(playerid, params);
  1088. dcmd_stopallho(playerid, params[]) return dcmd_stopallhobj(playerid, params);
  1089. dcmd_so(playerid, params[]) return dcmd_saveobject(playerid, params);
  1090. dcmd_lo(playerid, params[]) return dcmd_loadobject(playerid, params);
  1091. dcmd_sho(playerid, params[]) return dcmd_savehobject(playerid, params);
  1092. dcmd_lho(playerid, params[]) return dcmd_loadhobject(playerid, params);
  1093. dcmd_co(playerid, params[]) return dcmd_copyobject(playerid, params);
  1094. dcmd_gobj(playerid, params[]) return dcmd_garobject(playerid, params);
  1095. #endif
  1096. stock GetFreeObjectID(playerid)
  1097. {
  1098.     for(new a = 0; a < GOBJ_MAX_OBJECTS_CREATED; a++)
  1099.     {
  1100.         if(Objects[playerid][a] == INVALID_OBJECT_ID)
  1101.         {
  1102.             return a;
  1103.         }
  1104.     }
  1105.     return -1;
  1106. }
  1107. stock GetTotalNativeObjects()
  1108. {
  1109.     new tmpcount = 0;
  1110.     Loop(o, MAX_OBJECTS)
  1111.     {
  1112.         if(IsValidObject(o))
  1113.         {
  1114.             tmpcount++;
  1115.         }
  1116.     }
  1117.     return tmpcount;
  1118. }
  1119. stock pNick(playerid)
  1120. {
  1121.     new GFSnick[MAX_PLAYER_NAME];
  1122.     GetPlayerName(playerid, GFSnick, MAX_PLAYER_NAME);
  1123.     return GFSnick;
  1124. }
  1125. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  1126. {
  1127.     if(dialogid == G_OBJ_DID && response)
  1128.     {
  1129.         return SaveObjectsToFile(playerid, inputtext);
  1130.     }
  1131.     if(dialogid == (G_OBJ_DID + 1) && response)
  1132.     {
  1133.         return LoadObjectsFromFile(playerid, inputtext);
  1134.     }
  1135.     if(dialogid == (G_OBJ_DID + 2) && response)
  1136.     {
  1137.         return SaveHObjectsToFile(playerid, inputtext);
  1138.     }
  1139.     if(dialogid == (G_OBJ_DID + 3) && response)
  1140.     {
  1141.         return LoadHObjectsFromFile(playerid, inputtext);
  1142.     }
  1143.     return 0;
  1144. }
  1145. stock SaveObjectsToFile(playerid, filename[], sendmsg = 1)
  1146. {
  1147.     new File:gFile, string[158], count;
  1148.     if(strlen(filename) < 4) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered is shorter than 4 characters. Minimum filename is 4 characters including the .txt extension.");
  1149.     if(strfind(filename, ".txt", true) == -1) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered didn't have the .txt extension at the end. Please add it and continue.");
  1150.     else
  1151.     {
  1152.         if(fexist(filename))
  1153.         {
  1154.             fremove(filename);
  1155.         }
  1156.         gFile = fopen(filename, io_write);
  1157.         fclose(gFile);
  1158.         gFile = fopen(filename, io_append);
  1159.         Loop(o, MAX_OBJECTS)
  1160.         {
  1161.             if(ObjectCreator[o] == playerid && ModelID[o] != -1)
  1162.             {
  1163.                 format(string, sizeof(string), "CreateObject(%d, %f, %f, %f, %f, %f, %f);\r\n", ModelID[o], oPos[o][0], oPos[o][1], oPos[o][2], oRot[o][0], oRot[o][1], oRot[o][2]);
  1164.                 fwrite(gFile, string);
  1165.                 DestroyObject(o);
  1166.                 ModelID[o] = -1;
  1167.                 count++;
  1168.             }
  1169.         }
  1170.         fclose(gFile);
  1171.         if(sendmsg == 1)
  1172.         {
  1173.             format(string, sizeof(string), "{009900}Save Successfull{FFFFFF}! Saved{009900} %d{FFFFFF} objects to {009900}%s{FFFFFF}.", count, filename);
  1174.             SendClientMessage(playerid, COLOUR_INFO, string);
  1175.         }
  1176.     }
  1177.     return 1;
  1178. }
  1179. stock LoadObjectsFromFile(playerid, filename[], sendmsg = 1)
  1180. {
  1181.     new File:file_ptr, modelid, Float:pos[3], Float:rot[3], count, line[256];
  1182.     if(strlen(filename) < 4) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered is shorter than 4 characters. Minimum filename is 4 characters including the .txt extension.");
  1183.     if(strfind(filename, ".txt", true) == -1) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered didn't have the .txt extension at the end. Please add it and continue.");
  1184.     if(!fexist(filename)) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}This file does not exist.");
  1185.     else
  1186.     {
  1187.         file_ptr = fopen(filename, io_read);
  1188.         while(fread(file_ptr, line) > 0)
  1189.         {
  1190.             if(GetTotalNativeObjects() >= (MAX_OBJECTS-1)) return SendClientMessage(playerid, COLOUR_SYSTEM, "The SA:MP object limit has been reached. You can not spawn any more objects.");
  1191.             if(GetFreeObjectID(playerid) < 0) return SendClientMessage(playerid, COLOUR_SYSTEM, "You can not spawn any more objects. Please delete one of the current ones first.");
  1192.             if(!sscanf(line, "p<,>'('ifffffp<)>f", modelid, pos[0], pos[1], pos[2], rot[0], rot[1], rot[2]))
  1193.             {
  1194.                 new obj = GetFreeObjectID(playerid);
  1195.                 Objects[playerid][obj] = CreateObject(modelid, pos[0], pos[1], pos[2], rot[0], rot[1], rot[2]);
  1196.                 new o = Objects[playerid][obj];
  1197.                 ObjectCreator[o] = playerid, ModelID[o] = modelid, oPos[o][0] = pos[0], oPos[o][1] = pos[1], oPos[o][2] = pos[2], oRot[o][0] = rot[0], oRot[o][1] = rot[1], oRot[o][2] = rot[2], AttachedVehicle[o] = INVALID_VEHICLE_ID, AttachedPlayer[o] = INVALID_PLAYER_ID;
  1198.                 count++;
  1199.             }
  1200.         }
  1201.         fclose(file_ptr);
  1202.         if(sendmsg == 1)
  1203.         {
  1204.             format(line, sizeof(line), "{009900}Load Successfull{FFFFFF}! Loaded{009900} %d{FFFFFF} objects from {009900}%s{FFFFFF}.", count, filename);
  1205.             SendClientMessage(playerid, COLOUR_INFO, line);
  1206.         }
  1207.     }
  1208.     return 1;
  1209. }
  1210. stock SetHOPVar(playerid, varname[], int_value, slot)
  1211. {
  1212.     new string[128];
  1213.     format(string, sizeof(string), "%s%d", varname, slot);
  1214.     return SetPVarInt(playerid, string, int_value);
  1215. }
  1216. stock GetHOPVar(playerid, varname[], slot)
  1217. {
  1218.     new string[128];
  1219.     format(string, sizeof(string), "%s%d", varname, slot);
  1220.     return GetPVarInt(playerid, string);
  1221. }
  1222. stock SetHOPFloat(playerid, varname[], Float:int_value, slot)
  1223. {
  1224.     new string[128];
  1225.     format(string, sizeof(string), "%s%d", varname, slot);
  1226.     return SetPVarFloat(playerid, string, int_value);
  1227. }
  1228. stock Float:GetHOPFloat(playerid, varname[], slot)
  1229. {
  1230.     new string[128];
  1231.     format(string, sizeof(string), "%s%d", varname, slot);
  1232.     return GetPVarFloat(playerid, string);
  1233. }
  1234. stock CountTotalHoldingObjects(playerid)
  1235. {
  1236.     new count;
  1237.     Loop(o, 5)
  1238.     {
  1239.         if(IsPlayerAttachedObjectSlotUsed(playerid, o))
  1240.         {
  1241.             count++;
  1242.         }
  1243.     }
  1244.     return count;
  1245. }
  1246. stock SaveHObjectsToFile(pid, filename[], sendmsg = 1)
  1247. {
  1248.     new File:gFile, string[158], count;
  1249.     if(strlen(filename) < 4) return SendClientMessage(pid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered is shorter than 4 characters. Minimum filename is 4 characters including the .txt extension.");
  1250.     if(strfind(filename, ".txt", true) == -1) return SendClientMessage(pid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered didn't have the .txt extension at the end. Please add it and continue.");
  1251.     if(CountTotalHoldingObjects(pid) == 0) return SendClientMessage(pid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}You do not have any objects to save.");
  1252.     else
  1253.     {
  1254.         if(fexist(filename))
  1255.         {
  1256.             fremove(filename);
  1257.         }
  1258.         gFile = fopen(filename, io_write);
  1259.         fclose(gFile);
  1260.         gFile = fopen(filename, io_append);
  1261.         Loop(o, 5)
  1262.         {
  1263.             if(IsPlayerAttachedObjectSlotUsed(pid, o))
  1264.             {
  1265.                 format(string, sizeof(string), "SetPlayerAttachedObject(playerid, %d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f);\r\n", GetHOPVar(pid, "HOIndex", o), GetHOPVar(pid, "HOModel", o), GetHOPVar(pid, "HOBone", o), GetHOPFloat(pid, "HOOX", o), GetHOPFloat(pid, "HOOY", o), GetHOPFloat(pid, "HOOZ", o), GetHOPFloat(pid, "HORX", o), GetHOPFloat(pid, "HORY", o), GetHOPFloat(pid, "HORZ", o), GetHOPFloat(pid, "HOSX", o), GetHOPFloat(pid, "HOSY", o), GetHOPFloat(pid, "HOSZ", o));
  1266.                 print(string);
  1267.                 fwrite(gFile, string);
  1268.                 RemovePlayerAttachedObject(pid, o);
  1269.                 count++;
  1270.             }
  1271.         }
  1272.         fclose(gFile);
  1273.         if(sendmsg == 1)
  1274.         {
  1275.             format(string, sizeof(string), "{009900}Save Successfull{FFFFFF}! Saved{009900} %d{FFFFFF} objects to {009900}%s{FFFFFF}.", count, filename);
  1276.             SendClientMessage(pid, COLOUR_INFO, string);
  1277.         }
  1278.     }
  1279.     return 1;
  1280. }
  1281. stock LoadHObjectsFromFile(playerid, filename[], sendmsg = 1)
  1282. {
  1283.     new File:file_ptr, modelid, bone, index, Float:o[3], Float:r[3], Float:s[3], count, line[256];
  1284.     if(strlen(filename) < 4) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered is shorter than 4 characters. Minimum filename is 4 characters including the .txt extension.");
  1285.     if(strfind(filename, ".txt", true) == -1) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}The filename you entered didn't have the .txt extension at the end. Please add it and continue.");
  1286.     if(!fexist(filename)) return SendClientMessage(playerid, COLOUR_SYSTEM, "{FF0000}Error! {FFFFFF}This file does not exist.");
  1287.     else
  1288.     {
  1289.         file_ptr = fopen(filename, io_read);
  1290.         while(fread(file_ptr, line) > 0)
  1291.         {
  1292.             if(!sscanf(line, "p<,>'(playerid'dddffffffffp<)>f", index, modelid, bone, o[0], o[1], o[2], r[0], r[1], r[2], s[0], s[1], s[2]))
  1293.             {
  1294.                 print(line);
  1295.                 SetPlayerAttachedObject(playerid, count, modelid, bone, o[0], o[1], o[2], r[0], r[1], r[2], s[0], s[1], s[2]);
  1296.                 SetHOPVar(playerid, "HOIndex", count, count);
  1297.                 SetHOPVar(playerid, "HOModel", modelid, count);
  1298.                 SetHOPVar(playerid, "HOBone", bone, count);
  1299.                 SetHOPFloat(playerid, "HOOX", o[0], count);
  1300.                 SetHOPFloat(playerid, "HOOY", o[1], count);
  1301.                 SetHOPFloat(playerid, "HOOZ", o[2], count);
  1302.                 SetHOPFloat(playerid, "HORX", r[0], count);
  1303.                 SetHOPFloat(playerid, "HORY", r[1], count);
  1304.                 SetHOPFloat(playerid, "HORZ", r[2], count);
  1305.                 SetHOPFloat(playerid, "HOSX", s[0], count);
  1306.                 SetHOPFloat(playerid, "HOSY", s[1], count);
  1307.                 SetHOPFloat(playerid, "HOSZ", s[2], count);
  1308.                 count++;
  1309.             }
  1310.         }
  1311.         fclose(file_ptr);
  1312.         if(sendmsg == 1)
  1313.         {
  1314.             format(line, sizeof(line), "{009900}Load Successfull{FFFFFF}! Loaded{009900} %d{FFFFFF} objects from {009900}%s{FFFFFF}.", count, filename);
  1315.             SendClientMessage(playerid, COLOUR_INFO, line);
  1316.         }
  1317.     }
  1318.     return 1;
  1319. }
  1320. /*#define COLOR_PINK 0xFF66FFAA
  1321. public OnPlayerText(playerid, text[])
  1322. {
  1323.     SetPlayerChatBubble(playerid, text, COLOR_PINK, 100.0, 10000);
  1324.     //return 1;
  1325.     //}
  1326.     new msg[128]; // The string. We do not need to have it larger than 128, because a message can't be larger than that.
  1327.     format(msg, sizeof(msg), "[%d]: %s", playerid, text); // The formatted message. Remember, %d means integer (whole number) and %s is string - they are associated with playerid, respectively text.
  1328.     SendPlayerMessageToAll(playerid, msg); // SendPlayerMessageToAll will send a message from the player to everyone, like what would happen normally when a player chats, but with the message we choose.
  1329.     return 0;
  1330. }*/
Advertisement
Add Comment
Please, Sign In to add comment