Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. Los Santos Drug Wars
      2. Updates
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Red Dead Online

      1. Blood Money
      2. Frontier Pursuits
      3. Find Lobbies & Outlaws
      4. Help & Support
    3. Crews

    1. Grand Theft Auto Series

      1. Bugs*
      2. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Classic GTA SA
      2. Guides & Strategies
      3. Help & Support
    6. GTA Vice City

      1. Classic GTA VC
      2. Guides & Strategies
      3. Help & Support
    7. GTA III

      1. Classic GTA III
      2. Guides & Strategies
      3. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

    3. Suggestions

Happy Holidays from the GTANet team!

[C#] Spawn objects without knowing the exact coords


ins1de
 Share

Recommended Posts

I'm trying to spawn objects without knowing the real coordinates. I want to have 3 objects standing next to each other (the heading/rotation is not a problem).
At the moment I'm using this piece of code :

Prop barrier_center = World.CreateProp("prop_mp_barrier_02b", RoadCenter, true, false);Vector3 RoadLeft = barrier_center.GetOffsetInWorldCoords(new Vector3(-3F, 0, 0));Prop barrier_left = World.CreateProp("prop_mp_barrier_02b", RoadLeft, true, false);Vector3 RoadRight = barrier_center.GetOffsetInWorldCoords(new Vector3(+3F, 0, 0));Prop barrier_right = World.CreateProp("prop_mp_barrier_02b", RoadRight, true, false);

Basically, I thought GetOffsetInWorldCoords would help me the get the left and right next position, but the problem is that GetOffsetInWorldCoords returns the real game coordinates.

The code below won't work on every road because the Vector3 coordinates will always be different.

barrier_center.GetOffsetInWorldCoords(new Vector3(-3F, 0, 0));

Click on the spoiler to see a better illustration of my problem

 

 


38RUlwO.jpg

 

 

 

Now my question is, how can I get those coordinates so that these objects always spawn like in the case n°1?

Edited by ins1de
Link to comment
Share on other sites

IDK, but cant you, you know, edit the x value of the middle barrier yourself to avoid these problems?

Link to comment
Share on other sites

Sounds like what you want is an offset to the right or left of the object. One way of doing that is using LeftVector, RightVector and multiplying it by the distance you want between objects. Then add it to the position of origin object. There's also a forwardVector, should you need it.

float magnitude = 3.0f; // distance you want between the objectsVector3 RoadLeft = barrier_center.Position + barrier_center.LeftVector * magnitude;Vector3 RoadRight = barrier_center.Position + barrier_center.RightVector * magnitude;
Edited by ech3lon
Link to comment
Share on other sites

IDK, but cant you, you know, edit the x value of the middle barrier yourself to avoid these problems?

 

I've already tried and it's always random. I mean, the x coord seem to change on every east/west direction road.

 

 

Sounds like what you want is an offset to the right or left of the object. One way of doing that is using LeftVector, RightVector and multiplying it by the distance you want between objects. Then add it to the position of origin object. There's also a forwardVector, should you need it.

float magnitude = 3.0f; // distance you want between the objectsVector3 RoadLeft = barrier_center.Position + barrier_center.LeftVector * magnitude;Vector3 RoadRight = barrier_center.Position + barrier_center.RightVector * magnitude;

 

Thanks for bringing the correct vocabulary because for some reason yesterday, I wasn't able to remember that word lol.

Yes this is what I was looking for, but the problem is that NetScriptHook doesn't have the LeftVector enum. (It never got implented, very strange : https://github.com/crosire/scripthookvdotnet/blob/71248ac2ce4a3a1b36835b36c4c815e5582bc66e/source/scripting/Entity.cs)

 

Anyways, I've tried with the RightVector itself, and I'm facing the same problem like in the first post. Looks like RightVector is based on the in-game real coords again.

 

Another way to solve this problem would be to indeed create a work-around such as "testing" the road. For example, I could spawn two barriers and then create an invisible object/ped and make it move forward, if the ped/object collides with two objects in his forward direction, then it would mean we're in the case n°2 (as seen in the picture above). I'll see what I can do.

 

Thanks for your replies.

Link to comment
Share on other sites

First spawn the middle prop. Then use the position from that to place the second to its right vector positive. Then the third to its right vector negative.

 Prop myprop = World.CreateProp(model, player.Position + (player.ForwardVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop2 = World.CreateProp(model, myprop.Position + (myprop.RightVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop3 = World.CreateProp(model, myprop.Position + (myprop.RightVector * -5), new Vector3(0.0f, 0.0f, player.Heading), true, true);                
Link to comment
Share on other sites

 

First spawn the middle prop. Then use the position from that to place the second to its right vector positive. Then the third to its right vector negative.

 Prop myprop = World.CreateProp(model, player.Position + (player.ForwardVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop2 = World.CreateProp(model, myprop.Position + (myprop.RightVector * 5), new Vector3(0.0f, 0.0f, player.Heading), true, true); Prop myprop3 = World.CreateProp(model, myprop.Position + (myprop.RightVector * -5), new Vector3(0.0f, 0.0f, player.Heading), true, true);                

Thanks man. I totally forgot myprop.RightVector * -5 was possible.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.