ESP + GLOW + MENU
This commit is contained in:
@@ -127,7 +127,7 @@
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<LanguageStandard_C>stdclatest</LanguageStandard_C>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
#include <GameClient/CEntityCache/CEntityCache.hpp>
|
||||
#include <GameClient/CL_Players.hpp>
|
||||
#include <GameClient/CL_VisibleCheck.hpp>
|
||||
#include <GameClient/CL_Bones.hpp>
|
||||
#include <CS2/SDK/Math/Math.hpp>
|
||||
#include <CS2/SDK/Types/CEntityData.hpp>
|
||||
#include <CS2/SDK/Types/Color.hpp>
|
||||
|
||||
static CVisual g_CVisual{};
|
||||
|
||||
@@ -114,7 +118,125 @@ auto CVisual::OnRenderPlayerEsp( CCSPlayerController* pCCSPlayerController , con
|
||||
else if ( Settings::Visual::PlayerBoxType == EVisualBoxType_t::OUTLINE_COAL_BOX )
|
||||
GetRenderStackSystem()->DrawOutlineCoalBox( min , max , PlayerColor );
|
||||
}
|
||||
|
||||
if ( Settings::Visual::BoneESP )
|
||||
{
|
||||
auto ShouldDrawBone = false;
|
||||
|
||||
if ( Settings::Visual::BoneESPTeam && !IsEnemy )
|
||||
ShouldDrawBone = true;
|
||||
|
||||
if ( Settings::Visual::BoneESPEnemy && IsEnemy )
|
||||
ShouldDrawBone = true;
|
||||
|
||||
if ( Settings::Visual::OnlyVisible && !bVisible )
|
||||
ShouldDrawBone = false;
|
||||
|
||||
if ( ShouldDrawBone )
|
||||
{
|
||||
DrawBoneESP( pC_CSPlayerPawn , bVisible , pCCSPlayerController->m_iTeamNum() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto CVisual::ApplyGlow( C_CSPlayerPawn* pC_CSPlayerPawn , const bool bVisible , const int iTeamNum ) -> void
|
||||
{
|
||||
if ( !pC_CSPlayerPawn || !pC_CSPlayerPawn->IsPlayerPawn() )
|
||||
return;
|
||||
|
||||
auto IsEnemy = false;
|
||||
C_CSPlayerPawn* pLocalPawn = nullptr;
|
||||
|
||||
if ( auto* pLocalPlayerController = GetCL_Players()->GetLocalPlayerController(); pLocalPlayerController )
|
||||
{
|
||||
pLocalPawn = pLocalPlayerController->m_hPawn().Get<C_CSPlayerPawn>();
|
||||
if ( pLocalPawn )
|
||||
{
|
||||
IsEnemy = iTeamNum != pLocalPawn->m_iTeamNum();
|
||||
|
||||
// Local player'dan glow'u kaldır
|
||||
if ( pC_CSPlayerPawn == pLocalPawn )
|
||||
{
|
||||
auto& Glow = pC_CSPlayerPawn->m_Glow();
|
||||
Glow.m_bGlowing() = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto DrawGlow = false;
|
||||
|
||||
if ( Settings::Visual::GlowTeam && !IsEnemy )
|
||||
DrawGlow = true;
|
||||
|
||||
if ( Settings::Visual::GlowEnemy && IsEnemy )
|
||||
DrawGlow = true;
|
||||
|
||||
if ( Settings::Visual::OnlyVisible && !bVisible )
|
||||
DrawGlow = false;
|
||||
|
||||
if ( !DrawGlow )
|
||||
{
|
||||
// Glow'u kapat
|
||||
auto& Glow = pC_CSPlayerPawn->m_Glow();
|
||||
Glow.m_bGlowing() = false;
|
||||
return;
|
||||
}
|
||||
|
||||
auto GlowColor = Color( 255 , 255 , 255 , 255 );
|
||||
|
||||
if ( iTeamNum == TEAM_TT )
|
||||
{
|
||||
const auto& ColorVec = Settings::Colors::Visual::GlowTT;
|
||||
if ( bVisible )
|
||||
{
|
||||
const auto& VisibleColorVec = Settings::Colors::Visual::GlowTT_Visible;
|
||||
GlowColor = Color(
|
||||
static_cast<BYTE>( VisibleColorVec.x * 255.f ) ,
|
||||
static_cast<BYTE>( VisibleColorVec.y * 255.f ) ,
|
||||
static_cast<BYTE>( VisibleColorVec.z * 255.f ) ,
|
||||
static_cast<BYTE>( VisibleColorVec.w * 255.f )
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
GlowColor = Color(
|
||||
static_cast<BYTE>( ColorVec.x * 255.f ) ,
|
||||
static_cast<BYTE>( ColorVec.y * 255.f ) ,
|
||||
static_cast<BYTE>( ColorVec.z * 255.f ) ,
|
||||
static_cast<BYTE>( ColorVec.w * 255.f )
|
||||
);
|
||||
}
|
||||
}
|
||||
else if ( iTeamNum == TEAM_CT )
|
||||
{
|
||||
const auto& ColorVec = Settings::Colors::Visual::GlowCT;
|
||||
if ( bVisible )
|
||||
{
|
||||
const auto& VisibleColorVec = Settings::Colors::Visual::GlowCT_Visible;
|
||||
GlowColor = Color(
|
||||
static_cast<BYTE>( VisibleColorVec.x * 255.f ) ,
|
||||
static_cast<BYTE>( VisibleColorVec.y * 255.f ) ,
|
||||
static_cast<BYTE>( VisibleColorVec.z * 255.f ) ,
|
||||
static_cast<BYTE>( VisibleColorVec.w * 255.f )
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
GlowColor = Color(
|
||||
static_cast<BYTE>( ColorVec.x * 255.f ) ,
|
||||
static_cast<BYTE>( ColorVec.y * 255.f ) ,
|
||||
static_cast<BYTE>( ColorVec.z * 255.f ) ,
|
||||
static_cast<BYTE>( ColorVec.w * 255.f )
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Glow'u uygula
|
||||
auto& Glow = pC_CSPlayerPawn->m_Glow();
|
||||
Glow.m_bGlowing() = true;
|
||||
Glow.m_glowColorOverride() = GlowColor;
|
||||
}
|
||||
|
||||
auto CVisual::OnClientOutput() -> void
|
||||
@@ -148,6 +270,15 @@ auto CVisual::OnCreateMove() -> void
|
||||
auto* pCCSPlayerController = reinterpret_cast<CCSPlayerController*>( pEntity );
|
||||
|
||||
CachedEntity.m_bVisible = GetCL_VisibleCheck()->IsPlayerControllerVisible( pCCSPlayerController );
|
||||
|
||||
if ( Settings::Visual::Glow && pCCSPlayerController->m_bPawnIsAlive() )
|
||||
{
|
||||
auto* pC_CSPlayerPawn = pCCSPlayerController->m_hPawn().Get<C_CSPlayerPawn>();
|
||||
if ( pC_CSPlayerPawn && pC_CSPlayerPawn->IsPlayerPawn() )
|
||||
{
|
||||
ApplyGlow( pC_CSPlayerPawn , CachedEntity.m_bVisible , pCCSPlayerController->m_iTeamNum() );
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -192,6 +323,84 @@ auto CVisual::CalculateBoundingBoxes() -> void
|
||||
}
|
||||
}
|
||||
|
||||
auto CVisual::DrawBoneESP( C_CSPlayerPawn* pC_CSPlayerPawn , const bool bVisible , const int iTeamNum ) -> void
|
||||
{
|
||||
if ( !pC_CSPlayerPawn || !pC_CSPlayerPawn->IsPlayerPawn() )
|
||||
return;
|
||||
|
||||
auto BoneColor = ImColor( 255 , 255 , 255 );
|
||||
|
||||
if ( iTeamNum == TEAM_TT )
|
||||
{
|
||||
BoneColor = Settings::Colors::Visual::BoneESPTT;
|
||||
|
||||
if ( bVisible )
|
||||
BoneColor = Settings::Colors::Visual::BoneESPTT_Visible;
|
||||
}
|
||||
else if ( iTeamNum == TEAM_CT )
|
||||
{
|
||||
BoneColor = Settings::Colors::Visual::BoneESPCT;
|
||||
|
||||
if ( bVisible )
|
||||
BoneColor = Settings::Colors::Visual::BoneESPCT_Visible;
|
||||
}
|
||||
|
||||
// Bone connections structure for CS2 skeleton
|
||||
struct BoneConnection_t
|
||||
{
|
||||
const char* szFrom;
|
||||
const char* szTo;
|
||||
};
|
||||
|
||||
static const BoneConnection_t BoneConnections[] =
|
||||
{
|
||||
// Head to spine chain
|
||||
{ "head_0" , "neck_0" },
|
||||
{ "neck_0" , "spine_1" },
|
||||
{ "spine_1" , "spine_2" },
|
||||
{ "spine_2" , "spine_3" },
|
||||
{ "spine_3" , "pelvis" },
|
||||
|
||||
// Left arm
|
||||
{ "neck_0" , "clavicle_l" },
|
||||
{ "clavicle_l" , "arm_upper_l" },
|
||||
{ "arm_upper_l" , "arm_lower_l" },
|
||||
{ "arm_lower_l" , "hand_l" },
|
||||
|
||||
// Right arm
|
||||
{ "neck_0" , "clavicle_r" },
|
||||
{ "clavicle_r" , "arm_upper_r" },
|
||||
{ "arm_upper_r" , "arm_lower_r" },
|
||||
{ "arm_lower_r" , "hand_r" },
|
||||
|
||||
// Left leg
|
||||
{ "pelvis" , "leg_upper_l" },
|
||||
{ "leg_upper_l" , "leg_lower_l" },
|
||||
{ "leg_lower_l" , "ankle_l" },
|
||||
|
||||
// Right leg
|
||||
{ "pelvis" , "leg_upper_r" },
|
||||
{ "leg_upper_r" , "leg_lower_r" },
|
||||
{ "leg_lower_r" , "ankle_r" },
|
||||
};
|
||||
|
||||
for ( const auto& Connection : BoneConnections )
|
||||
{
|
||||
const Vector3 FromBone = GetCL_Bones()->GetBonePositionByName( pC_CSPlayerPawn , Connection.szFrom );
|
||||
const Vector3 ToBone = GetCL_Bones()->GetBonePositionByName( pC_CSPlayerPawn , Connection.szTo );
|
||||
|
||||
if ( FromBone.IsZero() || ToBone.IsZero() )
|
||||
continue;
|
||||
|
||||
ImVec2 FromScreen , ToScreen;
|
||||
|
||||
if ( Math::WorldToScreen( FromBone , FromScreen ) && Math::WorldToScreen( ToBone , ToScreen ) )
|
||||
{
|
||||
GetRenderStackSystem()->DrawLine( FromScreen , ToScreen , BoneColor , 1.5f );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto GetVisual() -> CVisual*
|
||||
{
|
||||
return &g_CVisual;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <CS2/SDK/Math/Rect_t.hpp>
|
||||
|
||||
class CCSPlayerController;
|
||||
class C_CSPlayerPawn;
|
||||
|
||||
class IVisual
|
||||
{
|
||||
@@ -32,6 +33,8 @@ private:
|
||||
};
|
||||
|
||||
auto OnRenderPlayerEsp( CCSPlayerController* pCCSPlayerController , const Rect_t& bBox , const bool bVisible ) -> void;
|
||||
auto DrawBoneESP( C_CSPlayerPawn* pC_CSPlayerPawn , const bool bVisible , const int iTeamNum ) -> void;
|
||||
auto ApplyGlow( C_CSPlayerPawn* pC_CSPlayerPawn , const bool bVisible , const int iTeamNum ) -> void;
|
||||
|
||||
public:
|
||||
auto CalculateBoundingBoxes() -> void;
|
||||
|
||||
@@ -31,6 +31,24 @@ auto CAndromedaMenu::OnRenderMenu() -> void
|
||||
};
|
||||
|
||||
RenderComboBox( XorStr( "PlayerBox Type" ) , XorStr( "##Visual.PlayerBoxType" ) , Settings::Visual::PlayerBoxType , PlayerBoxTypeItems , IM_ARRAYSIZE( PlayerBoxTypeItems ) );
|
||||
|
||||
RenderCheckBox( XorStr( "Bone ESP" ) , XorStr( "##Visual.BoneESP" ) , Settings::Visual::BoneESP );
|
||||
if ( Settings::Visual::BoneESP )
|
||||
{
|
||||
ImGui::Indent();
|
||||
RenderCheckBox( XorStr( " Bone ESP Team" ) , XorStr( "##Visual.BoneESPTeam" ) , Settings::Visual::BoneESPTeam );
|
||||
RenderCheckBox( XorStr( " Bone ESP Enemy" ) , XorStr( "##Visual.BoneESPEnemy" ) , Settings::Visual::BoneESPEnemy );
|
||||
ImGui::Unindent();
|
||||
}
|
||||
|
||||
RenderCheckBox( XorStr( "Glow" ) , XorStr( "##Visual.Glow" ) , Settings::Visual::Glow );
|
||||
if ( Settings::Visual::Glow )
|
||||
{
|
||||
ImGui::Indent();
|
||||
RenderCheckBox( XorStr( " Glow Team" ) , XorStr( "##Visual.GlowTeam" ) , Settings::Visual::GlowTeam );
|
||||
RenderCheckBox( XorStr( " Glow Enemy" ) , XorStr( "##Visual.GlowEnemy" ) , Settings::Visual::GlowEnemy );
|
||||
ImGui::Unindent();
|
||||
}
|
||||
}
|
||||
|
||||
if ( ImGui::CollapsingHeader( XorStr( "Colors" ) ) )
|
||||
@@ -39,11 +57,21 @@ auto CAndromedaMenu::OnRenderMenu() -> void
|
||||
RenderColorEdit( XorStr( "Player Box TT Visible" ) , XorStr( "##Colors.Visual.PlayerBoxTT_Visible" ) , &Settings::Colors::Visual::PlayerBoxTT_Visible.x );
|
||||
RenderColorEdit( XorStr( "Player Box CT" ) , XorStr( "##Colors.Visual.PlayerBoxCT" ) , &Settings::Colors::Visual::PlayerBoxCT.x );
|
||||
RenderColorEdit( XorStr( "Player Box CT Visible" ) , XorStr( "##Colors.Visual.PlayerBoxCT_Visible" ) , &Settings::Colors::Visual::PlayerBoxCT_Visible.x );
|
||||
|
||||
RenderColorEdit( XorStr( "Bone ESP TT" ) , XorStr( "##Colors.Visual.BoneESPTT" ) , &Settings::Colors::Visual::BoneESPTT.x );
|
||||
RenderColorEdit( XorStr( "Bone ESP TT Visible" ) , XorStr( "##Colors.Visual.BoneESPTT_Visible" ) , &Settings::Colors::Visual::BoneESPTT_Visible.x );
|
||||
RenderColorEdit( XorStr( "Bone ESP CT" ) , XorStr( "##Colors.Visual.BoneESPCT" ) , &Settings::Colors::Visual::BoneESPCT.x );
|
||||
RenderColorEdit( XorStr( "Bone ESP CT Visible" ) , XorStr( "##Colors.Visual.BoneESPCT_Visible" ) , &Settings::Colors::Visual::BoneESPCT_Visible.x );
|
||||
|
||||
RenderColorEdit( XorStr( "Glow TT" ) , XorStr( "##Colors.Visual.GlowTT" ) , &Settings::Colors::Visual::GlowTT.x );
|
||||
RenderColorEdit( XorStr( "Glow TT Visible" ) , XorStr( "##Colors.Visual.GlowTT_Visible" ) , &Settings::Colors::Visual::GlowTT_Visible.x );
|
||||
RenderColorEdit( XorStr( "Glow CT" ) , XorStr( "##Colors.Visual.GlowCT" ) , &Settings::Colors::Visual::GlowCT.x );
|
||||
RenderColorEdit( XorStr( "Glow CT Visible" ) , XorStr( "##Colors.Visual.GlowCT_Visible" ) , &Settings::Colors::Visual::GlowCT_Visible.x );
|
||||
}
|
||||
|
||||
if ( ImGui::CollapsingHeader( XorStr( "Menu" ) ) )
|
||||
{
|
||||
RenderSliderInt( XorStr( "Menu Alpha" ) , XorStr( "##Menu.MenuAlpha" ) , Settings::Menu::MenuAlpha , 0 , 255 );
|
||||
RenderSliderInt( XorStr( "Menu Alpha" ) , XorStr( "##Menu.MenuAlpha" ) , Settings::Menu::MenuAlpha , 100 , 255 );
|
||||
|
||||
const char* MenuStyleItems[] =
|
||||
{
|
||||
|
||||
@@ -12,6 +12,12 @@ namespace Settings
|
||||
inline auto Enemy = true;
|
||||
inline auto OnlyVisible = false;
|
||||
inline auto PlayerBox = true;
|
||||
inline auto BoneESP = true;
|
||||
inline auto BoneESPTeam = true;
|
||||
inline auto BoneESPEnemy = true;
|
||||
inline auto Glow = true;
|
||||
inline auto GlowTeam = true;
|
||||
inline auto GlowEnemy = true;
|
||||
|
||||
inline auto PlayerBoxType = 3;
|
||||
}
|
||||
@@ -28,6 +34,14 @@ namespace Settings
|
||||
inline ImVec4 PlayerBoxTT_Visible = { 0 , 1.f , 0.f , 1.f };
|
||||
inline ImVec4 PlayerBoxCT = { 65.f / 255.f , 200 / 255.f , 255.f / 255.f , 1.f };
|
||||
inline ImVec4 PlayerBoxCT_Visible = { 0 , 1.f , 0.f , 1.f };
|
||||
inline ImVec4 BoneESPTT = { 255.f / 255.f , 75.f / 255.f , 75.f / 255.f , 1.f };
|
||||
inline ImVec4 BoneESPTT_Visible = { 0 , 1.f , 0.f , 1.f };
|
||||
inline ImVec4 BoneESPCT = { 65.f / 255.f , 200 / 255.f , 255.f / 255.f , 1.f };
|
||||
inline ImVec4 BoneESPCT_Visible = { 0 , 1.f , 0.f , 1.f };
|
||||
inline ImVec4 GlowTT = { 255.f / 255.f , 75.f / 255.f , 75.f / 255.f , 1.f };
|
||||
inline ImVec4 GlowTT_Visible = { 0 , 1.f , 0.f , 1.f };
|
||||
inline ImVec4 GlowCT = { 65.f / 255.f , 200 / 255.f , 255.f / 255.f , 1.f };
|
||||
inline ImVec4 GlowCT_Visible = { 0 , 1.f , 0.f , 1.f };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user