selective multipoint

fix some bugs with initial load
This commit is contained in:
rei-2
2025-09-08 15:39:53 -04:00
parent 12e5fef0cc
commit 0cd4e25eb7
14 changed files with 136 additions and 77 deletions
@@ -35,7 +35,7 @@ bool CAimbotGlobal::PlayerBoneInFOV(CTFPlayer* pTarget, Vec3 vLocalPos, Vec3 vLo
float flMinFOV = 180.f;
for (int nHitbox = 0; nHitbox < pTarget->GetNumOfHitboxes(); nHitbox++)
{
if (!IsHitboxValid(H::Entities.GetModel(pTarget->entindex()), nHitbox, iHitboxes))
if (!IsHitboxValid(pTarget, nHitbox, iHitboxes))
continue;
Vec3 vCurPos = pTarget->GetHitboxCenter(aBones, nHitbox);
@@ -53,9 +53,9 @@ bool CAimbotGlobal::PlayerBoneInFOV(CTFPlayer* pTarget, Vec3 vLocalPos, Vec3 vLo
return flMinFOV < Vars::Aimbot::General::AimFOV.Value;
}
bool CAimbotGlobal::IsHitboxValid(uint32_t uHash, int nHitbox, int iHitboxes)
bool CAimbotGlobal::IsHitboxValid(CBaseEntity* pEntity, int nHitbox, int iHitboxes)
{
switch (uHash)
switch (H::Entities.GetModel(pEntity->entindex()))
{
case FNV1A::Hash32Const("models/vsh/player/saxton_hale.mdl"):
case FNV1A::Hash32Const("models/vsh/player/hell_hale.mdl"):
@@ -128,6 +128,73 @@ bool CAimbotGlobal::IsHitboxValid(int nHitbox, int iHitboxes)
return false;
}
bool CAimbotGlobal::ShouldMultipoint(CBaseEntity* pEntity, int nHitbox, int iHitboxes)
{
if (Vars::Aimbot::Hitscan::MultipointScale.Value <= 0.f)
return false;
if (!iHitboxes)
return true;
switch (H::Entities.GetModel(pEntity->entindex()))
{
case FNV1A::Hash32Const("models/vsh/player/saxton_hale.mdl"):
case FNV1A::Hash32Const("models/vsh/player/hell_hale.mdl"):
case FNV1A::Hash32Const("models/vsh/player/santa_hale.mdl"):
{
switch (nHitbox)
{
case HITBOX_SAXTON_HEAD: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Head;
case HITBOX_SAXTON_BODY:
case HITBOX_SAXTON_THORAX:
case HITBOX_SAXTON_CHEST:
case HITBOX_SAXTON_UPPER_CHEST:
case HITBOX_SAXTON_NECK:
case HITBOX_SAXTON_PELVIS: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Body;
case HITBOX_SAXTON_LEFT_UPPER_ARM:
case HITBOX_SAXTON_LEFT_FOREARM:
case HITBOX_SAXTON_LEFT_HAND:
case HITBOX_SAXTON_RIGHT_UPPER_ARM:
case HITBOX_SAXTON_RIGHT_FOREARM:
case HITBOX_SAXTON_RIGHT_HAND: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Arms;
case HITBOX_SAXTON_LEFT_THIGH:
case HITBOX_SAXTON_LEFT_CALF:
case HITBOX_SAXTON_LEFT_FOOT:
case HITBOX_SAXTON_RIGHT_THIGH:
case HITBOX_SAXTON_RIGHT_CALF:
case HITBOX_SAXTON_RIGHT_FOOT: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Legs;
}
break;
}
default:
{
switch (nHitbox)
{
case HITBOX_HEAD: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Head;
case HITBOX_BODY:
case HITBOX_THORAX:
case HITBOX_CHEST:
case HITBOX_UPPER_CHEST:
case HITBOX_PELVIS: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Body;
case HITBOX_LEFT_UPPER_ARM:
case HITBOX_LEFT_FOREARM:
case HITBOX_LEFT_HAND:
case HITBOX_RIGHT_UPPER_ARM:
case HITBOX_RIGHT_FOREARM:
case HITBOX_RIGHT_HAND: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Arms;
case HITBOX_LEFT_THIGH:
case HITBOX_LEFT_CALF:
case HITBOX_LEFT_FOOT:
case HITBOX_RIGHT_THIGH:
case HITBOX_RIGHT_CALF:
case HITBOX_RIGHT_FOOT: return iHitboxes & Vars::Aimbot::Hitscan::HitboxesEnum::Legs;
}
}
}
return false;
}
bool CAimbotGlobal::ShouldIgnore(CBaseEntity* pEntity, CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
{
if (pEntity->IsDormant())
@@ -31,8 +31,9 @@ public:
void SortPriority(std::vector<Target_t>&);
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(uint32_t uHash, 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(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 ShouldIgnore(CBaseEntity* pTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
int GetPriority(int iIndex);
@@ -165,7 +165,7 @@ std::vector<Target_t> CAimbotHitscan::SortTargets(CTFPlayer* pLocal, CTFWeaponBa
int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CBaseEntity* pTarget)
{
if (!F::AimbotGlobal.IsHitboxValid(H::Entities.GetModel(pTarget->entindex()), nHitbox, Vars::Aimbot::Hitscan::Hitboxes.Value))
if (!F::AimbotGlobal.IsHitboxValid(pTarget, nHitbox, Vars::Aimbot::Hitscan::Hitboxes.Value))
return -1;
bool bHeadshot = false;
@@ -228,7 +228,8 @@ int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponB
int iHeadPriority = bHeadOnly || bHeadshot ? 0 : 1;
int iBodyPriority = bHeadOnly ? -1 : bHeadshot ? 1 : 0;
int iLimbPriority = bHeadOnly ? -1 : 2;
int iMiscPriority = bHeadOnly ? -1 : 2;
int iLimbPriority = bHeadOnly ? -1 : 3;
switch (H::Entities.GetModel(pTarget->entindex()))
{
@@ -242,23 +243,9 @@ int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponB
case HITBOX_SAXTON_BODY:
case HITBOX_SAXTON_THORAX:
case HITBOX_SAXTON_CHEST:
case HITBOX_SAXTON_UPPER_CHEST:
/*case HITBOX_SAXTON_NECK:
case HITBOX_SAXTON_PELVIS:*/ return iBodyPriority;
/*
case HITBOX_SAXTON_LEFT_UPPER_ARM:
case HITBOX_SAXTON_LEFT_FOREARM:
case HITBOX_SAXTON_LEFT_HAND:
case HITBOX_SAXTON_RIGHT_UPPER_ARM:
case HITBOX_SAXTON_RIGHT_FOREARM:
case HITBOX_SAXTON_RIGHT_HAND:
case HITBOX_SAXTON_LEFT_THIGH:
case HITBOX_SAXTON_LEFT_CALF:
case HITBOX_SAXTON_LEFT_FOOT:
case HITBOX_SAXTON_RIGHT_THIGH:
case HITBOX_SAXTON_RIGHT_CALF:
case HITBOX_SAXTON_RIGHT_FOOT:
*/
case HITBOX_SAXTON_UPPER_CHEST: return iBodyPriority;
case HITBOX_SAXTON_NECK:
case HITBOX_SAXTON_PELVIS: return iMiscPriority;
}
break;
}
@@ -270,22 +257,8 @@ int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponB
case HITBOX_BODY:
case HITBOX_THORAX:
case HITBOX_CHEST:
case HITBOX_UPPER_CHEST:
/*case HITBOX_PELVIS:*/ return iBodyPriority;
/*
case HITBOX_LEFT_UPPER_ARM:
case HITBOX_LEFT_FOREARM:
case HITBOX_LEFT_HAND:
case HITBOX_RIGHT_UPPER_ARM:
case HITBOX_RIGHT_FOREARM:
case HITBOX_RIGHT_HAND:
case HITBOX_LEFT_THIGH:
case HITBOX_LEFT_CALF:
case HITBOX_LEFT_FOOT:
case HITBOX_RIGHT_THIGH:
case HITBOX_RIGHT_CALF:
case HITBOX_RIGHT_FOOT:
*/
case HITBOX_UPPER_CHEST: return iBodyPriority;
case HITBOX_PELVIS: return iMiscPriority;
}
}
}
@@ -366,7 +339,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
}
F::MoveSim.Restore(tStorage);
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::PointScale.Value / 100.f);
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();
@@ -407,16 +380,16 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
continue;
std::vector<std::tuple<const mstudiobbox_t*, int, int>> vHitboxes;
for (int i = 0; i < pSet->numhitboxes; i++)
for (int nHitbox = 0; nHitbox < pSet->numhitboxes; nHitbox++)
{
int iPriority = GetHitboxPriority(i, pLocal, pWeapon, tTarget.m_pEntity);
int iPriority = GetHitboxPriority(nHitbox, pLocal, pWeapon, tTarget.m_pEntity);
if (iPriority == -1)
continue;
auto pBox = pSet->pHitbox(i);
auto pBox = pSet->pHitbox(nHitbox);
if (!pBox) continue;
vHitboxes.emplace_back(pBox, i, iPriority);
vHitboxes.emplace_back(pBox, nHitbox, iPriority);
}
std::sort(vHitboxes.begin(), vHitboxes.end(), [&](const auto& a, const auto& b) -> bool
{
@@ -424,7 +397,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
});
float flModelScale = tTarget.m_pEntity->As<CBaseAnimating>()->m_flModelScale();
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::PointScale.Value / 100.f);
float flBoneScale = Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value;
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
auto pGameRules = I::TFGameRules();
@@ -434,7 +407,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
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, iHitbox, _] : vHitboxes)
for (auto& [pBox, nHitbox, _] : vHitboxes)
{
Vec3 vAngle; Math::MatrixAngles(aBones[pBox->bone], vAngle);
Vec3 vMins = pBox->bbmin;
@@ -451,15 +424,16 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
}
std::vector<Vec3> vPoints = { Vec3() };
if (Vars::Aimbot::Hitscan::PointScale.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 = Vars::Aimbot::Hitscan::PointScale.Value / 100;
float flScale = Vars::Aimbot::Hitscan::MultipointScale.Value / 100;
Vec3 vMinsS = (vMins - vMaxs) / 2 * flScale;
Vec3 vMaxsS = (vMaxs - vMins) / 2 * flScale;
@@ -506,7 +480,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
tTarget.m_vAngleTo = vAngles;
tTarget.m_pRecord = pRecord;
tTarget.m_vPos = vOrigin;
tTarget.m_nAimedHitbox = iHitbox;
tTarget.m_nAimedHitbox = nHitbox;
tTarget.m_bBacktrack = true;
return true;
}
@@ -522,7 +496,7 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
}
else
{
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::PointScale.Value / 100.f);
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();
@@ -1309,9 +1309,9 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
Vec3 vPos = trace.endpos + F::ProjSim.GetVelocity().Normalized() * 16 + vOffset;
float flClosest = 0.f; int iClosest = -1;
for (int i = 0; i < pSet->numhitboxes; ++i)
for (int nHitbox = 0; nHitbox < pSet->numhitboxes; ++nHitbox)
{
auto pBox = pSet->pHitbox(i);
auto pBox = pSet->pHitbox(nHitbox);
if (!pBox) continue;
Vec3 vCenter; Math::VectorTransform({}, aBones[pBox->bone], vCenter);
@@ -1320,7 +1320,7 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
if (iClosest != -1 && flDist < flClosest || iClosest == -1)
{
flClosest = flDist;
iClosest = i;
iClosest = nHitbox;
}
}
if (iClosest != HITBOX_HEAD)
+4
View File
@@ -438,7 +438,11 @@ bool CConfigs::LoadConfig(const std::string& sConfigName, bool bNotify)
if (!std::filesystem::exists(m_sConfigPath + sConfigName + m_sConfigExtension))
{
if (sConfigName == std::string("default"))
{
SaveConfig("default", false);
H::Fonts.Reload(Vars::Menu::Scale[DEFAULT_BIND]);
}
return false;
}
+4 -3
View File
@@ -223,8 +223,9 @@ void CMenu::MenuAimbot(int iTab)
if (Section("Hitscan"))
{
FDropdown(Vars::Aimbot::Hitscan::Hitboxes, FDropdownEnum::Left);
FDropdown(Vars::Aimbot::Hitscan::Modifiers, FDropdownEnum::Right);
FSlider(Vars::Aimbot::Hitscan::PointScale);
FDropdown(Vars::Aimbot::Hitscan::MultipointHitboxes, FDropdownEnum::Right);
FDropdown(Vars::Aimbot::Hitscan::Modifiers);
FSlider(Vars::Aimbot::Hitscan::MultipointScale);
PushTransparent(!(Vars::Aimbot::Hitscan::Modifiers.Value & Vars::Aimbot::Hitscan::ModifiersEnum::Tapfire));
{
FSlider(Vars::Aimbot::Hitscan::TapfireDistance);
@@ -744,7 +745,7 @@ void CMenu::MenuVisuals(int iTab)
SetNextWindowSize({ H::Draw.Scale(300), 0 });
if (FBeginPopup("OffscreenArrows"))
{
FSlider("Offset", &tGroup.m_iOffscreenArrowsOffset, 0, 1000, 25, "%i", FSliderEnum::Min | FSliderEnum::Precision);
FSlider("Offset", &tGroup.m_iOffscreenArrowsOffset, 0, 1000, 25, "%i", FSliderEnum::Precision);
FSlider("Max distance", &tGroup.m_flOffscreenArrowsMaxDistance, 0.f, 5000.f, 50.f, "%g", FSliderEnum::Min | FSliderEnum::Precision);
EndPopup();
@@ -89,7 +89,10 @@ void CPlayerlistCore::LoadPlayerlist()
try
{
if (!std::filesystem::exists(F::Configs.m_sCorePath + "Players.json"))
{
F::PlayerUtils.m_bLoad = false;
return;
}
boost::property_tree::ptree tRead;
read_json(F::Configs.m_sCorePath + "Players.json", tRead);
+3 -3
View File
@@ -249,7 +249,7 @@ void CResolver::CreateMove(CTFPlayer* pLocal)
m_flLastViewCycle = 0.f;
}
void CResolver::HitscanRan(CTFPlayer* pLocal, CTFPlayer* pTarget, CTFWeaponBase* pWeapon, int iHitbox)
void CResolver::HitscanRan(CTFPlayer* pLocal, CTFPlayer* pTarget, CTFWeaponBase* pWeapon, int nHitbox)
{
if (!Vars::Resolver::Enabled.Value || !Vars::Resolver::AutoResolve.Value
|| Vars::Aimbot::General::AimType.Value == Vars::Aimbot::General::AimTypeEnum::Smooth || pLocal->m_iTeamNum() == pTarget->m_iTeamNum())
@@ -258,7 +258,7 @@ void CResolver::HitscanRan(CTFPlayer* pLocal, CTFPlayer* pTarget, CTFWeaponBase*
if (Vars::Resolver::AutoResolveCheatersOnly.Value && !F::PlayerUtils.HasTag(pTarget->entindex(), CHEATER_TAG))
return;
if (Vars::Resolver::AutoResolveHeadshotOnly.Value && (iHitbox != HITBOX_HEAD || !G::CanHeadshot))
if (Vars::Resolver::AutoResolveHeadshotOnly.Value && (nHitbox != HITBOX_HEAD || !G::CanHeadshot))
return;
if (pWeapon->GetWeaponSpread())
@@ -275,7 +275,7 @@ void CResolver::HitscanRan(CTFPlayer* pLocal, CTFPlayer* pTarget, CTFWeaponBase*
m_iWaitingForTarget = pResource->m_iUserID(pTarget->entindex());
m_flWaitingForDamage = I::GlobalVars->curtime + F::Backtrack.GetReal(MAX_FLOWS, false) * 1.5f + 0.1f;
if (iHitbox == HITBOX_HEAD && G::CanHeadshot)
if (nHitbox == HITBOX_HEAD && G::CanHeadshot)
{
// not dealing with ambassador's range check right now
switch (pWeapon->GetWeaponID())
+1 -1
View File
@@ -39,7 +39,7 @@ private:
public:
void FrameStageNotify();
void CreateMove(CTFPlayer* pLocal);
void HitscanRan(CTFPlayer* pLocal, CTFPlayer* pTarget, CTFWeaponBase* pWeapon, int iHitbox = HITBOX_MAX);
void HitscanRan(CTFPlayer* pLocal, CTFPlayer* pTarget, CTFWeaponBase* pWeapon, int nHitbox = HITBOX_MAX);
void PlayerHurt(IGameEvent* pEvent);
void SetYaw(int iUserID, float flValue, bool bAuto = false);
void SetPitch(int iUserID, float flValue, bool bInverse = false, bool bAuto = false);
+6 -5
View File
@@ -679,16 +679,17 @@ static inline void StoreMisc(CBaseEntity* pEntity, CTFPlayer* pLocal, Group_t* p
case ETFClassID::CZombie: sName = "Skeleton"; break;
case ETFClassID::CBaseAnimating:
{
if (H::Entities.IsHealth(H::Entities.GetModel(pEntity->entindex())))
auto uHash = H::Entities.GetModel(pEntity->entindex());
if (H::Entities.IsHealth(uHash))
sName = "Health";
else if (H::Entities.IsAmmo(H::Entities.GetModel(pEntity->entindex())))
else if (H::Entities.IsAmmo(uHash))
sName = "Ammo";
else if (H::Entities.IsSpellbook(H::Entities.GetModel(pEntity->entindex())))
else if (H::Entities.IsSpellbook(uHash))
sName = "Spellbook";
else if (H::Entities.IsPowerup(H::Entities.GetModel(pEntity->entindex())))
else if (H::Entities.IsPowerup(uHash))
{
sName = "Powerup";
switch (H::Entities.GetModel(pEntity->entindex()))
switch (uHash)
{
case FNV1A::Hash32Const("models/pickups/pickup_powerup_agility.mdl"): sName = "Agility"; break;
case FNV1A::Hash32Const("models/pickups/pickup_powerup_crit.mdl"): sName = "Revenge"; break;
@@ -259,13 +259,14 @@ static inline bool ShouldTarget(Group_t& tGroup, CBaseEntity* pEntity, CTFPlayer
// pickups
case ETFClassID::CBaseAnimating:
{
if (H::Entities.IsHealth(H::Entities.GetModel(pEntity->entindex())))
auto uHash = H::Entities.GetModel(pEntity->entindex());
if (H::Entities.IsHealth(uHash))
return tGroup.m_iTargets & TargetsEnum::Health;
else if (H::Entities.IsAmmo(H::Entities.GetModel(pEntity->entindex())))
else if (H::Entities.IsAmmo(uHash))
return tGroup.m_iTargets & TargetsEnum::Ammo;
else if (H::Entities.IsPowerup(H::Entities.GetModel(pEntity->entindex())))
else if (H::Entities.IsPowerup(uHash))
return tGroup.m_iTargets & TargetsEnum::Powerups;
else if (H::Entities.IsSpellbook(H::Entities.GetModel(pEntity->entindex())))
else if (H::Entities.IsSpellbook(uHash))
return tGroup.m_iTargets & TargetsEnum::Spellbook;
break;
}
+9 -6
View File
@@ -450,16 +450,16 @@ std::vector<DrawBox_t> CVisuals::GetHitboxes(matrix3x4* aBones, CBaseAnimating*
if (vHitboxes.empty())
{
for (int i = 0; i < pSet->numhitboxes; i++)
vHitboxes.push_back(i);
for (int nHitbox = 0; nHitbox < pSet->numhitboxes; nHitbox++)
vHitboxes.push_back(nHitbox);
}
for (int i : vHitboxes)
for (int nHitbox : vHitboxes)
{
auto pBox = pSet->pHitbox(i);
auto pBox = pSet->pHitbox(nHitbox);
if (!pBox) continue;
bool bTargeted = i == iTarget;
bool bTargeted = nHitbox == iTarget;
Vec3 vAngle; Math::MatrixAngles(aBones[pBox->bone], vAngle);
Vec3 vOrigin; Math::GetMatrixOrigin(aBones[pBox->bone], vOrigin);
Vec3 vMins = pBox->bbmin * pEntity->m_flModelScale();
@@ -477,9 +477,12 @@ std::vector<DrawBox_t> CVisuals::GetHitboxes(matrix3x4* aBones, CBaseAnimating*
if (Vars::Debug::Info.Value)
{
float flBoneScale = std::max(Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value, Vars::Aimbot::Hitscan::PointScale.Value / 100.f);
float flBoneScale = Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value;
float flBoneSubtract = Vars::Aimbot::Hitscan::BoneSizeSubtract.Value;
if (F::AimbotGlobal.ShouldMultipoint(pEntity, nHitbox, Vars::Aimbot::Hitscan::MultipointHitboxes.Value))
flBoneScale = std::max(flBoneScale, Vars::Aimbot::Hitscan::MultipointScale.Value / 100.f);
Vec3 vCheckMins = (pBox->bbmin + flBoneSubtract / pEntity->m_flModelScale()) * flBoneScale * pEntity->m_flModelScale();
Vec3 vCheckMaxs = (pBox->bbmax - flBoneSubtract / pEntity->m_flModelScale()) * flBoneScale * pEntity->m_flModelScale();
@@ -72,7 +72,9 @@ bool CTraceFilterCollideable::ShouldHitEntity(IHandleEntity* pServerEntity, int
case ETFClassID::CFunc_LOD:
case ETFClassID::CObjectCartDispenser:
case ETFClassID::CFuncTrackTrain:
case ETFClassID::CFuncConveyor: return true;
case ETFClassID::CFuncConveyor:
case ETFClassID::CTFGenericBomb:
case ETFClassID::CTFPumpkinBomb: return true;
case ETFClassID::CFuncRespawnRoomVisualizer:
if (nContentsMask & CONTENTS_PLAYERCLIP)
return pEntity->m_iTeamNum() != iTeam;
+3 -1
View File
@@ -292,10 +292,12 @@ namespace Vars
CVarEnum(Hitboxes, VA_LIST("Hitboxes", "Hitscan hitboxes"), 0b000111, DROPDOWN_MULTI, nullptr,
VA_LIST("Head", "Body", "Pelvis", "Arms", "Legs", "##Divider", "Bodyaim if lethal", "Headshot only"),
Head = 1 << 0, Body = 1 << 1, Pelvis = 1 << 2, Arms = 1 << 3, Legs = 1 << 4, BodyaimIfLethal = 1 << 5, HeadshotOnly = 1 << 6);
CVarValues(MultipointHitboxes, "Multipoint hitboxes", 0b00000, DROPDOWN_MULTI, "All",
VA_LIST("Head", "Body", "Pelvis", "Arms", "Legs"));
CVarEnum(Modifiers, VA_LIST("Modifiers", "Hitscan modifiers"), 0b0100000, DROPDOWN_MULTI, nullptr,
VA_LIST("Tapfire", "Wait for headshot", "Wait for charge", "Scoped only", "Auto scope", "Auto rev minigun", "Extinguish team"),
Tapfire = 1 << 0, WaitForHeadshot = 1 << 1, WaitForCharge = 1 << 2, ScopedOnly = 1 << 3, AutoScope = 1 << 4, AutoRev = 1 << 5, ExtinguishTeam = 1 << 6);
CVar(PointScale, "Point scale", 0.f, SLIDER_CLAMP | SLIDER_PRECISION, 0.f, 100.f, 5.f, "%g%%");
CVar(MultipointScale, "Multipoint scale", 0.f, SLIDER_CLAMP | SLIDER_PRECISION, 0.f, 100.f, 5.f, "%g%%");
CVar(TapfireDistance, "Tapfire distance", 1000.f, SLIDER_MIN | SLIDER_PRECISION, 250.f, 1000.f, 50.f);
CVar(BoneSizeSubtract, "Bone size subtract", 1.f, NOSAVE | DEBUGVAR | SLIDER_MIN, 0.f, 4.f, 0.25f);