fixes, adjustments, backend stuff

This commit is contained in:
rei-2 committed 2025-06-16 15:39:17 -04:00
1 parent 9cec06e27b
commit cf6d2a4d72
51 files changed
+947 -892

No files matched your search

-1
View File
@@ -1050,7 +1050,6 @@
<ClCompile Include="src\Hooks\IPanel_PaintTraverse.cpp" />
<ClCompile Include="src\Hooks\ISteamFriends_GetFriendPersonaName.cpp" />
<ClCompile Include="src\Hooks\ISteamNetworkingUtils_GetPingToDataCenter.cpp" />
<ClCompile Include="src\Hooks\IVEngineClient_ClientCmd_Unrestricted.cpp" />
<ClCompile Include="src\Hooks\IVModelRender_DrawModelExecute.cpp" />
<ClCompile Include="src\Hooks\IVModelRender_ForcedMaterialOverride.cpp" />
<ClCompile Include="src\Hooks\KeyValues_SetInt.cpp" />
-1
View File
@@ -180,7 +180,6 @@
<ClCompile Include="src\Hooks\IPanel_PaintTraverse.cpp" />
<ClCompile Include="src\Hooks\ISteamFriends_GetFriendPersonaName.cpp" />
<ClCompile Include="src\Hooks\ISteamNetworkingUtils_GetPingToDataCenter.cpp" />
<ClCompile Include="src\Hooks\IVEngineClient_ClientCmd_Unrestricted.cpp" />
<ClCompile Include="src\Hooks\IVModelRender_DrawModelExecute.cpp" />
<ClCompile Include="src\Hooks\IVModelRender_ForcedMaterialOverride.cpp" />
<ClCompile Include="src\Hooks\KeyValues_SetInt.cpp" />
+2 -2
View File
@@ -14,11 +14,11 @@ BytePatch::BytePatch(const char* sModule, const char* sSignature, int iOffset, c
m_vOriginal.resize(m_iSize);
}
void BytePatch::Write(std::vector<byte>& bytes)
void BytePatch::Write(std::vector<byte>& vBytes)
{
DWORD flNewProtect, flOldProtect;
VirtualProtect(m_pAddress, m_iSize, PAGE_EXECUTE_READWRITE, &flNewProtect);
memcpy(m_pAddress, bytes.data(), m_iSize);
memcpy(m_pAddress, vBytes.data(), m_iSize);
VirtualProtect(m_pAddress, m_iSize, flNewProtect, &flOldProtect);
}
+1 -1
View File
@@ -12,7 +12,7 @@ class BytePatch
LPVOID m_pAddress = 0;
bool m_bIsPatched = false;
void Write(std::vector<byte>& bytes);
void Write(std::vector<byte>& vBytes);
public:
BytePatch(const char* sModule, const char* sSignature, int iOffset, const char* sPatch);
+41
View File
@@ -91,4 +91,45 @@ void CAimbot::Draw(CTFPlayer* pLocal)
float flW = H::Draw.m_nScreenW, flH = H::Draw.m_nScreenH;
float flRadius = tanf(DEG2RAD(Vars::Aimbot::General::AimFOV.Value)) / tanf(DEG2RAD(pLocal->m_iFOV()) / 2) * flW * (4.f / 6.f) / (16.f / 9.f);
H::Draw.LineCircle(H::Draw.m_nScreenW / 2, H::Draw.m_nScreenH / 2, flRadius, 68, Vars::Colors::FOVCircle.Value);
}
void CAimbot::Store(CBaseEntity* pEntity, size_t iSize)
{
if (!Vars::Visuals::Simulation::RealPath.Value)
return;
if (pEntity)
{
auto pResource = H::Entities.GetPR();
if (pEntity->IsPlayer() && pResource)
{
m_tPath = { { pEntity->m_vecOrigin() }, I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::RealPath.Value, Vars::Visuals::Simulation::RealPath.Value };
m_iSize = iSize;
m_iPlayer = pResource->m_iUserID(pEntity->entindex());
}
return;
}
int iLag;
{
static int iStaticTickcout = I::GlobalVars->tickcount;
iLag = I::GlobalVars->tickcount - iStaticTickcout;
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)
{
G::PathStorage.push_back(m_tPath);
m_tPath = {};
return;
}
auto pPlayer = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(m_iPlayer))->As<CTFPlayer>();
if (!pPlayer)
return;
for (int i = 0; i < iLag; i++)
m_tPath.m_vPath.push_back(pPlayer->m_vecOrigin());
}
+6
View File
@@ -8,12 +8,18 @@ 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);
void Store(CBaseEntity* pEntity = nullptr, size_t iSize = 0);
bool m_bRan = false;
bool m_bRunningSecondary = false;
DrawPath_t m_tPath = {};
};
ADD_FEATURE(CAimbot, Aimbot);
@@ -324,7 +324,7 @@ bool CAimbotGlobal::ValidBomb(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CBaseEn
if (isPlayer && ShouldIgnore(pEntity->As<CTFPlayer>(), pLocal, pWeapon))
continue;
if (!SDK::VisPosProjectile(pBomb, pEntity, vOrigin, isPlayer ? pEntity->m_vecOrigin() + pEntity->As<CTFPlayer>()->GetViewOffset() : pEntity->GetCenter(), MASK_SHOT))
if (!SDK::VisPosCollideable(pBomb, pEntity, vOrigin, isPlayer ? pEntity->m_vecOrigin() + pEntity->As<CTFPlayer>()->GetViewOffset() : pEntity->GetCenter(), MASK_SHOT))
continue;
return true;
@@ -299,7 +299,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
float flSpread = pWeapon->GetWeaponSpread();
if (flSpread && Vars::Aimbot::General::HitscanPeek.Value)
vPeekPos = pLocal->GetShootPos() + pLocal->m_vecVelocity() * TICKS_TO_TIME(-Vars::Aimbot::General::HitscanPeek.Value);
vPeekPos = vEyePos + pLocal->m_vecVelocity() * TICKS_TO_TIME(-Vars::Aimbot::General::HitscanPeek.Value);
// if we're doubletapping, we can't change viewangles so work around that
static int iTargetBone = 0;
@@ -694,6 +694,38 @@ void CAimbotHitscan::Aim(CUserCmd* pCmd, Vec3& vAngle)
}
}
static inline void DrawVisuals(CTFPlayer* pLocal, Target_t& tTarget, int nWeaponID)
{
if (G::Attacking == 1 && nWeaponID != TF_WEAPON_LASER_POINTER)
{
bool bLine = Vars::Visuals::Line::Enabled.Value;
bool bBoxes = Vars::Visuals::Hitbox::BonesEnabled.Value & Vars::Visuals::Hitbox::BonesEnabledEnum::OnShot;
if (G::CanPrimaryAttack && (bLine || bBoxes))
{
G::LineStorage.clear();
G::BoxStorage.clear();
G::PathStorage.clear();
if (bLine)
{
Vec3 vEyePos = pLocal->GetShootPos();
float flDist = vEyePos.DistTo(tTarget.m_vPos);
Vec3 vForward; Math::AngleVectors(tTarget.m_vAngleTo + pLocal->m_vecPunchAngle(), &vForward);
if (Vars::Colors::Line.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Line::DrawDuration.Value, Vars::Colors::Line.Value);
if (Vars::Colors::LineClipped.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Line::DrawDuration.Value, Vars::Colors::LineClipped.Value, true);
}
if (bBoxes)
{
auto vBoxes = F::Visuals.GetHitboxes(tTarget.m_pRecord->m_BoneMatrix.m_aBones, tTarget.m_pEntity->As<CBaseAnimating>(), {}, tTarget.m_nAimedHitbox);
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
}
}
}
}
void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd)
{
const int nWeaponID = pWeapon->GetWeaponID();
@@ -735,20 +767,16 @@ void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC
case TF_WEAPON_SNIPERRIFLE:
case TF_WEAPON_SNIPERRIFLE_DECAP:
{
const bool bScoped = pLocal->InCond(TF_COND_ZOOMED);
bool bScoped = pLocal->InCond(TF_COND_ZOOMED);
if (Vars::Aimbot::Hitscan::Modifiers.Value & Vars::Aimbot::Hitscan::ModifiersEnum::AutoScope && !bScoped)
{
pCmd->buttons |= IN_ATTACK2;
return;
}
if (Vars::Aimbot::Hitscan::Modifiers.Value & Vars::Aimbot::Hitscan::ModifiersEnum::ScopedOnly && !bScoped)
else if (Vars::Aimbot::Hitscan::Modifiers.Value & Vars::Aimbot::Hitscan::ModifiersEnum::ScopedOnly && !bScoped)
return;
if (!bScoped && SDK::AttribHookValue(0, "sniper_only_fire_zoomed", pWeapon))
else if (!bScoped && SDK::AttribHookValue(0, "sniper_only_fire_zoomed", pWeapon))
return;
break;
}
case TF_WEAPON_SNIPERRIFLE_CLASSIC:
@@ -780,9 +808,7 @@ void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC
G::AimTarget = { tTarget.m_pEntity->entindex(), I::GlobalVars->tickcount };
G::AimPoint = { tTarget.m_vPos, I::GlobalVars->tickcount };
bool bShouldFire = ShouldFire(pLocal, pWeapon, pCmd, tTarget);
if (bShouldFire)
if (ShouldFire(pLocal, pWeapon, pCmd, tTarget))
{
switch (nWeaponID)
{
@@ -811,7 +837,6 @@ void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC
}
G::Attacking = SDK::IsAttacking(pLocal, pWeapon, pCmd, true);
if (G::Attacking == 1 && nWeaponID != TF_WEAPON_LASER_POINTER)
{
if (tTarget.m_pEntity->IsPlayer())
@@ -819,33 +844,8 @@ void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC
if (tTarget.m_bBacktrack)
pCmd->tick_count = TIME_TO_TICKS(tTarget.m_pRecord->m_flSimTime) + TIME_TO_TICKS(F::Backtrack.GetFakeInterp());
bool bLine = Vars::Visuals::Line::Enabled.Value;
bool bBoxes = Vars::Visuals::Hitbox::BonesEnabled.Value & Vars::Visuals::Hitbox::BonesEnabledEnum::OnShot;
if (G::CanPrimaryAttack && (bLine || bBoxes))
{
G::LineStorage.clear();
G::BoxStorage.clear();
G::PathStorage.clear();
if (bLine)
{
Vec3 vEyePos = pLocal->GetShootPos();
float flDist = vEyePos.DistTo(tTarget.m_vPos);
Vec3 vForward; Math::AngleVectors(tTarget.m_vAngleTo + pLocal->m_vecPunchAngle(), &vForward);
if (Vars::Colors::Line.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Line::DrawDuration.Value, Vars::Colors::Line.Value);
if (Vars::Colors::LineClipped.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Line::DrawDuration.Value, Vars::Colors::LineClipped.Value, true);
}
if (bBoxes)
{
auto vBoxes = F::Visuals.GetHitboxes(tTarget.m_pRecord->m_BoneMatrix.m_aBones, tTarget.m_pEntity->As<CBaseAnimating>(), {}, tTarget.m_nAimedHitbox);
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
}
}
}
DrawVisuals(pLocal, tTarget, nWeaponID);
Aim(pCmd, tTarget.m_vAngleTo);
if (G::SilentAngles)
@@ -109,22 +109,20 @@ int CAimbotMelee::GetSwingTime(CTFWeaponBase* pWeapon)
return Vars::Aimbot::Melee::SwingTicks.Value;
}
void CAimbotMelee::SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, std::vector<Target_t> vTargets,
Vec3& vEyePos, std::unordered_map<int, std::deque<TickRecord>>& mRecordMap,
std::unordered_map<int, std::vector<Vec3>>& mPaths)
void CAimbotMelee::SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, std::vector<Target_t> vTargets, Vec3& vEyePos)
{
// swing prediction / auto warp
const int iSwingTicks = GetSwingTime(pWeapon);
int iMax = (iDoubletapTicks && Vars::Doubletap::AntiWarp.Value && pLocal->m_hGroundEntity())
int iMax = (m_iDoubletapTicks && Vars::Doubletap::AntiWarp.Value && pLocal->m_hGroundEntity())
? std::max(iSwingTicks - Vars::Doubletap::TickLimit.Value - 1, 0)
: std::max(iSwingTicks, iDoubletapTicks);
: std::max(iSwingTicks, m_iDoubletapTicks);
if ((Vars::Aimbot::Melee::SwingPrediction.Value || iDoubletapTicks) && pWeapon->m_flSmackTime() < 0.f && iMax)
if ((Vars::Aimbot::Melee::SwingPrediction.Value || m_iDoubletapTicks) && pWeapon->m_flSmackTime() < 0.f && iMax)
{
PlayerStorage tStorage;
std::unordered_map<int, PlayerStorage> mStorage;
F::MoveSim.Initialize(pLocal, tStorage, false, !iDoubletapTicks);
F::MoveSim.Initialize(pLocal, tStorage, false, !m_iDoubletapTicks);
for (auto& tTarget : vTargets)
F::MoveSim.Initialize(tTarget.m_pEntity, mStorage[tTarget.m_pEntity->entindex()], false);
@@ -136,7 +134,7 @@ void CAimbotMelee::SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, st
tStorage.m_MoveData.m_flMaxSpeed = tStorage.m_MoveData.m_flClientMaxSpeed = SDK::MaxSpeed(pLocal, false, true);
F::MoveSim.RunTick(tStorage);
}
if (i < iSwingTicks - iDoubletapTicks)
if (i < iSwingTicks - m_iDoubletapTicks)
{
for (auto& tTarget : vTargets)
{
@@ -144,7 +142,7 @@ void CAimbotMelee::SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, st
F::MoveSim.RunTick(tStorage);
if (!tStorage.m_bFailed)
mRecordMap[tTarget.m_pEntity->entindex()].emplace_front(
m_mRecordMap[tTarget.m_pEntity->entindex()].emplace_front(
!Vars::Aimbot::Melee::SwingPredictLag.Value || tStorage.m_bPredictNetworked ? tTarget.m_pEntity->m_flSimulationTime() + TICKS_TO_TIME(i + 1) : 0.f,
Vars::Aimbot::Melee::SwingPredictLag.Value ? tStorage.m_vPredictedOrigin : tStorage.m_MoveData.m_vecAbsOrigin,
tTarget.m_pEntity->m_vecMins(), tTarget.m_pEntity->m_vecMaxs()
@@ -159,9 +157,9 @@ void CAimbotMelee::SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, st
const bool bAlwaysDraw = !Vars::Aimbot::General::AutoShoot.Value || Vars::Debug::Info.Value;
if (!bAlwaysDraw)
{
mPaths[pLocal->entindex()] = tStorage.m_vPath;
m_mPaths[pLocal->entindex()] = tStorage.m_vPath;
for (auto& tTarget : vTargets)
mPaths[tTarget.m_pEntity->entindex()] = mStorage[tTarget.m_pEntity->entindex()].m_vPath;
m_mPaths[tTarget.m_pEntity->entindex()] = mStorage[tTarget.m_pEntity->entindex()].m_vPath;
}
else
{
@@ -253,7 +251,7 @@ bool CAimbotMelee::CanBackstab(CBaseEntity* pTarget, CTFPlayer* pLocal, Vec3 vEy
return true;
}
int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Vec3 vEyePos, std::deque<TickRecord>& vSimRecords)
int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Vec3 vEyePos)
{
if (Vars::Aimbot::General::Ignore.Value & Vars::Aimbot::General::IgnoreEnum::Unsimulated && H::Entities.GetChoke(tTarget.m_pEntity->entindex()) > Vars::Aimbot::General::TickTolerance.Value)
return false;
@@ -267,6 +265,7 @@ int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pW
}
Vec3 vSwingMins = { -flHull, -flHull, -flHull };
Vec3 vSwingMaxs = { flHull, flHull, flHull };
auto& vSimRecords = m_mRecordMap[tTarget.m_pEntity->entindex()];
std::vector<TickRecord*> vRecords = {};
if (F::Backtrack.GetRecords(tTarget.m_pEntity, vRecords))
@@ -420,6 +419,57 @@ void CAimbotMelee::Aim(CUserCmd* pCmd, Vec3& vAngle)
}
}
static inline void DrawVisuals(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, Target_t& tTarget, std::unordered_map<int, std::vector<Vec3>>& mPaths)
{
bool bPath = Vars::Visuals::Simulation::SwingLines.Value && Vars::Visuals::Simulation::PlayerPath.Value && Vars::Aimbot::General::AutoShoot.Value && !Vars::Debug::Info.Value;
bool bLine = Vars::Visuals::Line::Enabled.Value;
bool bBoxes = Vars::Visuals::Hitbox::BonesEnabled.Value & Vars::Visuals::Hitbox::BonesEnabledEnum::OnShot;
if (pCmd->buttons & IN_ATTACK && pWeapon->m_flSmackTime() < 0.f)
{
G::LineStorage.clear();
G::BoxStorage.clear();
G::PathStorage.clear();
if (bPath)
{
if (Vars::Colors::PlayerPath.Value.a)
{
G::PathStorage.emplace_back(mPaths[pLocal->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
G::PathStorage.emplace_back(mPaths[tTarget.m_pEntity->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
}
if (Vars::Colors::PlayerPathClipped.Value.a)
{
G::PathStorage.emplace_back(mPaths[pLocal->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
G::PathStorage.emplace_back(mPaths[tTarget.m_pEntity->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
}
}
}
else if (G::Attacking == 1)
{
if (bLine)
{
Vec3 vEyePos = pLocal->GetShootPos();
float flDist = vEyePos.DistTo(tTarget.m_vPos);
Vec3 vForward; Math::AngleVectors(tTarget.m_vAngleTo + pLocal->m_vecPunchAngle(), &vForward);
if (Vars::Colors::Line.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::Line.Value);
if (Vars::Colors::LineClipped.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::LineClipped.Value, true);
}
if (bBoxes)
{
auto vBoxes = F::Visuals.GetHitboxes(tTarget.m_pRecord->m_BoneMatrix.m_aBones, tTarget.m_pEntity->As<CBaseAnimating>());
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
//if (Vars::Colors::BoneHitboxEdge.Value.a || Vars::Colors::BoneHitboxFace.Value.a)
// G::BoxStorage.emplace_back(tTarget.m_pRecord->m_vOrigin, tTarget.m_pRecord->m_vMins, tTarget.m_pRecord->m_vMaxs, Vec3(), I::GlobalVars->curtime + Vars::Visuals::Hitbox::DrawDuration.Value, Vars::Colors::BoneHitboxEdge.Value, Vars::Colors::BoneHitboxFace.Value);
//if (Vars::Colors::BoneHitboxEdgeClipped.Value.a || Vars::Colors::BoneHitboxFaceClipped.Value.a)
// G::BoxStorage.emplace_back(tTarget.m_pRecord->m_vOrigin, tTarget.m_pRecord->m_vMins, tTarget.m_pRecord->m_vMaxs, Vec3(), I::GlobalVars->curtime + Vars::Visuals::Hitbox::DrawDuration.Value, Vars::Colors::BoneHitboxEdgeClipped.Value, Vars::Colors::BoneHitboxFaceClipped.Value, true);
}
}
}
void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd)
{
static int iStaticAimType = Vars::Aimbot::General::AimType.Value;
@@ -443,20 +493,19 @@ void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd
if (vTargets.empty())
return;
iDoubletapTicks = F::Ticks.GetTicks(pWeapon);
const bool bShouldSwing = iDoubletapTicks <= (GetSwingTime(pWeapon) ? 14 : 0) || Vars::Doubletap::AntiWarp.Value && pLocal->m_hGroundEntity();
m_mRecordMap.clear(); m_mPaths.clear();
m_iDoubletapTicks = F::Ticks.GetTicks(pWeapon);
const bool bShouldSwing = m_iDoubletapTicks <= (GetSwingTime(pWeapon) ? 14 : 0) || Vars::Doubletap::AntiWarp.Value && pLocal->m_hGroundEntity();
Vec3 vEyePos = pLocal->GetShootPos();
std::unordered_map<int, std::deque<TickRecord>> mRecordMap;
std::unordered_map<int, std::vector<Vec3>> mPaths;
SimulatePlayers(pLocal, pWeapon, vTargets, vEyePos, mRecordMap, mPaths);
SimulatePlayers(pLocal, pWeapon, vTargets, vEyePos);
//if (!G::AimTarget.m_iEntIndex)
// G::AimTarget = { vTargets.front().m_pEntity->entindex(), I::GlobalVars->tickcount, 0 };
for (auto& tTarget : vTargets)
{
const auto iResult = CanHit(tTarget, pLocal, pWeapon, vEyePos, mRecordMap[tTarget.m_pEntity->entindex()]);
const auto iResult = CanHit(tTarget, pLocal, pWeapon, vEyePos);
if (!iResult) continue;
if (iResult == 2)
{
@@ -472,12 +521,11 @@ void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd
{
if (bShouldSwing)
pCmd->buttons |= IN_ATTACK;
if (iDoubletapTicks)
if (m_iDoubletapTicks)
F::Ticks.m_bDoubletap = true;
}
G::Attacking = SDK::IsAttacking(pLocal, pWeapon, pCmd, true);
if (G::Attacking == 1)
{
if (tTarget.m_bBacktrack)
@@ -486,60 +534,10 @@ void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd
}
else
{
Vec3 vEyePos = pLocal->GetShootPos();
vEyePos = pLocal->GetShootPos();
Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(vEyePos, tTarget.m_vPos), tTarget.m_vAngleTo);
}
bool bPath = Vars::Visuals::Simulation::SwingLines.Value && Vars::Visuals::Simulation::PlayerPath.Value && Vars::Aimbot::General::AutoShoot.Value && !Vars::Debug::Info.Value;
bool bLine = Vars::Visuals::Line::Enabled.Value;
bool bBoxes = Vars::Visuals::Hitbox::BonesEnabled.Value & Vars::Visuals::Hitbox::BonesEnabledEnum::OnShot;
if (pCmd->buttons & IN_ATTACK && pWeapon->m_flSmackTime() < 0.f && bPath)
{
G::LineStorage.clear();
G::BoxStorage.clear();
G::PathStorage.clear();
if (bPath)
{
if (Vars::Colors::PlayerPath.Value.a)
{
G::PathStorage.emplace_back(mPaths[pLocal->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
G::PathStorage.emplace_back(mPaths[tTarget.m_pEntity->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
}
if (Vars::Colors::PlayerPathClipped.Value.a)
{
G::PathStorage.emplace_back(mPaths[pLocal->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
G::PathStorage.emplace_back(mPaths[tTarget.m_pEntity->entindex()], I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
}
}
}
if (G::Attacking == 1 && (bLine || bBoxes))
{
G::LineStorage.clear();
G::BoxStorage.clear();
if (bLine)
{
Vec3 vEyePos = pLocal->GetShootPos();
float flDist = vEyePos.DistTo(tTarget.m_vPos);
Vec3 vForward; Math::AngleVectors(tTarget.m_vAngleTo + pLocal->m_vecPunchAngle(), &vForward);
if (Vars::Colors::Line.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::Line.Value);
if (Vars::Colors::LineClipped.Value.a)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vEyePos, vEyePos + vForward * flDist), I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::LineClipped.Value, true);
}
if (bBoxes)
{
auto vBoxes = F::Visuals.GetHitboxes(tTarget.m_pRecord->m_BoneMatrix.m_aBones, tTarget.m_pEntity->As<CBaseAnimating>());
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
//if (Vars::Colors::BoneHitboxEdge.Value.a || Vars::Colors::BoneHitboxFace.Value.a)
// G::BoxStorage.emplace_back(tTarget.m_pRecord->m_vOrigin, tTarget.m_pRecord->m_vMins, tTarget.m_pRecord->m_vMaxs, Vec3(), I::GlobalVars->curtime + Vars::Visuals::Hitbox::DrawDuration.Value, Vars::Colors::BoneHitboxEdge.Value, Vars::Colors::BoneHitboxFace.Value);
//if (Vars::Colors::BoneHitboxEdgeClipped.Value.a || Vars::Colors::BoneHitboxFaceClipped.Value.a)
// G::BoxStorage.emplace_back(tTarget.m_pRecord->m_vOrigin, tTarget.m_pRecord->m_vMins, tTarget.m_pRecord->m_vMaxs, Vec3(), I::GlobalVars->curtime + Vars::Visuals::Hitbox::DrawDuration.Value, Vars::Colors::BoneHitboxEdgeClipped.Value, Vars::Colors::BoneHitboxFaceClipped.Value, true);
}
}
DrawVisuals(pLocal, pWeapon, pCmd, tTarget, m_mPaths);
Aim(pCmd, tTarget.m_vAngleTo);
break;
@@ -557,8 +555,10 @@ bool CAimbotMelee::FindNearestBuildPoint(CBaseObject* pBuilding, CTFPlayer* pLoc
{
bool bFoundPoint = false;
Vec3 vEyePos = pLocal->GetShootPos();
static auto tf_obj_max_attach_dist = U::ConVars.FindVar("tf_obj_max_attach_dist");
float flNearestPoint = tf_obj_max_attach_dist->GetFloat();
for (int i = 0; i < pBuilding->GetNumBuildPoints(); i++)
{
int v = GetAttachment(pBuilding, i);
@@ -566,10 +566,10 @@ bool CAimbotMelee::FindNearestBuildPoint(CBaseObject* pBuilding, CTFPlayer* pLoc
Vec3 vOrigin;
if (pBuilding->GetAttachment(v, vOrigin)) // issues using pBuilding->GetBuildPoint i on sentries above level 1 for some reason
{
if (!SDK::VisPos(pLocal, pBuilding, pLocal->GetShootPos(), vOrigin))
if (!SDK::VisPos(pLocal, pBuilding, vEyePos, vOrigin))
continue;
float flDist = (vOrigin - pLocal->GetAbsOrigin()).Length();
float flDist = (vOrigin - pLocal->m_vecOrigin()).Length();
if (flDist < flNearestPoint)
{
flNearestPoint = flDist;
@@ -10,11 +10,9 @@ class CAimbotMelee
std::vector<Target_t> SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
int GetSwingTime(CTFWeaponBase* pWeapon);
void SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, std::vector<Target_t> vTargets, Vec3& vEyePos,
std::unordered_map<int, std::deque<TickRecord>>& mRecordMap,
std::unordered_map<int, std::vector<Vec3>>& mPaths);
void SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, std::vector<Target_t> vTargets, Vec3& vEyePos);
bool CanBackstab(CBaseEntity* pTarget, CTFPlayer* pLocal, Vec3 vEyeAngles);
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Vec3 vEyePos, std::deque<TickRecord>& vSimRecords);
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Vec3 vEyePos);
bool Aim(Vec3 vCurAngle, Vec3 vToAngle, Vec3& vOut, int iMethod = Vars::Aimbot::General::AimType.Value);
void Aim(CUserCmd* pCmd, Vec3& vAngle);
@@ -22,8 +20,10 @@ class CAimbotMelee
bool FindNearestBuildPoint(CBaseObject* pBuilding, CTFPlayer* pLocal, Vec3& vPoint);
bool RunSapper(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
int iDoubletapTicks = 0;
int iDoubletapMax = 0;
int m_iDoubletapTicks = 0;
std::unordered_map<int, std::deque<TickRecord>> m_mRecordMap;
std::unordered_map<int, std::vector<Vec3>> m_mPaths;
public:
void Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
@@ -268,14 +268,14 @@ std::unordered_map<int, Vec3> CAimbotProjectile::GetDirectPoints(Target_t& tTarg
case 0:
if (tTarget.m_nAimedHitbox == HITBOX_HEAD)
{
auto pBones = H::Entities.GetBones(tTarget.m_pEntity->entindex());
if (!pBones)
auto aBones = H::Entities.GetBones(tTarget.m_pEntity->entindex());
if (!aBones)
break;
//Vec3 vOff = tTarget.m_pEntity->As<CBaseAnimating>()->GetHitboxOrigin(pBones, HITBOX_HEAD) - tTarget.m_pEntity->m_vecOrigin();
//Vec3 vOff = tTarget.m_pEntity->As<CBaseAnimating>()->GetHitboxOrigin(aBones, HITBOX_HEAD) - tTarget.m_pEntity->m_vecOrigin();
// https://www.youtube.com/watch?v=_PSGD-pJUrM, might be better??
Vec3 vCenter, vBBoxMins, vBBoxMaxs; tTarget.m_pEntity->As<CBaseAnimating>()->GetHitboxInfo(pBones, HITBOX_HEAD, &vCenter, &vBBoxMins, &vBBoxMaxs);
Vec3 vCenter, vBBoxMins, vBBoxMaxs; tTarget.m_pEntity->As<CBaseAnimating>()->GetHitboxInfo(aBones, HITBOX_HEAD, &vCenter, &vBBoxMins, &vBBoxMaxs);
Vec3 vOff = vCenter + (vBBoxMins + vBBoxMaxs) / 2 - tTarget.m_pEntity->m_vecOrigin();
float flLow = 0.f;
@@ -1049,41 +1049,6 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
class CTraceFilterProjectileNoPlayer : public ITraceFilter
{
public:
bool ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask) override;
TraceType_t GetTraceType() const override;
CBaseEntity* pSkip = nullptr;
};
bool CTraceFilterProjectileNoPlayer::ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask)
{
if (!pServerEntity || pServerEntity == pSkip)
return false;
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
switch (pEntity->GetClassID())
{
case ETFClassID::CBaseEntity:
case ETFClassID::CBaseDoor:
case ETFClassID::CDynamicProp:
case ETFClassID::CPhysicsProp:
case ETFClassID::CObjectCartDispenser:
case ETFClassID::CFuncTrackTrain:
case ETFClassID::CFuncConveyor:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectTeleporter: return true;
}
return false;
}
TraceType_t CTraceFilterProjectileNoPlayer::GetTraceType() const
{
return TRACE_EVERYTHING;
}
bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Target_t& tTarget, Vec3& vPoint, Vec3& vAngles, int iSimTime, bool bSplash, bool* pHitSolid, std::vector<Vec3>* pProjectilePath)
{
int iFlags = ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::NoRandomAngles | ProjSimEnum::PredictCmdNum;
@@ -1121,8 +1086,9 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
bool bDidHit = false;
CGameTrace trace = {};
CTraceFilterProjectile filter = {}; filter.pSkip = pLocal;
CTraceFilterProjectileNoPlayer filterSplash = {};
CTraceFilterCollideable filter = {}; filter.pSkip = bSplash ? tTarget.m_pEntity : pLocal; filter.iPlayer = bSplash ? PLAYER_NONE : PLAYER_DEFAULT;
int nMask = MASK_SOLID;
F::ProjSim.SetupTrace(filter, nMask, pWeapon);
#ifdef SPLASH_DEBUG5
G::BoxStorage.emplace_back(vPoint, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, Vec3(), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 0), Color_t(0, 0, 0, 0));
@@ -1130,15 +1096,14 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
if (!tProjInfo.m_flGravity)
{
CTraceFilterWorldAndPropsOnly filterWorld = {};
SDK::TraceHull(tProjInfo.m_vPos, vPoint, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, MASK_SOLID, &filterWorld, &trace);
SDK::TraceHull(tProjInfo.m_vPos, vPoint, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
#ifdef SPLASH_DEBUG6
mTraceCount["Nograv trace"]++;
#endif
#ifdef SPLASH_DEBUG5
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tProjInfo.m_vPos, vPoint), I::GlobalVars->curtime + 5.f, Color_t(0, 0, 0));
#endif
if (trace.fraction < 0.999f)
if (trace.fraction < 0.999f && trace.m_pEnt != tTarget.m_pEntity)
return false;
}
@@ -1160,7 +1125,7 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
if (!bSplash)
{
SDK::TraceHull(vOld, vNew, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, MASK_SOLID, &filter, &trace);
SDK::TraceHull(vOld, vNew, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
#ifdef SPLASH_DEBUG6
mTraceCount["Direct trace"]++;
#endif
@@ -1177,7 +1142,7 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
if (n % Vars::Aimbot::Projectile::SplashTraceInterval.Value && n != iSimTime && !bPrimeTime)
continue;
SDK::TraceHull(vStaticPos, vNew, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, MASK_SOLID, &filterSplash, &trace);
SDK::TraceHull(vStaticPos, vNew, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
#ifdef SPLASH_DEBUG6
mTraceCount["Splash trace"]++;
#endif
@@ -1198,25 +1163,27 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
bool bValid = bTarget && bTime;
if (bValid && bSplash)
{
bValid = SDK::VisPosWorld(nullptr, tTarget.m_pEntity, trace.endpos, vPoint, MASK_SOLID);
bValid = SDK::VisPosWorld(nullptr, tTarget.m_pEntity, trace.endpos, vPoint, nMask);
#ifdef SPLASH_DEBUG6
mTraceCount["Splash vispos"]++;
#endif
if (bValid)
{
Vec3 vFrom = trace.endpos;
switch (pWeapon->GetWeaponID())
{
case TF_WEAPON_ROCKETLAUNCHER:
case TF_WEAPON_ROCKETLAUNCHER_DIRECTHIT:
case TF_WEAPON_PARTICLE_CANNON:
CGameTrace eyeTrace = {};
CTraceFilterWorldAndPropsOnly filter = {};
SDK::Trace(trace.endpos + trace.plane.normal, tTarget.m_vPos + tTarget.m_pEntity->As<CTFPlayer>()->GetViewOffset(), MASK_SHOT, &filter, &eyeTrace);
bValid = eyeTrace.fraction == 1.f;
#ifdef SPLASH_DEBUG6
mTraceCount["Rocket trace"]++;
#endif
vFrom += trace.plane.normal;
}
CGameTrace eyeTrace = {};
SDK::Trace(vFrom, tTarget.m_vPos + tTarget.m_pEntity->As<CTFPlayer>()->GetViewOffset(), MASK_SHOT, &filter, &eyeTrace);
bValid = eyeTrace.fraction == 1.f;
#ifdef SPLASH_DEBUG6
mTraceCount["Eye trace"]++;
#endif
}
}
@@ -1279,8 +1246,8 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
auto pSet = pHDR->pHitboxSet(tTarget.m_pEntity->As<CTFPlayer>()->m_nHitboxSet());
if (!pSet) break;
auto pBones = H::Entities.GetBones(tTarget.m_pEntity->entindex());
if (!pBones)
auto aBones = H::Entities.GetBones(tTarget.m_pEntity->entindex());
if (!aBones)
break;
Vec3 vForward = vOld - vNew; vForward.Normalize();
@@ -1296,7 +1263,7 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
if (!pBox)
continue;
Vec3 vCenter; Math::VectorTransform((pBox->bbmin + pBox->bbmax) / 2, pBones[pBox->bone], vCenter);
Vec3 vCenter; Math::VectorTransform((pBox->bbmin + pBox->bbmax) / 2, aBones[pBox->bone], vCenter);
const float flDist = vPos.DistTo(vCenter);
if (closestId != -1 && flDist < closestDist || closestId == -1)
@@ -1344,8 +1311,7 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon,
std::vector<Vec3>* pPlayerPath, std::vector<Vec3>* pProjectilePath, std::vector<DrawBox_t>* pBoxes, float* pTimeTo)
int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
{
//if (Vars::Aimbot::General::Ignore.Value & Vars::Aimbot::General::IgnoreEnum::Unsimulated && H::Entities.GetChoke(tTarget.m_pEntity->entindex()) > Vars::Aimbot::General::TickTolerance.Value)
// return false;
@@ -1501,10 +1467,10 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
{
iLowestPriority = iPriority; flLowestDist = flDist;
vAngleTo = vAngles, vPredicted = tTarget.m_vPos, vTarget = vOriginalPoint;
*pTimeTo = vPoint.m_Solution.m_flTime + tInfo.m_flLatency;
*pPlayerPath = tStorage.m_vPath;
pPlayerPath->push_back(tStorage.m_MoveData.m_vecAbsOrigin);
*pProjectilePath = vProjLines;
m_flTimeTo = vPoint.m_Solution.m_flTime + tInfo.m_flLatency;
m_vPlayerPath = tStorage.m_vPath;
m_vPlayerPath.push_back(tStorage.m_MoveData.m_vecAbsOrigin);
m_vProjectilePath = vProjLines;
}
else switch (Vars::Aimbot::General::AimType.Value)
{
@@ -1523,8 +1489,8 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
{
iLowestSmoothPriority = iPriority; flLowestSmoothDist = flDist;
vAngleTo = vAngles, vPredicted = tTarget.m_vPos;
*pPlayerPath = tStorage.m_vPath;
pPlayerPath->push_back(tStorage.m_MoveData.m_vecAbsOrigin);
m_vPlayerPath = tStorage.m_vPath;
m_vPlayerPath.push_back(tStorage.m_MoveData.m_vecAbsOrigin);
iReturn = 2;
}
}
@@ -1532,7 +1498,7 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
}
if (!j && bHitSolid)
*pTimeTo = vPoint.m_Solution.m_flTime + tInfo.m_flLatency;
m_flTimeTo = vPoint.m_Solution.m_flTime + tInfo.m_flLatency;
j++;
}
}
@@ -1550,59 +1516,23 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
if (bAny && (Vars::Colors::BoundHitboxEdge.Value.a || Vars::Colors::BoundHitboxFace.Value.a || Vars::Colors::BoundHitboxEdgeClipped.Value.a || Vars::Colors::BoundHitboxFaceClipped.Value.a))
{
tInfo.m_vHull = tInfo.m_vHull.Max(1);
float flProjectileTime = TICKS_TO_TIME(pProjectilePath->size());
float flTargetTime = tStorage.m_bFailed ? flProjectileTime : TICKS_TO_TIME(pPlayerPath->size());
float flProjectileTime = TICKS_TO_TIME(m_vProjectilePath.size());
float flTargetTime = tStorage.m_bFailed ? flProjectileTime : TICKS_TO_TIME(m_vPlayerPath.size());
if (Vars::Visuals::Hitbox::BoundsEnabled.Value & Vars::Visuals::Hitbox::BoundsEnabledEnum::OnShot)
{
if (Vars::Colors::BoundHitboxEdge.Value.a || Vars::Colors::BoundHitboxFace.Value.a)
pBoxes->emplace_back(vPredicted, tTarget.m_pEntity->m_vecMins(), tTarget.m_pEntity->m_vecMaxs(), Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flTargetTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdge.Value, Vars::Colors::BoundHitboxFace.Value);
m_vBoxes.emplace_back(vPredicted, tTarget.m_pEntity->m_vecMins(), tTarget.m_pEntity->m_vecMaxs(), Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flTargetTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdge.Value, Vars::Colors::BoundHitboxFace.Value);
if (Vars::Colors::BoundHitboxEdgeClipped.Value.a || Vars::Colors::BoundHitboxFaceClipped.Value.a)
pBoxes->emplace_back(vPredicted, tTarget.m_pEntity->m_vecMins(), tTarget.m_pEntity->m_vecMaxs(), Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flTargetTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdgeClipped.Value, Vars::Colors::BoundHitboxFaceClipped.Value, true);
m_vBoxes.emplace_back(vPredicted, tTarget.m_pEntity->m_vecMins(), tTarget.m_pEntity->m_vecMaxs(), Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flTargetTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdgeClipped.Value, Vars::Colors::BoundHitboxFaceClipped.Value, true);
}
if (bMain && Vars::Visuals::Hitbox::BoundsEnabled.Value & Vars::Visuals::Hitbox::BoundsEnabledEnum::AimPoint)
{
if (Vars::Colors::BoundHitboxEdge.Value.a || Vars::Colors::BoundHitboxFace.Value.a)
pBoxes->emplace_back(vTarget, tInfo.m_vHull * -1, tInfo.m_vHull, Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flProjectileTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdge.Value, Vars::Colors::BoundHitboxFace.Value);
m_vBoxes.emplace_back(vTarget, tInfo.m_vHull * -1, tInfo.m_vHull, Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flProjectileTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdge.Value, Vars::Colors::BoundHitboxFace.Value);
if (Vars::Colors::BoundHitboxEdgeClipped.Value.a || Vars::Colors::BoundHitboxFaceClipped.Value.a)
pBoxes->emplace_back(vTarget, tInfo.m_vHull * -1, tInfo.m_vHull, Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flProjectileTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdgeClipped.Value, Vars::Colors::BoundHitboxFaceClipped.Value, true);
/*
if (Vars::Debug::Info.Value && tTarget.m_nAimedHitbox == HITBOX_HEAD) // huntsman head
{
const Vec3 vOriginOffset = tTarget.m_pEntity->m_vecOrigin() - vPredicted;
auto pBones = H::Entities.GetBones(tTarget.m_pEntity->entindex());
if (!pBones)
return true;
auto vBoxes = F::Visuals.GetHitboxes(pBones, tTarget.m_pEntity->As<CTFPlayer>(), { HITBOX_HEAD });
for (auto& bBox : vBoxes)
{
bBox.m_vPos -= vOriginOffset;
bBox.m_flTime = I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flTargetTime : Vars::Visuals::Hitbox::DrawDuration.Value);
pBoxes->push_back(bBox);
}
}
if (Vars::Debug::Info.Value && tTarget.m_nAimedHitbox == HITBOX_HEAD) // huntsman head, broken; removeme once 254 is fixed
{
const Vec3 vOriginOffset = tTarget.m_pEntity->m_vecOrigin() - vPredicted;
auto pBones = H::Entities.GetBones(tTarget.m_pEntity->entindex());
if (!pBones)
return true;
auto vBoxes = F::Visuals.GetHitboxes(pBones, tTarget.m_pEntity->As<CTFPlayer>(), { HITBOX_HEAD });
for (auto& bBox : vBoxes)
{
bBox.m_vPos -= vOriginOffset;
bBox.m_flTime = I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flTargetTime : Vars::Visuals::Hitbox::DrawDuration.Value);
bBox.m_vRotation = Vec3();
pBoxes->push_back(bBox);
}
}
*/
m_vBoxes.emplace_back(vTarget, tInfo.m_vHull * -1, tInfo.m_vHull, Vec3(), I::GlobalVars->curtime + (Vars::Visuals::Simulation::Timed.Value ? flProjectileTime : Vars::Visuals::Hitbox::DrawDuration.Value), Vars::Colors::BoundHitboxEdgeClipped.Value, Vars::Colors::BoundHitboxFaceClipped.Value, true);
}
}
@@ -1705,6 +1635,42 @@ static inline void CancelShot(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCm
}
}
static inline void DrawVisuals(int iResult, Target_t& tTarget, std::vector<Vec3>& vPlayerPath, std::vector<Vec3>& vProjectilePath, std::vector<DrawBox_t>& vBoxes)
{
if (G::Attacking == 1 || !Vars::Aimbot::General::AutoShoot.Value || iResult != 1)
{
bool bPlayerPath = Vars::Visuals::Simulation::PlayerPath.Value;
bool bProjectilePath = Vars::Visuals::Simulation::ProjectilePath.Value && (G::Attacking == 1 || Vars::Debug::Info.Value) && iResult == 1;
bool bBoxes = Vars::Visuals::Hitbox::BoundsEnabled.Value & (Vars::Visuals::Hitbox::BoundsEnabledEnum::OnShot | Vars::Visuals::Hitbox::BoundsEnabledEnum::AimPoint);
bool bRealPath = Vars::Visuals::Simulation::RealPath.Value && iResult == 1;
if (bPlayerPath || bProjectilePath || bBoxes || bRealPath)
{
G::PathStorage.clear();
G::BoxStorage.clear();
G::LineStorage.clear();
if (bPlayerPath)
{
if (Vars::Colors::PlayerPath.Value.a)
G::PathStorage.emplace_back(vPlayerPath, Vars::Visuals::Simulation::Timed.Value ? -int(vPlayerPath.size()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
if (Vars::Colors::PlayerPathClipped.Value.a)
G::PathStorage.emplace_back(vPlayerPath, Vars::Visuals::Simulation::Timed.Value ? -int(vPlayerPath.size()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
}
if (bProjectilePath)
{
if (Vars::Colors::ProjectilePath.Value.a)
G::PathStorage.emplace_back(vProjectilePath, Vars::Visuals::Simulation::Timed.Value ? -int(vProjectilePath.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::ProjectilePath.Value, Vars::Visuals::Simulation::ProjectilePath.Value);
if (Vars::Colors::ProjectilePathClipped.Value.a)
G::PathStorage.emplace_back(vProjectilePath, Vars::Visuals::Simulation::Timed.Value ? -int(vProjectilePath.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::ProjectilePathClipped.Value, Vars::Visuals::Simulation::ProjectilePath.Value, true);
}
if (bBoxes)
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
if (bRealPath)
F::Aimbot.Store(tTarget.m_pEntity, vPlayerPath.size());
}
}
}
bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd)
{
const int nWeaponID = pWeapon->GetWeaponID();
@@ -1756,16 +1722,16 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
#endif
for (auto& tTarget : vTargets)
{
float flTimeTo = 0.f; std::vector<Vec3> vPlayerPath, vProjectilePath; std::vector<DrawBox_t> vBoxes = {};
const int iResult = CanHit(tTarget, pLocal, pWeapon, &vPlayerPath, &vProjectilePath, &vBoxes, &flTimeTo);
m_flTimeTo = std::numeric_limits<float>::max();
m_vPlayerPath.clear(); m_vProjectilePath.clear(); m_vBoxes.clear();
const int iResult = CanHit(tTarget, pLocal, pWeapon);
if (iResult != 1 && pWeapon->GetWeaponID() == TF_WEAPON_CANNON && Vars::Aimbot::Projectile::Modifiers.Value & Vars::Aimbot::Projectile::ModifiersEnum::ChargeWeapon && !(pCmd->buttons & IN_ATTACK))
{
float flCharge = pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() > 0.f
? std::clamp(pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() - I::GlobalVars->curtime, 0.f, 1.f)
: 1.f;
if (!flTimeTo)
flTimeTo = std::numeric_limits<float>::max();
if (flCharge < flTimeTo)
if (flCharge < m_flTimeTo)
{
if (pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() > 0.f)
CancelShot(pLocal, pWeapon, pCmd, m_iLastTickCancel);
@@ -1781,26 +1747,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
if (iResult == 2)
{
G::AimTarget = { tTarget.m_pEntity->entindex(), I::GlobalVars->tickcount, 0 };
bool bPlayerPath = Vars::Visuals::Simulation::PlayerPath.Value;
bool bBoxes = Vars::Visuals::Hitbox::BoundsEnabled.Value & (Vars::Visuals::Hitbox::BoundsEnabledEnum::OnShot | Vars::Visuals::Hitbox::BoundsEnabledEnum::AimPoint);
if (bPlayerPath || bBoxes)
{
G::PathStorage.clear();
G::BoxStorage.clear();
G::LineStorage.clear();
if (bPlayerPath)
{
if (Vars::Colors::PlayerPath.Value.a)
G::PathStorage.emplace_back(vPlayerPath, Vars::Visuals::Simulation::Timed.Value ? -int(vPlayerPath.size()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
if (Vars::Colors::PlayerPathClipped.Value.a)
G::PathStorage.emplace_back(vPlayerPath, Vars::Visuals::Simulation::Timed.Value ? -int(vPlayerPath.size()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
}
if (bBoxes)
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
}
DrawVisuals(iResult, tTarget, m_vPlayerPath, m_vProjectilePath, m_vBoxes);
Aim(pCmd, tTarget.m_vAngleTo);
break;
}
@@ -1827,7 +1774,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
if (Vars::Aimbot::Projectile::Modifiers.Value & Vars::Aimbot::Projectile::ModifiersEnum::ChargeWeapon)
{
float flCharge = pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() - I::GlobalVars->curtime;
if (std::clamp(flCharge, 0.f, 1.f) < flTimeTo)
if (std::clamp(flCharge, 0.f, 1.f) < m_flTimeTo)
pCmd->buttons &= ~IN_ATTACK;
}
else
@@ -1850,36 +1797,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
}
F::Aimbot.m_bRan = G::Attacking = SDK::IsAttacking(pLocal, pWeapon, pCmd, true);
if (G::Attacking == 1 || !Vars::Aimbot::General::AutoShoot.Value)
{
bool bPlayerPath = Vars::Visuals::Simulation::PlayerPath.Value;
bool bProjectilePath = Vars::Visuals::Simulation::ProjectilePath.Value && (G::Attacking == 1 || Vars::Debug::Info.Value);
bool bBoxes = Vars::Visuals::Hitbox::BoundsEnabled.Value & (Vars::Visuals::Hitbox::BoundsEnabledEnum::OnShot | Vars::Visuals::Hitbox::BoundsEnabledEnum::AimPoint);
if (bPlayerPath || bProjectilePath || bBoxes)
{
G::PathStorage.clear();
G::BoxStorage.clear();
G::LineStorage.clear();
if (bPlayerPath)
{
if (Vars::Colors::PlayerPath.Value.a)
G::PathStorage.emplace_back(vPlayerPath, Vars::Visuals::Simulation::Timed.Value ? -int(vPlayerPath.size()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPath.Value, Vars::Visuals::Simulation::PlayerPath.Value);
if (Vars::Colors::PlayerPathClipped.Value.a)
G::PathStorage.emplace_back(vPlayerPath, Vars::Visuals::Simulation::Timed.Value ? -int(vPlayerPath.size()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathClipped.Value, Vars::Visuals::Simulation::PlayerPath.Value, true);
}
if (bProjectilePath)
{
if (Vars::Colors::ProjectilePath.Value.a)
G::PathStorage.emplace_back(vProjectilePath, Vars::Visuals::Simulation::Timed.Value ? -int(vProjectilePath.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::ProjectilePath.Value, Vars::Visuals::Simulation::ProjectilePath.Value);
if (Vars::Colors::ProjectilePathClipped.Value.a)
G::PathStorage.emplace_back(vProjectilePath, Vars::Visuals::Simulation::Timed.Value ? -int(vProjectilePath.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()) : I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::ProjectilePathClipped.Value, Vars::Visuals::Simulation::ProjectilePath.Value, true);
}
if (bBoxes)
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
}
}
DrawVisuals(iResult, tTarget, m_vPlayerPath, m_vProjectilePath, m_vBoxes);
Aim(pCmd, tTarget.m_vAngleTo);
if (G::PSilentAngles)
@@ -58,7 +58,7 @@ class CAimbotProjectile
void CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, Info_t& tInfo, int iSimTime, Solution_t& out, bool bAccuracy = true);
bool TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Target_t& tTarget, Vec3& vPoint, Vec3& vAngles, int iSimTime, bool bSplash, bool* pHitSolid = nullptr, std::vector<Vec3>* pProjectilePath = nullptr);
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, std::vector<Vec3>* pPlayerPath, std::vector<Vec3>* pProjectilePath, std::vector<DrawBox_t>* pBoxes, float* pTimeTo);
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
bool RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
bool Aim(Vec3 vCurAngle, Vec3 vToAngle, Vec3& vOut, int iMethod = Vars::Aimbot::General::AimType.Value);
@@ -66,6 +66,11 @@ class CAimbotProjectile
bool m_bLastTickHeld = false;
float m_flTimeTo = std::numeric_limits<float>::max();
std::vector<Vec3> m_vPlayerPath = {};
std::vector<Vec3> m_vProjectilePath = {};
std::vector<DrawBox_t> m_vBoxes = {};
public:
void Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
float GetSplashRadius(CTFWeaponBase* pWeapon, CTFPlayer* pPlayer);
@@ -106,7 +106,7 @@ static inline bool CheckEntities(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUse
continue;
}
if (!SDK::VisPosProjectile(pProjectile, pEntity, vOrigin, pEntity->IsPlayer() ? pEntity->GetAbsOrigin() + pEntity->As<CTFPlayer>()->GetViewOffset() : pEntity->GetCenter(), MASK_SHOT))
if (!SDK::VisPosCollideable(pProjectile, pEntity, vOrigin, pEntity->IsPlayer() ? pEntity->GetAbsOrigin() + pEntity->As<CTFPlayer>()->GetViewOffset() : pEntity->GetCenter(), MASK_SHOT))
continue;
if (pCmd && pWeapon->GetWeaponID() == TF_WEAPON_PIPEBOMBLAUNCHER && pWeapon->As<CTFPipebombLauncher>()->GetDetonateType() == TF_DETONATE_MODE_DOT)
@@ -398,7 +398,8 @@ void CAutoHeal::GetDangers(CTFPlayer* pTarget, bool bVaccinator, float& flBullet
case ETFClassID::CTFProjectile_SpellLightningOrb:
if (pEntity->As<CTFProjectile_Rocket>()->m_bCritical())
flMult = 3.f;
else if (pEntity->As<CTFBaseRocket>()->m_iDeflected())
else if (pEntity->As<CTFBaseRocket>()->m_iDeflected()
|| pTarget->InCond(TF_COND_BLASTJUMPING) && pWeapon && SDK::AttribHookValue(0, "mini_crit_airborne", pWeapon) == 1)
flMult = 1.36f;
break;
case ETFClassID::CTFProjectile_EnergyBall:
@@ -568,9 +569,12 @@ void CAutoHeal::AutoVaccinator(CTFPlayer* pLocal, CWeaponMedigun* pWeapon, CUser
{ 0.f, MEDIGUN_FIRE_RESIST }
};
GetDangers(pLocal, true, vResistDangers[MEDIGUN_BULLET_RESIST].first, vResistDangers[MEDIGUN_BLAST_RESIST].first, vResistDangers[MEDIGUN_FIRE_RESIST].first);
auto pTarget = pWeapon->m_hHealingTarget().Get()->As<CTFPlayer>();
if (pTarget && (!Vars::Aimbot::Healing::FriendsOnly.Value || H::Entities.IsFriend(pTarget->entindex()) || H::Entities.InParty(pTarget->entindex())))
std::vector<CTFPlayer*> vTargets = { pLocal };
if (auto pTarget = pWeapon->m_hHealingTarget().Get()->As<CTFPlayer>(); pTarget &&
(!Vars::Aimbot::Healing::FriendsOnly.Value || H::Entities.IsFriend(pTarget->entindex()) || H::Entities.InParty(pTarget->entindex())))
vTargets.push_back(pTarget);
for (auto pTarget : vTargets)
GetDangers(pTarget, true, vResistDangers[MEDIGUN_BULLET_RESIST].first, vResistDangers[MEDIGUN_BLAST_RESIST].first, vResistDangers[MEDIGUN_FIRE_RESIST].first);
std::sort(vResistDangers.begin(), vResistDangers.end(), [&](const std::pair<float, int>& a, const std::pair<float, int>& b) -> bool
{
@@ -154,7 +154,7 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
Vec3 New = F::ProjSim.GetOrigin();
CGameTrace trace = {};
CTraceFilterProjectile filter = {}; filter.pSkip = pLocal;
CTraceFilterCollideable filter = {}; filter.pSkip = pLocal;
SDK::Trace(Old, New, MASK_SOLID, &filter, &trace);
if (trace.DidHit())
{
+6 -6
View File
@@ -200,8 +200,8 @@ void CBacktrack::MakeRecords()
|| !H::Entities.GetDeltaTime(pPlayer->entindex()))
continue;
auto pBones = H::Entities.GetBones(pPlayer->entindex());
if (!pBones)
auto aBones = H::Entities.GetBones(pPlayer->entindex());
if (!aBones)
continue;
auto& vRecords = m_mRecords[pPlayer];
@@ -212,7 +212,7 @@ void CBacktrack::MakeRecords()
pPlayer->m_vecOrigin(),
pPlayer->m_vecMins(),
pPlayer->m_vecMaxs(),
*reinterpret_cast<BoneMatrix*>(pBones),
*reinterpret_cast<BoneMatrix*>(aBones),
m_mDidShoot[pPlayer->entindex()],
pPlayer->m_vecOrigin()
);
@@ -396,8 +396,8 @@ void CBacktrack::Draw(CTFPlayer* pLocal)
}
float flFakeLerp = GetFakeInterp() > G::Lerp ? GetFakeInterp() : 0.f;
float flFake = std::min(flFakeLatency + flFakeLerp, m_flMaxUnlag) * 1000.f;
float flLatency = std::max(pNetChan->GetLatency(FLOW_INCOMING) + pNetChan->GetLatency(FLOW_OUTGOING) - flFakeLatency, 0.f) * 1000.f;
float flFake = std::min(flFakeLatency + flFakeLerp, m_flMaxUnlag) * 1000;
float flLatency = std::max(pNetChan->GetLatency(FLOW_INCOMING) + pNetChan->GetLatency(FLOW_OUTGOING) - flFakeLatency, 0.f) * 1000;
int iLatencyScoreboard = pResource->m_iPing(pLocal->entindex());
int x = Vars::Menu::PingDisplay.Value.x;
@@ -417,7 +417,7 @@ void CBacktrack::Draw(CTFPlayer* pLocal)
align = ALIGN_TOPRIGHT;
}
if (flFake || Vars::Backtrack::Interp.Value)
if (flFake || Vars::Backtrack::Interp.Value > G::Lerp * 1000)
H::Draw.StringOutlined(fFont, x, y, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, align, std::format("Ping {:.0f} (+ {:.0f}) ms", flLatency, flFake).c_str());
else
H::Draw.StringOutlined(fFont, x, y, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, align, std::format("Ping {:.0f} ms", flLatency).c_str());
+2 -2
View File
@@ -39,8 +39,8 @@ class CBacktrack
void MakeRecords();
void CleanRecords();
std::unordered_map<CBaseEntity*, std::deque<TickRecord>> m_mRecords;
std::unordered_map<int, bool> m_mDidShoot;
std::unordered_map<CBaseEntity*, std::deque<TickRecord>> m_mRecords = {};
std::unordered_map<int, bool> m_mDidShoot = {};
std::deque<CIncomingSequence> m_dSequences;
int m_iLastInSequence = 0;
@@ -42,7 +42,7 @@ class CCheaterDetection
void Infract(CTFPlayer* pEntity, std::string sReason);
std::unordered_map<CTFPlayer*, PlayerInfo> mData;
std::unordered_map<CTFPlayer*, PlayerInfo> mData = {};
public:
void Run();
+1 -1
View File
@@ -7,7 +7,7 @@ using CommandCallback = std::function<void(std::deque<std::string>)>;
class CCommands
{
private:
std::unordered_map<uint32_t, CommandCallback> m_mCommands;
std::unordered_map<uint32_t, CommandCallback> m_mCommands = {};
public:
void Initialize();
+108 -78
View File
@@ -17,7 +17,7 @@ Enum(FToggle, None = 0, Left = 1 << 0, Right = 1 << 1, PlainColor = 1 << 2);
Enum(FSlider, None = 0, Left = 1 << 0, Right = 1 << 1, Clamp = 1 << 2, Min = 1 << 3, Max = 1 << 4, Precision = 1 << 5, NoAutoUpdate = 1 << 6);
Enum(FDropdown, None = 0, Left = 1 << 0, Right = 1 << 1, Multi = 1 << 2, Modifiable = 1 << 3);
Enum(FSDropdown, None = 0, Custom = 1 << 2, AutoUpdate = 1 << 3);
Enum(FColorPicker, None = 0, Left = 1 << 0, Middle = 1 << 1, SameLine = 1 << 2, Dropdown = 1 << 3, Tooltip = 1 << 4);
Enum(FColorPicker, None = 0, Left = 1 << 0, Right = 1 << 1, Full = 1 << 2, SameLine = 1 << 3, Tooltip = 1 << 4, NoTooltip = 1 << 5, RetainPosition = 1 << 6, HoverContents = 1 << 7, RemoveVisuals = 1 << 8);
Enum(Widget, Invalid, FToggle, FSlider, FISlider = FSlider, FFSlider, FIRSlider, FFRSlider, FDropdown, FSDropdown, FMDropdown, FColorPicker, FGColorPicker, FKeybind);
@@ -50,7 +50,7 @@ static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs) { lhs.x /= rhs.
namespace ImGui
{
std::unordered_map<uint32_t, int> mActiveMap;
std::unordered_map<uint32_t, int> mActiveMap = {};
bool Disabled = false, Transparent = false;
int CurrentBind = DEFAULT_BIND;
@@ -114,7 +114,7 @@ namespace ImGui
ImVec2 m_vPos;
ImVec2 m_vSize;
};
static std::vector<Row_t> vRowSizes;
static std::vector<Row_t> vRowSizes = {};
inline void AddRowSize(ImVec2 vPos, ImVec2 vSize)
{
if (GetCurrentWindow()->Flags & ImGuiWindowFlags_Popup)
@@ -683,8 +683,8 @@ namespace ImGui
return FBeginMenu(sLabel, &tColor, flRounding, bEnabled);
}
static std::unordered_map<uint32_t, float> mLastHeights;
static std::vector<uint32_t> vStoredLabels;
static std::unordered_map<uint32_t, float> mLastHeights = {};
static std::vector<uint32_t> vStoredLabels = {};
inline bool Section(const char* sLabel, float flPaddingMod = 0.f, float flMinHeight = 28.f, bool bForceHeight = false, uint32_t uHash = 0)
{
if (!uHash)
@@ -1102,9 +1102,7 @@ namespace ImGui
if (Transparent || Disabled)
PushStyleVar(ImGuiStyleVar_Alpha, 0.5f);
ImVec2 vSize;
vSize.x = GetWindowWidth();
ImVec2 vSize = { GetWindowWidth(), 0 };
if (iFlags & (FToggleEnum::Left | FToggleEnum::Right))
vSize.x = vSize.x / 2 - GetStyle().WindowPadding.x * 1.5f;
else
@@ -1164,7 +1162,7 @@ namespace ImGui
ImDrawList* pDrawList = GetWindowDrawList();
float flOriginal1 = *pVar1, flOriginal2 = pVar2 ? *pVar2 : 0.f;
static std::unordered_map<uint32_t, std::pair<float, float>> mStaticVars;
static std::unordered_map<uint32_t, std::pair<float, float>> mStaticVars = {};
if (!mActiveMap[uHash])
mStaticVars[uHash] = { flOriginal1, flOriginal2 };
float& flSVar1 = mStaticVars[uHash].first, &flSVar2 = mStaticVars[uHash].second;
@@ -1847,7 +1845,7 @@ namespace ImGui
return bReturn;
}
inline bool ColorPicker(const char* sLabel, Color_t* pColor, bool bTooltip = true, int iFlags = FColorPickerEnum::None, ImVec2 vSize = { H::Draw.Scale(12), H::Draw.Scale(12) })
inline bool ColorPicker(const char* sLabel, Color_t* pColor, bool bTooltip = true, ImVec2 vSize = { H::Draw.Scale(12), H::Draw.Scale(12) })
{
ImVec2 vOriginalPos = GetCursorPos();
if (Disabled)
@@ -1883,78 +1881,99 @@ namespace ImGui
}
// if items overlap, use before to have working input, e.g. a middle toggle and a color picker
inline bool FColorPicker(const char* sLabel, Color_t* pColor, int iOffset = 0, int iFlags = FColorPickerEnum::None, bool* pHovered = nullptr)
inline bool FColorPicker(const char* sLabel, Color_t* pColor, int iFlags = FColorPickerEnum::None, ImVec2 vOffset = {}, ImVec2 vSize = { H::Draw.Scale(12), H::Draw.Scale(12) }, ImVec2 vIconOffset = {}, bool* pHovered = nullptr)
{
if (Transparent || Disabled)
PushStyleVar(ImGuiStyleVar_Alpha, 0.5f);
bool bReturn = false;
ImVec2 vOriginalPos;
ImVec2 vSize = { H::Draw.Scale(12), H::Draw.Scale(12) };
if (!(iFlags & FColorPickerEnum::Dropdown))
if (iFlags & FColorPickerEnum::RemoveVisuals)
{
if (iFlags & (FColorPickerEnum::Left | FColorPickerEnum::Middle))
{
vSize.x = GetWindowWidth() / 2 - GetStyle().WindowPadding.x * 1.5f;
if (iFlags & FColorPickerEnum::Middle)
SameLine(vSize.x + GetStyle().WindowPadding.x * 2.f);
SetCursorPosX(GetCursorPosX() - H::Draw.Scale(iOffset * 12));
vOffset = {};
vSize = { H::Draw.Scale(12), H::Draw.Scale(12) };
vIconOffset = {};
}
vOriginalPos = GetCursorPos();
ImVec2 vOriginalPos = GetCursorPos();
ImVec2 vContentSize = vSize;
ImVec2 vLastSize = GetItemRectSize();
auto vWrapped = WrapText(StripDoubleHash(sLabel), vSize.x - H::Draw.Scale(24));
int iWraps = std::min(int(vWrapped.size()), 2); // prevent too many wraps
vSize.y = H::Draw.Scale(6 + 18 * iWraps);
SetCursorPos({ vOriginalPos.x + H::Draw.Scale(6), vOriginalPos.y + H::Draw.Scale(-3 + 9 * iWraps) });
bReturn = ColorPicker(sLabel, pColor, iFlags & FColorPickerEnum::Tooltip);
for (size_t i = 0; i < iWraps; i++)
{
SetCursorPos({ vOriginalPos.x + H::Draw.Scale(24), vOriginalPos.y + H::Draw.Scale(5 + 18 * i) });
TextUnformatted(vWrapped[i].c_str());
}
SetCursorPos(vOriginalPos);
AddRowSize(vOriginalPos, vSize);
DebugDummy({ vSize.x, GetRowSize(vSize.y) });
}
else
{
if (iFlags & FColorPickerEnum::SameLine)
SameLine();
SetCursorPosX(GetContentRegionMax().x - H::Draw.Scale(18 + iOffset * 12));
vOriginalPos = GetCursorPos();
SetCursorPosY(vOriginalPos.y + H::Draw.Scale(6));
bReturn = ColorPicker(sLabel, pColor, true);
SetCursorPos(vOriginalPos);
DebugDummy({});
vOriginalPos.y += H::Draw.Scale(6);
}
if (iFlags & (FColorPickerEnum::Left | FColorPickerEnum::Right))
{
vContentSize.x = GetWindowWidth() / 2 - GetStyle().WindowPadding.x * 1.5f;
vContentSize.y = std::max(H::Draw.Scale(24), vContentSize.y);
}
else if (iFlags & FColorPickerEnum::Full)
{
vContentSize.x = GetWindowWidth() - GetStyle().WindowPadding.x * 2;
vContentSize.y = std::max(H::Draw.Scale(24), vContentSize.y);
}
if (iFlags & (FColorPickerEnum::Left | FColorPickerEnum::Full))
iFlags |= FColorPickerEnum::HoverContents;
else if (iFlags & FColorPickerEnum::Right)
{
SameLine(vContentSize.x + GetStyle().WindowPadding.x * 2.f);
iFlags |= FColorPickerEnum::HoverContents;
}
else if (iFlags & FColorPickerEnum::SameLine)
{
SameLine();
vOffset.x -= GetStyle().WindowPadding.x;
vIconOffset.y += H::Draw.Scale(8);
}
else
{
float flOriginalPosY = GetCursorPosY();
SameLine();
vSize = { H::Draw.Scale(10), flOriginalPosY - GetCursorPosY() - GetStyle().WindowPadding.y };
SetCursorPosX(GetCursorPosX() - GetStyle().WindowPadding.y);
vOriginalPos = GetCursorPos();
SetCursorPosY(GetCursorPosY() + GetStyle().WindowPadding.y);
bReturn = ColorPicker(sLabel, pColor, iFlags & FColorPickerEnum::Tooltip, iFlags, vSize);
SetCursorPos(vOriginalPos);
AddRowSize(vOriginalPos, { vSize.x, vSize.y + GetStyle().WindowPadding.y });
DebugDummy({ vSize.x, GetRowSize(vSize.y + GetStyle().WindowPadding.y) });
vOriginalPos.y += GetStyle().WindowPadding.y;
vSize = { H::Draw.Scale(10), H::Draw.Scale(40) };
SetCursorPosX(GetContentRegionMax().x - H::Draw.Scale(18));
iFlags |= FColorPickerEnum::RetainPosition;
vIconOffset.y += H::Draw.Scale(6);
}
if (pHovered)
SetCursorPos(GetCursorPos() + vOffset);
ImVec2 vOriginalPos2 = GetCursorPos();
bool bTooltip = iFlags & FColorPickerEnum::Tooltip || !(iFlags & (FColorPickerEnum::Left | FColorPickerEnum::Right | FColorPickerEnum::Full | FColorPickerEnum::NoTooltip));
{
float flIconOffset;
if (vContentSize.x > vContentSize.y)
flIconOffset = (vContentSize.y - vSize.y) / 2;
else
flIconOffset = (vContentSize.x - vSize.x) / 2;
vIconOffset += { flIconOffset, flIconOffset };
}
std::deque<std::string> vWrapped;
int iWraps = 0;
if (iFlags & (FColorPickerEnum::Left | FColorPickerEnum::Right | FColorPickerEnum::Full))
{
vWrapped = WrapText(StripDoubleHash(sLabel), vContentSize.x - H::Draw.Scale(24));
iWraps = std::min(int(vWrapped.size()), 2); // prevent too many wraps
float flNewSizeY = std::max(H::Draw.Scale(6 + 18 * iWraps), vContentSize.y);
vIconOffset.y += (flNewSizeY - vContentSize.y) / 2;
vContentSize.y = flNewSizeY;
}
SetCursorPos(vOriginalPos2 + vIconOffset);
bool bReturn = ColorPicker(sLabel, pColor, bTooltip, vSize);
if (pHovered && !(iFlags & FColorPickerEnum::HoverContents))
*pHovered = IsItemHovered();
for (size_t i = 0; i < iWraps; i++)
{
SetCursorPos({ vOriginalPos2.x + vIconOffset.x + vSize.x + H::Draw.Scale(6), vOriginalPos2.y + vContentSize.y / 2 + H::Draw.Scale(2 - 9 * iWraps + 18 * int(i)) });
TextUnformatted(vWrapped[i].c_str());
}
if (iFlags & FColorPickerEnum::RetainPosition)
{
SetCursorPos(vOriginalPos);
DebugDummy({});
}
else
{
vContentSize = { std::max(vSize.x + vIconOffset.x, vContentSize.x), std::max(vSize.y + vIconOffset.y, vContentSize.y) };
SetCursorPos(vOriginalPos2);
AddRowSize(vOriginalPos2, vContentSize);
DebugDummy(vContentSize);
}
if (pHovered && iFlags & FColorPickerEnum::HoverContents)
*pHovered = IsItemHovered();
if (Transparent || Disabled)
@@ -2198,7 +2217,7 @@ namespace ImGui
ImVec2 vOriginalPos2 = GetCursorPos();
if (bFlagActive) // do here so as to not sink input
{
SetCursorPos({ vOriginalPos2.x + vSize.x - H::Draw.Scale(31), vOriginalPos2.y - H::Draw.Scale(1) });
SetCursorPos({ vOriginalPos2.x + vSize.x - H::Draw.Scale(31), vOriginalPos2.y + H::Draw.Scale(1) });
ColorPicker(std::format("MaterialColor{}", iEntry).c_str(), &it->second->second, false);
SetCursorPos(vOriginalPos2);
}
@@ -2428,7 +2447,7 @@ namespace ImGui
vValues.push_back(-1);
int iModified = -2;
if (FDropdown("Bind", &iBind, vEntries, vValues, FDropdownEnum::Modifiable, -60, "None", nullptr, &iModified))
if (FDropdown("Bind", &iBind, vEntries, vValues, FDropdownEnum::Modifiable, -85, "None", nullptr, &iModified))
{
if (iBind != DEFAULT_BIND && iBind < F::Binds.m_vBinds.size())
tBind = F::Binds.m_vBinds[iBind];
@@ -2472,19 +2491,29 @@ namespace ImGui
{
ImVec2 vOriginalPos = GetCursorPos();
int iOffset = 9;
SetCursorPos({ GetWindowWidth() - H::Draw.Scale(34), H::Draw.Scale(36) });
PushTransparent(Transparent || !tBind.m_bEnabled, true);
SetCursorPos({ GetWindowWidth() - H::Draw.Scale(iOffset += 25), H::Draw.Scale(36) });
PushTransparent(Transparent || tBind.m_iVisibility == BindVisibilityEnum::Hidden, true);
if (IconButton(tBind.m_iVisibility == BindVisibilityEnum::Always ? ICON_MD_VISIBILITY : ICON_MD_VISIBILITY_OFF, H::Draw.Scale(24), { 1, 1, 1, -1 }, &bHovered))
tBind.m_iVisibility = (tBind.m_iVisibility + 1) % 3;
PopTransparent(1, 1);
bLastHovered = bLastHovered || bHovered;
SetCursorPos({ GetWindowWidth() - H::Draw.Scale(59), H::Draw.Scale(36) });
SetCursorPos({ GetWindowWidth() - H::Draw.Scale(iOffset += 25), H::Draw.Scale(36) });
if (IconButton(!tBind.m_bNot ? ICON_MD_CODE : ICON_MD_CODE_OFF, H::Draw.Scale(24), { 1, 1, 1, -1 }, &bHovered))
tBind.m_bNot = !tBind.m_bNot;
bLastHovered = bLastHovered || bHovered;
SetCursorPos({ GetWindowWidth() - H::Draw.Scale(iOffset += 25), H::Draw.Scale(36) });
if (IconButton(!tBind.m_bEnabled ? ICON_MD_TOGGLE_OFF : ICON_MD_TOGGLE_ON, H::Draw.Scale(24), { 1, 1, 1, -1 }, &bHovered))
tBind.m_bEnabled = !tBind.m_bEnabled;
bLastHovered = bLastHovered || bHovered;
PopTransparent(1, 1);
SetCursorPos(vOriginalPos);
}
@@ -2514,6 +2543,7 @@ namespace ImGui
_tBind.m_iType = tBind.m_iType;
_tBind.m_iInfo = tBind.m_iInfo;
_tBind.m_iKey = tBind.m_iKey;
_tBind.m_bEnabled = tBind.m_bEnabled;
_tBind.m_iVisibility = tBind.m_iVisibility;
_tBind.m_bNot = tBind.m_bNot;
}
@@ -2550,7 +2580,7 @@ namespace ImGui
std::transform(sBind.begin(), sBind.end(), sBind.begin(), ::tolower);\
iFlags = iVarFlags; /*get rid of any visual flags*/\
if (FNV1A::Hash32Const(#function) == FNV1A::Hash32Const("FColorPicker"))\
iFlags |= FColorPickerEnum::Left; /*add left flag for color pickers*/\
iFlags |= FColorPickerEnum::Full | FColorPickerEnum::RemoveVisuals;\
PushTransparent(false);\
static bool bLastHovered = false;\
DrawBindInfo(var, staticVal, StripDoubleHash(sBind.c_str()), bNewPopup, bLastHovered);\
@@ -2574,6 +2604,6 @@ namespace ImGui
WRAPPER(FDropdown, int, VA_LIST(std::vector<const char*> vEntries, std::vector<int> vValues = {}, int iFlags = 0, int iSizeOffset = 0), VA_LIST(&val, vEntries, vValues, iFlags, iSizeOffset, var.m_sExtra ? var.m_sExtra : "None"))
WRAPPER(FSDropdown, std::string, VA_LIST(int iFlags = 0, int iSizeOffset = 0), VA_LIST(&val, var.m_vValues, iFlags, iSizeOffset))
WRAPPER(FMDropdown, VA_LIST(std::vector<std::pair<std::string, Color_t>>), VA_LIST(int iFlags = 0, int iSizeOffset = 0), VA_LIST(&val, iFlags, iSizeOffset))
WRAPPER(FColorPicker, Color_t, VA_LIST(int iOffset = 0, int iFlags = 0), VA_LIST(&val, iOffset, iFlags))
WRAPPER(FColorPicker, Gradient_t, VA_LIST(bool bStart = true, int iOffset = 0, int iFlags = 0), VA_LIST(bStart ? &val.StartColor : &val.EndColor, iOffset, iFlags))
WRAPPER(FColorPicker, Color_t, VA_LIST(int iFlags = 0, ImVec2 vOffset = {}, ImVec2 vSize = { H::Draw.Scale(12), H::Draw.Scale(12) }, ImVec2 vIconOffset = {}), VA_LIST(&val, iFlags, vOffset, vSize, vIconOffset))
WRAPPER(FColorPicker, Gradient_t, VA_LIST(bool bStart = true, int iFlags = 0, ImVec2 vOffset = {}, ImVec2 vSize = { H::Draw.Scale(12), H::Draw.Scale(12) }, ImVec2 vIconOffset = {}), VA_LIST(bStart ? &val.StartColor : &val.EndColor, iFlags, vOffset, vSize, vIconOffset))
}
+146 -151
View File
@@ -150,13 +150,13 @@ void CMenu::MenuAimbot(int iTab)
FDropdown(Vars::Aimbot::General::Ignore, FDropdownEnum::Right);
FSlider(Vars::Aimbot::General::AimFOV);
FSlider(Vars::Aimbot::General::MaxTargets, FSliderEnum::Left);
PushTransparent(!(FGet(Vars::Aimbot::General::Ignore) & Vars::Aimbot::General::IgnoreEnum::Cloaked));
PushTransparent(!(Vars::Aimbot::General::Ignore.Value & Vars::Aimbot::General::IgnoreEnum::Cloaked));
{
FSlider(Vars::Aimbot::General::IgnoreCloak, FSliderEnum::Right);
}
PopTransparent();
FSlider(Vars::Aimbot::General::AssistStrength, FSliderEnum::Left);
PushTransparent(!(FGet(Vars::Aimbot::General::Ignore) & Vars::Aimbot::General::IgnoreEnum::Unsimulated));
PushTransparent(!(Vars::Aimbot::General::Ignore.Value & Vars::Aimbot::General::IgnoreEnum::Unsimulated));
{
FSlider(Vars::Aimbot::General::TickTolerance, FSliderEnum::Right);
}
@@ -221,10 +221,9 @@ void CMenu::MenuAimbot(int iTab)
FDropdown(Vars::Aimbot::Hitscan::Hitboxes, FDropdownEnum::Left);
FDropdown(Vars::Aimbot::Hitscan::Modifiers, FDropdownEnum::Right);
FSlider(Vars::Aimbot::Hitscan::PointScale);
PushTransparent(!(FGet(Vars::Aimbot::Hitscan::Modifiers) & Vars::Aimbot::Hitscan::ModifiersEnum::Tapfire));
PushTransparent(!(Vars::Aimbot::Hitscan::Modifiers.Value & Vars::Aimbot::Hitscan::ModifiersEnum::Tapfire));
{
//FSlider(Vars::Aimbot::Hitscan::TapFireDist);
FSlider("Tapfire distance", &Vars::Aimbot::Hitscan::TapFireDist[DEFAULT_BIND], 0.f, 1000.f);
FSlider(Vars::Aimbot::Hitscan::TapFireDist);
}
PopTransparent();
} EndSection();
@@ -245,14 +244,14 @@ void CMenu::MenuAimbot(int iTab)
FDropdown(Vars::Aimbot::Projectile::Hitboxes, FDropdownEnum::Left);
FDropdown(Vars::Aimbot::Projectile::Modifiers, FDropdownEnum::Right);
FSlider(Vars::Aimbot::Projectile::MaxSimulationTime, FSliderEnum::Left);
PushTransparent(!FGet(Vars::Aimbot::Projectile::StrafePrediction));
PushTransparent(!Vars::Aimbot::Projectile::StrafePrediction.Value);
{
FSlider(Vars::Aimbot::Projectile::HitChance, FSliderEnum::Right);
}
PopTransparent();
FSlider(Vars::Aimbot::Projectile::AutodetRadius, FSliderEnum::Left);
FSlider(Vars::Aimbot::Projectile::SplashRadius, FSliderEnum::Right);
PushTransparent(!FGet(Vars::Aimbot::Projectile::AutoRelease));
PushTransparent(!Vars::Aimbot::Projectile::AutoRelease.Value);
{
FSlider(Vars::Aimbot::Projectile::AutoRelease);
}
@@ -350,19 +349,19 @@ void CMenu::MenuAimbot(int iTab)
FToggle(Vars::Doubletap::AntiWarp, FToggleEnum::Right);
FSlider(Vars::Doubletap::TickLimit, FSliderEnum::Left);
FSlider(Vars::Doubletap::WarpRate, FSliderEnum::Right);
FSlider(Vars::Doubletap::PassiveRecharge, FSliderEnum::Left);
FSlider(Vars::Doubletap::RechargeLimit, FSliderEnum::Right);
FSlider(Vars::Doubletap::RechargeLimit, FSliderEnum::Left);
FSlider(Vars::Doubletap::PassiveRecharge, FSliderEnum::Right);
} EndSection();
if (Section("Fakelag"))
{
FDropdown(Vars::Fakelag::Fakelag, FSliderEnum::Left);
FDropdown(Vars::Fakelag::Options, FDropdownEnum::Right);
PushTransparent(FGet(Vars::Fakelag::Fakelag) != Vars::Fakelag::FakelagEnum::Plain);
PushTransparent(Vars::Fakelag::Fakelag.Value != Vars::Fakelag::FakelagEnum::Plain);
{
FSlider(Vars::Fakelag::PlainTicks, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(FGet(Vars::Fakelag::Fakelag) != Vars::Fakelag::FakelagEnum::Random);
PushTransparent(Vars::Fakelag::Fakelag.Value != Vars::Fakelag::FakelagEnum::Random);
{
FSlider(Vars::Fakelag::RandomTicks, FSliderEnum::Right);
}
@@ -388,17 +387,17 @@ void CMenu::MenuAimbot(int iTab)
FDropdown(Vars::AntiAim::FakeYawMode, FDropdownEnum::Right);
FSlider(Vars::AntiAim::RealYawOffset, FSliderEnum::Left);
FSlider(Vars::AntiAim::FakeYawOffset, FSliderEnum::Right);
PushTransparent(FGet(Vars::AntiAim::YawReal) != Vars::AntiAim::YawEnum::Edge && FGet(Vars::AntiAim::YawReal) != Vars::AntiAim::YawEnum::Jitter);
PushTransparent(Vars::AntiAim::YawReal.Value != Vars::AntiAim::YawEnum::Edge && Vars::AntiAim::YawReal.Value != Vars::AntiAim::YawEnum::Jitter);
{
FSlider(Vars::AntiAim::RealYawValue, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(FGet(Vars::AntiAim::YawFake) != Vars::AntiAim::YawEnum::Edge && FGet(Vars::AntiAim::YawFake) != Vars::AntiAim::YawEnum::Jitter);
PushTransparent(Vars::AntiAim::YawFake.Value != Vars::AntiAim::YawEnum::Edge && Vars::AntiAim::YawFake.Value != Vars::AntiAim::YawEnum::Jitter);
{
FSlider(Vars::AntiAim::FakeYawValue, FSliderEnum::Right);
}
PopTransparent();
PushTransparent(FGet(Vars::AntiAim::YawFake) != Vars::AntiAim::YawEnum::Spin && FGet(Vars::AntiAim::YawReal) != Vars::AntiAim::YawEnum::Spin);
PushTransparent(Vars::AntiAim::YawFake.Value != Vars::AntiAim::YawEnum::Spin && Vars::AntiAim::YawReal.Value != Vars::AntiAim::YawEnum::Spin);
{
FSlider(Vars::AntiAim::SpinSpeed, FSliderEnum::Left);
}
@@ -415,19 +414,19 @@ void CMenu::MenuAimbot(int iTab)
if (Section("Resolver", 8))
{
FToggle(Vars::Resolver::Enabled, FToggleEnum::Left);
PushTransparent(!FGet(Vars::Resolver::Enabled));
PushTransparent(!Vars::Resolver::Enabled.Value);
{
FToggle(Vars::Resolver::AutoResolve, FToggleEnum::Right);
PushTransparent(Transparent || !FGet(Vars::Resolver::AutoResolve));
PushTransparent(Transparent || !Vars::Resolver::AutoResolve.Value);
{
FToggle(Vars::Resolver::AutoResolveCheatersOnly, FToggleEnum::Left);
FToggle(Vars::Resolver::AutoResolveHeadshotOnly, FToggleEnum::Right);
PushTransparent(Transparent || !FGet(Vars::Resolver::AutoResolveYawAmount));
PushTransparent(Transparent || !Vars::Resolver::AutoResolveYawAmount.Value);
{
FSlider(Vars::Resolver::AutoResolveYawAmount, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(Transparent || !FGet(Vars::Resolver::AutoResolvePitchAmount));
PushTransparent(Transparent || !Vars::Resolver::AutoResolvePitchAmount.Value);
{
FSlider(Vars::Resolver::AutoResolvePitchAmount, FSliderEnum::Right);
}
@@ -448,17 +447,17 @@ void CMenu::MenuAimbot(int iTab)
if (Section("Cheater Detection"))
{
FDropdown(Vars::CheaterDetection::Methods);
PushTransparent(!FGet(Vars::CheaterDetection::DetectionsRequired));
PushTransparent(!Vars::CheaterDetection::DetectionsRequired.Value);
{
FSlider(Vars::CheaterDetection::DetectionsRequired);
}
PopTransparent();
PushTransparent(!(FGet(Vars::CheaterDetection::Methods) & Vars::CheaterDetection::MethodsEnum::PacketChoking));
PushTransparent(!(Vars::CheaterDetection::Methods.Value & Vars::CheaterDetection::MethodsEnum::PacketChoking));
{
FSlider(Vars::CheaterDetection::MinimumChoking);
}
PopTransparent();
PushTransparent(!(FGet(Vars::CheaterDetection::Methods) & Vars::CheaterDetection::MethodsEnum::AimFlicking));
PushTransparent(!(Vars::CheaterDetection::Methods.Value & Vars::CheaterDetection::MethodsEnum::AimFlicking));
{
FSlider(Vars::CheaterDetection::MinimumFlick, FSliderEnum::Left);
FSlider(Vars::CheaterDetection::MaximumNoise, FSliderEnum::Right);
@@ -468,7 +467,7 @@ void CMenu::MenuAimbot(int iTab)
if (Section("Speedhack", 8))
{
FToggle(Vars::Speedhack::Enabled);
PushTransparent(!FGet(Vars::Speedhack::Enabled));
PushTransparent(!Vars::Speedhack::Enabled.Value);
{
FSlider(Vars::Speedhack::Amount);
}
@@ -489,32 +488,28 @@ void CMenu::MenuAimbot(int iTab)
{
if (Section("Line", 8))
{
FColorPicker(Vars::Colors::LineClipped, 0);
FColorPicker(Vars::Colors::Line, 1);
FColorPicker(Vars::Colors::Line, FColorPickerEnum::None, { -H::Draw.Scale(12), 0 });
FColorPicker(Vars::Colors::LineClipped);
FToggle(Vars::Visuals::Line::Enabled);
FSlider(Vars::Visuals::Line::DrawDuration);
} EndSection();
if (Section("Hitbox"))
{
FDropdown(Vars::Visuals::Hitbox::BonesEnabled, FDropdownEnum::None, -110);
FColorPicker(Vars::Colors::TargetHitboxEdge, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::TargetHitboxEdgeClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
SameLine(); DebugDummy({ H::Draw.Scale(2), 0 });
FColorPicker(Vars::Colors::TargetHitboxFace, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::TargetHitboxFaceClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
SameLine(); DebugDummy({ H::Draw.Scale(2), 0 });
FColorPicker(Vars::Colors::BoneHitboxEdge, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::BoneHitboxEdgeClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
SameLine(); DebugDummy({ H::Draw.Scale(2), 0 });
FColorPicker(Vars::Colors::BoneHitboxFace, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::BoneHitboxFaceClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FDropdown(Vars::Visuals::Hitbox::BonesEnabled, FDropdownEnum::None, -50);
FColorPicker(Vars::Colors::BoneHitboxEdge, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::BoneHitboxEdgeClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::BoneHitboxFace, FColorPickerEnum::SameLine, { H::Draw.Scale(10), 0 }, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::BoneHitboxFaceClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::TargetHitboxEdge, FColorPickerEnum::SameLine, { -H::Draw.Scale(50), H::Draw.Scale(20) }, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::TargetHitboxEdgeClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::TargetHitboxFace, FColorPickerEnum::SameLine, { H::Draw.Scale(10), 0 }, { H::Draw.Scale(10), H::Draw.Scale(20) });
FColorPicker(Vars::Colors::TargetHitboxFaceClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(20) });
FDropdown(Vars::Visuals::Hitbox::BoundsEnabled, FDropdownEnum::None, -50);
FColorPicker(Vars::Colors::BoundHitboxEdge, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::BoundHitboxEdgeClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
SameLine(); DebugDummy({ H::Draw.Scale(2), 0 });
FColorPicker(Vars::Colors::BoundHitboxFace, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::BoundHitboxFaceClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::BoundHitboxEdge, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::BoundHitboxEdgeClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::BoundHitboxFace, FColorPickerEnum::SameLine, { H::Draw.Scale(10), 0 }, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::BoundHitboxFaceClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FSlider(Vars::Visuals::Hitbox::DrawDuration);
} EndSection();
@@ -525,34 +520,34 @@ void CMenu::MenuAimbot(int iTab)
if (Section("Simulation"))
{
FDropdown(Vars::Visuals::Simulation::PlayerPath, FDropdownEnum::Left, -20);
FColorPicker(Vars::Colors::PlayerPath, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::PlayerPathClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::PlayerPath, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::PlayerPathClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FDropdown(Vars::Visuals::Simulation::ProjectilePath, FDropdownEnum::Right, -20);
FColorPicker(Vars::Colors::ProjectilePath, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::ProjectilePathClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::ProjectilePath, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::ProjectilePathClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FDropdown(Vars::Visuals::Simulation::TrajectoryPath, FDropdownEnum::Left, -20);
FColorPicker(Vars::Colors::TrajectoryPath, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::TrajectoryPathClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::TrajectoryPath, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::TrajectoryPathClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FDropdown(Vars::Visuals::Simulation::ShotPath, FDropdownEnum::Right, -20);
FColorPicker(Vars::Colors::ShotPath, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::ShotPathClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::ShotPath, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::ShotPathClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FDropdown(Vars::Visuals::Simulation::SplashRadius, FDropdownEnum::None, -20);
FColorPicker(Vars::Colors::SplashRadius, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::SplashRadiusClipped, 0, FColorPickerEnum::Dropdown | FColorPickerEnum::Tooltip);
FColorPicker(Vars::Colors::SplashRadius, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FColorPicker(Vars::Colors::SplashRadiusClipped, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FToggle(Vars::Visuals::Simulation::Timed, FToggleEnum::Left);
FToggle(Vars::Visuals::Simulation::Box, FToggleEnum::Right);
FToggle(Vars::Visuals::Simulation::ProjectileCamera, FToggleEnum::Left);
FToggle(Vars::Visuals::Simulation::SwingLines, FToggleEnum::Right);
PushTransparent(FGet(Vars::Visuals::Simulation::Timed));
{
FSlider(Vars::Visuals::Simulation::DrawDuration);
}
PopTransparent();
FSlider(Vars::Visuals::Simulation::DrawDuration);
} EndSection();
if (Vars::Debug::Options.Value)
{
if (Section("##Debug Part1"))
if (Section("##Debug Part1", -8))
{
FDropdown(Vars::Visuals::Simulation::RealPath, FDropdownEnum::None, -20);
FColorPicker(Vars::Colors::RealPath);
FColorPicker(Vars::Colors::RealPathClipped);
FSlider(Vars::Visuals::Simulation::SeparatorSpacing, FSliderEnum::Left);
FSlider(Vars::Visuals::Simulation::SeparatorLength, FSliderEnum::Right);
} EndSection();
@@ -607,22 +602,22 @@ void CMenu::MenuVisuals(int iTab)
if (Section("ESP"))
{
FDropdown(Vars::ESP::Draw);
PushTransparent(!(FGet(Vars::ESP::Draw) & Vars::ESP::DrawEnum::Players));
PushTransparent(!(Vars::ESP::Draw.Value & Vars::ESP::DrawEnum::Players));
{
FDropdown(Vars::ESP::Player);
}
PopTransparent();
PushTransparent(!(FGet(Vars::ESP::Draw) & Vars::ESP::DrawEnum::Buildings));
PushTransparent(!(Vars::ESP::Draw.Value & Vars::ESP::DrawEnum::Buildings));
{
FDropdown(Vars::ESP::Building);
}
PopTransparent();
PushTransparent(!(FGet(Vars::ESP::Draw) & Vars::ESP::DrawEnum::Projectiles));
PushTransparent(!(Vars::ESP::Draw.Value & Vars::ESP::DrawEnum::Projectiles));
{
FDropdown(Vars::ESP::Projectile);
}
PopTransparent();
PushTransparent(!(FGet(Vars::ESP::Draw) & Vars::ESP::DrawEnum::Objective));
PushTransparent(!(Vars::ESP::Draw.Value & Vars::ESP::DrawEnum::Objective));
{
FDropdown(Vars::ESP::Objective);
}
@@ -643,22 +638,22 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Colors::Relative);
if (FGet(Vars::Colors::Relative))
{
FColorPicker(Vars::Colors::Enemy, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Team, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Enemy, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Team, FColorPickerEnum::Right);
}
else
{
FColorPicker(Vars::Colors::TeamRed, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::TeamBlu, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::TeamRed, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::TeamBlu, FColorPickerEnum::Right);
}
FColorPicker(Vars::Colors::Local, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Target, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Health, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Ammo, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Money, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Powerup, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::NPC, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Halloween, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Local, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Target, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::Health, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Ammo, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::Money, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Powerup, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::NPC, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Halloween, FColorPickerEnum::Right);
} EndSection();
if (Section("Dormancy", 8))
{
@@ -768,31 +763,31 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Colors::Relative);
if (FGet(Vars::Colors::Relative))
{
FColorPicker(Vars::Colors::Enemy, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Team, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Enemy, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Team, FColorPickerEnum::Right);
}
else
{
FColorPicker(Vars::Colors::TeamRed, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::TeamBlu, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::TeamRed, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::TeamBlu, FColorPickerEnum::Right);
}
FColorPicker(Vars::Colors::Local, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Target, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Health, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Ammo, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Money, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Powerup, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::NPC, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Halloween, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Local, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Target, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::Health, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Ammo, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::Money, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Powerup, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::NPC, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Halloween, FColorPickerEnum::Right);
// may move these colors over to other spots
PushTransparent(!FGet(Vars::Colors::Backtrack).a);
PushTransparent(!Vars::Colors::Backtrack.Value.a);
{
FColorPicker(Vars::Colors::Backtrack, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::Backtrack, FColorPickerEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Colors::FakeAngle).a);
PushTransparent(!Vars::Colors::FakeAngle.Value.a);
{
FColorPicker(Vars::Colors::FakeAngle, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::FakeAngle, FColorPickerEnum::Right);
}
PopTransparent();
} EndSection();
@@ -896,7 +891,7 @@ void CMenu::MenuVisuals(int iTab)
FMDropdown(Vars::Chams::Player::Visible, FDropdownEnum::Left);
FMDropdown(Vars::Chams::Player::Occluded, FDropdownEnum::Right);
} EndSection();
bool bRelative = FGet(Vars::Chams::Relative);
bool bRelative = Vars::Chams::Relative.Value;
if (Section("##Settings"))
{
auto vTable = WidgetTable(3, H::Draw.Scale(24));
@@ -1003,12 +998,12 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Glow::Player::Party, FToggleEnum::Right);
FToggle(Vars::Glow::Player::Target, FToggleEnum::Left);
PushTransparent(!FGet(Vars::Glow::Player::Stencil));
PushTransparent(!Vars::Glow::Player::Stencil.Value);
{
FSlider(Vars::Glow::Player::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::Player::Blur));
PushTransparent(!Vars::Glow::Player::Blur.Value);
{
FSlider(Vars::Glow::Player::Blur, FSliderEnum::Right);
}
@@ -1021,12 +1016,12 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Glow::Enemy::Buildings, FToggleEnum::Left);
FToggle(Vars::Glow::Enemy::Projectiles, FToggleEnum::Right);
PushTransparent(!FGet(Vars::Glow::Enemy::Stencil));
PushTransparent(!Vars::Glow::Enemy::Stencil.Value);
{
FSlider(Vars::Glow::Enemy::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::Enemy::Blur));
PushTransparent(!Vars::Glow::Enemy::Blur.Value);
{
FSlider(Vars::Glow::Enemy::Blur, FSliderEnum::Right);
}
@@ -1039,12 +1034,12 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Glow::Team::Buildings, FToggleEnum::Left);
FToggle(Vars::Glow::Team::Projectiles, FToggleEnum::Right);
PushTransparent(!FGet(Vars::Glow::Team::Stencil));
PushTransparent(!Vars::Glow::Team::Stencil.Value);
{
FSlider(Vars::Glow::Team::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::Team::Blur));
PushTransparent(!Vars::Glow::Team::Blur.Value);
{
FSlider(Vars::Glow::Team::Blur, FSliderEnum::Right);
}
@@ -1063,12 +1058,12 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Glow::World::Bombs, FToggleEnum::Left);
FToggle(Vars::Glow::World::Halloween, FToggleEnum::Right);
PushTransparent(!FGet(Vars::Glow::World::Stencil));
PushTransparent(!Vars::Glow::World::Stencil.Value);
{
FSlider(Vars::Glow::World::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::World::Blur));
PushTransparent(!Vars::Glow::World::Blur.Value);
{
FSlider(Vars::Glow::World::Blur, FSliderEnum::Right);
}
@@ -1077,18 +1072,18 @@ void CMenu::MenuVisuals(int iTab)
if (Section("Backtrack", 8))
{
FToggle(Vars::Glow::Backtrack::Enabled, FToggleEnum::Left);
PushTransparent(!FGet(Vars::Colors::Backtrack).a);
PushTransparent(!Vars::Colors::Backtrack.Value.a);
{
FColorPicker(Vars::Colors::Backtrack, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::Backtrack, FColorPickerEnum::Right);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::Backtrack::Stencil));
PushTransparent(!Vars::Glow::Backtrack::Stencil.Value);
{
FSlider(Vars::Glow::Backtrack::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::Backtrack::Blur));
PushTransparent(!Vars::Glow::Backtrack::Blur.Value);
{
FSlider(Vars::Glow::Backtrack::Blur, FSliderEnum::Right);
}
@@ -1098,18 +1093,18 @@ void CMenu::MenuVisuals(int iTab)
if (Section("Fake Angle", 8))
{
FToggle(Vars::Glow::FakeAngle::Enabled, FToggleEnum::Left);
PushTransparent(!FGet(Vars::Colors::FakeAngle).a);
PushTransparent(!Vars::Colors::FakeAngle.Value.a);
{
FColorPicker(Vars::Colors::FakeAngle, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::FakeAngle, FColorPickerEnum::Right);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::FakeAngle::Stencil));
PushTransparent(!Vars::Glow::FakeAngle::Stencil.Value);
{
FSlider(Vars::Glow::FakeAngle::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::FakeAngle::Blur));
PushTransparent(!Vars::Glow::FakeAngle::Blur.Value);
{
FSlider(Vars::Glow::FakeAngle::Blur, FSliderEnum::Right);
}
@@ -1120,12 +1115,12 @@ void CMenu::MenuVisuals(int iTab)
FToggle(Vars::Glow::Viewmodel::Weapon, FToggleEnum::Left);
FToggle(Vars::Glow::Viewmodel::Hands, FToggleEnum::Right);
PushTransparent(!FGet(Vars::Glow::Viewmodel::Stencil));
PushTransparent(!Vars::Glow::Viewmodel::Stencil.Value);
{
FSlider(Vars::Glow::Viewmodel::Stencil, FSliderEnum::Left);
}
PopTransparent();
PushTransparent(!FGet(Vars::Glow::Viewmodel::Blur));
PushTransparent(!Vars::Glow::Viewmodel::Blur.Value);
{
FSlider(Vars::Glow::Viewmodel::Blur, FSliderEnum::Right);
}
@@ -1170,7 +1165,7 @@ void CMenu::MenuVisuals(int iTab)
FSDropdown(Vars::Visuals::Effects::MedigunCharge, FDropdownEnum::Right);
FSDropdown(Vars::Visuals::Effects::ProjectileTrail, FDropdownEnum::Left);
FDropdown(Vars::Visuals::Effects::SpellFootsteps, FDropdownEnum::Right, -10);
FColorPicker(Vars::Colors::SpellFootstep, 0, FColorPickerEnum::Dropdown);
FColorPicker(Vars::Colors::SpellFootstep, FColorPickerEnum::SameLine | FColorPickerEnum::NoTooltip, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
FDropdown(Vars::Visuals::Effects::RagdollEffects);
FToggle(Vars::Visuals::Effects::DrawIconsThroughWalls);
FToggle(Vars::Visuals::Effects::DrawDamageNumbersThroughWalls);
@@ -1185,14 +1180,14 @@ void CMenu::MenuVisuals(int iTab)
FSlider(Vars::Visuals::Viewmodel::Yaw, FSliderEnum::Right);
FSlider(Vars::Visuals::Viewmodel::OffsetZ, FSliderEnum::Left);
FSlider(Vars::Visuals::Viewmodel::Roll, FSliderEnum::Right);
PushTransparent(!FGet(Vars::Visuals::Viewmodel::SwayScale) || !FGet(Vars::Visuals::Viewmodel::SwayInterp));
PushTransparent(!Vars::Visuals::Viewmodel::SwayScale.Value || !Vars::Visuals::Viewmodel::SwayInterp.Value);
{
FSlider(Vars::Visuals::Viewmodel::SwayScale, FSliderEnum::Left);
FSlider(Vars::Visuals::Viewmodel::SwayInterp, FSliderEnum::Right);
}
PopTransparent();
/*
PushTransparent(!FGet(Vars::Visuals::Viewmodel::FieldOfView));
PushTransparent(!Vars::Visuals::Viewmodel::FieldOfView.Value);
{
FSlider(Vars::Visuals::Viewmodel::FieldOfView);
}
@@ -1223,17 +1218,17 @@ void CMenu::MenuVisuals(int iTab)
{
FDropdown(Vars::Visuals::UI::StreamerMode, FDropdownEnum::Left);
FDropdown(Vars::Visuals::UI::ChatTags, FDropdownEnum::Right);
PushTransparent(!FGet(Vars::Visuals::UI::FieldOfView));
PushTransparent(!Vars::Visuals::UI::FieldOfView.Value);
{
FSlider(Vars::Visuals::UI::FieldOfView);
}
PopTransparent();
PushTransparent(!FGet(Vars::Visuals::UI::ZoomFieldOfView));
PushTransparent(!Vars::Visuals::UI::ZoomFieldOfView.Value);
{
FSlider(Vars::Visuals::UI::ZoomFieldOfView);
}
PopTransparent();
PushTransparent(!FGet(Vars::Visuals::UI::AspectRatio));
PushTransparent(!Vars::Visuals::UI::AspectRatio.Value);
{
FSlider(Vars::Visuals::UI::AspectRatio);
}
@@ -1248,29 +1243,29 @@ void CMenu::MenuVisuals(int iTab)
FDropdown(Vars::Visuals::World::Modulations);
FSDropdown(Vars::Visuals::World::WorldTexture, FDropdownEnum::Left);
FSDropdown(Vars::Visuals::World::SkyboxChanger, FDropdownEnum::Right);
PushTransparent(!(FGet(Vars::Visuals::World::Modulations) & Vars::Visuals::World::ModulationsEnum::World));
PushTransparent(!(Vars::Visuals::World::Modulations.Value & Vars::Visuals::World::ModulationsEnum::World));
{
FColorPicker(Vars::Colors::WorldModulation, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::WorldModulation, FColorPickerEnum::Left);
}
PopTransparent();
PushTransparent(!(FGet(Vars::Visuals::World::Modulations) & Vars::Visuals::World::ModulationsEnum::Sky));
PushTransparent(!(Vars::Visuals::World::Modulations.Value & Vars::Visuals::World::ModulationsEnum::Sky));
{
FColorPicker(Vars::Colors::SkyModulation, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::SkyModulation, FColorPickerEnum::Right);
}
PopTransparent();
PushTransparent(!(FGet(Vars::Visuals::World::Modulations) & Vars::Visuals::World::ModulationsEnum::Prop));
PushTransparent(!(Vars::Visuals::World::Modulations.Value & Vars::Visuals::World::ModulationsEnum::Prop));
{
FColorPicker(Vars::Colors::PropModulation, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::PropModulation, FColorPickerEnum::Left);
}
PopTransparent();
PushTransparent(!(FGet(Vars::Visuals::World::Modulations) & Vars::Visuals::World::ModulationsEnum::Particle));
PushTransparent(!(Vars::Visuals::World::Modulations.Value & Vars::Visuals::World::ModulationsEnum::Particle));
{
FColorPicker(Vars::Colors::ParticleModulation, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::ParticleModulation, FColorPickerEnum::Right);
}
PopTransparent();
PushTransparent(!(FGet(Vars::Visuals::World::Modulations) & Vars::Visuals::World::ModulationsEnum::Fog));
PushTransparent(!(Vars::Visuals::World::Modulations.Value & Vars::Visuals::World::ModulationsEnum::Fog));
{
FColorPicker(Vars::Colors::FogModulation, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::FogModulation, FColorPickerEnum::Left);
}
PopTransparent();
FToggle(Vars::Visuals::World::NearPropFade, FToggleEnum::Left);
@@ -1351,10 +1346,10 @@ void CMenu::MenuVisuals(int iTab)
{
if (Section("Menu", 8))
{
FColorPicker(Vars::Menu::Theme::Accent, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Menu::Theme::Background, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Menu::Theme::Active, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Menu::Theme::Inactive, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Menu::Theme::Accent, FColorPickerEnum::Left);
FColorPicker(Vars::Menu::Theme::Background, FColorPickerEnum::Right);
FColorPicker(Vars::Menu::Theme::Active, FColorPickerEnum::Left);
FColorPicker(Vars::Menu::Theme::Inactive, FColorPickerEnum::Right);
FSDropdown(Vars::Menu::CheatTitle, FDropdownEnum::Left);
FSDropdown(Vars::Menu::CheatTag, FDropdownEnum::Right);
@@ -1376,14 +1371,14 @@ void CMenu::MenuVisuals(int iTab)
{
if (Section("##Debug"))
{
FColorPicker(Vars::Colors::IndicatorGood, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextGood, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::IndicatorBad, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextBad, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::IndicatorMid, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextMid, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::IndicatorMisc, 0, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextMisc, 0, FColorPickerEnum::Middle);
FColorPicker(Vars::Colors::IndicatorGood, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextGood, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::IndicatorBad, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextBad, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::IndicatorMid, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextMid, FColorPickerEnum::Right);
FColorPicker(Vars::Colors::IndicatorMisc, FColorPickerEnum::Left);
FColorPicker(Vars::Colors::IndicatorTextMisc, FColorPickerEnum::Right);
}
EndSection();
}
@@ -1410,7 +1405,7 @@ void CMenu::MenuMisc(int iTab)
if (Section("Movement"))
{
FDropdown(Vars::Misc::Movement::AutoStrafe);
PushTransparent(FGet(Vars::Misc::Movement::AutoStrafe) != Vars::Misc::Movement::AutoStrafeEnum::Directional);
PushTransparent(Vars::Misc::Movement::AutoStrafe.Value != Vars::Misc::Movement::AutoStrafeEnum::Directional);
{
FSlider(Vars::Misc::Movement::AutoStrafeTurnScale, FSliderEnum::Left);
FSlider(Vars::Misc::Movement::AutoStrafeMaxDelta, FSliderEnum::Right);
@@ -1445,7 +1440,7 @@ void CMenu::MenuMisc(int iTab)
FToggle(Vars::Misc::Exploits::EquipRegionUnlock, FToggleEnum::Left);
FToggle(Vars::Misc::Exploits::BackpackExpander, FToggleEnum::Right);
FToggle(Vars::Misc::Exploits::PingReducer);
PushTransparent(!FGet(Vars::Misc::Exploits::PingReducer));
PushTransparent(!Vars::Misc::Exploits::PingReducer.Value);
{
FSlider(Vars::Misc::Exploits::PingTarget);
}
@@ -1922,7 +1917,7 @@ void CMenu::MenuLogs(int iTab)
if (BeginChild(vTable[0].m_sName.c_str(), vTable[0].m_vSize, vTable[0].m_iWindowFlags, vTable[0].m_iChildFlags))
{
FSDropdown("Name", &tTag.m_sName, {}, FDropdownEnum::Left | FSDropdownEnum::AutoUpdate, -10);
FColorPicker("Color", &tTag.m_tColor, 0, FColorPickerEnum::Dropdown);
FColorPicker("Color", &tTag.m_tColor, FColorPickerEnum::SameLine, {}, { H::Draw.Scale(10), H::Draw.Scale(40) });
PushDisabled(iID == DEFAULT_TAG || iID == IGNORED_TAG);
{
@@ -2419,7 +2414,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Vote Start"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::VoteStart));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::VoteStart));
{
FDropdown(Vars::Logging::VoteStart::LogTo);
}
@@ -2427,7 +2422,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Vote Cast"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::VoteCast));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::VoteCast));
{
FDropdown(Vars::Logging::VoteCast::LogTo);
}
@@ -2435,7 +2430,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Class Change"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::ClassChanges));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::ClassChanges));
{
FDropdown(Vars::Logging::ClassChange::LogTo);
}
@@ -2447,7 +2442,7 @@ void CMenu::MenuLogs(int iTab)
{
if (Section("Damage"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::Damage));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::Damage));
{
FDropdown(Vars::Logging::Damage::LogTo);
}
@@ -2455,7 +2450,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Cheat Detection"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::CheatDetection));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::CheatDetection));
{
FDropdown(Vars::Logging::CheatDetection::LogTo);
}
@@ -2463,7 +2458,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Tags"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::Tags));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::Tags));
{
FDropdown(Vars::Logging::Tags::LogTo);
}
@@ -2471,7 +2466,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Aliases"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::Aliases));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::Aliases));
{
FDropdown(Vars::Logging::Aliases::LogTo);
}
@@ -2479,7 +2474,7 @@ void CMenu::MenuLogs(int iTab)
} EndSection();
if (Section("Resolver"))
{
PushTransparent(!(FGet(Vars::Logging::Logs) & Vars::Logging::LogsEnum::Resolver));
PushTransparent(!(Vars::Logging::Logs.Value & Vars::Logging::LogsEnum::Resolver));
{
FDropdown(Vars::Logging::Resolver::LogTo);
}
@@ -3316,7 +3311,7 @@ void CMenu::MenuSettings(int iTab)
FToggle(Vars::Debug::Info, FToggleEnum::Left);
FToggle(Vars::Debug::Logging, FToggleEnum::Right);
FToggle(Vars::Debug::Options, FToggleEnum::Left);
FToggle(Vars::Debug::DrawServerHitboxes, FToggleEnum::Right, &Hovered); FTooltip("Only localhost servers", Hovered);
FToggle(Vars::Debug::DrawHitboxes, FToggleEnum::Right);
FToggle(Vars::Debug::AntiAimLines, FToggleEnum::Left);
FToggle(Vars::Debug::CrashLogging, FToggleEnum::Right);
#ifdef DEBUG_TRACES
@@ -3681,14 +3676,14 @@ void CMenu::MenuSearch(std::string sSearch)
}
if (iOverride == -2)
break;
FColorPicker(*pVar, 0, !(i % 2) ? FColorPickerEnum::Left : FColorPickerEnum::Middle, nullptr, iOverride, iOverride);
FColorPicker(*pVar, !(i % 2) ? FColorPickerEnum::Left : FColorPickerEnum::Right, { H::Draw.Scale(12), H::Draw.Scale(12) }, {}, {}, nullptr, iOverride, iOverride);
break;
}
case WidgetEnum::FGColorPicker:
{
auto pVar = pBase->As<Gradient_t>();
FColorPicker(*pVar, true, 0, !(i % 2) ? FColorPickerEnum::Left : FColorPickerEnum::Middle, nullptr, iOverride/*, iOverride*/);
FColorPicker(*pVar, false, 0, !(++i % 2) ? FColorPickerEnum::Left : FColorPickerEnum::Middle, nullptr, iOverride/*, iOverride*/);
FColorPicker(*pVar, true, !(i % 2) ? FColorPickerEnum::Left : FColorPickerEnum::Right, { H::Draw.Scale(12), H::Draw.Scale(12) }, {}, {}, nullptr, iOverride/*, iOverride*/);
FColorPicker(*pVar, false, !(++i % 2) ? FColorPickerEnum::Left : FColorPickerEnum::Right, { H::Draw.Scale(12), H::Draw.Scale(12) }, {}, {}, nullptr, iOverride/*, iOverride*/);
break;
}
case WidgetEnum::FKeybind:
+1 -1
View File
@@ -366,7 +366,7 @@ void CMisc::AutoPeek(CTFPlayer* pLocal, CUserCmd* pCmd, bool bPost)
if (bReturning)
{
if (vLocalPos.DistTo(m_vPeekReturnPos) < 8.f)
if (vLocalPos.DistTo2D(m_vPeekReturnPos) < 8.f)
{
bReturning = false;
return;
@@ -57,50 +57,40 @@ void CAntiAim::FakeShotAngles(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCm
}
G::SilentAngles = true;
pCmd->viewangles.x += 360 * (vFakeAngles.x < 0 ? -1 : 1);
// messes with nospread accuracy
//pCmd->viewangles.x = 180 - pCmd->viewangles.x;
//pCmd->viewangles.y += 180;
if (!Vars::Aimbot::General::NoSpread.Value)
{ // messes with nospread accuracy
pCmd->viewangles.x = 180 - pCmd->viewangles.x;
pCmd->viewangles.y += 180;
}
else
pCmd->viewangles.x += 360 * (vFakeAngles.x < 0 ? -1 : 1);
}
float CAntiAim::EdgeDistance(CTFPlayer* pEntity, float flEdgeRayYaw, float flOffset)
static inline float EdgeDistance(CTFPlayer* pEntity, float flYaw, float flOffset)
{
Vec3 vForward, vRight; Math::AngleVectors({ 0, flEdgeRayYaw, 0 }, &vForward, &vRight, nullptr);
Vec3 vCenter = pEntity->GetCenter() + vRight * flOffset;
Vec3 vEndPos = vCenter + vForward * 300.f;
Vec3 vForward, vRight; Math::AngleVectors({ 0, flYaw, 0 }, &vForward, &vRight, nullptr);
Vec3 vCenter = pEntity->GetCenter();
CGameTrace trace = {};
CTraceFilterWorldAndPropsOnly filter = {};
SDK::Trace(vCenter, vEndPos, MASK_SHOT | CONTENTS_GRATE, &filter, &trace);
vEdgeTrace.emplace_back(vCenter, trace.endpos);
SDK::Trace(vCenter, vCenter + vRight * flOffset, MASK_SHOT | CONTENTS_GRATE, &filter, &trace);
F::AntiAim.vEdgeTrace.emplace_back(trace.startpos, trace.endpos);
SDK::Trace(trace.endpos, trace.endpos + vForward * 300.f, MASK_SHOT | CONTENTS_GRATE, &filter, &trace);
F::AntiAim.vEdgeTrace.emplace_back(trace.startpos, trace.endpos);
return trace.fraction;
}
int CAntiAim::GetEdge(CTFPlayer* pEntity, const float flEdgeOrigYaw)
static inline int GetEdge(CTFPlayer* pEntity, const float flYaw)
{
float flSize = pEntity->GetSize().y;
float flEdgeLeftDist = EdgeDistance(pEntity, flEdgeOrigYaw, -flSize);
float flEdgeRightDist = EdgeDistance(pEntity, flEdgeOrigYaw, flSize);
float flEdgeLeftDist = EdgeDistance(pEntity, flYaw, -flSize);
float flEdgeRightDist = EdgeDistance(pEntity, flYaw, flSize);
return flEdgeLeftDist > flEdgeRightDist ? -1 : 1;
}
void CAntiAim::RunOverlapping(CTFPlayer* pEntity, CUserCmd* pCmd, float& flRealYaw, bool bFake, float flEpsilon)
{
if (!Vars::AntiAim::AntiOverlap.Value || bFake)
return;
float flFakeYaw = GetBaseYaw(pEntity, pCmd, true) + GetYawOffset(pEntity, true);
const float flYawDiff = Math::NormalizeAngle(flRealYaw - flFakeYaw);
if (fabsf(flYawDiff) < flEpsilon)
flRealYaw += flYawDiff > 0 ? flEpsilon : -flEpsilon;
}
inline int GetJitter(uint32_t uHash)
static inline int GetJitter(uint32_t uHash)
{
static std::unordered_map<uint32_t, bool> mJitter = {};
@@ -158,6 +148,17 @@ float CAntiAim::GetBaseYaw(CTFPlayer* pLocal, CUserCmd* pCmd, bool bFake)
return pCmd->viewangles.y;
}
void CAntiAim::RunOverlapping(CTFPlayer* pEntity, CUserCmd* pCmd, float& flYaw, bool bFake, float flEpsilon)
{
if (!Vars::AntiAim::AntiOverlap.Value || bFake)
return;
float flFakeYaw = GetBaseYaw(pEntity, pCmd, true) + GetYawOffset(pEntity, true);
const float flYawDiff = Math::NormalizeAngle(flYaw - flFakeYaw);
if (fabsf(flYawDiff) < flEpsilon)
flYaw += flYawDiff > 0 ? flEpsilon : -flEpsilon;
}
float CAntiAim::GetYaw(CTFPlayer* pLocal, CUserCmd* pCmd, bool bFake)
{
float flYaw = GetBaseYaw(pLocal, pCmd, bFake) + GetYawOffset(pLocal, bFake);
@@ -199,7 +200,7 @@ float CAntiAim::GetPitch(float flCurPitch)
void CAntiAim::MinWalk(CTFPlayer* pLocal, CUserCmd* pCmd)
{
if (!Vars::AntiAim::MinWalk.Value || !F::AntiAim.YawOn() || !pLocal->m_hGroundEntity() || pLocal->InCond(TF_COND_HALLOWEEN_KART))
if (!Vars::AntiAim::MinWalk.Value || !YawOn() || !pLocal->m_hGroundEntity() || pLocal->InCond(TF_COND_HALLOWEEN_KART))
return;
if (!pCmd->forwardmove && !pCmd->sidemove && pLocal->m_vecVelocity().Length2D() < 2.f)
@@ -5,13 +5,10 @@ class CAntiAim
{
private:
void FakeShotAngles(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
float EdgeDistance(CTFPlayer* pEntity, float flEdgeRayYaw, float flOffset);
void RunOverlapping(CTFPlayer* pEntity, CUserCmd* pCmd, float& flRealYaw, bool bFake, float flEpsilon = 45.f);
float GetYawOffset(CTFPlayer* pEntity, bool bFake);
float GetBaseYaw(CTFPlayer* pLocal, CUserCmd* pCmd, bool bFake);
void RunOverlapping(CTFPlayer* pEntity, CUserCmd* pCmd, float& flYaw, bool bFake, float flEpsilon = 45.f);
float GetYaw(CTFPlayer* pLocal, CUserCmd* pCmd, bool bFake);
float GetPitch(float flCurPitch);
void MinWalk(CTFPlayer* pLocal, CUserCmd* pCmd);
@@ -19,8 +16,6 @@ public:
bool AntiAimOn();
bool YawOn();
bool ShouldRun(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
int GetEdge(CTFPlayer* pEntity, float flEdgeOrigYaw);
void Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, bool bSendPacket);
inline int AntiAimTicks() { return 2; }
+2 -2
View File
@@ -22,8 +22,8 @@ class CResolver
void StoreSniperDots(CTFPlayerResource* pResource);
std::optional<float> GetPitchForSniperDot(CTFPlayer* pEntity, CTFPlayerResource* pResource);
std::unordered_map<int, ResolveData> m_mResolverData;
std::unordered_map<int, Vec3> m_mSniperDots;
std::unordered_map<int, ResolveData> m_mResolverData = {};
std::unordered_map<int, Vec3> m_mSniperDots = {};
int m_iWaitingForTarget = -1;
float m_flWaitingForDamage = 0.f;
@@ -132,7 +132,7 @@ void CMovementSimulation::Store()
vRecords.emplace_front(
vDirection,
pPlayer->m_flSimulationTime(),
pPlayer->m_nWaterLevel() >= 2 ? 2 : pPlayer->IsOnGround() ? 0 : 1,
pPlayer->IsSwimming() ? 2 : pPlayer->IsOnGround() ? 0 : 1,
vVelocity,
vOrigin
);
@@ -364,7 +364,7 @@ bool CMovementSimulation::SetupMoveData(PlayerStorage& tStorage)
tStorage.m_flSimTime = tStorage.m_pPlayer->m_flSimulationTime();
tStorage.m_flPredictedSimTime = tStorage.m_flSimTime + tStorage.m_flPredictedDelta;
tStorage.m_vPredictedOrigin = tStorage.m_MoveData.m_vecAbsOrigin;
tStorage.m_bDirectMove = tStorage.m_pPlayer->IsOnGround() || tStorage.m_pPlayer->m_nWaterLevel() >= 2;
tStorage.m_bDirectMove = tStorage.m_pPlayer->IsOnGround() || tStorage.m_pPlayer->IsSwimming();
return true;
}
@@ -658,7 +658,7 @@ void CMovementSimulation::RunTick(PlayerStorage& tStorage, bool bPath, std::func
tStorage.m_MoveData.m_flForwardMove = tStorage.m_MoveData.m_flSideMove = 0.f;
float flOldSpeed = tStorage.m_MoveData.m_flClientMaxSpeed;
if (tStorage.m_pPlayer->m_bDucked() && tStorage.m_pPlayer->IsOnGround() && tStorage.m_pPlayer->m_nWaterLevel() < 2)
if (tStorage.m_pPlayer->m_bDucked() && tStorage.m_pPlayer->IsOnGround() && !tStorage.m_pPlayer->IsSwimming())
tStorage.m_MoveData.m_flClientMaxSpeed /= 3;
if (tStorage.m_bBunnyHop && tStorage.m_pPlayer->IsOnGround() && !tStorage.m_pPlayer->m_bDucked())
@@ -681,7 +681,7 @@ void CMovementSimulation::RunTick(PlayerStorage& tStorage, bool bPath, std::func
tStorage.m_flPredictedSimTime += tStorage.m_flPredictedDelta;
}
bool bLastbDirectMove = tStorage.m_bDirectMove;
tStorage.m_bDirectMove = tStorage.m_pPlayer->IsOnGround() || tStorage.m_pPlayer->m_nWaterLevel() >= 2;
tStorage.m_bDirectMove = tStorage.m_pPlayer->IsOnGround() || tStorage.m_pPlayer->IsSwimming();
if (tStorage.m_flAverageYaw)
tStorage.m_MoveData.m_vecViewAngles.y -= flCorrection;
@@ -70,7 +70,7 @@ struct PlayerStorage
bool m_bPredictNetworked = true;
Vec3 m_vPredictedOrigin = {};
std::vector<Vec3> m_vPath;
std::vector<Vec3> m_vPath = {};
bool m_bFailed = false;
bool m_bInitFailed = false;
@@ -102,8 +102,8 @@ private:
bool m_bOldFirstTimePredicted = false;
float m_flOldFrametime = 0.f;
std::unordered_map<int, std::deque<MoveData>> m_mRecords;
std::unordered_map<int, std::deque<float>> m_mSimTimes;
std::unordered_map<int, std::deque<MoveData>> m_mRecords = {};
std::unordered_map<int, std::deque<float>> m_mSimTimes = {};
public:
void Store();
@@ -128,13 +128,13 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
case TF_WEAPON_FLAREGUN:
{
SDK::GetProjectileFireSetup(pPlayer, vAngles, { 23.5f, 12.f, bDucking ? 8.f : -3.f }, vPos, vAngle, !bTrace ? true : false, bQuick);
tProjInfo = { pWeapon, FNV1A::Hash32Const("models/weapons/w_models/w_flaregun_shell.mdl"), vPos, vAngle, { 1.f, 1.f, 1.f }, SDK::AttribHookValue(2000.f, "mult_projectile_speed", pWeapon), 0.3f * flGravity };
tProjInfo = { pWeapon, FNV1A::Hash32Const("models/weapons/w_models/w_flaregun_shell.mdl"), vPos, vAngle, { 0.f, 0.f, 0.f }, SDK::AttribHookValue(2000.f, "mult_projectile_speed", pWeapon), 0.3f * flGravity };
return true;
}
case TF_WEAPON_FLAREGUN_REVENGE:
{
SDK::GetProjectileFireSetup(pPlayer, vAngles, { 23.5f, 12.f, bDucking ? 8.f : -3.f }, vPos, vAngle, !bTrace ? true : false, bQuick);
tProjInfo = { pWeapon, FNV1A::Hash32Const("models/weapons/w_models/w_flaregun_shell.mdl"), vPos, vAngle, { 1.f, 1.f, 1.f }, 3000.f, 0.45f * flGravity };
tProjInfo = { pWeapon, FNV1A::Hash32Const("models/weapons/w_models/w_flaregun_shell.mdl"), vPos, vAngle, { 0.f, 0.f, 0.f }, 3000.f, 0.45f * flGravity };
return true;
}
case TF_WEAPON_COMPOUND_BOW:
@@ -254,51 +254,6 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
return false;
}
class CTraceFilterWorldPropsObjects : public ITraceFilter
{
public:
bool ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask) override;
TraceType_t GetTraceType() const override;
CBaseEntity* pSkip = nullptr;
};
bool CTraceFilterWorldPropsObjects::ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask)
{
if (!pServerEntity || pServerEntity == pSkip)
return false;
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
switch (pEntity->GetClassID())
{
case ETFClassID::CBaseEntity:
case ETFClassID::CBaseDoor:
case ETFClassID::CDynamicProp:
case ETFClassID::CPhysicsProp:
case ETFClassID::CObjectCartDispenser:
case ETFClassID::CFuncTrackTrain:
case ETFClassID::CFuncConveyor:
case ETFClassID::CBaseObject:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectTeleporter: return true;
case ETFClassID::CFuncRespawnRoomVisualizer:
if (nContentsMask & MASK_PLAYERSOLID)
{
switch (pEntity->m_iTeamNum())
{
case TF_TEAM_RED: return nContentsMask & CONTENTS_REDTEAM;
case TF_TEAM_BLUE: return nContentsMask & CONTENTS_BLUETEAM;
}
}
}
return false;
}
TraceType_t CTraceFilterWorldPropsObjects::GetTraceType() const
{
return TRACE_EVERYTHING;
}
bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, Vec3 vAngles, ProjectileInfo& tProjInfo, int iFlags, float flAutoCharge)
{
bool InitCheck = iFlags & ProjSimEnum::InitCheck;
@@ -314,11 +269,14 @@ bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon,
if (!bReturn || !InitCheck)
return bReturn;
const Vec3 vStart = bQuick ? pPlayer->GetEyePosition() : pPlayer->GetShootPos();
const Vec3 vEnd = tProjInfo.m_vPos;
CGameTrace trace = {};
CTraceFilterWorldPropsObjects filter = {};
CTraceFilterCollideable filter = {}; filter.pSkip = pPlayer;
if (pWeapon->GetWeaponID() == TF_WEAPON_RAYGUN)
filter.iObject = OBJECT_DEFAULT;
Vec3 vStart = bQuick ? pPlayer->GetEyePosition() : pPlayer->GetShootPos();
Vec3 vEnd = tProjInfo.m_vPos;
SDK::TraceHull(vStart, vEnd, tProjInfo.m_vHull * -1.f, tProjInfo.m_vHull, MASK_SOLID, &filter, &trace);
return !trace.DidHit();
}
@@ -617,4 +575,40 @@ Vec3 CProjectileSimulation::GetVelocity()
Vec3 vOut;
obj->GetVelocity(&vOut, nullptr);
return vOut;
}
void CProjectileSimulation::SetupTrace(CTraceFilterCollideable& filter, int& nMask, CTFWeaponBase* pWeapon, int nTick, bool bQuick)
{
switch (nTick)
{
case 0:
switch (pWeapon->GetWeaponID())
{
case TF_WEAPON_RAYGUN:
filter.iObject = OBJECT_DEFAULT;
break;
case TF_WEAPON_FLAMETHROWER:
case TF_WEAPON_FLAME_BALL:
nMask |= CONTENTS_WATER;
break;
case TF_WEAPON_DRG_POMSON:
case TF_WEAPON_SYRINGEGUN_MEDIC:
case TF_WEAPON_BAT_GIFTWRAP:
if (bQuick)
filter.iPlayer = PLAYER_ALL;
}
break;
case 16:
if (bQuick)
{
switch (pWeapon->GetWeaponID())
{
case TF_WEAPON_RAYGUN:
case TF_WEAPON_GRAPPLINGHOOK:
break;
default:
filter.iPlayer = PLAYER_ALL;
}
}
}
}
@@ -56,6 +56,7 @@ public:
void RunTick(ProjectileInfo& tProjInfo, bool bPath = true);
Vec3 GetOrigin();
Vec3 GetVelocity();
void SetupTrace(CTraceFilterCollideable& filter, int& nMask, CTFWeaponBase* pWeapon, int nTick = 0, bool bQuick = false);
IPhysicsEnvironment* env = nullptr;
IPhysicsObject* obj = nullptr;
+2 -1
View File
@@ -248,7 +248,8 @@ void CTickshiftHandler::CLMove(float accumulated_extra_samples, bool bFinalTick)
m_iMaxShift = sv_maxusrcmdprocessticks->GetInt();
if (Vars::Misc::Game::AntiCheatCompatibility.Value)
m_iMaxShift = std::min(m_iMaxShift, 8);
m_iMaxShift -= std::max(24 - std::clamp(Vars::Doubletap::RechargeLimit.Value, 1, 24), F::AntiAim.YawOn() ? F::AntiAim.AntiAimTicks() : 0);
m_iMaxShift -= std::max(m_iMaxShift - Vars::Doubletap::RechargeLimit.Value, 0) + (F::AntiAim.YawOn() ? F::AntiAim.AntiAimTicks() : 0);
m_iMaxShift = std::max(m_iMaxShift, 1);
while (m_iShiftedTicks > m_iMaxShift)
CLMoveFunc(accumulated_extra_samples, false); // skim any excess ticks
@@ -34,8 +34,8 @@ public:
void EditMaterial(const char* sName, const char* sVMT);
void RemoveMaterial(const char* sName);
std::unordered_map<uint32_t, Material_t> m_mMaterials;
std::unordered_map<IMaterial*, bool> m_mMatList;
std::unordered_map<uint32_t, Material_t> m_mMaterials = {};
std::unordered_map<IMaterial*, bool> m_mMatList = {};
bool m_bLoaded = false;
};
@@ -13,8 +13,8 @@ private:
int m_iIndex;
};
std::vector<Spectator_t> m_vSpectators;
std::unordered_map<int, float> m_mRespawnCache;
std::vector<Spectator_t> m_vSpectators = {};
std::unordered_map<int, float> m_mRespawnCache = {};
public:
bool GetSpectators(CTFPlayer* pTarget);
+158 -67
View File
@@ -9,12 +9,14 @@
#include "../Players/PlayerUtils.h"
#include "../Spectate/Spectate.h"
MAKE_SIGNATURE(CBaseAnimating_DrawServerHitboxes, "server.dll", "44 88 44 24 ? 53 48 81 EC", 0x0);
MAKE_SIGNATURE(GetServerAnimating, "server.dll", "48 83 EC ? 8B D1 85 C9 7E ? 48 8B 05", 0x0);
MAKE_SIGNATURE(CTFPlayer_FireEvent, "client.dll", "48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 4C 89 64 24 ? 55 41 56 41 57 48 8D 6C 24", 0x0);
MAKE_SIGNATURE(CWeaponMedigun_UpdateEffects, "client.dll", "40 57 48 81 EC ? ? ? ? 8B 91 ? ? ? ? 48 8B F9 85 D2 0F 84 ? ? ? ? 48 89 B4 24", 0x0);
MAKE_SIGNATURE(CWeaponMedigun_StopChargeEffect, "client.dll", "40 53 48 83 EC ? 44 0F B6 C2", 0x0);
MAKE_SIGNATURE(CWeaponMedigun_ManageChargeEffect, "client.dll", "48 89 5C 24 ? 48 89 74 24 ? 57 48 81 EC ? ? ? ? 48 8B F1 E8 ? ? ? ? 48 8B D8", 0x0);
MAKE_SIGNATURE(GetServerAnimating, "server.dll", "48 83 EC ? 8B D1 85 C9 7E ? 48 8B 05", 0x0);
MAKE_SIGNATURE(CBaseAnimating_DrawServerHitboxes, "server.dll", "44 88 44 24 ? 53 48 81 EC", 0x0);
MAKE_SIGNATURE(NDebugOverlay_BoxAngles, "server.dll", "48 83 EC ? 4C 8B D9 48 8B 0D ? ? ? ? 48 85 C9 74 ? 8B 84 24 ? ? ? ? F3 0F 10 84 24 ? ? ? ? 4C 8B 11 F3 0F 11 44 24 ? 89 44 24 ? 8B 84 24 ? ? ? ? 89 44 24 ? 8B 84 24 ? ? ? ? 89 44 24 ? 8B 84 24 ? ? ? ? 89 44 24 ? 4C 89 4C 24", 0x0);
MAKE_SIGNATURE(CBaseAnimating_DrawServerHitboxes_BoxAngles_Call, "server.dll", "8B 84 24 ? ? ? ? 49 83 C6", 0x0);
static std::vector<Vec3> SplashTrace(Vec3 vOrigin, float flRadius, Vec3 vNormal = { 0, 0, 1 }, bool bTrace = true, int iSegments = 100)
{
@@ -72,20 +74,23 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
return;
CGameTrace trace = {};
CTraceFilterProjectile filter = {}; filter.pSkip = pPlayer;
Vec3* pNormal = nullptr;
CTraceFilterCollideable filter = {}; filter.pSkip = pPlayer;
int nMask = MASK_SOLID;
F::ProjSim.SetupTrace(filter, nMask, pWeapon, 0, bQuick);
Vec3* pNormal = nullptr;
for (int n = 1; n <= TIME_TO_TICKS(tProjInfo.m_flLifetime); n++)
{
Vec3 Old = F::ProjSim.GetOrigin();
F::ProjSim.RunTick(tProjInfo);
Vec3 New = F::ProjSim.GetOrigin();
SDK::TraceHull(Old, New, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, MASK_SOLID, &filter, &trace);
SDK::TraceHull(Old, New, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
F::ProjSim.SetupTrace(filter, nMask, pWeapon, n, bQuick);
if (trace.DidHit())
{
pNormal = &trace.plane.normal;
if (n == 1 && trace.startsolid)
if (trace.startsolid)
*pNormal = F::ProjSim.GetVelocity().Normalized();
break;
}
@@ -373,51 +378,54 @@ void CVisuals::DrawDebugInfo(CTFPlayer* pLocal)
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("View: ({:.3f}, {:.3f}, {:.3f})", pCmd->viewangles.x, pCmd->viewangles.y, pCmd->viewangles.z).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Move: ({}, {}, {})", pCmd->forwardmove, pCmd->sidemove, pCmd->upmove).c_str());
std::vector<std::pair<int, const char*>> vFlags = {
PAIR(IN_ATTACK),
PAIR(IN_ATTACK2),
PAIR(IN_ATTACK3),
PAIR(IN_FORWARD),
PAIR(IN_BACK),
PAIR(IN_MOVELEFT),
PAIR(IN_MOVERIGHT),
PAIR(IN_JUMP),
PAIR(IN_DUCK),
PAIR(IN_RELOAD),
PAIR(IN_LEFT),
PAIR(IN_RIGHT),
PAIR(IN_SCORE),
/*
PAIR(IN_USE),
PAIR(IN_CANCEL),
PAIR(IN_RUN),
PAIR(IN_ALT1),
PAIR(IN_ALT2),
PAIR(IN_SPEED),
PAIR(IN_WALK),
PAIR(IN_ZOOM),
PAIR(IN_WEAPON1),
PAIR(IN_WEAPON2),
PAIR(IN_BULLRUSH),
PAIR(IN_GRENADE1),
PAIR(IN_GRENADE2),
*/
};
std::string sButtons = "NONE";
int i = 0;
for (auto& pFlag : vFlags)
if (pCmd->buttons)
{
if (pCmd->buttons & pFlag.first)
static std::vector<std::pair<int, const char*>> vFlags = {
PAIR(IN_ATTACK),
PAIR(IN_ATTACK2),
PAIR(IN_ATTACK3),
PAIR(IN_FORWARD),
PAIR(IN_BACK),
PAIR(IN_MOVELEFT),
PAIR(IN_MOVERIGHT),
PAIR(IN_JUMP),
PAIR(IN_DUCK),
PAIR(IN_RELOAD),
PAIR(IN_LEFT),
PAIR(IN_RIGHT),
PAIR(IN_SCORE),
/*
PAIR(IN_USE),
PAIR(IN_CANCEL),
PAIR(IN_RUN),
PAIR(IN_ALT1),
PAIR(IN_ALT2),
PAIR(IN_SPEED),
PAIR(IN_WALK),
PAIR(IN_ZOOM),
PAIR(IN_WEAPON1),
PAIR(IN_WEAPON2),
PAIR(IN_BULLRUSH),
PAIR(IN_GRENADE1),
PAIR(IN_GRENADE2),
*/
};
for (int i = 0; i < vFlags.size(); i++)
{
if (i)
sButtons += " | ";
else
sButtons = "";
sButtons += pFlag.second;
i++;
auto& paFlag = vFlags[i];
if (pCmd->buttons & paFlag.first)
{
if (i)
sButtons += " | ";
else
sButtons = "";
sButtons += paFlag.second;
}
}
}
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Buttons: {} ({})", pCmd->buttons, sButtons).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Buttons: {:#034b} ({})", pCmd->buttons, sButtons).c_str());
}
{
Vec3 vOrigin = pLocal->m_vecOrigin();
@@ -427,12 +435,13 @@ void CVisuals::DrawDebugInfo(CTFPlayer* pLocal)
Vec3 vVelocity = pLocal->m_vecVelocity();
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Velocity: {:.3f} ({:.3f}, {:.3f}, {:.3f})", vVelocity.Length(), vVelocity.x, vVelocity.y, vVelocity.z).c_str());
}
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Choke: {}, {}", G::Choking, I::ClientState->chokedcommands).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Ticks: {}, {}", F::Ticks.m_iShiftedTicks, F::Ticks.m_iShiftedGoal).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Round state: {}, {}, {}", SDK::GetRoundState(), SDK::GetWinningTeam(), I::EngineClient->IsPlayingDemo()).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Tickcount: {}", pLocal->m_nTickBase()).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Entities: {} ({}, {})", I::ClientEntityList->GetMaxEntities(), I::ClientEntityList->GetHighestEntityIndex(), I::ClientEntityList->NumberOfEntities(false)).c_str());
//H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Choke: {}, {}", G::Choking, I::ClientState->chokedcommands).c_str());
//H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Ticks: {}, {}", F::Ticks.m_iShiftedTicks, F::Ticks.m_iShiftedGoal).c_str());
//H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Round state: {}, {}, {}", SDK::GetRoundState(), SDK::GetWinningTeam(), I::EngineClient->IsPlayingDemo()).c_str());
//H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Entities: {} ({}, {})", I::ClientEntityList->GetMaxEntities(), I::ClientEntityList->GetHighestEntityIndex(), I::ClientEntityList->NumberOfEntities(false)).c_str());
/*
if (pWeapon)
{
float flTime = TICKS_TO_TIME(pLocal->m_nTickBase());
@@ -448,6 +457,7 @@ void CVisuals::DrawDebugInfo(CTFPlayer* pLocal)
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Reload: {} ({} || {} != 0)", G::Reloading, pWeapon->m_bInReload(), pWeapon->m_iReloadMode()).c_str());
H::Draw.StringOutlined(fFont, x, y += nTall, Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value, ALIGN_TOPLEFT, std::format("Throw: {}, Smack: {}", G::Throwing, pWeapon->m_flSmackTime()).c_str());
}
*/
}
}
#undef PAIR
@@ -560,28 +570,108 @@ void CVisuals::DrawEffects()
}
for (auto& tSightline : m_vSightLines)
H::Draw.RenderLine(tSightline.m_vStart, tSightline.m_vEnd, tSightline.m_Color, tSightline.m_bZBuffer);
if (auto& tPath = F::Aimbot.m_tPath; tPath.m_flTime)
H::Draw.RenderPath(tPath.m_vPath, tPath.m_tColor, tPath.m_bZBuffer, tPath.m_iStyle, tPath.m_flTime);
DrawHitboxes();
}
void CVisuals::DrawServerHitboxes(CTFPlayer* pLocal)
static std::vector<DrawBox_t> vHitboxes = {}, vLocalHitboxes = {};
static bool bHitboxes = false, bBounds = false, bBoxesHeadOnly = false, bBoxesNoAngles = false;
void CVisuals::DrawHitboxes(int iStore)
{
if (!Vars::Debug::DrawServerHitboxes.Value)
if (!Vars::Debug::DrawHitboxes.Value)
return;
if (I::Input->CAM_IsThirdPerson() && pLocal->IsAlive())
switch (iStore)
{
if (auto pServerAnimating = S::GetServerAnimating.Call<void*>(pLocal->entindex()))
S::CBaseAnimating_DrawServerHitboxes.Call<void>(pServerAnimating, 0.f, true);
case 0:
{
for (auto& tBox : vHitboxes)
H::Draw.RenderWireframeBox(tBox.m_vOrigin, tBox.m_vMins, tBox.m_vMaxs, tBox.m_vAngles, tBox.m_tColorEdge, tBox.m_bZBuffer);
for (auto& tBox : vLocalHitboxes)
H::Draw.RenderWireframeBox(tBox.m_vOrigin, tBox.m_vMins, tBox.m_vMaxs, tBox.m_vAngles, tBox.m_tColorEdge, tBox.m_bZBuffer);
break;
}
case 1:
{
vHitboxes.clear();
auto pNetChan = I::EngineClient->GetNetChannelInfo();
bool bLocalhost = pNetChan && pNetChan->IsLoopback();
for (auto& pEntity : H::Entities.GetGroup(EGroupType::PLAYERS_ALL))
{
auto pPlayer = pEntity->As<CTFPlayer>();
if (pPlayer->entindex() == I::EngineClient->GetLocalPlayer() && !I::Input->CAM_IsThirdPerson() || !pPlayer->IsAlive())
continue;
if (auto aBones = H::Entities.GetBones(pPlayer->entindex()))
{
auto vBoxes = GetHitboxes(aBones, pPlayer);
for (auto& tBox : vBoxes)
tBox.m_tColorEdge = { 255, 255, 255, 255 };
vHitboxes.insert(vHitboxes.end(), vBoxes.begin(), vBoxes.end());
}
if (bLocalhost) // this ignores latency, beware!!
{
bHitboxes = true;
if (auto pServerAnimating = S::GetServerAnimating.Call<void*>(pPlayer->entindex()))
S::CBaseAnimating_DrawServerHitboxes.Call<void>(pServerAnimating, 0.f, true);
bHitboxes = false;
}
}
break;
}
case 2:
{
vLocalHitboxes.clear();
if (!I::Input->CAM_IsThirdPerson())
break;
auto pLocal = H::Entities.GetLocal();
if (pLocal && pLocal->SetupBones(F::Backtrack.m_tRecord.m_BoneMatrix.m_aBones, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, pLocal->m_flSimulationTime()))
{
auto vBoxes = GetHitboxes(F::Backtrack.m_tRecord.m_BoneMatrix.m_aBones, pLocal);
for (auto& tBox : vBoxes)
tBox.m_tColorEdge = { 255, 255, 255, 255 };
vLocalHitboxes.insert(vLocalHitboxes.end(), vBoxes.begin(), vBoxes.end());
}
}
}
}
MAKE_HOOK(CBaseAnimating_DrawServerHitboxes, S::CBaseAnimating_DrawServerHitboxes(), void,
void* rcx, float duration, bool monocolor)
{
if (bBoxesHeadOnly)
monocolor = false;
CALL_ORIGINAL(rcx, duration, monocolor);
}
MAKE_HOOK(NDebugOverlay_BoxAngles, S::NDebugOverlay_BoxAngles(), void,
Vector& origin, Vector& mins, Vector& maxs, QAngle& angles, int r, int g, int b, int a, float duration)
{
if (bBoxesHeadOnly)
{
static const auto dwDesired = S::CBaseAnimating_DrawServerHitboxes_BoxAngles_Call();
const auto dwRetAddr = uintptr_t(_ReturnAddress());
if (dwRetAddr == dwDesired && (r != 255 || g != 127 || b != 127))
return;
}
for (auto& pEntity : H::Entities.GetGroup(EGroupType::PLAYERS_ALL))
{
auto pPlayer = pEntity->As<CTFPlayer>();
if (pPlayer->entindex() == I::EngineClient->GetLocalPlayer() || !pPlayer->IsAlive())
continue;
if (bBoxesNoAngles)
angles = {};
if (auto pServerAnimating = S::GetServerAnimating.Call<void*>(pPlayer->entindex()))
S::CBaseAnimating_DrawServerHitboxes.Call<void>(pServerAnimating, 0.f, true);
if (bHitboxes)
{
vHitboxes.emplace_back(origin, mins, maxs, angles, 0, Color_t(r, g, b, 255 - a), Color_t(0, 0, 0, 0), true);
return;
}
CALL_ORIGINAL(origin, mins, maxs, angles, r, g, b, a, duration);
}
@@ -688,11 +778,11 @@ void CVisuals::Event(IGameEvent* pEvent, uint32_t uHash)
if (!bBones)
break;
auto pBones = H::Entities.GetBones(pEntity->entindex());
if (!pBones)
auto aBones = H::Entities.GetBones(pEntity->entindex());
if (!aBones)
return;
auto vBoxes = GetHitboxes(pBones, pEntity);
auto vBoxes = GetHitboxes(aBones, pEntity);
G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end());
return;
@@ -933,11 +1023,12 @@ void CVisuals::CreateMove(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
iOldMedigunCharge = iNewMedigunCharge;
}
static auto r_aspectratio = U::ConVars.FindVar("r_aspectratio");
static float flStaticRatio = 0.f;
float flOldRatio = flStaticRatio;
float flNewRatio = flStaticRatio = Vars::Visuals::UI::AspectRatio.Value;
static auto r_aspectratio = U::ConVars.FindVar("r_aspectratio");
if (flNewRatio != flOldRatio)
r_aspectratio->SetValue(flNewRatio);
DrawHitboxes(2);
}
+3 -3
View File
@@ -22,8 +22,8 @@ class CVisuals
{
private:
int m_nHudZoom = 0;
std::vector<Sightline_t> m_vSightLines;
std::vector<PickupData> m_vPickups;
std::vector<Sightline_t> m_vSightLines = {};
std::vector<PickupData> m_vPickups = {};
public:
void Event(IGameEvent* pEvent, uint32_t uHash);
@@ -37,7 +37,7 @@ public:
std::vector<DrawBox_t> GetHitboxes(matrix3x4* aBones, CBaseAnimating* pEntity, std::vector<int> vHitboxes = {}, int iTarget = -1);
void DrawEffects();
void DrawServerHitboxes(CTFPlayer* pLocal);
void DrawHitboxes(int iStore = 0);
void FOV(CTFPlayer* pLocal, CViewSetup* pView);
void ThirdPerson(CTFPlayer* pLocal, CViewSetup* pView);
@@ -143,6 +143,18 @@ MAKE_HOOK(CClientModeShared_CreateMove, U::Memory.GetVirtual(I::ClientModeShared
G::Reloading = true;
}
}
if (G::CanPrimaryAttack)
{
switch (pWeapon->GetWeaponID())
{
case TF_WEAPON_FLAMETHROWER:
case TF_WEAPON_FLAME_BALL:
case TF_WEAPON_FLAREGUN:
case TF_WEAPON_FLAREGUN_REVENGE:
if (pLocal->IsUnderwater())
G::CanPrimaryAttack = G::CanSecondaryAttack = false;
}
}
}
G::Attacking = SDK::IsAttacking(pLocal, pWeapon, pCmd);
@@ -1,5 +1,6 @@
#include "../SDK/SDK.h"
#include "../Features/Commands/Commands.h"
#include <functional>
#include <regex>
@@ -224,6 +225,9 @@ MAKE_HOOK(Cbuf_ExecuteCommand, S::Cbuf_ExecuteCommand(), void,
for (int i = 1; i < args.ArgC(); i++)
vArgs.push_back(args[i]);
if (F::Commands.Run(sCommand, vArgs))
return;
switch (FNV1A::Hash32(sCommand.c_str()))
{
case FNV1A::Hash32Const("say"):
@@ -1,5 +1,6 @@
#include "../SDK/SDK.h"
#include "../Features/Aimbot/Aimbot.h"
#include "../Features/Backtrack/Backtrack.h"
#include "../Features/CheaterDetection/CheaterDetection.h"
#include "../Features/CritHack/CritHack.h"
@@ -82,6 +83,7 @@ MAKE_HOOK(IBaseClientDLL_FrameStageNotify, U::Memory.GetVirtual(I::BaseClientDLL
F::Backtrack.Store();
F::MoveSim.Store();
F::CritHack.Store();
F::Aimbot.Store();
auto pLocal = H::Entities.GetLocal();
F::ESP.Store(pLocal);
@@ -93,6 +95,7 @@ MAKE_HOOK(IBaseClientDLL_FrameStageNotify, U::Memory.GetVirtual(I::BaseClientDLL
F::Spectate.NetUpdateEnd(pLocal);
F::Visuals.Modulate();
F::Visuals.DrawHitboxes(1);
break;
}
case FRAME_RENDER_START:
-1
View File
@@ -34,7 +34,6 @@ MAKE_HOOK(IEngineVGui_Paint, U::Memory.GetVirtual(I::EngineVGui, 14), void,
if (auto pLocal = H::Entities.GetLocal())
{
F::CameraWindow.Draw();
F::Visuals.DrawServerHitboxes(pLocal);
F::Visuals.DrawAntiAim(pLocal);
F::Visuals.DrawPickupTimers();
@@ -1,48 +0,0 @@
#include "../SDK/SDK.h"
#include "../Features/Commands/Commands.h"
#include <boost/algorithm/string/split.hpp>
class split_q
{
public:
split_q() : in_q(false) {}
bool operator()(char ch) const
{
if (ch == '\"')
{
in_q = !in_q;
}
return !in_q && ch == ' ';
}
private:
mutable bool in_q;
};
MAKE_HOOK(IVEngineClient_ClientCmd_Unrestricted, U::Memory.GetVirtual(I::EngineClient, 106), void,
void* rcx, const char* szCmdString)
{
#ifdef DEBUG_HOOKS
if (!Vars::Hooks::IVEngineClient_ClientCmd_Unrestricted[DEFAULT_BIND])
return CALL_ORIGINAL(rcx, szCmdString);
#endif
std::string sCmdString = szCmdString;
std::transform(sCmdString.begin(), sCmdString.end(), sCmdString.begin(), ::tolower);
std::deque<std::string> vArgs;
boost::split(vArgs, sCmdString, split_q());
if (!vArgs.empty())
{
std::string sCommand = vArgs.front();
vArgs.pop_front();
if (F::Commands.Run(sCommand, vArgs))
return;
}
CALL_ORIGINAL(rcx, szCmdString);
}
@@ -25,4 +25,9 @@ bool CBasePlayer::OnSolid()
bool CBasePlayer::IsSwimming()
{
return m_nWaterLevel() > 1;
}
bool CBasePlayer::IsUnderwater()
{
return m_nWaterLevel() > 2;
}
@@ -97,4 +97,5 @@ public:
Vec3 GetEyePosition();
bool OnSolid();
bool IsSwimming();
bool IsUnderwater();
};
+10
View File
@@ -587,11 +587,21 @@ public:
return (*this - v).Length();
}
inline float DistTo2D(const Vec3& v) const
{
return (*this - v).Length2D();
}
inline float DistToSqr(const Vec3& v) const
{
return (*this - v).LengthSqr();
}
inline float DistTo2DSqr(const Vec3& v) const
{
return (*this - v).Length2DSqr();
}
inline float Dot(const Vec3& v) const
{
return x * v.x + y * v.y + z * v.z;
@@ -479,7 +479,7 @@ CTFPlayer* CEntities::GetLocal()
}
CTFWeaponBase* CEntities::GetWeapon()
{
auto pLocal = I::ClientEntityList->GetClientEntity(I::EngineClient->GetLocalPlayer())->As<CTFPlayer>();
auto pLocal = GetLocal();
return pLocal ? pLocal->m_hActiveWeapon().Get()->As<CTFWeaponBase>() : nullptr;
//return m_pLocalWeapon;
}
+19 -19
View File
@@ -33,26 +33,26 @@ class CEntities
std::unordered_map<EGroupType, std::vector<CBaseEntity*>> m_mGroups = {};
std::unordered_map<int, float> m_mSimTimes, m_mOldSimTimes, m_mDeltaTimes, m_mLagTimes;
std::unordered_map<int, int> m_mChokes, m_mSetTicks;
std::unordered_map<int, std::pair<bool, matrix3x4[MAXSTUDIOBONES]>> m_mBones;
std::unordered_map<int, Vec3> m_mOldAngles, m_mEyeAngles;
std::unordered_map<int, bool> m_mLagCompensation;
std::unordered_map<int, DormantData> m_mDormancy;
std::unordered_map<int, Vec3> m_mAvgVelocities;
std::unordered_map<int, uint32_t> m_mModels;
std::unordered_map<int, std::deque<VelFixRecord>> m_mOrigins;
std::unordered_map<int, float> m_mSimTimes = {}, m_mOldSimTimes = {}, m_mDeltaTimes = {}, m_mLagTimes = {};
std::unordered_map<int, int> m_mChokes = {}, m_mSetTicks = {};
std::unordered_map<int, std::pair<bool, matrix3x4[MAXSTUDIOBONES]>> m_mBones = {};
std::unordered_map<int, Vec3> m_mOldAngles = {}, m_mEyeAngles = {};
std::unordered_map<int, bool> m_mLagCompensation = {};
std::unordered_map<int, DormantData> m_mDormancy = {};
std::unordered_map<int, Vec3> m_mAvgVelocities = {};
std::unordered_map<int, uint32_t> m_mModels = {};
std::unordered_map<int, std::deque<VelFixRecord>> m_mOrigins = {};
std::unordered_map<int, int> m_mIPriorities;
std::unordered_map<uint32_t, int> m_mUPriorities;
std::unordered_map<int, bool> m_mIFriends;
std::unordered_map<uint32_t, bool> m_mUFriends;
std::unordered_map<int, uint64_t> m_mIParty;
std::unordered_map<uint32_t, uint64_t> m_mUParty;
std::unordered_map<int, bool> m_mIF2P;
std::unordered_map<uint32_t, bool> m_mUF2P;
std::unordered_map<int, int> m_mILevels;
std::unordered_map<uint32_t, int> m_mULevels;
std::unordered_map<int, int> m_mIPriorities = {};
std::unordered_map<uint32_t, int> m_mUPriorities = {};
std::unordered_map<int, bool> m_mIFriends = {};
std::unordered_map<uint32_t, bool> m_mUFriends = {};
std::unordered_map<int, uint64_t> m_mIParty = {};
std::unordered_map<uint32_t, uint64_t> m_mUParty = {};
std::unordered_map<int, bool> m_mIF2P = {};
std::unordered_map<uint32_t, bool> m_mUF2P = {};
std::unordered_map<int, int> m_mILevels = {};
std::unordered_map<uint32_t, int> m_mULevels = {};
uint32_t m_uFriendsID;
bool m_bSettingUpBones = false;
@@ -6,10 +6,18 @@ bool CTraceFilterHitscan::ShouldHitEntity(IHandleEntity* pServerEntity, int nCon
{
if (!pServerEntity || pServerEntity == pSkip)
return false;
//if (pServerEntity->GetRefEHandle().GetSerialNumber() == (1 << 15))
// return I::ClientEntityList->GetClientEntity(0) != pSkip;
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
if (iTeam == -1) iTeam = pSkip ? pSkip->m_iTeamNum() : 0;
if (iType != SKIP_CHECK && !vWeapons.empty())
{
if (auto pWeapon = pSkip && pSkip->IsPlayer() ? pSkip->As<CTFPlayer>()->m_hActiveWeapon().Get()->As<CTFWeaponBase>() : nullptr)
{
int iWeaponID = pWeapon->GetWeaponID();
bWeapon = std::find(vWeapons.begin(), vWeapons.end(), iWeaponID) != vWeapons.end();
}
vWeapons.clear();
}
switch (pEntity->GetClassID())
{
@@ -17,40 +25,16 @@ bool CTraceFilterHitscan::ShouldHitEntity(IHandleEntity* pServerEntity, int nCon
case ETFClassID::CFuncAreaPortalWindow:
case ETFClassID::CFuncRespawnRoomVisualizer:
case ETFClassID::CTFReviveMarker: return false;
case ETFClassID::CTFMedigunShield:
{
auto pLocal = H::Entities.GetLocal();
auto pWeapon = H::Entities.GetWeapon();
const int iTargetTeam = pEntity->m_iTeamNum(), iLocalTeam = pLocal ? pLocal->m_iTeamNum() : iTargetTeam;
return iTargetTeam != iLocalTeam;
}
case ETFClassID::CTFMedigunShield: return pEntity->m_iTeamNum() != iTeam;
case ETFClassID::CTFPlayer:
case ETFClassID::CBaseObject:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectTeleporter:
{
auto pLocal = H::Entities.GetLocal();
auto pWeapon = H::Entities.GetWeapon();
bool bSniperRifle = false;
if (pLocal && pLocal == pSkip && pWeapon)
{
switch (pWeapon->GetWeaponID())
{
case TF_WEAPON_SNIPERRIFLE:
case TF_WEAPON_SNIPERRIFLE_CLASSIC:
case TF_WEAPON_SNIPERRIFLE_DECAP:
bSniperRifle = true;
}
}
if (!bSniperRifle)
return true;
const int iTargetTeam = pEntity->m_iTeamNum(), iLocalTeam = pLocal ? pLocal->m_iTeamNum() : iTargetTeam;
return iTargetTeam != iLocalTeam;
if (iType != SKIP_CHECK && (iWeapon == WEAPON_INCLUDE ? bWeapon : !bWeapon))
return iType == FORCE_HIT ? true : false;
return pEntity->m_iTeamNum() != iTeam;
}
}
@@ -61,14 +45,22 @@ TraceType_t CTraceFilterHitscan::GetTraceType() const
return TRACE_EVERYTHING;
}
bool CTraceFilterProjectile::ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask)
bool CTraceFilterCollideable::ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask)
{
if (!pServerEntity || pServerEntity == pSkip)
return false;
//if (pServerEntity->GetRefEHandle().GetSerialNumber() == (1 << 15))
// return I::ClientEntityList->GetClientEntity(0) != pSkip;
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
if (iTeam == -1) iTeam = pSkip ? pSkip->m_iTeamNum() : 0;
if (iType != SKIP_CHECK && !vWeapons.empty())
{
if (auto pWeapon = pSkip && pSkip->IsPlayer() ? pSkip->As<CTFPlayer>()->m_hActiveWeapon().Get()->As<CTFWeaponBase>() : nullptr)
{
int iWeaponID = pWeapon->GetWeaponID();
bWeapon = std::find(vWeapons.begin(), vWeapons.end(), iWeaponID) != vWeapons.end();
}
vWeapons.clear();
}
switch (pEntity->GetClassID())
{
@@ -79,36 +71,33 @@ bool CTraceFilterProjectile::ShouldHitEntity(IHandleEntity* pServerEntity, int n
case ETFClassID::CPhysicsPropMultiplayer:
case ETFClassID::CObjectCartDispenser:
case ETFClassID::CFuncTrackTrain:
case ETFClassID::CFuncConveyor:
case ETFClassID::CBaseObject:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectTeleporter: return true;
case ETFClassID::CTFMedigunShield:
{
auto pLocal = H::Entities.GetLocal();
auto pWeapon = H::Entities.GetWeapon();
const int iTargetTeam = pEntity->m_iTeamNum(), iLocalTeam = pLocal ? pLocal->m_iTeamNum() : iTargetTeam;
return iTargetTeam != iLocalTeam;
}
case ETFClassID::CFuncConveyor: return true;
case ETFClassID::CTFPlayer:
{
auto pLocal = H::Entities.GetLocal();
auto pWeapon = H::Entities.GetWeapon();
const bool bHeal = (pLocal && pLocal == pSkip && pWeapon) ? pWeapon->GetWeaponID() == TF_WEAPON_CROSSBOW || pWeapon->GetWeaponID() == TF_WEAPON_LUNCHBOX : false;
if (bHeal)
if (iPlayer == PLAYER_ALL)
return true;
const int iTargetTeam = pEntity->m_iTeamNum(), iLocalTeam = pLocal ? pLocal->m_iTeamNum() : iTargetTeam;
return iTargetTeam != iLocalTeam;
if (iPlayer == PLAYER_NONE)
return false;
if (iType != SKIP_CHECK && (iWeapon == WEAPON_INCLUDE ? bWeapon : !bWeapon))
return iType == FORCE_HIT ? true : false;
return pEntity->m_iTeamNum() != iTeam;
}
case ETFClassID::CBaseObject:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectDispenser: return iObject == OBJECT_ALL ? true : iObject == OBJECT_NONE ? false : pEntity->m_iTeamNum() != iTeam;
case ETFClassID::CObjectTeleporter: return true;
case ETFClassID::CTFMedigunShield:
if (!(nContentsMask & CONTENTS_PLAYERCLIP))
return pEntity->m_iTeamNum() != iTeam;
break;
case ETFClassID::CFuncRespawnRoomVisualizer:
if (nContentsMask & CONTENTS_PLAYERCLIP)
return pEntity->m_iTeamNum() != iTeam;
}
return false;
}
TraceType_t CTraceFilterProjectile::GetTraceType() const
TraceType_t CTraceFilterCollideable::GetTraceType() const
{
return TRACE_EVERYTHING;
}
@@ -121,6 +110,7 @@ bool CTraceFilterWorldAndPropsOnly::ShouldHitEntity(IHandleEntity* pServerEntity
return I::ClientEntityList->GetClientEntity(0) != pSkip;
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
if (iTeam == -1) iTeam = pSkip ? pSkip->m_iTeamNum() : 0;
switch (pEntity->GetClassID())
{
@@ -133,14 +123,8 @@ bool CTraceFilterWorldAndPropsOnly::ShouldHitEntity(IHandleEntity* pServerEntity
case ETFClassID::CFuncTrackTrain:
case ETFClassID::CFuncConveyor: return true;
case ETFClassID::CFuncRespawnRoomVisualizer:
if (nContentsMask & MASK_PLAYERSOLID)
{
switch (pEntity->m_iTeamNum())
{
case TF_TEAM_RED: return nContentsMask & CONTENTS_REDTEAM;
case TF_TEAM_BLUE: return nContentsMask & CONTENTS_BLUETEAM;
}
}
if (nContentsMask & CONTENTS_PLAYERCLIP)
return pEntity->m_iTeamNum() != iTeam;
}
return false;
@@ -1,20 +1,59 @@
#pragma once
#include "../../Definitions/Interfaces/IEngineTrace.h"
enum
{
SKIP_CHECK,
FORCE_PASS,
FORCE_HIT
};
enum
{
WEAPON_INCLUDE,
WEAPON_EXCLUDE
};
enum
{
PLAYER_DEFAULT,
PLAYER_NONE,
PLAYER_ALL
};
enum
{
OBJECT_DEFAULT,
OBJECT_NONE,
OBJECT_ALL
};
class CTraceFilterHitscan : public ITraceFilter
{
public:
bool ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask) override;
TraceType_t GetTraceType() const override;
CBaseEntity* pSkip = nullptr;
int iTeam = -1;
std::vector<int> vWeapons = { TF_WEAPON_SNIPERRIFLE, TF_WEAPON_SNIPERRIFLE_CLASSIC, TF_WEAPON_SNIPERRIFLE_DECAP };
int iType = FORCE_HIT;
int iWeapon = WEAPON_EXCLUDE;
bool bWeapon = false;
};
class CTraceFilterProjectile : public ITraceFilter
class CTraceFilterCollideable : public ITraceFilter
{
public:
bool ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask) override;
TraceType_t GetTraceType() const override;
CBaseEntity* pSkip = nullptr;
int iTeam = -1;
std::vector<int> vWeapons = { TF_WEAPON_CROSSBOW, TF_WEAPON_LUNCHBOX };
int iType = FORCE_HIT;
int iWeapon = WEAPON_INCLUDE;
bool bWeapon = false;
int iPlayer = PLAYER_DEFAULT;
int iObject = OBJECT_ALL;
};
class CTraceFilterWorldAndPropsOnly : public ITraceFilter
@@ -23,4 +62,6 @@ public:
bool ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask) override;
TraceType_t GetTraceType() const override;
CBaseEntity* pSkip = nullptr;
int iTeam = -1;
};
+3 -43
View File
@@ -336,10 +336,10 @@ bool SDK::VisPos(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFr
return trace.m_pEnt && trace.m_pEnt == pEntity;
return true;
}
bool SDK::VisPosProjectile(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFrom, const Vec3& vTo, unsigned int nMask)
bool SDK::VisPosCollideable(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFrom, const Vec3& vTo, unsigned int nMask)
{
CGameTrace trace = {};
CTraceFilterProjectile filter = {}; filter.pSkip = pSkip;
CTraceFilterCollideable filter = {}; filter.pSkip = pSkip; filter.iType = SKIP_CHECK;
Trace(vFrom, vTo, nMask, &filter, &trace);
if (trace.DidHit())
return trace.m_pEnt && trace.m_pEnt == pEntity;
@@ -717,46 +717,6 @@ void SDK::WalkTo(CUserCmd* pCmd, CTFPlayer* pLocal, Vec3& vTo, float flScale)
class CTraceFilterSetup : public ITraceFilter // trace filter solely for GetProjectileFireSetup
{
public:
bool ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask) override;
TraceType_t GetTraceType() const override;
CBaseEntity* pSkip = nullptr;
};
bool CTraceFilterSetup::ShouldHitEntity(IHandleEntity* pServerEntity, int nContentsMask)
{
if (!pServerEntity || pServerEntity == pSkip)
return false;
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
switch (pEntity->GetClassID())
{
case ETFClassID::CTFAmmoPack:
case ETFClassID::CFuncAreaPortalWindow:
case ETFClassID::CFuncRespawnRoomVisualizer:
case ETFClassID::CTFReviveMarker: return false;
case ETFClassID::CTFMedigunShield:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectTeleporter: return true;
case ETFClassID::CTFPlayer:
{
auto pLocal = H::Entities.GetLocal();
const int iTargetTeam = pEntity->m_iTeamNum(), iLocalTeam = pLocal ? pLocal->m_iTeamNum() : iTargetTeam;
return iTargetTeam != iLocalTeam;
}
}
return true;
}
TraceType_t CTraceFilterSetup::GetTraceType() const
{
return TRACE_EVERYTHING;
}
void SDK::GetProjectileFireSetup(CTFPlayer* pPlayer, const Vec3& vAngIn, Vec3 vOffset, Vec3& vPosOut, Vec3& vAngOut, bool bPipes, bool bInterp, bool bAllowFlip)
{
static auto cl_flipviewmodels = U::ConVars.FindVar("cl_flipviewmodels");
@@ -775,7 +735,7 @@ void SDK::GetProjectileFireSetup(CTFPlayer* pPlayer, const Vec3& vAngIn, Vec3 vO
Vec3 vEndPos = vShootPos + vForward * 2000.f;
CGameTrace trace = {};
CTraceFilterSetup filter = {};
CTraceFilterCollideable filter = {}; filter.pSkip = pPlayer; filter.iType = SKIP_CHECK;
Trace(vShootPos, vEndPos, MASK_SOLID, &filter, &trace);
if (trace.DidHit() && trace.fraction > 0.1f)
vEndPos = trace.endpos;
+1 -1
View File
@@ -98,7 +98,7 @@ namespace SDK
void TraceHull(const Vec3& vecStart, const Vec3& vecEnd, const Vec3& vecHullMin, const Vec3& vecHullMax, unsigned int nMask, ITraceFilter* pFilter, CGameTrace* pTrace);
bool VisPos(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFrom, const Vec3& vTo, unsigned int nMask = MASK_SHOT | CONTENTS_GRATE);
bool VisPosProjectile(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFrom, const Vec3& vTo, unsigned int nMask = MASK_SHOT | CONTENTS_GRATE);
bool VisPosCollideable(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFrom, const Vec3& vTo, unsigned int nMask = MASK_SHOT | CONTENTS_GRATE);
bool VisPosWorld(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& vFrom, const Vec3& vTo, unsigned int nMask = MASK_SHOT | CONTENTS_GRATE);
int GetRoundState();
+10 -6
View File
@@ -58,7 +58,7 @@ class ConfigVar : public BaseVar
public:
T Default;
T Value;
std::unordered_map<int, T> Map;
std::unordered_map<int, T> Map = {};
ConfigVar(T tValue, std::string sName, const char* sSection, std::vector<const char*> vTitle, int iFlags = 0, std::vector<const char*> vValues = {}, const char* sNone = nullptr)
{
Default = tValue;
@@ -249,6 +249,8 @@ namespace Vars
CVar(ShotPathClipped, "Shot path clipped color", Color_t(255, 255, 255, 0), VISUAL);
CVar(SplashRadius, "Splash radius color", Color_t(255, 255, 255, 255), VISUAL);
CVar(SplashRadiusClipped, "Splash radius clipped color", Color_t(255, 255, 255, 0), VISUAL);
CVar(RealPath, "Real path color", Color_t(255, 255, 255, 255), NOSAVE | DEBUGVAR);
CVar(RealPathClipped, "Real path clipped color", Color_t(255, 255, 255, 0), NOSAVE | DEBUGVAR);
CVar(BoneHitboxEdge, "Bone hitbox edge color", Color_t(255, 255, 255, 0), VISUAL);
CVar(BoneHitboxEdgeClipped, "Bone hitbox edge clipped color", Color_t(255, 255, 255, 255), VISUAL);
@@ -437,8 +439,8 @@ namespace Vars
CVar(AntiWarp, "Anti-warp", true);
CVar(TickLimit, "Tick limit", 22, SLIDER_CLAMP, 2, 22);
CVar(WarpRate, "Warp rate", 22, SLIDER_CLAMP, 2, 22);
CVar(PassiveRecharge, "Passive recharge", 0, SLIDER_CLAMP, 0, 67);
CVar(RechargeLimit, "Recharge limit", 24, SLIDER_CLAMP, 1, 24);
CVar(PassiveRecharge, "Passive recharge", 0, SLIDER_CLAMP, 0, 67);
NAMESPACE_END(DoubleTap)
NAMESPACE_BEGIN(Fakelag)
@@ -485,8 +487,8 @@ namespace Vars
"View", "Target");
CVar(RealYawOffset, "Real offset", 0.f, SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f);
CVar(FakeYawOffset, "Fake offset", 0.f, SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f);
CVar(RealYawValue, "Real value", 0.f, SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f);
CVar(FakeYawValue, "Fake value", 0.f, SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f);
CVar(RealYawValue, "Real value", 90.f, SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f);
CVar(FakeYawValue, "Fake value", -90.f, SLIDER_CLAMP | SLIDER_PRECISION, -180.f, 180.f, 5.f);
CVar(SpinSpeed, "Spin speed", 15.f, SLIDER_PRECISION, -30.f, 30.f);
CVar(MinWalk, "Minwalk", true);
CVar(AntiOverlap, "Anti-overlap", false);
@@ -839,7 +841,7 @@ namespace Vars
"Off", "Line", "Separators", "Spaced", "Arrows", "Boxes");
CVarValues(ShotPath, "Shot path", 0, VISUAL, nullptr,
"Off", "Line", "Separators", "Spaced", "Arrows", "Boxes");
CVarEnum(SplashRadius, "Splash path", 0b0, VISUAL | DROPDOWN_MULTI, "Off",
CVarEnum(SplashRadius, "Splash radius", 0b0, VISUAL | DROPDOWN_MULTI, "Off",
VA_LIST("Simulation", "##Divider", "Priority", "Enemy", "Team", "Local", "Friends", "Party", "##Divider", "Rockets", "Stickies", "Pipes", "Scorch shot", "##Divider", "Trace"),
Simulation = 1 << 0, Priority = 1 << 1, Enemy = 1 << 2, Team = 1 << 3, Local = 1 << 4, Friends = 1 << 5, Party = 1 << 6, Rockets = 1 << 7, Stickies = 1 << 8, Pipes = 1 << 9, ScorchShot = 1 << 10, Trace = 1 << 11);
CVar(Timed, VA_LIST("Timed", "Timed path"), false, VISUAL);
@@ -849,6 +851,8 @@ namespace Vars
CVar(SwingLines, "Swing lines", false, VISUAL);
CVar(DrawDuration, VA_LIST("Draw duration", "Simulation draw duration"), 5.f, VISUAL | SLIDER_MIN | SLIDER_PRECISION, 0.f, 10.f);
CVarValues(RealPath, "Real path", 0, NOSAVE | DEBUGVAR, nullptr,
"Off", "Line", "Separators", "Spaced", "Arrows", "Boxes");
CVar(SeparatorSpacing, "Separator spacing", 4, NOSAVE | DEBUGVAR, 1, 16);
CVar(SeparatorLength, "Separator length", 12.f, NOSAVE | DEBUGVAR, 2.f, 16.f);
SUBNAMESPACE_END(Simulation);
@@ -1109,7 +1113,7 @@ namespace Vars
CVar(Info, "Debug info", false, NOSAVE);
CVar(Logging, "Debug logging", false, NOSAVE);
CVar(Options, "Debug options", false, NOSAVE);
CVar(DrawServerHitboxes, "Show server hitboxes", false, NOSAVE);
CVar(DrawHitboxes, "Show hitboxes", false, NOSAVE);
CVar(AntiAimLines, "Anti-aim lines", false);
CVar(CrashLogging, "Crash logging", true);
#ifdef DEBUG_TRACES
+2 -2
View File
@@ -7,8 +7,8 @@
class CConVars
{
private:
std::unordered_map<uint32_t, ConVar*> mCVarMap;
std::unordered_map<ConCommandBase*, int> mFlagMap;
std::unordered_map<uint32_t, ConVar*> mCVarMap = {};
std::unordered_map<ConCommandBase*, int> mFlagMap = {};
public:
void Initialize();
+1 -1
View File
@@ -28,7 +28,7 @@ public:
// Was the button just released? This will only be true once.
bool Released(int iKey, const bool bStore = false, KeyStorage* pStorage = nullptr);
std::unordered_map<int, KeyStorage> m_mKeyStorage;
std::unordered_map<int, KeyStorage> m_mKeyStorage = {};
};
ADD_FEATURE_CUSTOM(CKeyHandler, KeyHandler, U);