@Jitnaught thx
i actually founded a real advanced way for this:
{
Game.Player.Character.IsPositionFrozen = true;
Vector3 pos = World.WaypointPosition;
pos.Z = 800;
pos.Z = World.GetGroundHeight(pos);
pos.Z += 20f;
List<float> CheckHeights = new List<float>{
100.0f, 150.0f, 50.0f, 0.0f, 200.0f, 250.0f, 300.0f, 350.0f, 400.0f,
450.0f, 500.0f, 550.0f, 600.0f, 650.0f, 700.0f, 750.0f, 800.0f
};
for (int i = 0; i < CheckHeights.Count; i++)
{
Game.Player.Character.Position = pos;
Wait(100);
OutputArgument output = new OutputArgument();
if (Function.Call<bool>(Hash.GET_GROUND_Z_FOR_3D_COORD, pos.X, pos.Y, CheckHeights[i], output))
{
float z = output.GetResult<float>();
if (z != 0) pos.Z = z;
break;
}
else
{
float z = output.GetResult<float>();
if (z != 0) pos.Z = z;
}
}
Game.Player.Character.Position = pos;
Game.Player.Character.IsPositionFrozen = false;
}
else GTA.UI.Notification.Show("No waypoint found!", true);
}
};```
Got alot of help from someone