mirror of
https://github.com/rei-2/Amalgam
synced 2026-10-10 04:43:09 +08:00
selective multipoint
fix some bugs with initial load
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user