Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Created by NaS (c) 2011.
- // You can edit this GM to whatever you want and re-release it, but please give at least credits here!
- #include <a_samp>
- native MapAndreas_Init(mode);
- native MapAndreas_FindZ_For2DCoord(Float:X, Float:Y, &Float:Z);
- #undef MAX_PLAYERS
- #define MAX_PLAYERS 15
- //#define USE_FILEMANAGER_PLUGIN
- #if defined USE_FILEMANAGER_PLUGIN
- #include <FileManager>
- #endif
- #define ONLY_ADMINS true
- #define OB_NUM 350
- #define VEH_NUM 500 // PER PLAYER!!!
- #define pMode_Free 0
- #define pMode_MoveObject 1
- #define pMode_MoveVehicle 2
- #define COLOR_CMD 0xFFFFFFFF
- new aVehicleNames[212][] = // Vehicle Names - Betamaster
- {
- {"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"Sentinel"},{"Dumper"},{"Firetruck"},{"Trashmaster"},{"Stretch"},
- {"Manana"},{"Infernus"},{"Voodoo"},{"Pony"},{"Mule"},{"Cheetah"},{"Ambulance"},{"Leviathan"},{"Moonbeam"},{"Esperanto"},{"Taxi"},{"Washington"},
- {"Bobcat"},{"Mr Whoopee"},{"BF Injection"},{"Hunter"},{"Premier"},{"Enforcer"},{"Securicar"},{"Banshee"},{"Predator"},{"Bus"},{"Rhino"},{"Barracks"},
- {"Hotknife"},{"Trailer 1"},{"Previon"},{"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},{"Admiral"},{"Squalo"},
- {"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Trailer 2"},{"Turismo"},{"Speeder"},{"Reefer"},{"Tropic"},{"Flatbed"},{"Yankee"},{"Caddy"},{"Solair"},{"Berkley's RC Van"},
- {"Skimmer"},{"PCJ-600"},{"Faggio"},{"Freeway"},{"RC Baron"},{"RC Raider"},{"Glendale"},{"Oceanic"},{"Sanchez"},{"Sparrow"},{"Patriot"},
- {"Quad"},{"Coastguard"},{"Dinghy"},{"Hermes"},{"Sabre"},{"Rustler"},{"ZR-350"},{"Walton"},{"Regina"},{"Comet"},{"BMX"},{"Burrito"},{"Camper"},
- {"Marquis"},{"Baggage"},{"Dozer"},{"Maverick"},{"News Chopper"},{"Rancher"},{"FBI Rancher"},{"Virgo"},{"Greenwood"},{"Jetmax"},{"Hotring"},{"Sandking"},
- {"Blista Compact"},{"Police Maverick"},{"Boxville"},{"Benson"},{"Mesa"},{"RC Goblin"},{"Hotring Racer A"},{"Hotring Racer B"},{"Bloodring Banger"},
- {"Rancher"},{"Super GT"},{"Elegant"},{"Journey"},{"Bike"},{"Mountain Bike"},{"Beagle"},{"Cropdust"},{"Stunt"},{"Tanker"}, {"Roadtrain"},{"Nebula"},
- {"Majestic"},{"Buccaneer"},{"Shamal"},{"Hydra"},{"FCR-900"},{"NRG-500"},{"HPV1000"},{"Cement Truck"},{"Tow Truck"},{"Fortune"},{"Cadrona"},
- {"FBI Truck"},{"Willard"},{"Forklift"},{"Tractor"},{"Combine"},{"Feltzer"},{"Remington"},{"Slamvan"},{"Blade"},{"Freight"},{"Streak"},
- {"Vortex"},{"Vincent"},{"Bullet"},{"Clover"},{"Sadler"},{"Firetruck LA"},{"Hustler"},{"Intruder"},{"Primo"},{"Cargobob"},{"Tampa"},{"Sunrise"},
- {"Merit"},{"Utility"},{"Nevada"},{"Yosemite"},{"Windsor"},{"Monstertruck A"},{"Monstertruck B"},{"Uranus"},{"Jester"},{"Sultan"},{"Stratum"},
- {"Elegy"},{"Raindance"},{"RC Tiger"},{"Flash"},{"Tahoma"},{"Savanna"},{"Bandito"},{"Freight Flat"},{"Streak Carriage"},{"Kart"},{"Mower"},
- {"Duneride"},{"Sweeper"},{"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},{"Stafford"},{"BF-400"},{"Newsvan"},{"Tug"},{"Trailer 3"},
- {"Emperor"},{"Wayfarer"},{"Euros"},{"Hotdog"},{"Club"},{"Freight Carriage"},{"Trailer 3"},{"Andromada"},{"Dodo"},{"RC Cam"},{"Launch"},{"Police Car (LSPD)"},
- {"Police Car (SFPD)"},{"Police Car (LVPD)"},{"Police Ranger"},{"Picador"},{"S.W.A.T. Van"},{"Alpha"},{"Phoenix"},{"Glendale"},{"Sadler"},
- {"Luggage Trailer A"}, {"Luggage Trailer B"},{"Stair Trailer"},{"Boxville"},{"Farm Plow"},{"Utility Trailer"}
- };
- enum eOBJ
- {
- oObjectID,
- oModel,
- Float:oX,
- Float:oY,
- Float:oZ,
- Float:orX,
- Float:orY,
- Float:orZ,
- Float:oDrawDistance,
- Text3D:o3DText,
- bool:Used
- };
- new Objects[MAX_PLAYERS][OB_NUM][eOBJ];
- enum eVEH
- {
- vVehicleID,
- vModel,
- Float:vX,
- Float:vY,
- Float:vZ,
- Float:vA,
- vColor1,
- vColor2,
- vRespawnDelay,
- Text3D:v3DText,
- bool:Used
- };
- new Vehicles[MAX_PLAYERS][VEH_NUM][eVEH];
- enum eSPAWN
- {
- Float:sX,
- Float:sY,
- Float:sZ,
- Float:sA,
- bool:Used
- }
- new Spawn[MAX_PLAYERS][eSPAWN];
- new Project[MAX_PLAYERS][100];
- new Beam;
- enum ePLA
- {
- pMode,
- pSelected
- };
- new PlayerInfo[MAX_PLAYERS][ePLA];
- new Text:txtMode[MAX_PLAYERS];
- main() { }
- public OnGameModeInit()
- {
- AllowAdminTeleport(1);
- AddPlayerClass(0,1698.3142,1615.6931,10.7307,99.9117,0,0,0,0,0,0); //
- SetGameModeText("SAMP IngameEd by NaS");
- SendRconCommand("mapname Whole World");
- MapAndreas_Init(2);
- Beam = CreateObject(18656,0.0,0.0,-1000,90.0,0,0,150);
- SetTimer("oMoveTimer",100,1);
- for(new i; i < MAX_PLAYERS; i++)
- {
- txtMode[i] = TextDrawCreate(170.0,400, "_");
- TextDrawUseBox(txtMode[i], 0);
- TextDrawLetterSize(txtMode[i],0.4,0.8);
- TextDrawFont(txtMode[i], 3);
- TextDrawSetShadow(txtMode[i],0);
- TextDrawSetOutline(txtMode[i],1);
- TextDrawColor(txtMode[i],0xFFFFFFFF);
- TextDrawBackgroundColor(txtMode[i],0x000000FF);
- TextDrawBoxColor(txtMode[i],0x00000022);
- }
- SetTimer("HUDTimer",1000,1);
- return 1;
- }
- public OnGameModeExit()
- {
- DestroyObject(Beam);
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- TextDrawShowForPlayer(playerid,txtMode[playerid]);
- SetPlayerVirtualWorld(playerid,playerid+1);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- TextDrawHideForPlayer(playerid,txtMode[playerid]);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- GivePlayerWeapon(playerid,23,5000);
- PlayerInfo[playerid][pMode] = pMode_Free; // free
- PlayerInfo[playerid][pSelected] = -1; // None
- AllowPlayerTeleport(playerid,1);
- if(Spawn[playerid][Used])
- {
- SetPlayerPos(playerid,Spawn[playerid][sX],Spawn[playerid][sY],Spawn[playerid][sZ]);
- SetPlayerFacingAngle(playerid,Spawn[playerid][sA]);
- SetCameraBehindPlayer(playerid);
- }
- else SendClientMessage(playerid,COLOR_CMD,"* Don't forget to set your spawn to save the project! (/project setspawn)");
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- return 1;
- }
- public OnVehicleSpawn(vehicleid)
- {
- return 1;
- }
- public OnVehicleDeath(vehicleid, killerid)
- {
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- new cmd[128], idx;
- cmd = strtok(cmdtext,idx);
- if (strcmp("/beamtest", cmdtext, true) == 0)
- {
- new Float:p[3];
- GetPlayerPos(playerid,p[0],p[1],p[2]);
- AnimateBeam(p[0],p[1]+40,p[2]);
- return 1;
- }
- if (strcmp("/help", cmd, true) == 0)
- {
- new str[1500];
- strcat(str,"Welcome to SA-MP Ingame Editor! \n");
- strcat(str,"\n");
- strcat(str,"Commands to use with objects: \n");
- strcat(str,"\t/ocreate [ID] - creates an object \n");
- strcat(str,"\t/odel [ID] - deletes an object \n");
- strcat(str,"\t/opos [ID] - Let's you set an object's position by aiming with your weapon \n");
- strcat(str,"\t/opos [ID] [X/Y/Z] [OFFSET] - Moves an object on the X/Y/Z Axis by OFFSET \n");
- strcat(str,"\t/orot [ID] [X/Y/Z] [OFFSET] - Rotates an object on the X/Y/Z Axis by OFFSET \n");
- strcat(str,"\t/osave - If you're moving an object, you can use this to save it \n");
- strcat(str,"\n");
- strcat(str,"Commands to use with vehicles: \n");
- strcat(str,"\t/vcreate [ID] - creates a vehicle \n");
- strcat(str,"\t/vdel [ID] - deletes a vehicle \n");
- strcat(str,"\t/vpos [ID] - Let's you set a vehicles's position by aiming with your weapon \n");
- strcat(str,"\t/vpos [ID] [X/Y/Z] [OFFSET] - Moves a vehicle on the X/Y/Z Axis by OFFSET \n");
- strcat(str,"\t/vpos [ID] [A] [OFFSET] - Increases the angle of the vehicle by OFFSET \n");
- strcat(str,"\t/vsave - If you're moving a vehicle, you can use this to save it \n");
- strcat(str,"\n");
- strcat(str,"Commands to use for the whole project (all vehicles and objects): \n");
- strcat(str,"\n");
- strcat(str,"\t/project [...] \n");
- strcat(str,"\t\tsetspawn - Sets the spawn for the current project \n");
- strcat(str,"\t\tname (Name) - Sets the name for the current project \n");
- strcat(str,"\t\tsave - Saves the current project \n");
- strcat(str,"\t\tload (Name) - Loads a project WARNING: All progress on the current project will we lost! \n");
- strcat(str,"\t\tclear - Deletes all created stuff of the current project, including the spawn. \n");
- strcat(str,"\n");
- strcat(str,"Misc things: \n");
- strcat(str,"\tMark a position on the map to teleport. \n");
- strcat(str,"\t/free - Clears your selection \n");
- strcat(str,"\n");
- strcat(str,"Gamemode created by NaS. Credits: \n");
- strcat(str,"- THX to RyDeR for the aiming stuff. \n");
- strcat(str,"- THX to Kalcor for the MapAndreas plugin.");
- ShowPlayerDialog(playerid,666,DIALOG_STYLE_MSGBOX,"SA-MP Ingame Editor - Help",str,"OK","Close");
- return 1;
- }
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PROJECT
- if (strcmp("/project", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(strcmp(cmd,"save",true) == 0)
- {
- if(!strlen(Project[playerid])) return SendClientMessage(playerid,COLOR_CMD,"* Set your name for the project first! /project name");
- if(!Spawn[playerid][Used]) return SendClientMessage(playerid,COLOR_CMD,"* Set your spawn first! /project setspawn");
- SaveProjectAs(playerid,Project[playerid]);
- SendClientMessage(playerid,COLOR_CMD,"* PROJECT SAVED!");
- return 1;
- }
- if(strcmp(cmd,"load",true) == 0)
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /project load [Name]");
- if(LoadProject(playerid,cmd)) SendClientMessage(playerid,COLOR_CMD,"* Project loaded!");
- else SendClientMessage(playerid,COLOR_CMD,"* /project load [Name] - invalid name!");
- return 1;
- }
- if(strcmp(cmd,"clear",true) == 0)
- {
- ClearProject(playerid);
- SendClientMessage(playerid,COLOR_CMD,"* EVERYTHING DESTROYED!");
- return 1;
- }
- if(strcmp(cmd,"name",true) == 0)
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /project name [Name]");
- format(Project[playerid],100,cmd);
- SendClientMessage(playerid,COLOR_CMD,"* Projectname set!");
- return 1;
- }
- if(strcmp(cmd,"setspawn",true) == 0)
- {
- new Float:X,Float:Y,Float:Z,Float:A;
- GetPlayerPos(playerid,X,Y,Z);
- GetPlayerFacingAngle(playerid,A);
- Spawn[playerid][sX] = X;
- Spawn[playerid][sY] = Y;
- Spawn[playerid][sZ] = Z;
- Spawn[playerid][sA] = A;
- Spawn[playerid][Used] = true;
- SendClientMessage(playerid,COLOR_CMD,"* Spawn set to current position!");
- return 1;
- }
- SendClientMessage(playerid,COLOR_CMD,"* /project [save/load/clear/name/setspawn] (Name)");
- return 1;
- }
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJECTS
- if (strcmp("/ocreate", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /ocreate [valid ID]"); // MSGS
- new id=strval(cmd);
- if(id < 0) return SendClientMessage(playerid,COLOR_CMD,"* /ocreate [valid ID]"); // MSGS
- new Float:p[3];
- GetPlayerPos(playerid,p[0],p[1],p[2]);
- oCreate(playerid,id,p[0],p[1]+5,p[2],0.0,0.0,0.0,_);
- return 1;
- }
- if (strcmp("/opos", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- new id=strval(cmd);
- if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- cmd = strtok(cmdtext,idx);
- if(strlen(cmd) != 0)
- {
- if(cmd[0] == 'x')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- oUpdatePos(playerid,id,Objects[playerid][id][oX]+val,Objects[playerid][id][oY],Objects[playerid][id][oZ]);
- SendClientMessage(playerid,COLOR_CMD,"* Object X-Position adjusted.");
- return 1;
- }
- if(cmd[0] == 'y')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- oUpdatePos(playerid,id,Objects[playerid][id][oX],Objects[playerid][id][oY]+val,Objects[playerid][id][oZ]);
- SendClientMessage(playerid,COLOR_CMD,"* Object Y-Position adjusted.");
- return 1;
- }
- if(cmd[0] == 'z')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- oUpdatePos(playerid,id,Objects[playerid][id][oX],Objects[playerid][id][oY],Objects[playerid][id][oZ]+val);
- SendClientMessage(playerid,COLOR_CMD,"* Object Z-Position adjusted.");
- return 1;
- }
- return SendClientMessage(playerid,COLOR_CMD,"* /opos [valid ID] (x/y/z) (Offset)"); // MSGS
- }
- PlayerInfo[playerid][pMode] = pMode_MoveObject;
- PlayerInfo[playerid][pSelected] = id;
- SendClientMessage(playerid,COLOR_CMD,"* Aim to set object's position. /free to end it.");
- GivePlayerWeapon(playerid,23,1);
- return 1;
- }
- if (strcmp("/odel", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
- new id=strval(cmd);
- if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
- if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
- oDestroy(playerid,id);
- return 1;
- }
- if (strcmp("/orot", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- new id=strval(cmd);
- if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- cmd = strtok(cmdtext,idx);
- if(strlen(cmd) != 0)
- {
- if(cmd[0] == 'x')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- new Float:val = floatstr(cmd);
- oUpdateRot(playerid,id,Objects[playerid][id][orX]+val,Objects[playerid][id][orY],Objects[playerid][id][orZ]);
- SendClientMessage(playerid,COLOR_CMD,"* Object X-Rotation adjusted.");
- return 1;
- }
- if(cmd[0] == 'y')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- new Float:val = floatstr(cmd);
- oUpdateRot(playerid,id,Objects[playerid][id][orX],Objects[playerid][id][orY]+val,Objects[playerid][id][orZ]);
- SendClientMessage(playerid,COLOR_CMD,"* Object Y-Rotation adjusted.");
- return 1;
- }
- if(cmd[0] == 'z')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- new Float:val = floatstr(cmd);
- oUpdateRot(playerid,id,Objects[playerid][id][orX],Objects[playerid][id][orY],Objects[playerid][id][orZ]+val);
- SendClientMessage(playerid,COLOR_CMD,"* Object Z-Rotation adjusted.");
- return 1;
- }
- return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- }
- return SendClientMessage(playerid,COLOR_CMD,"* /orot [valid ID] [x/y/z] [Offset]"); // MSGS
- }
- if (strcmp("/odel", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
- new id=strval(cmd);
- if(id < 0 || id >= OB_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
- if(!Objects[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /odel [valid ID]"); // MSGS
- oDestroy(playerid,id);
- return 1;
- }
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VEHICLES
- if (strcmp("/vcreate", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vcreate [valid ID]"); // MSGS
- new id=strval(cmd);
- if(id < 400 || id > 611) return SendClientMessage(playerid,COLOR_CMD,"* /vcreate [valid ID]"); // MSGS
- new Float:p[3];
- GetPlayerPos(playerid,p[0],p[1],p[2]);
- new col1, col2;
- cmd = strtok(cmdtext,idx);
- if(strlen(cmd))
- {
- col1 = strval(cmd);
- } else col1 = -1;
- cmd = strtok(cmdtext,idx);
- if(strlen(cmd))
- {
- col2 = strval(cmd);
- } else col2 = -1;
- vCreate(playerid,id,p[0],p[1]+5,p[2],0.0,col1,col2,_);
- return 1;
- }
- if (strcmp("/vdel", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vdel [valid ID]"); // MSGS
- new id=strval(cmd);
- if(id < 0 || id >= VEH_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /vdel [valid ID]"); // MSGS
- if(!Vehicles[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /vdel [valid ID]"); // MSGS
- vDestroy(playerid,id);
- return 1;
- }
- if (strcmp("/vpos", cmd, true) == 0)
- {
- if(PlayerInfo[playerid][pMode] != pMode_Free) return SendClientMessage(playerid,COLOR_CMD,"* /free to end editing.");
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- new id=strval(cmd);
- if(id < 0 || id >= VEH_NUM) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- if(!Vehicles[playerid][id][Used]) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- cmd = strtok(cmdtext,idx);
- if(strlen(cmd) != 0)
- {
- if(cmd[0] == 'x')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- vUpdatePos(playerid,id,Vehicles[playerid][id][vX]+val,Vehicles[playerid][id][vY],Vehicles[playerid][id][vZ],Vehicles[playerid][id][vA]);
- SendClientMessage(playerid,COLOR_CMD,"* Vehicle X-Position adjusted.");
- return 1;
- }
- if(cmd[0] == 'y')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- vUpdatePos(playerid,id,Vehicles[playerid][id][vX],Vehicles[playerid][id][vY]+val,Vehicles[playerid][id][vZ],Vehicles[playerid][id][vA]);
- SendClientMessage(playerid,COLOR_CMD,"* Vehicle Y-Position adjusted.");
- return 1;
- }
- if(cmd[0] == 'z')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- vUpdatePos(playerid,id,Vehicles[playerid][id][vX],Vehicles[playerid][id][vY],Vehicles[playerid][id][vZ]+val,Vehicles[playerid][id][vA]);
- SendClientMessage(playerid,COLOR_CMD,"* Vehicle Z-Position adjusted.");
- return 1;
- }
- if(cmd[0] == 'a')
- {
- cmd = strtok(cmdtext,idx);
- if(!strlen(cmd)) return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- new Float:val = floatstr(cmd);
- vUpdatePos(playerid,id,Vehicles[playerid][id][vX],Vehicles[playerid][id][vY],Vehicles[playerid][id][vZ],Vehicles[playerid][id][vA]+val);
- SendClientMessage(playerid,COLOR_CMD,"* Vehicle Angle adjusted.");
- return 1;
- }
- return SendClientMessage(playerid,COLOR_CMD,"* /vpos [valid ID] (x/y/z/a) (Offset)"); // MSGS
- }
- PlayerInfo[playerid][pMode] = pMode_MoveVehicle;
- PlayerInfo[playerid][pSelected] = id;
- GivePlayerWeapon(playerid,23,1);
- SendClientMessage(playerid,COLOR_CMD,"* Aim to set vehicles's position. /free to end it.");
- return 1;
- }
- if (strcmp("/free", cmdtext, true) == 0)
- {
- PlayerInfo[playerid][pMode] = pMode_Free;
- PlayerInfo[playerid][pSelected] = -1;
- SendClientMessage(playerid,COLOR_CMD,"* Changed your mode.");
- return 1;
- }
- return 0;
- }
- public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
- {
- return 1;
- }
- public OnPlayerExitVehicle(playerid, vehicleid)
- {
- return 1;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- return 1;
- }
- public OnPlayerRequestSpawn(playerid)
- {
- #if ONLY_ADMINS == true
- if(!IsPlayerAdmin(playerid))
- {
- SendClientMessage(playerid, COLOR_CMD, "*** /rcon login to access this gamemode!");
- return 0;
- }
- #endif
- return 1;
- }
- public OnObjectMoved(objectid)
- {
- if(objectid == Beam)
- {
- SetObjectPos(Beam,0.0,0.0,-1000);
- MoveObject(Beam,0.0,0.0,-800,200); // FIX - If not, Beam sometimes moves back.. :/
- }
- return 1;
- }
- public OnPlayerPickUpPickup(playerid, pickupid)
- {
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- return 1;
- }
- public OnVehicleStreamOut(vehicleid, forplayerid)
- {
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- return 1;
- }
- public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
- {
- return 1;
- }
- AnimateBeam(Float:X,Float:Y,Float:Z)
- {
- SetObjectPos(Beam,X,Y,Z-70);
- MoveObject(Beam,X,Y,Z-5.0,150);
- }
- stock strtok(const string[], &index,token=' ')
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= token))
- {
- index++;
- }
- new offset = index;
- new result[128];
- while ((index < length) && (string[index] > token) && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
- GetAimingPos(playerid,&Float:AimX,&Float:AimY,&Float:AimZ,Float:MAX_DISTANCE=500.0)
- {
- if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
- {
- static
- Float: camVect_Z,
- Float: mapPos_Z,
- Float: pAngle,
- Float: camPos[3],
- Float: tmpPos[4]
- ;
- GetPlayerCameraFrontVector(playerid, camVect_Z, camVect_Z, camVect_Z);
- GetPlayerCameraPos(playerid, camPos[0], camPos[1], camPos[2]);
- GetPlayerFacingAngle(playerid, pAngle);
- camVect_Z += 0.08;
- for(new Float: i; i < MAX_DISTANCE; i += 0.25)
- {
- camPos[0] += i * floatsin(-pAngle, degrees);
- camPos[1] += i * floatcos(-pAngle, degrees);
- camPos[2] += i * camVect_Z;
- MapAndreas_FindZ_For2DCoord(camPos[0], camPos[1], mapPos_Z);
- if((tmpPos[3] < camPos[2] < mapPos_Z || camPos[2] < mapPos_Z < tmpPos[2]))
- {
- if(i < 5.0) return false;
- static
- Float: pPos[3];
- GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
- camPos[0] = ((camPos[0] + tmpPos[0]) / 2.0);
- camPos[1] = ((camPos[1] + tmpPos[1]) / 2.0);
- camPos[2] = ((camPos[2] + tmpPos[2]) / 2.0);
- AimX = camPos[0];
- AimY = camPos[1];
- AimZ = mapPos_Z;
- return true;
- }
- tmpPos[0] = camPos[0];
- tmpPos[1] = camPos[1];
- tmpPos[2] = camPos[2];
- tmpPos[3] = mapPos_Z;
- camPos[0] -= i * floatsin(-pAngle, degrees);
- camPos[1] -= i * floatcos(-pAngle, degrees);
- camPos[2] -= i * camVect_Z;
- }
- }
- return false;
- }
- forward oMoveTimer();
- public oMoveTimer()
- {
- for(new i; i < MAX_PLAYERS; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- //if(PlayerInfo[i][pMode] != pMode_MoveObject) continue;
- if(PlayerInfo[i][pMode] == pMode_MoveObject)
- {
- if(PlayerInfo[i][pSelected] == -1) continue;
- if(GetPlayerWeapon(i) != 23) continue;
- new k, lr, ud;
- GetPlayerKeys(i,k,ud,lr);
- if(k & 128) { } else continue;
- new Float:X,Float:Y,Float:Z;
- if(GetAimingPos(i,X,Y,Z))
- {
- new sel=PlayerInfo[i][pSelected];
- oUpdatePos(i,sel,X,Y,Z);
- }
- }
- if(PlayerInfo[i][pMode] == pMode_MoveVehicle)
- {
- if(PlayerInfo[i][pSelected] == -1) continue;
- if(GetPlayerWeapon(i) != 23) continue;
- new k, lr, ud;
- GetPlayerKeys(i,k,ud,lr);
- if(k & 128) { } else continue;
- new Float:X,Float:Y,Float:Z;
- if(GetAimingPos(i,X,Y,Z))
- {
- new sel=PlayerInfo[i][pSelected];
- new Float:A;
- GetPlayerFacingAngle(i,A);
- vUpdatePos(i,sel,X,Y,Z+1.0,A+90.0);
- }
- }
- }
- }
- oCreate(playerid,Model,Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ,Float:DrawDist=0.0)
- {
- new found=-1;
- for(new x; x < OB_NUM; x++) if(!Objects[playerid][x][Used]) { found=x; break; }
- Objects[playerid][found][oObjectID] = CreatePlayerObject(playerid,Model,X,Y,Z,rX,rY,rZ,DrawDist);
- new str[128];
- format(str,sizeof(str),"[OBJECT]\nModel: %d \n ID: %d",Model,found);
- Objects[playerid][found][o3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
- // (text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS)
- Objects[playerid][found][oModel] = Model;
- Objects[playerid][found][Used]=true;
- Objects[playerid][found][oX] = X;
- Objects[playerid][found][oY] = Y;
- Objects[playerid][found][oZ] = Z;
- Objects[playerid][found][orX]= rX;
- Objects[playerid][found][orY]= rY;
- Objects[playerid][found][orZ]= rZ;
- Objects[playerid][found][oDrawDistance] = DrawDist;
- AnimateBeam(X,Y,Z);
- }
- oDestroy(playerid,ID)
- {
- if(!Objects[playerid][ID][Used]) return 0;
- Objects[playerid][ID][Used] = false;
- DestroyPlayerObject(playerid,Objects[playerid][ID][oObjectID]);
- Delete3DTextLabel(Objects[playerid][ID][o3DText]);
- return 1;
- }
- oUpdatePos(playerid,ID,Float:X,Float:Y,Float:Z)
- {
- if(!Objects[playerid][ID][Used]) return 0;
- Objects[playerid][ID][oX] = X;
- Objects[playerid][ID][oY] = Y;
- Objects[playerid][ID][oZ] = Z;
- SetPlayerObjectPos(playerid,Objects[playerid][ID][oObjectID],X,Y,Z);
- Delete3DTextLabel(Objects[playerid][ID][o3DText]);
- new str[128];
- format(str,sizeof(str),"[OBJECT]\nModel: %d \n ID: %d",Objects[playerid][ID][oModel],ID);
- Objects[playerid][ID][o3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
- return 1;
- }
- oUpdateRot(playerid,ID,Float:rX,Float:rY,Float:rZ)
- {
- if(!Objects[playerid][ID][Used]) return 0;
- Objects[playerid][ID][orX] = rX;
- Objects[playerid][ID][orY] = rY;
- Objects[playerid][ID][orZ] = rZ;
- SetPlayerObjectRot(playerid,Objects[playerid][ID][oObjectID],rX,rY,rZ);
- return 1;
- }
- vCreate(playerid,Model,Float:X,Float:Y,Float:Z,Float:A,Color1=-1,Color2=-1,Respawn=120000)
- {
- new found=-1;
- for(new x; x < VEH_NUM; x++) if(!Vehicles[playerid][x][Used]) { found=x; break; }
- Vehicles[playerid][found][vVehicleID] = CreateVehicle(Model,X,Y,Z,A,Color1,Color2,Respawn);
- SetVehicleVirtualWorld(Vehicles[playerid][found][vVehicleID],playerid+1);
- new str[128];
- format(str,sizeof(str),"[VEHICLE]\nModel: %d - %s \n ID: %d",Model,aVehicleNames[Model-400],found);
- Vehicles[playerid][found][v3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
- // (text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS)
- Vehicles[playerid][found][vModel] = Model;
- Vehicles[playerid][found][Used]=true;
- Vehicles[playerid][found][vX] = X;
- Vehicles[playerid][found][vY] = Y;
- Vehicles[playerid][found][vZ] = Z;
- Vehicles[playerid][found][vA] = A;
- Vehicles[playerid][found][vColor1] = Color1;
- Vehicles[playerid][found][vColor2] = Color2;
- Vehicles[playerid][found][vRespawnDelay] = Respawn;
- AnimateBeam(X,Y,Z);
- }
- vDestroy(playerid,ID)
- {
- if(!Vehicles[playerid][ID][Used]) return 0;
- Vehicles[playerid][ID][Used] = false;
- DestroyVehicle(Vehicles[playerid][ID][vVehicleID]);
- Delete3DTextLabel(Vehicles[playerid][ID][v3DText]);
- return 1;
- }
- vUpdatePos(playerid,ID,Float:X,Float:Y,Float:Z,Float:A)
- {
- if(!Vehicles[playerid][ID][Used]) return 0;
- Vehicles[playerid][ID][vX] = X;
- Vehicles[playerid][ID][vY] = Y;
- Vehicles[playerid][ID][vZ] = Z;
- Vehicles[playerid][ID][vA] = A;
- SetVehiclePos(Vehicles[playerid][ID][vVehicleID],X,Y,Z);
- SetVehicleZAngle(Vehicles[playerid][ID][vVehicleID],A);
- Delete3DTextLabel(Vehicles[playerid][ID][v3DText]);
- new str[128];
- format(str,sizeof(str),"[VEHICLE]\nModel: %d - %s \n ID: %d",Vehicles[playerid][ID][vModel],aVehicleNames[Vehicles[playerid][ID][vModel]-400],ID);
- Vehicles[playerid][ID][v3DText] = Create3DTextLabel(str,0xFFFFFFFF,X,Y,Z,100.0,playerid+1,0);
- return 1;
- }
- SaveProjectAs(playerid,Name[])
- {
- #if defined USE_FILEMANAGER_PLUGIN
- if(!dir_exists("scriptfiles/SA-MP Ingame Editor")) dir_create("scriptfiles/SA-MP Ingame Editor");
- #endif
- new vfilename[128];
- format(vfilename,sizeof(vfilename),"SA-MP Ingame Editor/%s.vehicles.prj",Name); // Vehicles
- new ofilename[128];
- format(ofilename,sizeof(ofilename),"SA-MP Ingame Editor/%s.objects.prj",Name); // Objects
- new mfilename[128];
- format(mfilename,sizeof(mfilename),"SA-MP Ingame Editor/%s.main.prj",Name); // Main Stuff
- new File:vFile = fopen(vfilename,io_write);
- new str[256];
- for(new i; i < VEH_NUM; i++)
- {
- if(!Vehicles[playerid][i][Used]) continue;
- 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]);
- fwrite(vFile,str);
- }
- fclose(vFile);
- new File:oFile = fopen(ofilename,io_write);
- format(str,sizeof(str),"");
- for(new i; i < OB_NUM; i++)
- {
- if(!Objects[playerid][i][Used]) continue;
- 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]);
- fwrite(oFile,str);
- }
- fclose(oFile);
- new File:mFile = fopen(mfilename,io_write);
- format(str,sizeof(str),"Spawn: %f %f %f %f \n",Spawn[playerid][sX],Spawn[playerid][sY],Spawn[playerid][sZ],Spawn[playerid][sA]);
- fwrite(mFile,str);
- fclose(mFile);
- }
- ClearProject(playerid)
- {
- for(new i; i < VEH_NUM; i++)
- {
- if(Vehicles[playerid][i][Used]) vDestroy(playerid,i);
- }
- for(new i; i < OB_NUM; i++)
- {
- if(Objects[playerid][i][Used]) oDestroy(playerid,i);
- }
- Spawn[playerid][Used] = false;
- format(Project[playerid],100,"");
- }
- LoadProject(playerid,Name[])
- {
- new vfilename[128];
- format(vfilename,sizeof(vfilename),"SA-MP Ingame Editor/%s.vehicles.prj",Name); // Vehicles
- new ofilename[128];
- format(ofilename,sizeof(ofilename),"SA-MP Ingame Editor/%s.objects.prj",Name); // Objects
- new mfilename[128];
- format(mfilename,sizeof(mfilename),"SA-MP Ingame Editor/%s.main.prj",Name); // Main Stuff
- if(!fexist(mfilename)) return 0;
- ClearProject(playerid);
- new File:vFile = fopen(vfilename,io_read);
- new buf[256];
- new tok[128];
- new vehicles=0;
- while(fread(vFile,buf))
- {
- if(!strlen(buf)) continue;
- new Model, Float:X, Float:Y, Float:Z, Float:A, Col1, Col2, RespawnDelay, idx;
- tok = strtok(buf,idx);
- Model=strval(tok);
- tok = strtok(buf,idx);
- X=floatstr(tok);
- tok = strtok(buf,idx);
- Y=floatstr(tok);
- tok = strtok(buf,idx);
- Z=floatstr(tok);
- tok = strtok(buf,idx);
- A=floatstr(tok);
- tok = strtok(buf,idx);
- Col1=strval(tok);
- tok = strtok(buf,idx);
- Col2=strval(tok);
- tok = strtok(buf,idx);
- RespawnDelay=strval(tok);
- vCreate(playerid,Model,X,Y,Z,A,Col1,Col2,RespawnDelay);
- vehicles ++;
- }
- fclose(vFile);
- new File:oFile = fopen(ofilename,io_read);
- new objects=0;
- while(fread(vFile,buf))
- {
- if(!strlen(buf)) continue;
- new Model, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ, Float:DrawDist, idx;
- tok = strtok(buf,idx);
- Model=strval(tok);
- tok = strtok(buf,idx);
- X=floatstr(tok);
- tok = strtok(buf,idx);
- Y=floatstr(tok);
- tok = strtok(buf,idx);
- Z=floatstr(tok);
- tok = strtok(buf,idx);
- rX=floatstr(tok);
- tok = strtok(buf,idx);
- rY=floatstr(tok);
- tok = strtok(buf,idx);
- rZ=floatstr(tok);
- tok = strtok(buf,idx);
- DrawDist=floatstr(tok);
- oCreate(playerid,Model,X,Y,Z,rX,rY,rZ,DrawDist);
- objects ++;
- }
- fclose(oFile);
- new File:mFile = fopen(mfilename,io_read);
- new Float:X, Float:Y, Float:Z, Float:A,idx;
- fread(mFile,buf);
- tok = strtok(buf,idx); // "Spawn:" jump over...
- tok = strtok(buf,idx);
- X=floatstr(tok);
- tok = strtok(buf,idx);
- Y=floatstr(tok);
- tok = strtok(buf,idx);
- Z=floatstr(tok);
- tok = strtok(buf,idx);
- A=floatstr(tok);
- Spawn[playerid][sX] = X;
- Spawn[playerid][sY] = Y;
- Spawn[playerid][sZ] = Z;
- Spawn[playerid][sA] = A;
- Spawn[playerid][Used] = true;
- fclose(mFile);
- printf("%s loaded %s [O: %d | V: %d]",PlayerName(playerid),Name,objects,vehicles);
- format(Project[playerid],100,Name);
- SetPlayerPos(playerid,X,Y,Z);
- SetPlayerFacingAngle(playerid,A);
- SetCameraBehindPlayer(playerid);
- return 1;
- }
- forward HUDTimer();
- public HUDTimer()
- {
- for(new i; i < MAX_PLAYERS; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- new objects, vehicles;
- for(new x; x < OB_NUM; x++) if(Objects[i][x][Used]) objects++;
- for(new x; x < VEH_NUM; x++) if(Vehicles[i][x][Used]) vehicles++;
- new edstr[50];
- if(PlayerInfo[i][pMode] == pMode_Free)
- {
- format(edstr,sizeof(edstr),"-");
- }
- if(PlayerInfo[i][pMode] == pMode_MoveObject)
- {
- format(edstr,sizeof(edstr),"object id %d - aim to move it",PlayerInfo[i][pSelected]);
- }
- if(PlayerInfo[i][pMode] == pMode_MoveVehicle)
- {
- format(edstr,sizeof(edstr),"vehicle id %d - aim to move it",PlayerInfo[i][pSelected]);
- }
- new prostr[100];
- if(strlen(Project[i])) format(prostr,100,"\"%s\"",Project[i]);
- else strcat(prostr,"-");
- new str[256];
- 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);
- TextDrawSetString(txtMode[i],str);
- }
- }
- stock PlayerName(playerid)
- {
- new name[30];
- GetPlayerName(playerid,name,30);
- return name;
- }
Advertisement
Add Comment
Please, Sign In to add comment