mirror of
https://github.com/rei-2/Amalgam
synced 2026-10-10 04:43:09 +08:00
leading aim mode
This commit is contained in:
@@ -53,7 +53,20 @@ void CAimbotGlobal::SortTargetsPost(std::vector<Target_t>& vTargets, int iMethod
|
||||
});
|
||||
}
|
||||
|
||||
// this won't prevent shooting bones outside of fov
|
||||
float CAimbotGlobal::GetAimFOV()
|
||||
{ // restrict now vs later
|
||||
return Vars::Aimbot::General::LeadAndRestrict.Value ? 180.f : Vars::Aimbot::General::AimFOV.Value;
|
||||
}
|
||||
|
||||
bool CAimbotGlobal::EntityCenterInFOV(CBaseEntity* pTarget, Vec3 vLocalPos, Vec3 vLocalAngles, float& flFOVTo, Vec3& vPos, Vec3& vAngleTo)
|
||||
{
|
||||
vPos = pTarget->GetCenter();
|
||||
vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
|
||||
return flFOVTo < GetAimFOV();
|
||||
}
|
||||
|
||||
bool CAimbotGlobal::PlayerBoneInFOV(CTFPlayer* pTarget, Vec3 vLocalPos, Vec3 vLocalAngles, float& flFOVTo, Vec3& vPos, Vec3& vAngleTo, int iHitboxes)
|
||||
{
|
||||
matrix3x4* aBones = F::Backtrack.GetBones(pTarget);
|
||||
@@ -94,7 +107,7 @@ bool CAimbotGlobal::PlayerBoneInFOV(CTFPlayer* pTarget, Vec3 vLocalPos, Vec3 vLo
|
||||
}
|
||||
}
|
||||
|
||||
return flMinFOV < Vars::Aimbot::General::AimFOV.Value;
|
||||
return flMinFOV < GetAimFOV();
|
||||
}
|
||||
|
||||
bool CAimbotGlobal::IsHitboxValid(CBaseEntity* pEntity, int nHitbox, int iHitboxes)
|
||||
@@ -170,6 +183,14 @@ bool CAimbotGlobal::ShouldMultipoint(CBaseEntity* pEntity, int nHitbox, int iHit
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CAimbotGlobal::ShouldAimAtAngle(Vec3 vAngles)
|
||||
{
|
||||
if (!Vars::Aimbot::General::LeadAndRestrict.Value)
|
||||
return true;
|
||||
|
||||
return Math::CalcFov(I::EngineClient->GetViewAngles(), vAngles) < Vars::Aimbot::General::AimFOV.Value;
|
||||
}
|
||||
|
||||
bool CAimbotGlobal::ShouldIgnore(CBaseEntity* pEntity, CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
if (pEntity->IsDormant())
|
||||
|
||||
@@ -32,10 +32,13 @@ public:
|
||||
void SortTargetsPre(std::vector<Target_t>& vTargets, int iMethod);
|
||||
void SortTargetsPost(std::vector<Target_t>& vTargets, int iMethod);
|
||||
|
||||
float GetAimFOV();
|
||||
bool EntityCenterInFOV(CBaseEntity* pTarget, Vec3 vLocalPos, Vec3 vLocalAngles, float& flFOVTo, Vec3& vPos, Vec3& vAngleTo);
|
||||
bool PlayerBoneInFOV(CTFPlayer* pTarget, Vec3 vLocalPos, Vec3 vLocalAngles, float& flFOVTo, Vec3& vPos, Vec3& vAngleTo, int iHitboxes = Vars::Aimbot::Hitscan::HitboxesEnum::Head | Vars::Aimbot::Hitscan::HitboxesEnum::Body | Vars::Aimbot::Hitscan::HitboxesEnum::Pelvis | Vars::Aimbot::Hitscan::HitboxesEnum::Arms | Vars::Aimbot::Hitscan::HitboxesEnum::Legs);
|
||||
bool IsHitboxValid(CBaseEntity* pEntity, int nHitbox, int iHitboxes = Vars::Aimbot::Hitscan::HitboxesEnum::Head | Vars::Aimbot::Hitscan::HitboxesEnum::Body | Vars::Aimbot::Hitscan::HitboxesEnum::Pelvis | Vars::Aimbot::Hitscan::HitboxesEnum::Arms | Vars::Aimbot::Hitscan::HitboxesEnum::Legs);
|
||||
bool IsHitboxValid(int nHitbox, int iHitboxes = Vars::Aimbot::Projectile::HitboxesEnum::Head | Vars::Aimbot::Projectile::HitboxesEnum::Body | Vars::Aimbot::Projectile::HitboxesEnum::Feet);
|
||||
bool ShouldMultipoint(CBaseEntity* pEntity = nullptr, int nHitbox = -1, int iHitboxes = Vars::Aimbot::Hitscan::HitboxesEnum::Head | Vars::Aimbot::Hitscan::HitboxesEnum::Body | Vars::Aimbot::Hitscan::HitboxesEnum::Pelvis | Vars::Aimbot::Hitscan::HitboxesEnum::Arms | Vars::Aimbot::Hitscan::HitboxesEnum::Legs);
|
||||
bool ShouldAimAtAngle(Vec3 vAngles);
|
||||
|
||||
bool ShouldIgnore(CBaseEntity* pTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
int GetPriority(int iIndex);
|
||||
|
||||
@@ -81,10 +81,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -99,10 +97,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->m_vecOrigin();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -117,10 +113,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -135,10 +129,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -238,7 +230,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
|
||||
return false;
|
||||
|
||||
m_vEyePos = pLocal->GetShootPos();
|
||||
const float flMaxRange = powf(pWeapon->GetRange(), 2.f);
|
||||
const float flMaxRangeSqr = powf(pWeapon->GetRange(), 2.f);
|
||||
|
||||
auto pModel = tTarget.m_pEntity->GetModel();
|
||||
if (!pModel) return false;
|
||||
@@ -263,6 +255,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
|
||||
vRecords = { &F::Backtrack.m_tRecord };
|
||||
}
|
||||
|
||||
int iReturn = false;
|
||||
bool bPeekCheck = false;
|
||||
if (Vars::Aimbot::Hitscan::PeekAmount.Value && pWeapon->GetWeaponSpread())
|
||||
{
|
||||
@@ -290,205 +283,196 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
|
||||
});
|
||||
}
|
||||
|
||||
int iReturn = false;
|
||||
for (auto pRecord : vRecords)
|
||||
// wrangler
|
||||
if (pWeapon->GetWeaponID() == TF_WEAPON_LASER_POINTER)
|
||||
{
|
||||
bool bRunPeekCheck = bPeekCheck;
|
||||
|
||||
if (pWeapon->GetWeaponID() == TF_WEAPON_LASER_POINTER)
|
||||
tTarget.m_vPos = tTarget.m_pEntity->m_vecOrigin();
|
||||
|
||||
MoveStorage tMoveStorage; // run movesim based on ping
|
||||
F::MoveSim.Initialize(tTarget.m_pEntity, tMoveStorage);
|
||||
if (!tMoveStorage.m_bFailed)
|
||||
{
|
||||
tTarget.m_vPos = tTarget.m_pEntity->m_vecOrigin();
|
||||
|
||||
// not lag compensated (i assume) so run movesim based on ping
|
||||
MoveStorage tMoveStorage;
|
||||
F::MoveSim.Initialize(tTarget.m_pEntity, tMoveStorage);
|
||||
if (!tMoveStorage.m_bFailed)
|
||||
for (int i = 1 - TIME_TO_TICKS(F::Backtrack.GetReal()); i <= 0; i++)
|
||||
{
|
||||
for (int i = 1 - TIME_TO_TICKS(F::Backtrack.GetReal()); i <= 0; i++)
|
||||
{
|
||||
F::MoveSim.RunTick(tMoveStorage);
|
||||
tTarget.m_vPos = tMoveStorage.m_vPredictedOrigin;
|
||||
}
|
||||
F::MoveSim.RunTick(tMoveStorage);
|
||||
tTarget.m_vPos = tMoveStorage.m_vPredictedOrigin;
|
||||
}
|
||||
F::MoveSim.Restore(tMoveStorage);
|
||||
}
|
||||
F::MoveSim.Restore(tMoveStorage);
|
||||
|
||||
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
|
||||
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
|
||||
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
|
||||
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
|
||||
|
||||
Vec3 vMins = tTarget.m_pEntity->m_vecMins();
|
||||
Vec3 vMaxs = tTarget.m_pEntity->m_vecMaxs();
|
||||
Vec3 vCheckMins = (vMins + flBoneSubtract) * flBoneScale;
|
||||
Vec3 vCheckMaxs = (vMaxs - flBoneSubtract) * flBoneScale;
|
||||
Vec3 vMins = tTarget.m_pEntity->m_vecMins();
|
||||
Vec3 vMaxs = tTarget.m_pEntity->m_vecMaxs();
|
||||
Vec3 vCheckMins = (vMins + flBoneSubtract) * flBoneScale;
|
||||
Vec3 vCheckMaxs = (vMaxs - flBoneSubtract) * flBoneScale;
|
||||
|
||||
const matrix3x4 mTransform = { { 1, 0, 0, tTarget.m_vPos.x }, { 0, 1, 0, tTarget.m_vPos.y }, { 0, 0, 1, tTarget.m_vPos.z } };
|
||||
const matrix3x4 mTransform = { { 1, 0, 0, tTarget.m_vPos.x }, { 0, 1, 0, tTarget.m_vPos.y }, { 0, 0, 1, tTarget.m_vPos.z } };
|
||||
|
||||
tTarget.m_vPos += tTarget.m_pEntity->GetOffset() / 2;
|
||||
if (m_vEyePos.DistToSqr(tTarget.m_vPos) > flMaxRange)
|
||||
break;
|
||||
tTarget.m_vPos += tTarget.m_pEntity->GetOffset() / 2;
|
||||
if (m_vEyePos.DistToSqr(tTarget.m_vPos) > flMaxRangeSqr)
|
||||
return false;
|
||||
|
||||
if (SDK::VisPosWorld(pLocal, tTarget.m_pEntity, m_vEyePos, tTarget.m_vPos))
|
||||
if (SDK::VisPosWorld(pLocal, tTarget.m_pEntity, m_vEyePos, tTarget.m_vPos))
|
||||
{
|
||||
Vec3 vAngles; bool bChanged = Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, tTarget.m_vPos), vAngles);
|
||||
Vec3 vForward; Math::AngleVectors(vAngles, &vForward);
|
||||
float flDist = m_vEyePos.DistTo(tTarget.m_vPos);
|
||||
|
||||
if (!F::AimbotGlobal.ShouldAimAtAngle(vAngles))
|
||||
return false;
|
||||
|
||||
if (!bChanged || Math::RayToOBB(m_vEyePos, vForward, vCheckMins, vCheckMaxs, mTransform) && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, m_vEyePos + vForward * flDist))
|
||||
{
|
||||
Vec3 vAngles; bool bChanged = Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, tTarget.m_vPos), vAngles);
|
||||
Vec3 vForward; Math::AngleVectors(vAngles, &vForward);
|
||||
float flDist = m_vEyePos.DistTo(tTarget.m_vPos);
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
tTarget.m_pRecord = vRecords.front();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
iReturn = 2;
|
||||
}
|
||||
|
||||
if (!bChanged || Math::RayToOBB(m_vEyePos, vForward, vCheckMins, vCheckMaxs, mTransform) && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, m_vEyePos + vForward * flDist))
|
||||
{
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
tTarget.m_pRecord = pRecord;
|
||||
return true;
|
||||
}
|
||||
else if (iReturn == 2 ? vAngles.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D() < tTarget.m_vAngleTo.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D() : true)
|
||||
return iReturn;
|
||||
}
|
||||
|
||||
// non player
|
||||
if (tTarget.m_iTargetType != TargetEnum::Player)
|
||||
{
|
||||
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
|
||||
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
|
||||
|
||||
Vec3 vMins = tTarget.m_pEntity->m_vecMins();
|
||||
Vec3 vMaxs = tTarget.m_pEntity->m_vecMaxs();
|
||||
Vec3 vCheckMins = (vMins + flBoneSubtract) * flBoneScale;
|
||||
Vec3 vCheckMaxs = (vMaxs - flBoneSubtract) * flBoneScale;
|
||||
|
||||
const matrix3x4& mTransform = tTarget.m_pEntity->m_Collision()->CollisionToWorldTransform();
|
||||
|
||||
std::vector<Vec3> vPoints = { Vec3() };
|
||||
//if (Vars::Aimbot::Hitscan::MultipointScale.Value > 0.f)
|
||||
{
|
||||
bool bTriggerbot = (Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Smooth
|
||||
|| Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Assistive)
|
||||
&& !Vars::Aimbot::General::AssistStrength.Value;
|
||||
|
||||
if (!bTriggerbot)
|
||||
{
|
||||
float flScale = 0.5f; //Vars::Aimbot::Hitscan::MultipointScale.Value / 100;
|
||||
Vec3 vMinsS = (vMins - vMaxs) / 2 * flScale;
|
||||
Vec3 vMaxsS = (vMaxs - vMins) / 2 * flScale;
|
||||
|
||||
vPoints = {
|
||||
Vec3(),
|
||||
Vec3(vMinsS.x, vMinsS.y, vMaxsS.z),
|
||||
Vec3(vMaxsS.x, vMinsS.y, vMaxsS.z),
|
||||
Vec3(vMinsS.x, vMaxsS.y, vMaxsS.z),
|
||||
Vec3(vMaxsS.x, vMaxsS.y, vMaxsS.z),
|
||||
Vec3(vMinsS.x, vMinsS.y, vMinsS.z),
|
||||
Vec3(vMaxsS.x, vMinsS.y, vMinsS.z),
|
||||
Vec3(vMinsS.x, vMaxsS.y, vMinsS.z),
|
||||
Vec3(vMaxsS.x, vMaxsS.y, vMinsS.z)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& vPoint : vPoints)
|
||||
{
|
||||
Vec3 vOrigin = tTarget.m_pEntity->GetCenter() + vPoint;
|
||||
|
||||
if (m_vEyePos.DistToSqr(vOrigin) > flMaxRangeSqr)
|
||||
continue;
|
||||
|
||||
Vec3 vAngles; bool bChanged = Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, vOrigin), vAngles);
|
||||
Vec3 vForward; Math::AngleVectors(vAngles, &vForward);
|
||||
float flDist = m_vEyePos.DistTo(vOrigin);
|
||||
|
||||
if (!F::AimbotGlobal.ShouldAimAtAngle(vAngles) || !bChanged && !SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
continue;
|
||||
|
||||
if (!bChanged || Math::RayToOBB(m_vEyePos, vForward, vCheckMins, vCheckMaxs, mTransform) && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, m_vEyePos + vForward * flDist))
|
||||
{
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
tTarget.m_pRecord = vRecords.front();;
|
||||
tTarget.m_vPos = vOrigin;
|
||||
return true;
|
||||
}
|
||||
else if (bChanged && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
{
|
||||
if (iReturn != 2 || vAngles.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D() < tTarget.m_vAngleTo.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D())
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
iReturn = 2;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (tTarget.m_iTargetType == TargetEnum::Player)
|
||||
return iReturn;
|
||||
}
|
||||
|
||||
// player
|
||||
std::vector<std::tuple<const mstudiobbox_t*, int, int>> vHitboxes;
|
||||
for (int nHitbox = 0; nHitbox < pSet->numhitboxes; nHitbox++)
|
||||
{
|
||||
int iPriority = GetHitboxPriority(nHitbox, pLocal, pWeapon, tTarget.m_pEntity);
|
||||
if (iPriority == -1)
|
||||
continue;
|
||||
|
||||
auto pBox = pSet->pHitbox(nHitbox);
|
||||
if (!pBox) continue;
|
||||
|
||||
vHitboxes.emplace_back(pBox, nHitbox, iPriority);
|
||||
}
|
||||
std::sort(vHitboxes.begin(), vHitboxes.end(), [&](const auto& a, const auto& b) -> bool
|
||||
{
|
||||
return std::get<2>(a) < std::get<2>(b);
|
||||
});
|
||||
|
||||
float flModelScale = tTarget.m_pEntity->As<CBaseAnimating>()->m_flModelScale();
|
||||
float flBoneScale = Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value;
|
||||
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
|
||||
|
||||
auto pGameRules = I::TFGameRules();
|
||||
auto pViewVectors = pGameRules ? pGameRules->GetViewVectors() : nullptr;
|
||||
Vec3 vHullMins = (pViewVectors ? pViewVectors->m_vHullMin : Vec3(-24, -24, 0)) * flModelScale;
|
||||
Vec3 vHullMaxs = (pViewVectors ? pViewVectors->m_vHullMax : Vec3(24, 24, 82)) * flModelScale;
|
||||
|
||||
for (auto pRecord : vRecords)
|
||||
{
|
||||
bool bRunPeekCheck = bPeekCheck;
|
||||
|
||||
auto aBones = pRecord->m_aBones;
|
||||
if (!aBones)
|
||||
continue;
|
||||
|
||||
const matrix3x4 mTransform = { { 1, 0, 0, pRecord->m_vOrigin.x }, { 0, 1, 0, pRecord->m_vOrigin.y }, { 0, 0, 1, pRecord->m_vOrigin.z } };
|
||||
|
||||
for (auto& [pBox, nHitbox, _] : vHitboxes)
|
||||
{
|
||||
auto aBones = pRecord->m_aBones;
|
||||
if (!aBones)
|
||||
continue;
|
||||
Vec3 vMins = pBox->bbmin;
|
||||
Vec3 vMaxs = pBox->bbmax;
|
||||
Vec3 vCheckMins = (vMins + flBoneSubtract / flModelScale) * flBoneScale;
|
||||
Vec3 vCheckMaxs = (vMaxs - flBoneSubtract / flModelScale) * flBoneScale;
|
||||
Vec3 vAngle; Math::MatrixAngles(aBones[pBox->bone], vAngle);
|
||||
|
||||
std::vector<std::tuple<const mstudiobbox_t*, int, int>> vHitboxes;
|
||||
for (int nHitbox = 0; nHitbox < pSet->numhitboxes; nHitbox++)
|
||||
Vec3 vOffset;
|
||||
{
|
||||
int iPriority = GetHitboxPriority(nHitbox, pLocal, pWeapon, tTarget.m_pEntity);
|
||||
if (iPriority == -1)
|
||||
continue;
|
||||
|
||||
auto pBox = pSet->pHitbox(nHitbox);
|
||||
if (!pBox) continue;
|
||||
|
||||
vHitboxes.emplace_back(pBox, nHitbox, iPriority);
|
||||
Vec3 vOrigin, vCenter;
|
||||
Math::VectorTransform({}, aBones[pBox->bone], vOrigin);
|
||||
Math::VectorTransform((vMins + vMaxs) / 2, aBones[pBox->bone], vCenter);
|
||||
vOffset = vCenter - vOrigin;
|
||||
}
|
||||
std::sort(vHitboxes.begin(), vHitboxes.end(), [&](const auto& a, const auto& b) -> bool
|
||||
{
|
||||
return std::get<2>(a) < std::get<2>(b);
|
||||
});
|
||||
|
||||
float flModelScale = tTarget.m_pEntity->As<CBaseAnimating>()->m_flModelScale();
|
||||
float flBoneScale = Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value;
|
||||
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
|
||||
|
||||
auto pGameRules = I::TFGameRules();
|
||||
auto pViewVectors = pGameRules ? pGameRules->GetViewVectors() : nullptr;
|
||||
Vec3 vHullMins = (pViewVectors ? pViewVectors->m_vHullMin : Vec3(-24, -24, 0)) * flModelScale;
|
||||
Vec3 vHullMaxs = (pViewVectors ? pViewVectors->m_vHullMax : Vec3(24, 24, 82)) * flModelScale;
|
||||
|
||||
const matrix3x4 mTransform = { { 1, 0, 0, pRecord->m_vOrigin.x }, { 0, 1, 0, pRecord->m_vOrigin.y }, { 0, 0, 1, pRecord->m_vOrigin.z } };
|
||||
|
||||
for (auto& [pBox, nHitbox, _] : vHitboxes)
|
||||
{
|
||||
Vec3 vMins = pBox->bbmin;
|
||||
Vec3 vMaxs = pBox->bbmax;
|
||||
Vec3 vCheckMins = (vMins + flBoneSubtract / flModelScale) * flBoneScale;
|
||||
Vec3 vCheckMaxs = (vMaxs - flBoneSubtract / flModelScale) * flBoneScale;
|
||||
Vec3 vAngle; Math::MatrixAngles(aBones[pBox->bone], vAngle);
|
||||
|
||||
Vec3 vOffset;
|
||||
{
|
||||
Vec3 vOrigin, vCenter;
|
||||
Math::VectorTransform({}, aBones[pBox->bone], vOrigin);
|
||||
Math::VectorTransform((vMins + vMaxs) / 2, aBones[pBox->bone], vCenter);
|
||||
vOffset = vCenter - vOrigin;
|
||||
}
|
||||
|
||||
std::vector<Vec3> vPoints = { Vec3() };
|
||||
if (F::AimbotGlobal.ShouldMultipoint(tTarget.m_pEntity, nHitbox, Vars::Aimbot::Hitscan::MultipointHitboxes.Value))
|
||||
{
|
||||
flBoneScale = std::max(flBoneScale, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
|
||||
bool bTriggerbot = (Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Smooth
|
||||
|| Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Assistive)
|
||||
&& !Vars::Aimbot::General::AssistStrength.Value;
|
||||
|
||||
if (!bTriggerbot)
|
||||
{
|
||||
float flScale = Vars::Aimbot::Hitscan::MultipointScale.Value / 100;
|
||||
Vec3 vMinsS = (vMins - vMaxs) / 2 * flScale;
|
||||
Vec3 vMaxsS = (vMaxs - vMins) / 2 * flScale;
|
||||
|
||||
vPoints = {
|
||||
Vec3(),
|
||||
Vec3(vMinsS.x, vMinsS.y, vMaxsS.z),
|
||||
Vec3(vMaxsS.x, vMinsS.y, vMaxsS.z),
|
||||
Vec3(vMinsS.x, vMaxsS.y, vMaxsS.z),
|
||||
Vec3(vMaxsS.x, vMaxsS.y, vMaxsS.z),
|
||||
Vec3(vMinsS.x, vMinsS.y, vMinsS.z),
|
||||
Vec3(vMaxsS.x, vMinsS.y, vMinsS.z),
|
||||
Vec3(vMinsS.x, vMaxsS.y, vMinsS.z),
|
||||
Vec3(vMaxsS.x, vMaxsS.y, vMinsS.z)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& vPoint : vPoints)
|
||||
{
|
||||
Vec3 vOrigin; Math::VectorTransform(vPoint, aBones[pBox->bone], vOrigin); vOrigin += vOffset;
|
||||
|
||||
if (m_vEyePos.DistToSqr(vOrigin) > flMaxRange)
|
||||
continue;
|
||||
|
||||
if (bRunPeekCheck)
|
||||
{
|
||||
bRunPeekCheck = false;
|
||||
if (!SDK::VisPos(pLocal, tTarget.m_pEntity, vPeekPos, vOrigin))
|
||||
goto nextTick; // if we can't hit our primary hitbox, don't bother
|
||||
}
|
||||
|
||||
Vec3 vAngles; bool bChanged = Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, vOrigin), vAngles);
|
||||
Vec3 vForward; Math::AngleVectors(vAngles, &vForward);
|
||||
float flDist = m_vEyePos.DistTo(vOrigin);
|
||||
|
||||
if (bChanged || SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
{
|
||||
// for the time being, no vischecks against other hitboxes
|
||||
if ((!bChanged || Math::RayToOBB(m_vEyePos, vForward, vCheckMins, vCheckMaxs, aBones[pBox->bone], flModelScale) && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, m_vEyePos + vForward * flDist))
|
||||
&& Math::RayToOBB(m_vEyePos, vForward, vHullMins, vHullMaxs, mTransform))
|
||||
{
|
||||
iTargetBone = pBox->bone;
|
||||
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
tTarget.m_pRecord = pRecord;
|
||||
tTarget.m_vPos = vOrigin;
|
||||
tTarget.m_nAimedHitbox = nHitbox;
|
||||
tTarget.m_bBacktrack = true;
|
||||
return true;
|
||||
}
|
||||
else if (bChanged && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
{
|
||||
if (iReturn != 2 || vAngles.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D() < tTarget.m_vAngleTo.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D())
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
iReturn = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
|
||||
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
|
||||
|
||||
Vec3 vMins = tTarget.m_pEntity->m_vecMins();
|
||||
Vec3 vMaxs = tTarget.m_pEntity->m_vecMaxs();
|
||||
Vec3 vCheckMins = (vMins + flBoneSubtract) * flBoneScale;
|
||||
Vec3 vCheckMaxs = (vMaxs - flBoneSubtract) * flBoneScale;
|
||||
|
||||
const matrix3x4& mTransform = tTarget.m_pEntity->m_Collision()->CollisionToWorldTransform();
|
||||
|
||||
std::vector<Vec3> vPoints = { Vec3() };
|
||||
//if (Vars::Aimbot::Hitscan::MultipointScale.Value > 0.f)
|
||||
if (F::AimbotGlobal.ShouldMultipoint(tTarget.m_pEntity, nHitbox, Vars::Aimbot::Hitscan::MultipointHitboxes.Value))
|
||||
{
|
||||
flBoneScale = std::max(flBoneScale, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
|
||||
bool bTriggerbot = (Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Smooth
|
||||
|| Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Assistive)
|
||||
&& !Vars::Aimbot::General::AssistStrength.Value;
|
||||
|
||||
if (!bTriggerbot)
|
||||
{
|
||||
float flScale = 0.5f; //Vars::Aimbot::Hitscan::MultipointScale.Value / 100;
|
||||
float flScale = Vars::Aimbot::Hitscan::MultipointScale.Value / 100;
|
||||
Vec3 vMinsS = (vMins - vMaxs) / 2 * flScale;
|
||||
Vec3 vMaxsS = (vMaxs - vMins) / 2 * flScale;
|
||||
|
||||
@@ -508,30 +492,43 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
|
||||
|
||||
for (auto& vPoint : vPoints)
|
||||
{
|
||||
Vec3 vOrigin = tTarget.m_pEntity->GetCenter() + vPoint;
|
||||
Vec3 vOrigin; Math::VectorTransform(vPoint, aBones[pBox->bone], vOrigin); vOrigin += vOffset;
|
||||
|
||||
if (m_vEyePos.DistToSqr(vOrigin) > flMaxRange)
|
||||
if (m_vEyePos.DistToSqr(vOrigin) > flMaxRangeSqr)
|
||||
continue;
|
||||
|
||||
if (bRunPeekCheck)
|
||||
{
|
||||
bRunPeekCheck = false;
|
||||
if (!SDK::VisPos(pLocal, tTarget.m_pEntity, vPeekPos, vOrigin))
|
||||
goto nextTick; // if we can't hit our primary hitbox, don't bother
|
||||
}
|
||||
|
||||
Vec3 vAngles; bool bChanged = Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, vOrigin), vAngles);
|
||||
Vec3 vForward; Math::AngleVectors(vAngles, &vForward);
|
||||
float flDist = m_vEyePos.DistTo(vOrigin);
|
||||
|
||||
if (bChanged || SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
if (!F::AimbotGlobal.ShouldAimAtAngle(vAngles) || !bChanged && !SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
continue;
|
||||
|
||||
// for the time being, no vischecks against other hitboxes
|
||||
if ((!bChanged || Math::RayToOBB(m_vEyePos, vForward, vCheckMins, vCheckMaxs, aBones[pBox->bone], flModelScale) && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, m_vEyePos + vForward * flDist))
|
||||
&& Math::RayToOBB(m_vEyePos, vForward, vHullMins, vHullMaxs, mTransform))
|
||||
{
|
||||
if (!bChanged || Math::RayToOBB(m_vEyePos, vForward, vCheckMins, vCheckMaxs, mTransform) && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, m_vEyePos + vForward * flDist))
|
||||
{
|
||||
iTargetBone = pBox->bone;
|
||||
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
tTarget.m_pRecord = pRecord;
|
||||
tTarget.m_vPos = vOrigin;
|
||||
tTarget.m_nAimedHitbox = nHitbox;
|
||||
tTarget.m_bBacktrack = true;
|
||||
return true;
|
||||
}
|
||||
else if (bChanged && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
{
|
||||
if (iReturn != 2 || vAngles.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D() < tTarget.m_vAngleTo.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D())
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
tTarget.m_pRecord = pRecord;
|
||||
tTarget.m_vPos = vOrigin;
|
||||
return true;
|
||||
}
|
||||
else if (bChanged && SDK::VisPos(pLocal, tTarget.m_pEntity, m_vEyePos, vOrigin))
|
||||
{
|
||||
if (iReturn != 2 || vAngles.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D() < tTarget.m_vAngleTo.DeltaAngle(G::CurrentUserCmd->viewangles).Length2D())
|
||||
tTarget.m_vAngleTo = vAngles;
|
||||
iReturn = 2;
|
||||
}
|
||||
iReturn = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,10 +69,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (bTeam && (bWrench && !AimFriendlyBuilding(pEntity->As<CBaseObject>()) || bSapper && !pEntity->As<CBaseObject>()->m_bHasSapper()))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
int iPriority = 0;
|
||||
@@ -102,10 +100,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -361,6 +357,14 @@ int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pW
|
||||
|
||||
for (auto pRecord : vRecords)
|
||||
{
|
||||
// possibly account melee bounds as well?
|
||||
tTarget.m_vPos = m_vEyePos.Clamp(pRecord->m_vOrigin + pRecord->m_vMins, pRecord->m_vOrigin + pRecord->m_vMaxs);
|
||||
if (Vars::Aimbot::Melee::AutoBackstab.Value && pWeapon->GetWeaponID() == TF_WEAPON_KNIFE)
|
||||
tTarget.m_vPos.x = pRecord->m_vOrigin.x, tTarget.m_vPos.y = pRecord->m_vOrigin.y;
|
||||
Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, tTarget.m_vPos), tTarget.m_vAngleTo);
|
||||
if (!F::AimbotGlobal.ShouldAimAtAngle(tTarget.m_vAngleTo))
|
||||
continue;
|
||||
|
||||
Vec3 vRestoreOrigin = tTarget.m_pEntity->GetAbsOrigin();
|
||||
Vec3 vRestoreMins = tTarget.m_pEntity->m_vecMins();
|
||||
Vec3 vRestoreMaxs = tTarget.m_pEntity->m_vecMaxs();
|
||||
@@ -369,12 +373,6 @@ int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pW
|
||||
tTarget.m_pEntity->m_vecMins() = pRecord->m_vMins + PLAYER_ORIGIN_COMPRESSION;
|
||||
tTarget.m_pEntity->m_vecMaxs() = pRecord->m_vMaxs - PLAYER_ORIGIN_COMPRESSION;
|
||||
|
||||
// possibly account melee bounds as well?
|
||||
tTarget.m_vPos = m_vEyePos.Clamp(pRecord->m_vOrigin + tTarget.m_pEntity->m_vecMins(), pRecord->m_vOrigin + tTarget.m_pEntity->m_vecMaxs());
|
||||
if (Vars::Aimbot::Melee::AutoBackstab.Value && pWeapon->GetWeaponID() == TF_WEAPON_KNIFE)
|
||||
tTarget.m_vPos.x = pRecord->m_vOrigin.x, tTarget.m_vPos.y = pRecord->m_vOrigin.y;
|
||||
Aim(G::CurrentUserCmd->viewangles, Math::CalcAngle(m_vEyePos, tTarget.m_vPos), tTarget.m_vAngleTo);
|
||||
|
||||
Vec3 vForward; Math::AngleVectors(tTarget.m_vAngleTo, &vForward);
|
||||
Vec3 vTraceEnd = m_vEyePos + vForward * flRange;
|
||||
|
||||
@@ -673,7 +671,6 @@ bool CAimbotMelee::RunSapper(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPoint);
|
||||
const float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
const float flDistTo = vLocalPos.DistToSqr(vPoint);
|
||||
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -98,10 +98,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (bTeam && (pEntity->As<CBaseObject>()->m_iHealth() >= pEntity->As<CBaseObject>()->m_iMaxHealth() || pEntity->As<CBaseObject>()->m_bBuilding()))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
int iPriority = 0;
|
||||
@@ -146,10 +144,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -165,10 +161,8 @@ static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (F::AimbotGlobal.ShouldIgnore(pEntity, pLocal, pWeapon))
|
||||
continue;
|
||||
|
||||
Vec3 vPos = pEntity->GetCenter();
|
||||
Vec3 vAngleTo = Math::CalcAngle(vLocalPos, vPos);
|
||||
float flFOVTo = Math::CalcFov(vLocalAngles, vAngleTo);
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
float flFOVTo; Vec3 vPos, vAngleTo;
|
||||
if (!F::AimbotGlobal.EntityCenterInFOV(pEntity, vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistToSqr(vPos);
|
||||
@@ -1692,6 +1686,8 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
|
||||
splash: if (HandleSplash(mSplashHistory)) break;
|
||||
}
|
||||
F::MoveSim.Restore(m_tMoveStorage);
|
||||
if (!F::AimbotGlobal.ShouldAimAtAngle(m_vAngleTo))
|
||||
return false;
|
||||
if (!bUpdate)
|
||||
return m_iResult;
|
||||
|
||||
|
||||
@@ -17,8 +17,7 @@ void CMenu::DrawMenu()
|
||||
{
|
||||
using namespace ImGui;
|
||||
|
||||
static bool bSetPosition = false;
|
||||
if (!bSetPosition)
|
||||
if (static bool bSetPosition = false; !bSetPosition)
|
||||
{
|
||||
SetNextWindowPos((GetIO().DisplaySize - ImVec2(H::Draw.Scale(750), H::Draw.Scale(500))) / 2, ImGuiCond_FirstUseEver);
|
||||
SetNextWindowSize({ H::Draw.Scale(750), H::Draw.Scale(500) }, ImGuiCond_FirstUseEver);
|
||||
@@ -173,9 +172,7 @@ void CMenu::MenuAimbot(int iTab)
|
||||
FColorPicker(Vars::Colors::FOVCircle);
|
||||
FToggle(Vars::Aimbot::General::AutoShoot, FToggleEnum::Left);
|
||||
FToggle(Vars::Aimbot::General::FOVCircle, FToggleEnum::Right);
|
||||
FToggle(Vars::CritHack::ForceCrits, FToggleEnum::Left);
|
||||
FToggle(Vars::CritHack::AvoidRandomCrits, FToggleEnum::Right);
|
||||
FToggle(Vars::CritHack::AlwaysMeleeCrit, FToggleEnum::Left);
|
||||
FToggle(Vars::Aimbot::General::LeadAndRestrict, FToggleEnum::Left);
|
||||
FToggle(Vars::Aimbot::General::NoSpread, FToggleEnum::Right);
|
||||
} EndSection();
|
||||
if (Vars::Debug::Options.Value)
|
||||
@@ -202,6 +199,12 @@ void CMenu::MenuAimbot(int iTab)
|
||||
FSlider(Vars::Backtrack::Window);
|
||||
//FToggle(Vars::Backtrack::PreferOnShot);
|
||||
} EndSection();
|
||||
if (Section("Crit Hack", 8))
|
||||
{
|
||||
FToggle(Vars::CritHack::ForceCrits, FToggleEnum::Left);
|
||||
FToggle(Vars::CritHack::AvoidRandomCrits, FToggleEnum::Right);
|
||||
FToggle(Vars::CritHack::AlwaysMeleeCrit);
|
||||
} EndSection();
|
||||
if (Vars::Debug::Options.Value)
|
||||
{
|
||||
if (Section("##Debug Backtrack"))
|
||||
|
||||
@@ -272,6 +272,7 @@ NAMESPACE_BEGIN(Vars)
|
||||
CVar(TickTolerance, "Tick tolerance", 4, SLIDER_CLAMP, 0, 21);
|
||||
CVar(AutoShoot, "Auto shoot", true);
|
||||
CVar(FOVCircle, "FOV Circle", true, VISUAL);
|
||||
CVar(LeadAndRestrict, "Lead and restrict", false, VISUAL);
|
||||
CVar(NoSpread, "No spread", false);
|
||||
|
||||
CVarEnum(AimHoldsFire, "Aim holds fire", 2, NOSAVE | DEBUGVAR, nullptr,
|
||||
|
||||
Reference in New Issue
Block a user