[C#] Not the same result using GetOffsetPosition and the native call


#1

Hi,

I wanted to teleport my character a bit forward by pressing a key and I noticed these two functions doesn’t return the same result:

LocalPlayer.Character.Position = LocalPlayer.Character.GetOffsetPosition(new Vector3(0.0f, 1.5f, 0.0f));
LocalPlayer.Character.Position = Function.Call<Vector3>(Hash.GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS, LocalPlayer.Character, 0.0f, 1.5f, 0.0f);

When using GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS, the input vector is Vector3(right/left, front/back, up/down).
But using Entity.GetOffsetPosition, it seems to be Vector3(right/left, up/down, front/back).

Y and Z are switched.

Why does it behave like this?

I use the latest FiveM version (I had an update tonight) and also tried the latest CitizenFX version.


#3

In your Function.Call, you are not calling the ped properly. You need to do Character.Handle, which gets the actual ped ID.

I tested the following code, and as you can see from the screenshot, everything is exactly the same. (Didn’t realize it was the .Handle until after)

Vector3 A = Game.PlayerPed.GetOffsetPosition(new Vector3(0f, 1.5f, 0f));
Vector3 B = API.GetOffsetFromEntityInWorldCoords(Game.PlayerPed.Handle, 0f, 1.5f, 0f);
Vector3 C = Function.Call<Vector3>(Hash.GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS, Game.PlayerPed.Handle, 0.0f, 1.5f, 0.0f);

Vector3 A2 = Game.Player.Character.GetOffsetPosition(new Vector3(0f, 1.5f, 0f));
Vector3 B2 = API.GetOffsetFromEntityInWorldCoords(Game.Player.Character.Handle, 0f, 1.5f, 0f);
Vector3 C2 = Function.Call<Vector3>(Hash.GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS, Game.Player.Character.Handle, 0.0f, 1.5f, 0.0f);

(#: is current position)

PS. Why not just use the API.?


#4

But the Function.Call returned the correct value.
The wrong value was returned by LocalPlayer.Character.GetOffsetPosition(new Vector3(0.0f, 1.5f, 0.0f));

I wanted to see if there was a difference with between this result and the one from the native function, that’s why I called it using Function.Call (apart from calling GetOffsetPosition oc).

The odd thing is, I’m unable to reproduce the problem using the same code as before, I will see if it happens again…

I’m used to ScriptHookVDotNet2, so I didn’t think about using API :wink:

Thanks a lot for your testing btw, I will reopen a thread if I encounter this issue again and I will test it using these 4 different ways.