Fix jittering Player ESP (#2421)
This commit is contained in:
parent
af287d2593
commit
e56ee4e2b8
@ -939,7 +939,6 @@ namespace big
|
||||
struct esp
|
||||
{
|
||||
bool enabled = true;
|
||||
bool hide_self = true;
|
||||
float global_render_distance[2] = {0.f, 600.f};
|
||||
float tracer_render_distance[2] = {200.f, 600.f};
|
||||
float box_render_distance[2] = {0.f, 150.f};
|
||||
@ -960,7 +959,7 @@ namespace big
|
||||
ImU32 default_color = 4285713522;
|
||||
ImU32 friend_color = 4293244509;
|
||||
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(esp, enabled, hide_self, global_render_distance, tracer_render_distance, box_render_distance, tracer, tracer_draw_position, box, health, armor, god, distance, name, change_esp_color_from_dist, scale_health_from_dist, scale_armor_from_dist, distance_threshold, enemy_color, enemy_near_color, default_color, friend_color)
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(esp, enabled, global_render_distance, tracer_render_distance, box_render_distance, tracer, tracer_draw_position, box, health, armor, god, distance, name, change_esp_color_from_dist, scale_health_from_dist, scale_armor_from_dist, distance_threshold, enemy_color, enemy_near_color, default_color, friend_color)
|
||||
} esp{};
|
||||
|
||||
struct session_browser
|
||||
|
@ -10,6 +10,7 @@ class CGameScriptHandlerNetComponent;
|
||||
class CDoorBreakEvent;
|
||||
class GenericPool;
|
||||
enum eVehicleGadgetType : uint32_t;
|
||||
enum class PedBones : uint16_t;
|
||||
|
||||
namespace rage
|
||||
{
|
||||
@ -196,4 +197,6 @@ namespace big::functions
|
||||
using decal_manager_remove = void(*)(PVOID manager, rage::fwEntity*, DWORD a3, DWORD64 a4, DWORD ignore_bitset);
|
||||
|
||||
using remove_player_from_sender_list = bool(*)(void* list, uint64_t* rockstar_id);
|
||||
|
||||
using get_ped_pone = bool(*)(CPed* ped_ptr, rage::fvector4& output, PedBones bone);
|
||||
}
|
||||
|
@ -1105,7 +1105,7 @@ enum class eAckCode : uint32_t
|
||||
ACKCODE_NONE
|
||||
};
|
||||
|
||||
enum class PedBones : uint32_t
|
||||
enum class PedBones : uint16_t
|
||||
{
|
||||
SKEL_ROOT = 0x0,
|
||||
SKEL_Pelvis = 0x2E28,
|
||||
|
@ -358,6 +358,8 @@ namespace big
|
||||
PVOID m_remove_player_from_sender_list_caller_2;
|
||||
|
||||
PVOID m_game_skeleton_update;
|
||||
|
||||
functions::get_ped_pone m_get_ped_pone;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
||||
|
@ -1757,6 +1757,15 @@ namespace big
|
||||
{
|
||||
g_pointers->m_gta.m_game_skeleton_update = ptr.as<PVOID>();
|
||||
}
|
||||
},
|
||||
// Get Ped Bone
|
||||
{
|
||||
"GPB",
|
||||
"48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 60 48 8B 01 41 8B E8 48 8B F2",
|
||||
[](memory::handle ptr)
|
||||
{
|
||||
g_pointers->m_gta.m_get_ped_pone = ptr.as<functions::get_ped_pone>();
|
||||
}
|
||||
}
|
||||
>(); // don't leave a trailing comma at the end
|
||||
|
||||
|
@ -38,6 +38,14 @@ namespace big::math
|
||||
return (float)distance_between_vectors(plyr_coords, cam_coords);
|
||||
}
|
||||
|
||||
inline float calculate_distance_from_game_cam(rage::fvector4 player_position)
|
||||
{
|
||||
const Vector3 plyr_coords = {player_position.x, player_position.y, player_position.z};
|
||||
const Vector3 cam_coords = g_pointers->m_gta.m_get_gameplay_cam_coords();
|
||||
|
||||
return (float)distance_between_vectors(plyr_coords, cam_coords);
|
||||
}
|
||||
|
||||
inline Vector3 raycast_coords(Vector3 coord, Vector3 rot, Entity ignore)
|
||||
{
|
||||
BOOL hit;
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "services/players/player_service.hpp"
|
||||
#include "util/math.hpp"
|
||||
#include "util/misc.hpp"
|
||||
#include "gta/enums.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -20,12 +21,12 @@ namespace big
|
||||
|
||||
void esp::draw_player(const player_ptr& plyr, ImDrawList* const draw_list)
|
||||
{
|
||||
if (!plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation)
|
||||
return;
|
||||
if (g.esp.hide_self && plyr->is_valid() && plyr->id() == g_player_service->get_self()->id())
|
||||
if (!plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation || !plyr->get_ped()->m_model_info)
|
||||
return;
|
||||
|
||||
auto& player_pos = *plyr->get_ped()->m_navigation->get_position();
|
||||
rage::fvector4 player_pos;
|
||||
if (!g_pointers->m_gta.m_get_ped_pone(plyr->get_ped(), player_pos, PedBones::SKEL_Pelvis))
|
||||
return;
|
||||
|
||||
float screen_x, screen_y;
|
||||
|
||||
@ -180,12 +181,9 @@ namespace big
|
||||
|
||||
if (const auto draw_list = ImGui::GetBackgroundDrawList(); draw_list)
|
||||
{
|
||||
draw_player(g_player_service->get_self(), draw_list);
|
||||
|
||||
for (const auto& [_, plyr] : g_player_service->players())
|
||||
{
|
||||
draw_player(plyr, draw_list);
|
||||
}
|
||||
g_player_service->iterate([draw_list](const player_entry& entry) {
|
||||
draw_player(entry.second, draw_list);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -8,8 +8,6 @@ namespace big
|
||||
|
||||
if (g.esp.enabled)
|
||||
{
|
||||
ImGui::Checkbox("SETTINGS_ESP_HIDE_SELF"_T.data(), &g.esp.hide_self);
|
||||
|
||||
ImGui::Text("SETTINGS_ESP_GLOBAL_RENDER_DISTANCE"_T.data());
|
||||
ImGui::SliderFloat2("###Global Render Distance", g.esp.global_render_distance, 0.f, 1500.f);
|
||||
|
||||
|
Reference in New Issue
Block a user