fix misc issues with melee aim

predict shield charge ending in movement prediction
misc changes and fixes
This commit is contained in:
rei-2
2026-05-11 22:34:12 -04:00
parent ef959fa11a
commit 94cc9a8e87
10 changed files with 114 additions and 86 deletions
+31 -27
View File
@@ -100,13 +100,16 @@ void CAimbot::Store(CBaseEntity* pEntity, size_t iSize)
if (!pEntity->IsPlayer())
return;
if (auto pResource = H::Entities.GetResource())
{
float flDuration = Vars::Visuals::Prediction::PlayerDrawDuration.Value ? Vars::Visuals::Prediction::PlayerDrawDuration.Value : 5.f;
m_tPath = { { pEntity->m_vecOrigin() }, I::GlobalVars->curtime + flDuration, Color_t(), Vars::Visuals::Prediction::RealPath.Value };
m_iSize = iSize;
m_iPlayer = pResource->m_iUserID(pEntity->entindex());
}
auto pResource = H::Entities.GetResource();
if (!pResource)
return;
int iUserID = pResource->m_iUserID(pEntity->entindex());
float flDuration = Vars::Visuals::Prediction::PlayerDrawDuration.Value ? Vars::Visuals::Prediction::PlayerDrawDuration.Value : 5.f;
m_mRealPaths[iUserID] = {
{ { pEntity->m_vecOrigin() }, I::GlobalVars->curtime + flDuration, Color_t(), Vars::Visuals::Prediction::RealPath.Value },
iSize
};
}
void CAimbot::Store(bool bFrameStageNotify)
@@ -122,26 +125,27 @@ void CAimbot::Store(bool bFrameStageNotify)
iStaticTickcout = I::GlobalVars->tickcount;
}
if (!m_tPath.m_flTime)
return;
else if (m_tPath.m_vPath.size() >= m_iSize || m_tPath.m_flTime < I::GlobalVars->curtime)
for (auto& [iUserID, tPath] : m_mRealPaths)
{
if (m_tPath.m_tColor = Vars::Colors::RealPath.Value, m_tPath.m_bZBuffer = true; m_tPath.m_tColor.a)
G::PathStorage.push_back(m_tPath);
if (m_tPath.m_tColor = Vars::Colors::RealPathIgnoreZ.Value, m_tPath.m_bZBuffer = false; m_tPath.m_tColor.a)
G::PathStorage.push_back(m_tPath);
m_tPath = {};
return;
if (tPath.m_tPath.m_vPath.size() >= tPath.m_iSize || tPath.m_tPath.m_flTime < I::GlobalVars->curtime)
{
if (tPath.m_tPath.m_tColor = Vars::Colors::RealPath.Value, tPath.m_tPath.m_bZBuffer = true; tPath.m_tPath.m_tColor.a)
G::PathStorage.push_back(tPath.m_tPath);
if (tPath.m_tPath.m_tColor = Vars::Colors::RealPathIgnoreZ.Value, tPath.m_tPath.m_bZBuffer = false; tPath.m_tPath.m_tColor.a)
G::PathStorage.push_back(tPath.m_tPath);
m_mRealPaths.erase(iUserID);
continue;
}
int iIndex = I::EngineClient->GetPlayerForUserID(iUserID);
if (bFrameStageNotify ? iIndex == I::EngineClient->GetLocalPlayer() : iIndex != I::EngineClient->GetLocalPlayer())
continue;
auto pPlayer = I::ClientEntityList->GetClientEntity(iIndex)->As<CTFPlayer>();
if (!pPlayer)
continue;
for (int i = 0; i < iLag; i++)
tPath.m_tPath.m_vPath.push_back(pPlayer->m_vecOrigin());
}
int iIndex = I::EngineClient->GetPlayerForUserID(m_iPlayer);
if (bFrameStageNotify ? iIndex == I::EngineClient->GetLocalPlayer() : iIndex != I::EngineClient->GetLocalPlayer())
return;
auto pPlayer = I::ClientEntityList->GetClientEntity(iIndex)->As<CTFPlayer>();
if (!pPlayer)
return;
for (int i = 0; i < iLag; i++)
m_tPath.m_vPath.push_back(pPlayer->m_vecOrigin());
}
+7 -4
View File
@@ -1,6 +1,12 @@
#pragma once
#include "../../SDK/SDK.h"
struct RealPath_t
{
DrawPath_t m_tPath = {};
size_t m_iSize = 0;
};
class CAimbot
{
private:
@@ -8,9 +14,6 @@ private:
void RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
void RunAimbot(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, bool bSecondaryType = false);
size_t m_iSize = 0;
int m_iPlayer = 0;
public:
void Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
void Draw(CTFPlayer* pLocal);
@@ -20,7 +23,7 @@ public:
bool m_bRan = false;
bool m_bRunningSecondary = false;
DrawPath_t m_tPath = {};
std::unordered_map<int, RealPath_t> m_mRealPaths = {};
};
ADD_FEATURE(CAimbot, Aimbot);
@@ -114,7 +114,7 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
int CAimbotMelee::GetSwingTime(CTFWeaponBase* pWeapon, bool bVar)
static inline int GetSwingTime(CTFWeaponBase* pWeapon, bool bVar = true)
{
return pWeapon->GetWeaponID() == TF_WEAPON_KNIFE ? 0
: bVar ? Vars::Aimbot::Melee::SwingTicks.Value
@@ -139,9 +139,9 @@ void CAimbotMelee::UpdateInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCm
std::unordered_map<int, MoveStorage> mMoveStorage;
F::MoveSim.Initialize(pLocal, mMoveStorage[pLocal->entindex()], false, !m_iDoubletapTicks);
F::MoveSim.Initialize(pLocal, mMoveStorage[pLocal->entindex()], false, !m_iDoubletapTicks, false);
for (auto& tTarget : vTargets)
F::MoveSim.Initialize(tTarget.m_pEntity, mMoveStorage[tTarget.m_pEntity->entindex()], false);
F::MoveSim.Initialize(tTarget.m_pEntity, mMoveStorage[tTarget.m_pEntity->entindex()], false, true, false);
int iMax = std::max(m_iSimulatedTicks, m_iDoubletapTicks), iTicks = iMax; bool bSwung = false;
Vec3 vLocalOrigin = mMoveStorage[pLocal->entindex()].m_MoveData.m_vecAbsOrigin;
@@ -157,9 +157,9 @@ void CAimbotMelee::UpdateInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCm
if (pLocal->InCond(TF_COND_SHIELD_CHARGE))
{ // demo charge fix for swing pred
tMoveStorage.m_MoveData.m_flMaxSpeed = tMoveStorage.m_MoveData.m_flClientMaxSpeed = SDK::MaxSpeed(pLocal, false, true);
pLocal->m_flMaxspeed() = tMoveStorage.m_MoveData.m_flMaxSpeed;
pLocal->RemoveCond(TF_COND_SHIELD_CHARGE);
tMoveStorage.m_MoveData.m_flMaxSpeed = tMoveStorage.m_MoveData.m_flClientMaxSpeed = SDK::MaxSpeed(pLocal);
pLocal->m_flMaxspeed() = tMoveStorage.m_MoveData.m_flMaxSpeed;
}
}
if (m_iDoubletapTicks && Vars::Doubletap::AntiWarp.Value && pLocal->m_hGroundEntity())
@@ -331,28 +331,25 @@ int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pW
std::vector<TickRecord*> vRecords = {};
if (F::Backtrack.GetRecords(tTarget.m_pEntity, vRecords))
{
if (!vRecords.empty())
std::vector<int> vTimeMods = {};
switch (Vars::Aimbot::Melee::SwingValidateMode.Value)
{
for (auto& tRecord : vSimRecords)
vRecords.push_back(&tRecord);
switch (Vars::Aimbot::Melee::SwingValidateMode.Value)
{
case Vars::Aimbot::Melee::SwingValidateModeEnum::Both:
if (m_iSimulatedTicks != m_iSwingTicks)
{
vRecords = F::Backtrack.GetValidRecords(vRecords, pLocal, true, -TICKS_TO_TIME(m_iSimulatedTicks));
vRecords = F::Backtrack.GetValidRecords(vRecords, pLocal, true, -TICKS_TO_TIME(m_iSwingTicks));
break;
}
[[fallthrough]];
case Vars::Aimbot::Melee::SwingValidateModeEnum::Swing:
vRecords = F::Backtrack.GetValidRecords(vRecords, pLocal, true, -TICKS_TO_TIME(m_iSwingTicks));
break;
case Vars::Aimbot::Melee::SwingValidateModeEnum::Simulated:
vRecords = F::Backtrack.GetValidRecords(vRecords, pLocal, true, -TICKS_TO_TIME(m_iSimulatedTicks));
break;
}
case Vars::Aimbot::Melee::SwingValidateModeEnum::Both:
if (m_iSimulatedTicks != m_iSwingTicks)
vTimeMods.push_back(m_iSimulatedTicks);
[[fallthrough]];
case Vars::Aimbot::Melee::SwingValidateModeEnum::Swing:
vTimeMods.push_back(m_iSwingTicks);
break;
case Vars::Aimbot::Melee::SwingValidateModeEnum::Simulated:
vTimeMods.push_back(m_iSimulatedTicks);
break;
}
for (auto& tRecord : vSimRecords)
vRecords.push_back(&tRecord);
for (auto iTimeMod : vTimeMods)
vRecords = F::Backtrack.GetValidRecords(vRecords, pLocal, true, -TICKS_TO_TIME(iTimeMod));
if (vRecords.empty())
return false;
}
@@ -509,7 +506,8 @@ static inline void DrawVisuals(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserC
bool bPath = Vars::Visuals::Prediction::SwingLines.Value && Vars::Visuals::Prediction::PlayerPath.Value;
bool bLine = Vars::Visuals::Line::TracersEnabled.Value;
bool bBoxes = Vars::Visuals::Hitbox::BonesEnabled.Value & Vars::Visuals::Hitbox::BonesEnabledEnum::OnShot;
if (bPath || bLine || bBoxes)
bool bRealPath = Vars::Visuals::Prediction::RealPath.Value;
if (bPath || bLine || bBoxes || bRealPath)
{
if (pCmd->buttons & IN_ATTACK && G::CanPrimaryAttack && pWeapon->m_flSmackTime() < 0.f)
{
@@ -531,6 +529,11 @@ static inline void DrawVisuals(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserC
G::PathStorage.emplace_back(mPaths[tTarget.m_pEntity->entindex()], !flDuration ? -int(mPaths[tTarget.m_pEntity->entindex()].size()) : I::GlobalVars->curtime + flDuration, Vars::Colors::PlayerPath.Value, Vars::Visuals::Prediction::PlayerPath.Value, true);
}
}
if (int iSwingTime = GetSwingTime(pWeapon, false); bRealPath && iSwingTime)
{
F::Aimbot.Store(pLocal, iSwingTime);
F::Aimbot.Store(tTarget.m_pEntity, iSwingTime);
}
}
if (G::Attacking == 1)
{
@@ -6,7 +6,6 @@
class CAimbotMelee
{
private:
int GetSwingTime(CTFWeaponBase* pWeapon, bool bVar = true);
void UpdateInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, std::vector<Target_t> vTargets);
bool CanBackstab(CBaseEntity* pTarget, CTFPlayer* pLocal, Vec3 vEyeAngles);
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
+4
View File
@@ -2984,14 +2984,18 @@ void CMenu::MenuSettings(int iTab)
{ // don't indent too much
auto sText = std::format("-> {}", x);
SetCursorPos(vOriginalPos + ImVec2(-FCalcTextSize(sText.c_str()).x - H::Draw.Scale(10), H::Draw.Scale(7)));
PushStyleColor(ImGuiCol_Text, F::Render.Inactive.Value);
FText(sText.c_str());
PopStyleColor();
}
float flTextWidth = flWidth - H::Draw.Scale(127);
PushTransparent(!F::Binds.WillBeEnabled(_iBind), true);
SetCursorPos(vOriginalPos + ImVec2(H::Draw.Scale(9), H::Draw.Scale(7)));
PushStyleColor(ImGuiCol_Text, _tBind.m_bActive ? F::Render.Accent.Value : F::Render.Active.Value);
FText(TruncateText(_tBind.m_sName, flTextWidth * (1.f / 3) - H::Draw.Scale(20)).c_str());
PopStyleColor();
SetCursorPos(vOriginalPos + ImVec2(flTextWidth * (1.f / 3), H::Draw.Scale(7)));
FText(sType.c_str());
@@ -69,8 +69,6 @@ static inline void HandleMovement(CTFPlayer* pPlayer, MoveData* pLastRecord, Mov
}
}
}
if (!pLastRecord)
return;
if (pPlayer->InCond(TF_COND_SHIELD_CHARGE))
{
@@ -94,7 +92,7 @@ static inline void HandleMovement(CTFPlayer* pPlayer, MoveData* pLastRecord, Mov
case MoveEnum::Air:
if (!bLocal)
break;
else if (Vars::Misc::Movement::AutoStrafe.Value || tCurRecord.m_vDirection.To2D().IsZero() || tCurRecord.m_vVelocity.To2D() == pLastRecord->m_vVelocity.To2D())
else if (Vars::Misc::Movement::AutoStrafe.Value || tCurRecord.m_vDirection.To2D().IsZero() || pLastRecord && tCurRecord.m_vVelocity.To2D() == pLastRecord->m_vVelocity.To2D())
tCurRecord.m_vDirection = tCurRecord.m_vVelocity.Normalized2D() * 520.f, tCurRecord.m_bInputDirection = false;
break;
case MoveEnum::Swim:
@@ -189,7 +187,7 @@ void CMovementSimulation::StorePlayer(CTFPlayer* pPlayer, CMoveData& tMoveData,
bool CMovementSimulation::Initialize(CBaseEntity* pEntity, MoveStorage& tMoveStorage, bool bHitchance, bool bStrafe)
bool CMovementSimulation::Initialize(CBaseEntity* pEntity, MoveStorage& tMoveStorage, bool bHitchance, bool bStrafe, bool bPredict)
{
if (!pEntity || !pEntity->IsPlayer() || !pEntity->As<CTFPlayer>()->IsAlive())
{
@@ -249,8 +247,11 @@ bool CMovementSimulation::Initialize(CBaseEntity* pEntity, MoveStorage& tMoveSto
}
tMoveStorage.m_vPath = { tMoveStorage.m_MoveData.m_vecAbsOrigin };
for (int i = 0; i < H::Entities.GetChoke(pPlayer->entindex()); i++)
RunTick(tMoveStorage);
if (bPredict)
{
for (int i = 0; i < H::Entities.GetChoke(pPlayer->entindex()); i++)
RunTick(tMoveStorage);
}
return true;
}
@@ -641,6 +642,21 @@ void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, RunTick
I::GlobalVars->frametime = I::Prediction->m_bEnginePaused ? 0.f : TICK_INTERVAL;
SetBounds(tMoveStorage.m_pPlayer);
if (tMoveStorage.m_pPlayer->InCond(TF_COND_SHIELD_CHARGE))
{
static auto tf_demoman_charge_drain_time = H::ConVars.FindVar("tf_demoman_charge_drain_time");
float flDrainTime = SDK::AttribHookValue(tf_demoman_charge_drain_time->GetFloat(), "mod_charge_time", tMoveStorage.m_pPlayer);
tMoveStorage.m_pPlayer->m_flChargeMeter() -= TICK_INTERVAL * 100.f / flDrainTime;
if (tMoveStorage.m_pPlayer->m_flChargeMeter() <= 0.f)
{
tMoveStorage.m_pPlayer->RemoveCond(TF_COND_SHIELD_CHARGE);
tMoveStorage.m_MoveData.m_flMaxSpeed = tMoveStorage.m_MoveData.m_flClientMaxSpeed = SDK::MaxSpeed(tMoveStorage.m_pPlayer);
tMoveStorage.m_pPlayer->m_flMaxspeed() = tMoveStorage.m_MoveData.m_flMaxSpeed;
}
}
float flCorrection = 0.f;
if (tMoveStorage.m_flAverageYaw)
{
@@ -670,8 +686,8 @@ void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, RunTick
tMoveStorage.m_MoveData.m_flClientMaxSpeed = flOldSpeed;
tMoveStorage.m_flSimTime += TICK_INTERVAL;
tMoveStorage.m_bPredictNetworked = tMoveStorage.m_flSimTime >= tMoveStorage.m_flPredictedSimTime;
tMoveStorage.m_flSimTime = ROUND_TO_TICKS(tMoveStorage.m_flSimTime + TICK_INTERVAL);
tMoveStorage.m_bPredictNetworked = TIME_TO_TICKS(tMoveStorage.m_flSimTime) >= TIME_TO_TICKS(tMoveStorage.m_flPredictedSimTime);
if (tMoveStorage.m_bPredictNetworked)
{
tMoveStorage.m_vPredictedOrigin = tMoveStorage.m_MoveData.m_vecAbsOrigin;
@@ -63,7 +63,7 @@ public:
void Store();
void StorePlayer(CTFPlayer* pPlayer, CMoveData& tMoveData, float flTime);
bool Initialize(CBaseEntity* pEntity, MoveStorage& tMoveStorage, bool bHitchance = true, bool bStrafe = true);
bool Initialize(CBaseEntity* pEntity, MoveStorage& tMoveStorage, bool bHitchance = true, bool bStrafe = true, bool bPredict = true);
bool SetDuck(MoveStorage& tMoveStorage, bool bDuck);
void RunTick(MoveStorage& tMoveStorage, bool bPath = true, RunTickCallback* pCallback = nullptr);
void RunTick(MoveStorage& tMoveStorage, bool bPath, RunTickCallback fCallback);
@@ -127,7 +127,7 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
SDK::GetProjectileFireSetup(pPlayer, vAngles, { 16.f, 8.f, -6.f }, vPos, vAngle, 0.f, 0.f, bInterp);
auto uType = bCannon ? FNV1A::Hash32Const("models/weapons/w_models/w_cannonball.mdl") : FNV1A::Hash32Const("models/weapons/w_models/w_grenade_grenadelauncher.mdl");
Vec3 vHull = pWeapon->GetWeaponID() == TF_WEAPON_CANNON ? Vec3(6.f, 6.f, 6.f) : !SDK::AttribHookValue(0, "grenade_no_spin", pWeapon) ? Vec3(5.f, 5.f, 5.f) : Vec3(3.f, 3.f, 3.f);
Vec3 vHull = pWeapon->GetWeaponID() == TF_WEAPON_CANNON ? Vec3(6.f, 6.f, 6.f) : !SDK::AttribHookValue(0, "grenade_no_spin", pWeapon) ? Vec3(5.f, 5.f, 5.f) : Vec3(4.f, 4.f, 4.f);
float flSpeed = SDK::AttribHookValue(pPlayer->InCond(TF_COND_RUNE_PRECISION) ? 3000.f : SDK::AttribHookValue(1200.f, "mult_projectile_speed", pWeapon), "mult_projectile_range", pWeapon);
float flLifeTime = flMortar
? pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() > 0.f ? pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() - I::GlobalVars->curtime : flMortar
+1 -1
View File
@@ -532,7 +532,7 @@ void CVisuals::DrawEffects()
H::Draw.RenderTriangle(tTriangle.m_aOrigin[0], tTriangle.m_aOrigin[1], tTriangle.m_aOrigin[2], tTriangle.m_tColor, tTriangle.m_bZBuffer);
}
if (auto& tPath = F::Aimbot.m_tPath; tPath.m_flTime)
for (auto& [tPath, _] :F::Aimbot.m_mRealPaths | std::views::values)
{
H::Draw.RenderPath(tPath.m_vPath, Vars::Colors::RealPath.Value, true, tPath.m_iStyle, tPath.m_flTime);
H::Draw.RenderPath(tPath.m_vPath, Vars::Colors::RealPathIgnoreZ.Value, false, tPath.m_iStyle, tPath.m_flTime);
+16 -17
View File
@@ -200,9 +200,6 @@ NAMESPACE_BEGIN(Vars)
NAMESPACE_END(Menu)
NAMESPACE_BEGIN(Colors)
CVar(FOVCircle, "FOV circle color", Color_t(255, 255, 255, 100), VISUAL);
CVar(Local, "Local color", Color_t(255, 255, 255, 0), VISUAL);
CVar(IndicatorGood, "Indicator good", Color_t(0, 255, 100, 255), NOSAVE | DEBUGVAR);
CVar(IndicatorMid, "Indicator mid", Color_t(255, 200, 0, 255), NOSAVE | DEBUGVAR);
CVar(IndicatorBad, "Indicator bad", Color_t(255, 0, 0, 255), NOSAVE | DEBUGVAR);
@@ -212,6 +209,10 @@ NAMESPACE_BEGIN(Vars)
CVar(IndicatorTextBad, "Indicator text bad", Color_t(255, 150, 150, 255), NOSAVE | DEBUGVAR);
CVar(IndicatorTextMisc, "Indicator text misc", Color_t(100, 255, 255, 255), NOSAVE | DEBUGVAR);
CVar(Local, "Local color", Color_t(255, 255, 255), VISUAL);
CVar(FOVCircle, "FOV circle color", Color_t(255, 255, 255, 100), VISUAL);
CVar(SpellFootstep, "Spell footstep color", Color_t(255, 255, 255, 255), VISUAL);
CVar(WorldModulation, VA_LIST("World modulation", "World modulation color"), Color_t(255, 255, 255, 255), VISUAL);
CVar(SkyModulation, VA_LIST("Sky modulation", "Sky modulation color"), Color_t(255, 255, 255, 255), VISUAL);
CVar(PropModulation, VA_LIST("Prop modulation", "Prop modulation color"), Color_t(255, 255, 255, 255), VISUAL);
@@ -221,19 +222,6 @@ NAMESPACE_BEGIN(Vars)
CVar(Line, "Line color", Color_t(255, 255, 255, 255), VISUAL);
CVar(LineIgnoreZ, "Line ignore Z color", Color_t(255, 255, 255, 0), VISUAL);
CVar(PlayerPath, "Player path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(PlayerPathIgnoreZ, "Player path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(ProjectilePath, "Projectile path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(ProjectilePathIgnoreZ, "Projectile path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(TrajectoryPath, "Trajectory path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(TrajectoryPathIgnoreZ, "Trajectory path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(ShotPath, "Shot path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(ShotPathIgnoreZ, "Shot path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(SplashRadius, "Splash radius color", Color_t(255, 255, 255, 0), VISUAL);
CVar(SplashRadiusIgnoreZ, "Splash radius ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(RealPath, "Real path color", Color_t(255, 255, 255, 0), NOSAVE | DEBUGVAR);
CVar(RealPathIgnoreZ, "Real path ignore Z color", Color_t(255, 255, 255, 255), NOSAVE | DEBUGVAR);
CVar(BoneHitboxEdge, "Bone hitbox edge color", Color_t(255, 255, 255, 255), VISUAL);
CVar(BoneHitboxEdgeIgnoreZ, "Bone hitbox edge ignore Z color", Color_t(255, 255, 255, 0), VISUAL);
CVar(BoneHitboxFace, "Bone hitbox face color", Color_t(255, 255, 255, 0), VISUAL);
@@ -247,7 +235,18 @@ NAMESPACE_BEGIN(Vars)
CVar(BoundHitboxFace, "Bound hitbox face color", Color_t(255, 255, 255, 0), VISUAL);
CVar(BoundHitboxFaceIgnoreZ, "Bound hitbox face ignore Z color", Color_t(255, 255, 255, 0), VISUAL);
CVar(SpellFootstep, "Spell footstep color", Color_t(255, 255, 255, 255), VISUAL);
CVar(PlayerPath, "Player path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(PlayerPathIgnoreZ, "Player path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(ProjectilePath, "Projectile path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(ProjectilePathIgnoreZ, "Projectile path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(TrajectoryPath, "Trajectory path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(TrajectoryPathIgnoreZ, "Trajectory path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(ShotPath, "Shot path color", Color_t(255, 255, 255, 0), VISUAL);
CVar(ShotPathIgnoreZ, "Shot path ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(SplashRadius, "Splash radius color", Color_t(255, 255, 255, 0), VISUAL);
CVar(SplashRadiusIgnoreZ, "Splash radius ignore Z color", Color_t(255, 255, 255, 255), VISUAL);
CVar(RealPath, "Real path color", Color_t(255, 255, 255, 0), NOSAVE | DEBUGVAR);
CVar(RealPathIgnoreZ, "Real path ignore Z color", Color_t(255, 255, 255, 255), NOSAVE | DEBUGVAR);
NAMESPACE_END(Colors)
NAMESPACE_BEGIN(Aimbot)