Guest User

SA-MP Ingame Editor (IngameEd.pwn)

a guest
Sep 6th, 2011
1,435
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 36.00 KB | None | 0 0
  1. // Created by NaS (c) 2011.
  2. // You can edit this GM to whatever you want and re-release it, but please give at least credits here!
  3.  
  4. #include <a_samp>
  5.  
  6. native MapAndreas_Init(mode);
  7. native MapAndreas_FindZ_For2DCoord(Float:X, Float:Y, &Float:Z);
  8.  
  9. #undef MAX_PLAYERS
  10. #define MAX_PLAYERS 15
  11.  
  12. //#define USE_FILEMANAGER_PLUGIN
  13.  
  14. #if defined USE_FILEMANAGER_PLUGIN
  15. #include <FileManager>
  16. #endif
  17.  
  18. #define ONLY_ADMINS true
  19.  
  20. #define OB_NUM 350
  21. #define VEH_NUM 500 // PER PLAYER!!!
  22.  
  23. #define pMode_Free 0
  24. #define pMode_MoveObject 1
  25. #define pMode_MoveVehicle 2
  26.  
  27. #define COLOR_CMD 0xFFFFFFFF
  28.  
  29. new aVehicleNames[212][] =  // Vehicle Names - Betamaster
  30. {
  31.     {"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"Sentinel"},{"Dumper"},{"Firetruck"},{"Trashmaster"},{"Stretch"},
  32.     {"Manana"},{"Infernus"},{"Voodoo"},{"Pony"},{"Mule"},{"Cheetah"},{"Ambulance"},{"Leviathan"},{"Moonbeam"},{"Esperanto"},{"Taxi"},{"Washington"},
  33.     {"Bobcat"},{"Mr Whoopee"},{"BF Injection"},{"Hunter"},{"Premier"},{"Enforcer"},{"Securicar"},{"Banshee"},{"Predator"},{"Bus"},{"Rhino"},{"Barracks"},
  34.     {"Hotknife"},{"Trailer 1"},{"Previon"},{"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},{"Admiral"},{"Squalo"},
  35.     {"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Trailer 2"},{"Turismo"},{"Speeder"},{"Reefer"},{"Tropic"},{"Flatbed"},{"Yankee"},{"Caddy"},{"Solair"},{"Berkley's RC Van"},
  36.     {"Skimmer"},{"PCJ-600"},{"Faggio"},{"Freeway"},{"RC Baron"},{"RC Raider"},{"Glendale"},{"Oceanic"},{"Sanchez"},{"Sparrow"},{"Patriot"},
  37.     {"Quad"},{"Coastguard"},{"Dinghy"},{"Hermes"},{"Sabre"},{"Rustler"},{"ZR-350"},{"Walton"},{"Regina"},{"Comet"},{"BMX"},{"Burrito"},{"Camper"},
  38.     {"Marquis"},{"Baggage"},{"Dozer"},{"Maverick"},{"News Chopper"},{"Rancher"},{"FBI Rancher"},{"Virgo"},{"Greenwood"},{"Jetmax"},{"Hotring"},{"Sandking"},
  39.     {"Blista Compact"},{"Police Maverick"},{"Boxville"},{"Benson"},{"Mesa"},{"RC Goblin"},{"Hotring Racer A"},{"Hotring Racer B"},{"Bloodring Banger"},
  40.     {"Rancher"},{"Super GT"},{"Elegant"},{"Journey"},{"Bike"},{"Mountain Bike"},{"Beagle"},{"Cropdust"},{"Stunt"},{"Tanker"}, {"Roadtrain"},{"Nebula"},
  41.     {"Majestic"},{"Buccaneer"},{"Shamal"},{"Hydra"},{"FCR-900"},{"NRG-500"},{"HPV1000"},{"Cement Truck"},{"Tow Truck"},{"Fortune"},{"Cadrona"},
  42.     {"FBI Truck"},{"Willard"},{"Forklift"},{"Tractor"},{"Combine"},{"Feltzer"},{"Remington"},{"Slamvan"},{"Blade"},{"Freight"},{"Streak"},
  43.     {"Vortex"},{"Vincent"},{"Bullet"},{"Clover"},{"Sadler"},{"Firetruck LA"},{"Hustler"},{"Intruder"},{"Primo"},{"Cargobob"},{"Tampa"},{"Sunrise"},
  44.     {"Merit"},{"Utility"},{"Nevada"},{"Yosemite"},{"Windsor"},{"Monstertruck A"},{"Monstertruck B"},{"Uranus"},{"Jester"},{"Sultan"},{"Stratum"},
  45.     {"Elegy"},{"Raindance"},{"RC Tiger"},{"Flash"},{"Tahoma"},{"Savanna"},{"Bandito"},{"Freight Flat"},{"Streak Carriage"},{"Kart"},{"Mower"},
  46.     {"Duneride"},{"Sweeper"},{"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},{"Stafford"},{"BF-400"},{"Newsvan"},{"Tug"},{"Trailer 3"},
  47.     {"Emperor"},{"Wayfarer"},{"Euros"},{"Hotdog"},{"Club"},{"Freight Carriage"},{"Trailer 3"},{"Andromada"},{"Dodo"},{"RC Cam"},{"Launch"},{"Police Car (LSPD)"},
  48.     {"Police Car (SFPD)"},{"Police Car (LVPD)"},{"Police Ranger"},{"Picador"},{"S.W.A.T. Van"},{"Alpha"},{"Phoenix"},{"Glendale"},{"Sadler"},
  49.     {"Luggage Trailer A"}, {"Luggage Trailer B"},{"Stair Trailer"},{"Boxville"},{"Farm Plow"},{"Utility Trailer"}
  50. };
  51.  
  52. enum eOBJ
  53. {
  54.     oObjectID,
  55.     oModel,
  56.     Float:oX,
  57.     Float:oY,
  58.     Float:oZ,
  59.     Float:orX,
  60.     Float:orY,
  61.     Float:orZ,
  62.     Float:oDrawDistance,
  63.     Text3D:o3DText,
  64.     bool:Used
  65. };
  66.  
  67. new Objects[MAX_PLAYERS][OB_NUM][eOBJ];
  68.  
  69. enum eVEH
  70. {
  71.     vVehicleID,
  72.     vModel,
  73.     Float:vX,
  74.     Float:vY,
  75.     Float:vZ,
  76.     Float:vA,
  77.     vColor1,
  78.     vColor2,
  79.     vRespawnDelay,
  80.     Text3D:v3DText,
  81.     bool:Used
  82. };
  83.  
  84. new Vehicles[MAX_PLAYERS][VEH_NUM][eVEH];
  85.  
  86. enum eSPAWN
  87. {
  88.     Float:sX,
  89.     Float:sY,
  90.     Float:sZ,
  91.     Float:sA,
  92.     bool:Used
  93. }
  94. new Spawn[MAX_PLAYERS][eSPAWN];
  95. new Project[MAX_PLAYERS][100];
  96.  
  97. new Beam;
  98.  
  99. enum ePLA
  100. {
  101.     pMode,
  102.     pSelected
  103. };
  104.  
  105. new PlayerInfo[MAX_PLAYERS][ePLA];
  106.  
  107. new Text:txtMode[MAX_PLAYERS];
  108.  
  109. main() { }
  110.  
  111. public OnGameModeInit()
  112. {
  113.     AllowAdminTeleport(1);
  114.     AddPlayerClass(0,1698.3142,1615.6931,10.7307,99.9117,0,0,0,0,0,0); //
  115.     SetGameModeText("SAMP IngameEd by NaS");
  116.     SendRconCommand("mapname Whole World");
  117.     MapAndreas_Init(2);
  118.     Beam = CreateObject(18656,0.0,0.0,-1000,90.0,0,0,150);
  119.    
  120.     SetTimer("oMoveTimer",100,1);
  121.    
  122.     for(new i; i < MAX_PLAYERS; i++)
  123.     {
  124.         txtMode[i] = TextDrawCreate(170.0,400, "_");
  125.         TextDrawUseBox(txtMode[i], 0);
  126.         TextDrawLetterSize(txtMode[i],0.4,0.8);
  127.         TextDrawFont(txtMode[i], 3);
  128.         TextDrawSetShadow(txtMode[i],0);
  129.         TextDrawSetOutline(txtMode[i],1);
  130.         TextDrawColor(txtMode[i],0xFFFFFFFF);
  131.         TextDrawBackgroundColor(txtMode[i],0x000000FF);
  132.         TextDrawBoxColor(txtMode[i],0x00000022);
  133.     }
  134.    
  135.     SetTimer("HUDTimer",1000,1);
  136.     return 1;
  137. }
  138.  
  139. public OnGameModeExit()
  140. {
  141.     DestroyObject(Beam);
  142.     return 1;
  143. }
  144.  
  145. public OnPlayerRequestClass(playerid, classid)
  146. {
  147.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  148.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  149.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  150.     return 1;
  151. }
  152.  
  153. public OnPlayerConnect(playerid)
  154. {
  155.     TextDrawShowForPlayer(playerid,txtMode[playerid]);
  156.     SetPlayerVirtualWorld(playerid,playerid+1);
  157.     return 1;
  158. }
  159.  
  160. public OnPlayerDisconnect(playerid, reason)
  161. {
  162.     TextDrawHideForPlayer(playerid,txtMode[playerid]);
  163.     return 1;
  164. }
  165.  
  166. public OnPlayerSpawn(playerid)
  167. {
  168.     GivePlayerWeapon(playerid,23,5000);
  169.     PlayerInfo[playerid][pMode] = pMode_Free; // free
  170.     PlayerInfo[playerid][pSelected] = -1; // None
  171.    
  172.     AllowPlayerTeleport(playerid,1);
  173.    
  174.     if(Spawn[playerid][Used])
  175.     {
  176.         SetPlayerPos(playerid,Spawn[playerid][sX],Spawn[playerid][sY],Spawn[playerid][sZ]);
  177.         SetPlayerFacingAngle(playerid,Spawn[playerid][sA]);
  178.         SetCameraBehindPlayer(playerid);
  179.     }
  180.     else SendClientMessage(playerid,COLOR_CMD,"* Don't forget to set your spawn to save the project! (/project setspawn)");
  181.     return 1;
  182. }
  183.  
  184. public OnPlayerDeath(playerid, killerid, reason)
  185. {
  186.     return 1;
  187. }
  188.  
  189. public OnVehicleSpawn(vehicleid)
  190. {
  191.     return 1;
  192. }
  193.  
  194. public OnVehicleDeath(vehicleid, killerid)
  195. {
  196.     return 1;
  197. }
  198.  
  199. public OnPlayerText(playerid, text[])
  200. {
  201.     return 1;
  202. }
  203.  
  204. public OnPlayerCommandText(playerid, cmdtext[])
  205. {
  206.     new cmd[128], idx;
  207.     cmd = strtok(cmdtext,idx);
  208.     if (strcmp("/beamtest", cmdtext, true) == 0)
  209.     {
  210.         new Float:p[3];
  211.         GetPlayerPos(playerid,p[0],p[1],p[2]);
  212.         AnimateBeam(p[0],p[1]+40,p[2]);
  213.         return 1;
  214.     }
  215.    
  216.     if (strcmp("/help", cmd, true) == 0)
  217.     {
  218.         new str[1500];
  219.        
  220.         strcat(str,"Welcome to SA-MP Ingame Editor! \n");
  221.         strcat(str,"\n");
  222.         strcat(str,"Commands to use with objects: \n");
  223.         strcat(str,"\t/ocreate [ID] - creates an object \n");
  224.         strcat(str,"\t/odel [ID] - deletes an object \n");
  225.         strcat(str,"\t/opos [ID] - Let's you set an object's position by aiming with your weapon \n");
  226.         strcat(str,"\t/opos [ID] [X/Y/Z] [OFFSET] - Moves an object on the X/Y/Z Axis by OFFSET \n");
  227.         strcat(str,"\t/orot [ID] [X/Y/Z] [OFFSET] - Rotates an object on the X/Y/Z Axis by OFFSET \n");
  228.         strcat(str,"\t/osave - If you're moving an object, you can use this to save it \n");
  229.         strcat(str,"\n");
  230.         strcat(str,"Commands to use with vehicles: \n");
  231.         strcat(str,"\t/vcreate [ID] - creates a vehicle \n");
  232.         strcat(str,"\t/vdel [ID] - deletes a vehicle \n");
  233.         strcat(str,"\t/vpos [ID] - Let's you set a vehicles's position by aiming with your weapon \n");
  234.         strcat(str,"\t/vpos [ID] [X/Y/Z] [OFFSET] - Moves a vehicle on the X/Y/Z Axis by OFFSET \n");
  235.         strcat(str,"\t/vpos [ID] [A] [OFFSET] - Increases the angle of the vehicle by OFFSET \n");
  236.         strcat(str,"\t/vsave - If you're moving a vehicle, you can use this to save it \n");
  237.         strcat(str,"\n");
  238.         strcat(str,"Commands to use for the whole project (all vehicles and objects): \n");
  239.         strcat(str,"\n");
  240.         strcat(str,"\t/project [...] \n");
  241.         strcat(str,"\t\tsetspawn - Sets the spawn for the current project \n");
  242.         strcat(str,"\t\tname (Name) - Sets the name for the current project \n");
  243.         strcat(str,"\t\tsave - Saves the current project \n");
  244.         strcat(str,"\t\tload (Name) - Loads a project  WARNING: All progress on the current project will we lost! \n");
  245.         strcat(str,"\t\tclear - Deletes all created stuff of the current project, including the spawn. \n");
  246.         strcat(str,"\n");
  247.         strcat(str,"Misc things: \n");
  248.         strcat(str,"\tMark a position on the map to teleport. \n");
  249.         strcat(str,"\t/free - Clears your selection \n");
  250.         strcat(str,"\n");
  251.         strcat(str,"Gamemode created by NaS. Credits:  \n");
  252.         strcat(str,"- THX to RyDeR for the aiming stuff.  \n");
  253.         strcat(str,"- THX to Kalcor for the MapAndreas plugin.");
  254.        
  255.         ShowPlayerDialog(playerid,666,DIALOG_STYLE_MSGBOX,"SA-MP Ingame Editor - Help",str,"OK","Close");
  256.         return 1;
  257.     }
  258.    
  259.     // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PROJECT
  260.    
  261.     if (strcmp("/project", cmd, true) == 0)
  262.     {
  263.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  264.         cmd = strtok(cmdtext,idx);
  265.  
  266.         if(strcmp(cmd,"save",true) == 0)
  267.         {
  268.             if(!strlen(Project[playerid])) return SendClientMessage(playerid,COLOR_CMD,"* Set your name for the project first! /project name");
  269.             if(!Spawn[playerid][Used]) return SendClientMessage(playerid,COLOR_CMD,"* Set your spawn first! /project setspawn");
  270.             SaveProjectAs(playerid,Project[playerid]);
  271.             SendClientMessage(playerid,COLOR_CMD,"* PROJECT SAVED!");
  272.             return 1;
  273.         }
  274.        
  275.         if(strcmp(cmd,"load",true) == 0)
  276.         {
  277.             cmd = strtok(cmdtext,idx);
  278.             if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /project load [Name]");
  279.            
  280.             if(LoadProject(playerid,cmd)) SendClientMessage(playerid,COLOR_CMD,"* Project loaded!");
  281.             else SendClientMessage(playerid,COLOR_CMD,"* /project load [Name] - invalid name!");
  282.             return 1;
  283.         }
  284.        
  285.         if(strcmp(cmd,"clear",true) == 0)
  286.         {
  287.             ClearProject(playerid);
  288.             SendClientMessage(playerid,COLOR_CMD,"* EVERYTHING DESTROYED!");
  289.             return 1;
  290.         }
  291.        
  292.         if(strcmp(cmd,"name",true) == 0)
  293.         {
  294.             cmd = strtok(cmdtext,idx);
  295.             if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /project name [Name]");
  296.             format(Project[playerid],100,cmd);
  297.             SendClientMessage(playerid,COLOR_CMD,"* Projectname set!");
  298.             return 1;
  299.         }
  300.        
  301.         if(strcmp(cmd,"setspawn",true) == 0)
  302.         {
  303.             new Float:X,Float:Y,Float:Z,Float:A;
  304.             GetPlayerPos(playerid,X,Y,Z);
  305.             GetPlayerFacingAngle(playerid,A);
  306.  
  307.             Spawn[playerid][sX] = X;
  308.             Spawn[playerid][sY] = Y;
  309.             Spawn[playerid][sZ] = Z;
  310.             Spawn[playerid][sA] = A;
  311.             Spawn[playerid][Used] = true;
  312.             SendClientMessage(playerid,COLOR_CMD,"* Spawn set to current position!");
  313.             return 1;
  314.         }
  315.        
  316.         SendClientMessage(playerid,COLOR_CMD,"* /project [save/load/clear/name/setspawn] (Name)");
  317.         return 1;
  318.     }
  319.    
  320.     // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJECTS
  321.    
  322.    
  323.    
  324.     if (strcmp("/ocreate", cmd, true) == 0)
  325.     {
  326.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  327.         cmd = strtok(cmdtext,idx);
  328.  
  329.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /ocreate [valid ID]"); // MSGS
  330.  
  331.         new id=strval(cmd);
  332.  
  333.         if(id < 0) return SendClientMessage(playerid,COLOR_CMD,"* /ocreate [valid ID]"); // MSGS
  334.         new Float:p[3];
  335.         GetPlayerPos(playerid,p[0],p[1],p[2]);
  336.         oCreate(playerid,id,p[0],p[1]+5,p[2],0.0,0.0,0.0,_);
  337.         return 1;
  338.     }
  339.    
  340.     if (strcmp("/opos", cmd, true) == 0)
  341.     {
  342.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  343.         cmd = strtok(cmdtext,idx);
  344.        
  345.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  346.        
  347.         new id=strval(cmd);
  348.        
  349.         if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  350.        
  351.         if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  352.        
  353.         cmd = strtok(cmdtext,idx);
  354.  
  355.         if(strlen(cmd) != 0)
  356.         {
  357.             if(cmd[0] == 'x')
  358.             {
  359.                 cmd = strtok(cmdtext,idx);
  360.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  361.                 new Float:val = floatstr(cmd);
  362.                 oUpdatePos(playerid,id,Objects[playerid][id][oX]+val,Objects[playerid][id][oY],Objects[playerid][id][oZ]);
  363.                 SendClientMessage(playerid,COLOR_CMD,"* Object X-Position adjusted.");
  364.                 return 1;
  365.             }
  366.  
  367.             if(cmd[0] == 'y')
  368.             {
  369.                 cmd = strtok(cmdtext,idx);
  370.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  371.                 new Float:val = floatstr(cmd);
  372.                 oUpdatePos(playerid,id,Objects[playerid][id][oX],Objects[playerid][id][oY]+val,Objects[playerid][id][oZ]);
  373.                 SendClientMessage(playerid,COLOR_CMD,"* Object Y-Position adjusted.");
  374.                 return 1;
  375.             }
  376.  
  377.             if(cmd[0] == 'z')
  378.             {
  379.                 cmd = strtok(cmdtext,idx);
  380.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  381.                 new Float:val = floatstr(cmd);
  382.                 oUpdatePos(playerid,id,Objects[playerid][id][oX],Objects[playerid][id][oY],Objects[playerid][id][oZ]+val);
  383.                 SendClientMessage(playerid,COLOR_CMD,"* Object Z-Position adjusted.");
  384.                 return 1;
  385.             }
  386.             return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
  387.         }
  388.        
  389.         PlayerInfo[playerid][pMode] = pMode_MoveObject;
  390.         PlayerInfo[playerid][pSelected] = id;
  391.         SendClientMessage(playerid,COLOR_CMD,"* Aim to set object's position. /free to end it.");
  392.         GivePlayerWeapon(playerid,23,1);
  393.         return 1;
  394.     }
  395.    
  396.     if (strcmp("/odel", cmd, true) == 0)
  397.     {
  398.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  399.         cmd = strtok(cmdtext,idx);
  400.  
  401.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
  402.  
  403.         new id=strval(cmd);
  404.  
  405.         if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
  406.  
  407.         if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
  408.        
  409.         oDestroy(playerid,id);
  410.         return 1;
  411.     }
  412.    
  413.     if (strcmp("/orot", cmd, true) == 0)
  414.     {
  415.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  416.         cmd = strtok(cmdtext,idx);
  417.  
  418.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  419.  
  420.         new id=strval(cmd);
  421.  
  422.         if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  423.  
  424.         if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  425.  
  426.         cmd = strtok(cmdtext,idx);
  427.  
  428.         if(strlen(cmd) != 0)
  429.         {
  430.             if(cmd[0] == 'x')
  431.             {
  432.                 cmd = strtok(cmdtext,idx);
  433.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  434.                 new Float:val = floatstr(cmd);
  435.                 oUpdateRot(playerid,id,Objects[playerid][id][orX]+val,Objects[playerid][id][orY],Objects[playerid][id][orZ]);
  436.                 SendClientMessage(playerid,COLOR_CMD,"* Object X-Rotation adjusted.");
  437.                 return 1;
  438.             }
  439.  
  440.             if(cmd[0] == 'y')
  441.             {
  442.                 cmd = strtok(cmdtext,idx);
  443.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  444.                 new Float:val = floatstr(cmd);
  445.                 oUpdateRot(playerid,id,Objects[playerid][id][orX],Objects[playerid][id][orY]+val,Objects[playerid][id][orZ]);
  446.                 SendClientMessage(playerid,COLOR_CMD,"* Object Y-Rotation adjusted.");
  447.                 return 1;
  448.             }
  449.  
  450.             if(cmd[0] == 'z')
  451.             {
  452.                 cmd = strtok(cmdtext,idx);
  453.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  454.                 new Float:val = floatstr(cmd);
  455.                 oUpdateRot(playerid,id,Objects[playerid][id][orX],Objects[playerid][id][orY],Objects[playerid][id][orZ]+val);
  456.                 SendClientMessage(playerid,COLOR_CMD,"* Object Z-Rotation adjusted.");
  457.                 return 1;
  458.             }
  459.             return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  460.         }
  461.  
  462.         return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
  463.     }
  464.  
  465.     if (strcmp("/odel", cmd, true) == 0)
  466.     {
  467.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  468.         cmd = strtok(cmdtext,idx);
  469.  
  470.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
  471.  
  472.         new id=strval(cmd);
  473.  
  474.         if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
  475.  
  476.         if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
  477.  
  478.         oDestroy(playerid,id);
  479.         return 1;
  480.     }
  481.    
  482.    
  483.    
  484.    
  485.     // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VEHICLES
  486.    
  487.    
  488.    
  489.    
  490.    
  491.     if (strcmp("/vcreate", cmd, true) == 0)
  492.     {
  493.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  494.         cmd = strtok(cmdtext,idx);
  495.  
  496.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vcreate [valid ID]"); // MSGS
  497.  
  498.         new id=strval(cmd);
  499.  
  500.         if(id < 400 || id > 611) return SendClientMessage(playerid,COLOR_CMD,"* /vcreate [valid ID]"); // MSGS
  501.         new Float:p[3];
  502.         GetPlayerPos(playerid,p[0],p[1],p[2]);
  503.        
  504.         new col1, col2;
  505.        
  506.         cmd = strtok(cmdtext,idx);
  507.        
  508.         if(strlen(cmd))
  509.         {
  510.             col1 = strval(cmd);
  511.         } else col1 = -1;
  512.        
  513.         cmd = strtok(cmdtext,idx);
  514.  
  515.         if(strlen(cmd))
  516.         {
  517.             col2 = strval(cmd);
  518.         } else col2 = -1;
  519.        
  520.         vCreate(playerid,id,p[0],p[1]+5,p[2],0.0,col1,col2,_);
  521.         return 1;
  522.     }
  523.    
  524.     if (strcmp("/vdel", cmd, true) == 0)
  525.     {
  526.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  527.         cmd = strtok(cmdtext,idx);
  528.  
  529.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vdel [valid ID]"); // MSGS
  530.  
  531.         new id=strval(cmd);
  532.  
  533.         if(id < 0 || id >= VEH_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /vdel [valid ID]"); // MSGS
  534.  
  535.         if(!Vehicles[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /vdel [valid ID]"); // MSGS
  536.  
  537.         vDestroy(playerid,id);
  538.         return 1;
  539.     }
  540.    
  541.     if (strcmp("/vpos", cmd, true) == 0)
  542.     {
  543.         if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
  544.         cmd = strtok(cmdtext,idx);
  545.  
  546.         if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  547.  
  548.         new id=strval(cmd);
  549.  
  550.         if(id < 0 || id >= VEH_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  551.  
  552.         if(!Vehicles[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  553.  
  554.         cmd = strtok(cmdtext,idx);
  555.  
  556.         if(strlen(cmd) != 0)
  557.         {
  558.             if(cmd[0] == 'x')
  559.             {
  560.                 cmd = strtok(cmdtext,idx);
  561.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  562.                 new Float:val = floatstr(cmd);
  563.                 vUpdatePos(playerid,id,Vehicles[playerid][id][vX]+val,Vehicles[playerid][id][vY],Vehicles[playerid][id][vZ],Vehicles[playerid][id][vA]);
  564.                 SendClientMessage(playerid,COLOR_CMD,"* Vehicle X-Position adjusted.");
  565.                 return 1;
  566.             }
  567.  
  568.             if(cmd[0] == 'y')
  569.             {
  570.                 cmd = strtok(cmdtext,idx);
  571.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  572.                 new Float:val = floatstr(cmd);
  573.                 vUpdatePos(playerid,id,Vehicles[playerid][id][vX],Vehicles[playerid][id][vY]+val,Vehicles[playerid][id][vZ],Vehicles[playerid][id][vA]);
  574.                 SendClientMessage(playerid,COLOR_CMD,"* Vehicle Y-Position adjusted.");
  575.                 return 1;
  576.             }
  577.  
  578.             if(cmd[0] == 'z')
  579.             {
  580.                 cmd = strtok(cmdtext,idx);
  581.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  582.                 new Float:val = floatstr(cmd);
  583.                 vUpdatePos(playerid,id,Vehicles[playerid][id][vX],Vehicles[playerid][id][vY],Vehicles[playerid][id][vZ]+val,Vehicles[playerid][id][vA]);
  584.                 SendClientMessage(playerid,COLOR_CMD,"* Vehicle Z-Position adjusted.");
  585.                 return 1;
  586.             }
  587.            
  588.             if(cmd[0] == 'a')
  589.             {
  590.                 cmd = strtok(cmdtext,idx);
  591.                 if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  592.                 new Float:val = floatstr(cmd);
  593.                 vUpdatePos(playerid,id,Vehicles[playerid][id][vX],Vehicles[playerid][id][vY],Vehicles[playerid][id][vZ],Vehicles[playerid][id][vA]+val);
  594.                 SendClientMessage(playerid,COLOR_CMD,"* Vehicle Angle adjusted.");
  595.                 return 1;
  596.             }
  597.             return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
  598.         }
  599.  
  600.         PlayerInfo[playerid][pMode] = pMode_MoveVehicle;
  601.         PlayerInfo[playerid][pSelected] = id;
  602.        
  603.         GivePlayerWeapon(playerid,23,1);
  604.         SendClientMessage(playerid,COLOR_CMD,"* Aim to set vehicles's position. /free to end it.");
  605.         return 1;
  606.     }
  607.    
  608.     if (strcmp("/free", cmdtext, true) == 0)
  609.     {
  610.         PlayerInfo[playerid][pMode] = pMode_Free;
  611.         PlayerInfo[playerid][pSelected] = -1;
  612.        
  613.         SendClientMessage(playerid,COLOR_CMD,"* Changed your mode.");
  614.         return 1;
  615.     }
  616.     return 0;
  617. }
  618.  
  619. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  620. {
  621.     return 1;
  622. }
  623.  
  624. public OnPlayerExitVehicle(playerid, vehicleid)
  625. {
  626.     return 1;
  627. }
  628.  
  629. public OnPlayerStateChange(playerid, newstate, oldstate)
  630. {
  631.     return 1;
  632. }
  633.  
  634. public OnPlayerRequestSpawn(playerid)
  635. {
  636.     #if ONLY_ADMINS == true
  637.     if(!IsPlayerAdmin(playerid))
  638.     {
  639.         SendClientMessage(playerid, COLOR_CMD, "*** /rcon login to access this gamemode!");
  640.         return 0;
  641.     }
  642.     #endif
  643.     return 1;
  644. }
  645.  
  646. public OnObjectMoved(objectid)
  647. {
  648.     if(objectid == Beam)
  649.     {
  650.         SetObjectPos(Beam,0.0,0.0,-1000);
  651.         MoveObject(Beam,0.0,0.0,-800,200); // FIX - If not, Beam sometimes moves back.. :/
  652.     }
  653.     return 1;
  654. }
  655.  
  656. public OnPlayerPickUpPickup(playerid, pickupid)
  657. {
  658.     return 1;
  659. }
  660.  
  661. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  662. {
  663.     return 1;
  664. }
  665.  
  666. public OnVehicleStreamOut(vehicleid, forplayerid)
  667. {
  668.     return 1;
  669. }
  670.  
  671. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  672. {
  673.     return 1;
  674. }
  675.  
  676. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
  677. {
  678.     return 1;
  679. }
  680.  
  681. AnimateBeam(Float:X,Float:Y,Float:Z)
  682. {
  683.     SetObjectPos(Beam,X,Y,Z-70);
  684.     MoveObject(Beam,X,Y,Z-5.0,150);
  685. }
  686.  
  687. stock strtok(const string[], &index,token=' ')
  688. {
  689.     new length = strlen(string);
  690.     while ((index < length) && (string[index] <= token))
  691.     {
  692.         index++;
  693.     }
  694.  
  695.     new offset = index;
  696.     new result[128];
  697.     while ((index < length) && (string[index] > token) && ((index - offset) < (sizeof(result) - 1)))
  698.     {
  699.         result[index - offset] = string[index];
  700.         index++;
  701.     }
  702.     result[index - offset] = EOS;
  703.     return result;
  704. }
  705.  
  706. GetAimingPos(playerid,&Float:AimX,&Float:AimY,&Float:AimZ,Float:MAX_DISTANCE=500.0)
  707. {
  708.     if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  709.     {
  710.         static
  711.             Float: camVect_Z,
  712.             Float: mapPos_Z,
  713.             Float: pAngle,
  714.             Float: camPos[3],
  715.             Float: tmpPos[4]
  716.         ;
  717.         GetPlayerCameraFrontVector(playerid, camVect_Z, camVect_Z, camVect_Z);
  718.         GetPlayerCameraPos(playerid, camPos[0], camPos[1], camPos[2]);
  719.         GetPlayerFacingAngle(playerid, pAngle);
  720.  
  721.         camVect_Z += 0.08;
  722.  
  723.         for(new Float: i; i < MAX_DISTANCE; i += 0.25)
  724.         {
  725.             camPos[0] += i * floatsin(-pAngle, degrees);
  726.             camPos[1] += i * floatcos(-pAngle, degrees);
  727.             camPos[2] += i * camVect_Z;
  728.  
  729.             MapAndreas_FindZ_For2DCoord(camPos[0], camPos[1], mapPos_Z);
  730.  
  731.             if((tmpPos[3] < camPos[2] < mapPos_Z || camPos[2] < mapPos_Z < tmpPos[2]))
  732.             {
  733.                 if(i < 5.0) return false;
  734.                 static
  735.                     Float: pPos[3];
  736.                 GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
  737.  
  738.                 camPos[0] = ((camPos[0] + tmpPos[0]) / 2.0);
  739.                 camPos[1] = ((camPos[1] + tmpPos[1]) / 2.0);
  740.                 camPos[2] = ((camPos[2] + tmpPos[2]) / 2.0);
  741.  
  742.                 AimX = camPos[0];
  743.                 AimY = camPos[1];
  744.                 AimZ = mapPos_Z;
  745.                
  746.                 return true;
  747.             }
  748.             tmpPos[0] = camPos[0];
  749.             tmpPos[1] = camPos[1];
  750.             tmpPos[2] = camPos[2];
  751.             tmpPos[3] = mapPos_Z;
  752.  
  753.             camPos[0] -= i * floatsin(-pAngle, degrees);
  754.             camPos[1] -= i * floatcos(-pAngle, degrees);
  755.             camPos[2] -= i * camVect_Z;
  756.         }
  757.  
  758.     }
  759.     return false;
  760. }
  761.  
  762. forward oMoveTimer();
  763. public oMoveTimer()
  764. {
  765.     for(new i; i < MAX_PLAYERS; i++)
  766.     {
  767.         if(!IsPlayerConnected(i)) continue;
  768.         //if(PlayerInfo[i][pMode] != pMode_MoveObject) continue;
  769.         if(PlayerInfo[i][pMode] == pMode_MoveObject)
  770.         {
  771.             if(PlayerInfo[i][pSelected] == -1) continue;
  772.             if(GetPlayerWeapon(i) != 23) continue;
  773.             new k, lr, ud;
  774.             GetPlayerKeys(i,k,ud,lr);
  775.             if(k & 128) { } else continue;
  776.  
  777.             new Float:X,Float:Y,Float:Z;
  778.             if(GetAimingPos(i,X,Y,Z))
  779.             {
  780.                 new sel=PlayerInfo[i][pSelected];
  781.                 oUpdatePos(i,sel,X,Y,Z);
  782.             }
  783.         }
  784.        
  785.         if(PlayerInfo[i][pMode] == pMode_MoveVehicle)
  786.         {
  787.             if(PlayerInfo[i][pSelected] == -1) continue;
  788.             if(GetPlayerWeapon(i) != 23) continue;
  789.             new k, lr, ud;
  790.             GetPlayerKeys(i,k,ud,lr);
  791.             if(k & 128) { } else continue;
  792.  
  793.             new Float:X,Float:Y,Float:Z;
  794.             if(GetAimingPos(i,X,Y,Z))
  795.             {
  796.                 new sel=PlayerInfo[i][pSelected];
  797.                 new Float:A;
  798.                 GetPlayerFacingAngle(i,A);
  799.                 vUpdatePos(i,sel,X,Y,Z+1.0,A+90.0);
  800.             }
  801.         }
  802.     }
  803. }
  804.  
  805. oCreate(playerid,Model,Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ,Float:DrawDist=0.0)
  806. {
  807.     new found=-1;
  808.     for(new x; x < OB_NUM; x++) if(!Objects[playerid][x][Used]) { found=x; break; }
  809.  
  810.     Objects[playerid][found][oObjectID] = CreatePlayerObject(playerid,Model,X,Y,Z,rX,rY,rZ,DrawDist);
  811.  
  812.     new str[128];
  813.     format(str,sizeof(str),"[OBJECT]\nModel: %d \n ID: %d",Model,found);
  814.     Objects[playerid][found][o3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
  815.     // (text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS)
  816.  
  817.     Objects[playerid][found][oModel] = Model;
  818.     Objects[playerid][found][Used]=true;
  819.     Objects[playerid][found][oX] = X;
  820.     Objects[playerid][found][oY] = Y;
  821.     Objects[playerid][found][oZ] = Z;
  822.     Objects[playerid][found][orX]= rX;
  823.     Objects[playerid][found][orY]= rY;
  824.     Objects[playerid][found][orZ]= rZ;
  825.     Objects[playerid][found][oDrawDistance] = DrawDist;
  826.  
  827.     AnimateBeam(X,Y,Z);
  828. }
  829.  
  830. oDestroy(playerid,ID)
  831. {
  832.     if(!Objects[playerid][ID][Used]) return 0;
  833.     Objects[playerid][ID][Used] = false;
  834.     DestroyPlayerObject(playerid,Objects[playerid][ID][oObjectID]);
  835.     Delete3DTextLabel(Objects[playerid][ID][o3DText]);
  836.     return 1;
  837. }
  838.  
  839. oUpdatePos(playerid,ID,Float:X,Float:Y,Float:Z)
  840. {
  841.     if(!Objects[playerid][ID][Used]) return 0;
  842.     Objects[playerid][ID][oX] = X;
  843.     Objects[playerid][ID][oY] = Y;
  844.     Objects[playerid][ID][oZ] = Z;
  845.  
  846.     SetPlayerObjectPos(playerid,Objects[playerid][ID][oObjectID],X,Y,Z);
  847.    
  848.     Delete3DTextLabel(Objects[playerid][ID][o3DText]);
  849.     new str[128];
  850.     format(str,sizeof(str),"[OBJECT]\nModel: %d \n ID: %d",Objects[playerid][ID][oModel],ID);
  851.     Objects[playerid][ID][o3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
  852.     return 1;
  853. }
  854.  
  855. oUpdateRot(playerid,ID,Float:rX,Float:rY,Float:rZ)
  856. {
  857.     if(!Objects[playerid][ID][Used]) return 0;
  858.     Objects[playerid][ID][orX] = rX;
  859.     Objects[playerid][ID][orY] = rY;
  860.     Objects[playerid][ID][orZ] = rZ;
  861.  
  862.     SetPlayerObjectRot(playerid,Objects[playerid][ID][oObjectID],rX,rY,rZ);
  863.     return 1;
  864. }
  865.  
  866. vCreate(playerid,Model,Float:X,Float:Y,Float:Z,Float:A,Color1=-1,Color2=-1,Respawn=120000)
  867. {
  868.     new found=-1;
  869.     for(new x; x < VEH_NUM; x++) if(!Vehicles[playerid][x][Used]) { found=x; break; }
  870.  
  871.     Vehicles[playerid][found][vVehicleID] = CreateVehicle(Model,X,Y,Z,A,Color1,Color2,Respawn);
  872.     SetVehicleVirtualWorld(Vehicles[playerid][found][vVehicleID],playerid+1);
  873.  
  874.     new str[128];
  875.     format(str,sizeof(str),"[VEHICLE]\nModel: %d - %s \n ID: %d",Model,aVehicleNames[Model-400],found);
  876.     Vehicles[playerid][found][v3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
  877.     // (text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS)
  878.  
  879.     Vehicles[playerid][found][vModel] = Model;
  880.     Vehicles[playerid][found][Used]=true;
  881.     Vehicles[playerid][found][vX] = X;
  882.     Vehicles[playerid][found][vY] = Y;
  883.     Vehicles[playerid][found][vZ] = Z;
  884.     Vehicles[playerid][found][vA] = A;
  885.     Vehicles[playerid][found][vColor1] = Color1;
  886.     Vehicles[playerid][found][vColor2] = Color2;
  887.  
  888.     Vehicles[playerid][found][vRespawnDelay] = Respawn;
  889.  
  890.     AnimateBeam(X,Y,Z);
  891. }
  892.  
  893. vDestroy(playerid,ID)
  894. {
  895.     if(!Vehicles[playerid][ID][Used]) return 0;
  896.     Vehicles[playerid][ID][Used] = false;
  897.     DestroyVehicle(Vehicles[playerid][ID][vVehicleID]);
  898.     Delete3DTextLabel(Vehicles[playerid][ID][v3DText]);
  899.     return 1;
  900. }
  901.  
  902. vUpdatePos(playerid,ID,Float:X,Float:Y,Float:Z,Float:A)
  903. {
  904.     if(!Vehicles[playerid][ID][Used]) return 0;
  905.     Vehicles[playerid][ID][vX] = X;
  906.     Vehicles[playerid][ID][vY] = Y;
  907.     Vehicles[playerid][ID][vZ] = Z;
  908.     Vehicles[playerid][ID][vA] = A;
  909.  
  910.     SetVehiclePos(Vehicles[playerid][ID][vVehicleID],X,Y,Z);
  911.     SetVehicleZAngle(Vehicles[playerid][ID][vVehicleID],A);
  912.  
  913.     Delete3DTextLabel(Vehicles[playerid][ID][v3DText]);
  914.     new str[128];
  915.     format(str,sizeof(str),"[VEHICLE]\nModel: %d - %s \n ID: %d",Vehicles[playerid][ID][vModel],aVehicleNames[Vehicles[playerid][ID][vModel]-400],ID);
  916.     Vehicles[playerid][ID][v3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
  917.     return 1;
  918. }
  919.  
  920. SaveProjectAs(playerid,Name[])
  921. {
  922.     #if defined USE_FILEMANAGER_PLUGIN
  923.     if(!dir_exists("scriptfiles/SA-MP Ingame Editor")) dir_create("scriptfiles/SA-MP Ingame Editor");
  924.     #endif
  925.  
  926.     new vfilename[128];
  927.     format(vfilename,sizeof(vfilename),"SA-MP Ingame Editor/%s.vehicles.prj",Name); // Vehicles
  928.    
  929.     new ofilename[128];
  930.     format(ofilename,sizeof(ofilename),"SA-MP Ingame Editor/%s.objects.prj",Name); // Objects
  931.    
  932.     new mfilename[128];
  933.     format(mfilename,sizeof(mfilename),"SA-MP Ingame Editor/%s.main.prj",Name); // Main Stuff
  934.    
  935.     new File:vFile = fopen(vfilename,io_write);
  936.  
  937.     new str[256];
  938.  
  939.     for(new i; i < VEH_NUM; i++)
  940.     {
  941.         if(!Vehicles[playerid][i][Used]) continue;
  942.         format(str,sizeof(str),"%d %f %f %f %f %d %d %d \n",Vehicles[playerid][i][vModel],Vehicles[playerid][i][vX],Vehicles[playerid][i][vY],Vehicles[playerid][i][vZ],Vehicles[playerid][i][vA],Vehicles[playerid][i][vColor1],Vehicles[playerid][i][vColor2],Vehicles[playerid][i][vRespawnDelay]);
  943.         fwrite(vFile,str);
  944.     }
  945.    
  946.     fclose(vFile);
  947.    
  948.  
  949.     new File:oFile = fopen(ofilename,io_write);
  950.  
  951.     format(str,sizeof(str),"");
  952.  
  953.     for(new i; i < OB_NUM; i++)
  954.     {
  955.         if(!Objects[playerid][i][Used]) continue;
  956.         format(str,sizeof(str),"%d %f %f %f %f %f %f %f \n",Objects[playerid][i][oModel],Objects[playerid][i][oX],Objects[playerid][i][oY],Objects[playerid][i][oZ],Objects[playerid][i][orX],Objects[playerid][i][orY],Objects[playerid][i][orZ],Objects[playerid][i][oDrawDistance]);
  957.         fwrite(oFile,str);
  958.     }
  959.  
  960.     fclose(oFile);
  961.    
  962.     new File:mFile = fopen(mfilename,io_write);
  963.    
  964.     format(str,sizeof(str),"Spawn: %f %f %f %f  \n",Spawn[playerid][sX],Spawn[playerid][sY],Spawn[playerid][sZ],Spawn[playerid][sA]);
  965.     fwrite(mFile,str);
  966.    
  967.     fclose(mFile);
  968. }
  969.  
  970. ClearProject(playerid)
  971. {
  972.     for(new i; i < VEH_NUM; i++)
  973.     {
  974.         if(Vehicles[playerid][i][Used]) vDestroy(playerid,i);
  975.     }
  976.    
  977.     for(new i; i < OB_NUM; i++)
  978.     {
  979.         if(Objects[playerid][i][Used]) oDestroy(playerid,i);
  980.     }
  981.    
  982.     Spawn[playerid][Used] = false;
  983.     format(Project[playerid],100,"");
  984. }
  985.  
  986. LoadProject(playerid,Name[])
  987. {
  988.     new vfilename[128];
  989.     format(vfilename,sizeof(vfilename),"SA-MP Ingame Editor/%s.vehicles.prj",Name); // Vehicles
  990.  
  991.     new ofilename[128];
  992.     format(ofilename,sizeof(ofilename),"SA-MP Ingame Editor/%s.objects.prj",Name); // Objects
  993.  
  994.     new mfilename[128];
  995.     format(mfilename,sizeof(mfilename),"SA-MP Ingame Editor/%s.main.prj",Name); // Main Stuff
  996.    
  997.     if(!fexist(mfilename)) return 0;
  998.    
  999.     ClearProject(playerid);
  1000.    
  1001.     new File:vFile = fopen(vfilename,io_read);
  1002.    
  1003.     new buf[256];
  1004.     new tok[128];
  1005.    
  1006.     new vehicles=0;
  1007.    
  1008.     while(fread(vFile,buf))
  1009.     {
  1010.         if(!strlen(buf)) continue;
  1011.         new Model, Float:X, Float:Y, Float:Z, Float:A, Col1, Col2, RespawnDelay, idx;
  1012.        
  1013.         tok = strtok(buf,idx);
  1014.         Model=strval(tok);
  1015.        
  1016.         tok = strtok(buf,idx);
  1017.         X=floatstr(tok);
  1018.        
  1019.         tok = strtok(buf,idx);
  1020.         Y=floatstr(tok);
  1021.        
  1022.         tok = strtok(buf,idx);
  1023.         Z=floatstr(tok);
  1024.        
  1025.         tok = strtok(buf,idx);
  1026.         A=floatstr(tok);
  1027.        
  1028.         tok = strtok(buf,idx);
  1029.         Col1=strval(tok);
  1030.        
  1031.         tok = strtok(buf,idx);
  1032.         Col2=strval(tok);
  1033.        
  1034.         tok = strtok(buf,idx);
  1035.         RespawnDelay=strval(tok);
  1036.        
  1037.         vCreate(playerid,Model,X,Y,Z,A,Col1,Col2,RespawnDelay);
  1038.         vehicles ++;
  1039.     }
  1040.    
  1041.     fclose(vFile);
  1042.    
  1043.     new File:oFile = fopen(ofilename,io_read);
  1044.    
  1045.     new objects=0;
  1046.    
  1047.     while(fread(vFile,buf))
  1048.     {
  1049.         if(!strlen(buf)) continue;
  1050.         new Model, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ, Float:DrawDist, idx;
  1051.  
  1052.         tok = strtok(buf,idx);
  1053.         Model=strval(tok);
  1054.  
  1055.         tok = strtok(buf,idx);
  1056.         X=floatstr(tok);
  1057.  
  1058.         tok = strtok(buf,idx);
  1059.         Y=floatstr(tok);
  1060.  
  1061.         tok = strtok(buf,idx);
  1062.         Z=floatstr(tok);
  1063.  
  1064.         tok = strtok(buf,idx);
  1065.         rX=floatstr(tok);
  1066.  
  1067.         tok = strtok(buf,idx);
  1068.         rY=floatstr(tok);
  1069.  
  1070.         tok = strtok(buf,idx);
  1071.         rZ=floatstr(tok);
  1072.  
  1073.         tok = strtok(buf,idx);
  1074.         DrawDist=floatstr(tok);
  1075.  
  1076.         oCreate(playerid,Model,X,Y,Z,rX,rY,rZ,DrawDist);
  1077.         objects ++;
  1078.     }
  1079.    
  1080.     fclose(oFile);
  1081.    
  1082.     new File:mFile = fopen(mfilename,io_read);
  1083.    
  1084.     new Float:X, Float:Y, Float:Z, Float:A,idx;
  1085.    
  1086.     fread(mFile,buf);
  1087.    
  1088.     tok = strtok(buf,idx); // "Spawn:" jump over...
  1089.    
  1090.     tok = strtok(buf,idx);
  1091.     X=floatstr(tok);
  1092.  
  1093.     tok = strtok(buf,idx);
  1094.     Y=floatstr(tok);
  1095.  
  1096.     tok = strtok(buf,idx);
  1097.     Z=floatstr(tok);
  1098.  
  1099.     tok = strtok(buf,idx);
  1100.     A=floatstr(tok);
  1101.    
  1102.     Spawn[playerid][sX] = X;
  1103.     Spawn[playerid][sY] = Y;
  1104.     Spawn[playerid][sZ] = Z;
  1105.     Spawn[playerid][sA] = A;
  1106.     Spawn[playerid][Used] = true;
  1107.  
  1108.     fclose(mFile);
  1109.    
  1110.     printf("%s loaded %s [O: %d | V: %d]",PlayerName(playerid),Name,objects,vehicles);
  1111.    
  1112.     format(Project[playerid],100,Name);
  1113.    
  1114.     SetPlayerPos(playerid,X,Y,Z);
  1115.     SetPlayerFacingAngle(playerid,A);
  1116.     SetCameraBehindPlayer(playerid);
  1117.    
  1118.     return 1;
  1119. }
  1120.  
  1121. forward HUDTimer();
  1122. public HUDTimer()
  1123. {
  1124.     for(new i; i < MAX_PLAYERS; i++)
  1125.     {
  1126.         if(!IsPlayerConnected(i)) continue;
  1127.         new objects, vehicles;
  1128.         for(new x; x < OB_NUM; x++) if(Objects[i][x][Used]) objects++;
  1129.         for(new x; x < VEH_NUM; x++) if(Vehicles[i][x][Used]) vehicles++;
  1130.         new edstr[50];
  1131.        
  1132.         if(PlayerInfo[i][pMode] == pMode_Free)
  1133.         {
  1134.             format(edstr,sizeof(edstr),"-");
  1135.         }
  1136.         if(PlayerInfo[i][pMode] == pMode_MoveObject)
  1137.         {
  1138.             format(edstr,sizeof(edstr),"object id %d - aim to move it",PlayerInfo[i][pSelected]);
  1139.         }
  1140.         if(PlayerInfo[i][pMode] == pMode_MoveVehicle)
  1141.         {
  1142.             format(edstr,sizeof(edstr),"vehicle id %d - aim to move it",PlayerInfo[i][pSelected]);
  1143.         }
  1144.        
  1145.         new prostr[100];
  1146.         if(strlen(Project[i])) format(prostr,100,"\"%s\"",Project[i]);
  1147.         else strcat(prostr,"-");
  1148.        
  1149.         new str[256];
  1150.        
  1151.         format(str,sizeof(str),"~w~Project: ~b~%s ~n~_~n~~w~Stats: ~b~Vehicles: %d   Objects: %d ~n~_~n~~w~Selection: ~b~%s",prostr,vehicles,objects,edstr);
  1152.         TextDrawSetString(txtMode[i],str);
  1153.     }
  1154. }
  1155.  
  1156. stock PlayerName(playerid)
  1157. {
  1158.     new name[30];
  1159.     GetPlayerName(playerid,name,30);
  1160.     return name;
  1161. }
Advertisement
Add Comment
Please, Sign In to add comment