Jump to content
    1. Welcome to GTAForums!

    1. GTANet.com

    1. GTA Online

      1. The Criminal Enterprises
      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

*DO NOT* SHARE MEDIA OR LINKS TO LEAKED COPYRIGHTED MATERIAL. Discussion is allowed.

[C#|.NET] GET_SAFE_COORD_FOR_PED, how?


GeorgeZhang
 Share

Recommended Posts

GET_SAFE_COORD_FOR_PED(float x, float y, float z, BOOL onGround, Vector3 *outPosition, int flags)

How to use this Native and what it does exactly? ScriptHookVDotNet doesn't allow me to fill in a Vector3 in the parameters, so is there a way to use this in C#?

Link to comment
Share on other sites

Thanks for replying but you wouldn't convert a whole project from C# to C++ just to make one native work, right? This still needs to be solved.

Link to comment
Share on other sites

try this

        Vector3 GET_SAFE_COORD_FOR_PED(Vector3 pos, bool onGround, int flags)        {            OutputArgument Out = new OutputArgument();            if (Function.Call<bool>(Hash.GET_SAFE_COORD_FOR_PED, pos.X, pos.Y, pos.Z, onGround, Out, flags))            {                return Out.GetResult<Vector3>();            }            else            {                return Vector3.Zero;            }        }
Link to comment
Share on other sites

the native looks for a safe/available position for a ped around the parameter coordinates X Y Z. It returns true if it was able to find a position, and it assigns the coordinates for said position to the "Vector3 *outPosition" pointer-parameter. So you declare a new Vector3 variable for the safe spot and call the function with a pointer to that variable as the "outPosition" parameter, and - if it returns true - the Vector3 you passed it will be filled with the safe-spot coordinates

Link to comment
Share on other sites

the native looks for a safe/available position for a ped around the parameter coordinates X Y Z. It returns true if it was able to find a position, and it assigns the coordinates for said position to the "Vector3 *outPosition" pointer-parameter. So you declare a new Vector3 variable for the safe spot and call the function with a pointer to that variable as the "outPosition" parameter, and - if it returns true - the Vector3 you passed it will be filled with the safe-spot coordinates

Thanks for the descriptions.The problem is, you can't pass a Vector3 in the parameters. I haven't tested it but Lestium's method seems promising, so I will try.
Link to comment
Share on other sites

 

the native looks for a safe/available position for a ped around the parameter coordinates X Y Z. It returns true if it was able to find a position, and it assigns the coordinates for said position to the "Vector3 *outPosition" pointer-parameter. So you declare a new Vector3 variable for the safe spot and call the function with a pointer to that variable as the "outPosition" parameter, and - if it returns true - the Vector3 you passed it will be filled with the safe-spot coordinates

Thanks for the descriptions.The problem is, you can't pass a Vector3 in the parameters. I haven't tested it but Lestium's method seems promising, so I will try.

 

You dont pass it a Vector3; you pass it a pointer to a Vector3 (so have an "&" symbol in front of the parameter). This is why it is able to change the value of "outPosition" when it only returns a boolean (rather than returning a Vector3, as one might expect). Here's a C++ example I've used where a ped (called "ped") parachutes to a safe spot near his target (called "target")

Vector3 targetPosition = ENTITY::GET_ENTITY_COORDS(target);Vector3 safeSpot;if (PATHFIND::GET_SAFE_COORD_FOR_PED(targetPosition.x, targetPosition.y, targetPosition.z, true, &safeSpot, 0))     AI::TASK_PARACHUTE_TO_TARGET(ped, safeSpot.x, safeSpot.y, safeSpot.z);

the way it works is kind of similar to how the PED::GET_PED_NEARBY_PEDS() native works -- which returns an integer that is the only the total number of nearby peds, but it actually records the IDs of the nearby peds within a pointer array that you have to pass it as one of its parameters

Edited by whorse
Link to comment
Share on other sites

 

 

the native looks for a safe/available position for a ped around the parameter coordinates X Y Z. It returns true if it was able to find a position, and it assigns the coordinates for said position to the "Vector3 *outPosition" pointer-parameter. So you declare a new Vector3 variable for the safe spot and call the function with a pointer to that variable as the "outPosition" parameter, and - if it returns true - the Vector3 you passed it will be filled with the safe-spot coordinates

Thanks for the descriptions.The problem is, you can't pass a Vector3 in the parameters. I haven't tested it but Lestium's method seems promising, so I will try.

 

You dont pass it a Vector3; you pass it a pointer to a Vector3 (so have an "&" symbol in front of the parameter). This is why it is able to change the value of "outPosition" when it only returns a boolean (rather than returning a Vector3, as one might expect). Here's a C++ example I've used where a ped (called "ped") parachutes to a safe spot near his target (called "target")

Vector3 targetPosition = ENTITY::GET_ENTITY_COORDS(target);Vector3 safeSpot;if (PATHFIND::GET_SAFE_COORD_FOR_PED(targetPosition.x, targetPosition.y, targetPosition.z, true, &safeSpot, 0))     AI::TASK_PARACHUTE_TO_TARGET(ped, safeSpot.x, safeSpot.y, safeSpot.z);

the way it works is kind of similar to how the PED::GET_PED_NEARBY_PEDS() native works -- which returns an integer that is the only the total number of nearby peds, but it actually records the IDs of the nearby peds within a pointer array that you have to pass it as one of its parameters

 

I know what you mean with pointers, but .net just won't accept it, it displays errors no matter I pass Vector3/&Vector3, saying it's invalid arguments. I know it works in C++, and I know it returns whether a coords is found or not.

Link to comment
Share on other sites

 

try this

        Vector3 GET_SAFE_COORD_FOR_PED(Vector3 pos, bool onGround, int flags)        {            OutputArgument Out = new OutputArgument();            if (Function.Call<bool>(Hash.GET_SAFE_COORD_FOR_PED, pos.X, pos.Y, pos.Z, onGround, Out, flags))            {                return Out.GetResult<Vector3>();            }            else            {                return Vector3.Zero;            }        }

Thanks, I guess it worked!

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.