Barofioso Posted August 27, 2018 Posted August 27, 2018 (edited) Hello Someone asks me, how to create a car at right side next to player. So i just wrote this little tutorial about. I hope you enjoy this little thing, which was did in two hours, and explained with a horrible english ;D Spend time: 2 hours testing the spawn of vehicles and coding + doc 3 hours making this tutorial with translation 0.5 hours thinking about, why i am doing this ... (i didn't found an answer -.-) First we have to know some things: How is the World working How is the Position working How is the Rotation working How can i spawn a car (Code snippet) How is the World working? => It is a north axis oriented map. If you open the full map ingame, top is north, bottom is south. It is every time a constant and will not change How is the Position working? => It is a Vector based information. It has three types. X => left - | + right Y => top - | + bottom Z => down - | + up The "+" and "-" are the operators here in our coordination system, which we have to use later. How is the Rotation working? => It is a Vector based information. Same here we have three types, but the number is always positive. So we can just use the Z variable. X => back | front (Not tested) Y => left | right (Not tested) Z => ground Then we will get four options: N => 0° E => 270° S => 180° W => 90° We have to use the radius to know how the player is rotated away from north. Just think about your shool days. back then you had geometry and raius was a topic of it. Ok, we got our information. Let us code that stuff Small version Spoiler //Get Data Vector3 carPos = client.Position;//current player pos Vector3 cr = client.Rotation;//current player rot //Get config float distance = 2f; //hardcode //Check player rotation if (cr.Z >= 0 && cr.Z < 90) { //left side carPos.Y += distance; } else { if(cr.Z >= 90 && cr.Z < 180) { //back side carPos.X -= distance; } else { if (cr.Z >= 180 && cr.Z < 270) { //right side carPos.Y -= distance; } else { if(cr.Z >= 270 && !(cr.Z > 360)) { //front side carPos.X += distance; } else { //No way! 359.9 + 0.1 => 0 NAPI.Util.ConsoleOutput("create car -> ??? more than 360 degrees rotation?"); } } } } //finally create the car and enjoy Vehicle xvehicle = NAPI.Vehicle.CreateVehicle(VehicleHash.Adder, carPos, cr, 1, 1, "34", 255, false, true, client.Dimension); Doc version Spoiler /* * Orientation NorthAxis * * X => left - | + right * Y => back - | + front * Z => down - | + up */ Vector3 carPos = client.Position; /* * Orientation NorthAxis (everytime positive float number) * * N => 0° * E => 270° * S => 180° * W => 90° */ Vector3 cr = client.Rotation; /* * if you want to create an admin command, * which allows you to create every time on your right side a car, * no matter how the player is rotated on the north axis (face looks on x) * * You have following to know * * if the player looks left West * - rotation = 90 * - position * -> X - = front * -> X + = back * -> Y - = left * -> Y + = right * * if the player looks right East * - rotation = 270 * - position * -> X - = back * -> X + = front * -> Y - = right * -> Y + = left * * if the player looks back South * - rotation = 180 * - position * -> X - = right * -> X + = left * -> Y - = front * -> Y + = back * * if the player looks front North * - rotation = 0 * - position * -> X - = left * -> X + = right * -> Y - = back * -> Y + = front * * And you have to use a variable to declare the distance between car and your player :D * */ float distance = 2f;//use it with a config system or something like that, where you can set this easy - hardcode ;D //If the player rotation is bigger/or 0 and smaller than 90 if (cr.Z >= 0 && cr.Z < 90) { //left side /* * position * * X => 0 * Y => Y + distance * * rotation = same like player * */ carPos.Y += distance; } else { //if the player rotation is bigger/or 90 and smaller than 180 if(cr.Z >= 90 && cr.Z < 180) { //back side /* * position * * X => X - distance * Y => 0 * * rotation = same like player * */ carPos.X -= distance; } else { //if the player rotation is bigger/or 90 and smaller than 270 if (cr.Z >= 180 && cr.Z < 270) { //right side /* * position * * X => 0 * Y => Y - distance * * rotation = same like player * */ carPos.Y -= distance; } else { //if the player rotation is bigger/or 270 and not bigger than 360 if(cr.Z >= 270 && !(cr.Z > 360)) { //front side /* * position * * X => X + distance * Y => 0 * * rotation = same like player * */ carPos.X += distance; } else { //No way! 359.9 + 0.1 => 0 NAPI.Util.ConsoleOutput("create car -> ??? more than 360 degrees rotation?"); } } } } //finally create the car and enjoy Vehicle xvehicle = NAPI.Vehicle.CreateVehicle(VehicleHash.Adder, carPos, cr, 1, 1, "34", 255, false, true, client.Dimension); Edited August 27, 2018 by Barofioso 5
hexisgod Posted February 14, 2019 Posted February 14, 2019 (edited) In JS you can use it var offsetPosition = function(x, y, rot, distance) { return { x: x + Math.sin(-rot * Math.PI / 180) * distance, y: y + Math.cos(-rot * Math.PI / 180) * distance, }; }; var { x, y } = offsetPosition(200.0, 200.0, 180, 1.2); return new cord X|Y Edited February 14, 2019 by hexisgod
DampflokTV Posted February 15, 2019 Posted February 15, 2019 In what direction is the Distance? Can you somehow set it to 5 meters in front or back or left or right side of the player?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now