Fix jittering Player ESP (#2421)
This commit is contained in:
parent
af287d2593
commit
e56ee4e2b8
@ -939,7 +939,6 @@ namespace big
|
|||||||
struct esp
|
struct esp
|
||||||
{
|
{
|
||||||
bool enabled = true;
|
bool enabled = true;
|
||||||
bool hide_self = true;
|
|
||||||
float global_render_distance[2] = {0.f, 600.f};
|
float global_render_distance[2] = {0.f, 600.f};
|
||||||
float tracer_render_distance[2] = {200.f, 600.f};
|
float tracer_render_distance[2] = {200.f, 600.f};
|
||||||
float box_render_distance[2] = {0.f, 150.f};
|
float box_render_distance[2] = {0.f, 150.f};
|
||||||
@ -960,7 +959,7 @@ namespace big
|
|||||||
ImU32 default_color = 4285713522;
|
ImU32 default_color = 4285713522;
|
||||||
ImU32 friend_color = 4293244509;
|
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{};
|
} esp{};
|
||||||
|
|
||||||
struct session_browser
|
struct session_browser
|
||||||
|
@ -10,6 +10,7 @@ class CGameScriptHandlerNetComponent;
|
|||||||
class CDoorBreakEvent;
|
class CDoorBreakEvent;
|
||||||
class GenericPool;
|
class GenericPool;
|
||||||
enum eVehicleGadgetType : uint32_t;
|
enum eVehicleGadgetType : uint32_t;
|
||||||
|
enum class PedBones : uint16_t;
|
||||||
|
|
||||||
namespace rage
|
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 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 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
|
ACKCODE_NONE
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class PedBones : uint32_t
|
enum class PedBones : uint16_t
|
||||||
{
|
{
|
||||||
SKEL_ROOT = 0x0,
|
SKEL_ROOT = 0x0,
|
||||||
SKEL_Pelvis = 0x2E28,
|
SKEL_Pelvis = 0x2E28,
|
||||||
|
@ -358,6 +358,8 @@ namespace big
|
|||||||
PVOID m_remove_player_from_sender_list_caller_2;
|
PVOID m_remove_player_from_sender_list_caller_2;
|
||||||
|
|
||||||
PVOID m_game_skeleton_update;
|
PVOID m_game_skeleton_update;
|
||||||
|
|
||||||
|
functions::get_ped_pone m_get_ped_pone;
|
||||||
};
|
};
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
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>();
|
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
|
>(); // 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);
|
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)
|
inline Vector3 raycast_coords(Vector3 coord, Vector3 rot, Entity ignore)
|
||||||
{
|
{
|
||||||
BOOL hit;
|
BOOL hit;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "services/players/player_service.hpp"
|
#include "services/players/player_service.hpp"
|
||||||
#include "util/math.hpp"
|
#include "util/math.hpp"
|
||||||
#include "util/misc.hpp"
|
#include "util/misc.hpp"
|
||||||
|
#include "gta/enums.hpp"
|
||||||
|
|
||||||
namespace big
|
namespace big
|
||||||
{
|
{
|
||||||
@ -20,12 +21,12 @@ namespace big
|
|||||||
|
|
||||||
void esp::draw_player(const player_ptr& plyr, ImDrawList* const draw_list)
|
void esp::draw_player(const player_ptr& plyr, ImDrawList* const draw_list)
|
||||||
{
|
{
|
||||||
if (!plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation)
|
if (!plyr->is_valid() || !plyr->get_ped() || !plyr->get_ped()->m_navigation || !plyr->get_ped()->m_model_info)
|
||||||
return;
|
|
||||||
if (g.esp.hide_self && plyr->is_valid() && plyr->id() == g_player_service->get_self()->id())
|
|
||||||
return;
|
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;
|
float screen_x, screen_y;
|
||||||
|
|
||||||
@ -180,12 +181,9 @@ namespace big
|
|||||||
|
|
||||||
if (const auto draw_list = ImGui::GetBackgroundDrawList(); draw_list)
|
if (const auto draw_list = ImGui::GetBackgroundDrawList(); draw_list)
|
||||||
{
|
{
|
||||||
draw_player(g_player_service->get_self(), draw_list);
|
g_player_service->iterate([draw_list](const player_entry& entry) {
|
||||||
|
draw_player(entry.second, draw_list);
|
||||||
for (const auto& [_, plyr] : g_player_service->players())
|
});
|
||||||
{
|
|
||||||
draw_player(plyr, draw_list);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,8 +8,6 @@ namespace big
|
|||||||
|
|
||||||
if (g.esp.enabled)
|
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::Text("SETTINGS_ESP_GLOBAL_RENDER_DISTANCE"_T.data());
|
||||||
ImGui::SliderFloat2("###Global Render Distance", g.esp.global_render_distance, 0.f, 1500.f);
|
ImGui::SliderFloat2("###Global Render Distance", g.esp.global_render_distance, 0.f, 1500.f);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user