mirror of
https://github.com/rei-2/Amalgam
synced 2026-10-10 04:43:09 +08:00
hybrid target selection mode
This commit is contained in:
@@ -4,16 +4,42 @@
|
||||
#include "../../Players/PlayerUtils.h"
|
||||
#include "../../Ticks/Ticks.h"
|
||||
|
||||
void CAimbotGlobal::SortTargets(std::vector<Target_t>& vTargets, int iMethod)
|
||||
{ // Sort by preference
|
||||
std::sort(vTargets.begin(), vTargets.end(), [&](const Target_t& a, const Target_t& b) -> bool
|
||||
std::vector<Target_t> CAimbotGlobal::ManageTargets(std::vector<Target_t>(*GetTargets)(CTFPlayer* pLocal, CTFWeaponBase* pWeapon), CTFPlayer* pLocal, CTFWeaponBase* pWeapon,
|
||||
int iMethod, int iMaxTargets)
|
||||
{
|
||||
auto vTargets = GetTargets(pLocal, pWeapon);
|
||||
SortTargetsPre(vTargets, iMethod);
|
||||
vTargets.resize(std::min(size_t(iMaxTargets), vTargets.size()));
|
||||
SortTargetsPost(vTargets, iMethod);
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
void CAimbotGlobal::SortTargetsPre(std::vector<Target_t>& vTargets, int iMethod)
|
||||
{
|
||||
switch (iMethod)
|
||||
{
|
||||
case Vars::Aimbot::General::TargetSelectionEnum::FOV: return a.m_flFOVTo < b.m_flFOVTo;
|
||||
case Vars::Aimbot::General::TargetSelectionEnum::Distance: return a.m_flDistTo < b.m_flDistTo;
|
||||
default: return false;
|
||||
case Vars::Aimbot::General::TargetSelectionEnum::FOV:
|
||||
return std::sort(vTargets.begin(), vTargets.end(), [&](const Target_t& a, const Target_t& b) -> bool
|
||||
{
|
||||
return a.m_flFOVTo < b.m_flFOVTo;
|
||||
});
|
||||
case Vars::Aimbot::General::TargetSelectionEnum::Distance:
|
||||
case Vars::Aimbot::General::TargetSelectionEnum::Hybrid:
|
||||
return std::sort(vTargets.begin(), vTargets.end(), [&](const Target_t& a, const Target_t& b) -> bool
|
||||
{
|
||||
return a.m_flDistTo < b.m_flDistTo;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void CAimbotGlobal::SortTargetsPost(std::vector<Target_t>& vTargets, int iMethod)
|
||||
{
|
||||
switch (iMethod)
|
||||
{
|
||||
case Vars::Aimbot::General::TargetSelectionEnum::Hybrid:
|
||||
return std::sort(vTargets.begin(), vTargets.end(), [&](const Target_t& a, const Target_t& b) -> bool
|
||||
{
|
||||
return a.m_flFOVTo < b.m_flFOVTo;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -27,8 +27,10 @@ struct Target_t
|
||||
class CAimbotGlobal
|
||||
{
|
||||
public:
|
||||
void SortTargets(std::vector<Target_t>&, int iMethod);
|
||||
void SortPriority(std::vector<Target_t>&);
|
||||
std::vector<Target_t> ManageTargets(std::vector<Target_t>(*GetTargets)(CTFPlayer* pLocal, CTFWeaponBase* pWeapon), CTFPlayer* pLocal, CTFWeaponBase* pWeapon,
|
||||
int iMethod = Vars::Aimbot::General::TargetSelection.Value, int iMaxTargets = Vars::Aimbot::General::MaxTargets.Value);
|
||||
void SortTargetsPre(std::vector<Target_t>& vTargets, int iMethod);
|
||||
void SortTargetsPost(std::vector<Target_t>& vTargets, int iMethod);
|
||||
|
||||
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);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "../../Visuals/Visuals.h"
|
||||
#include "../../Simulation/MovementSimulation/MovementSimulation.h"
|
||||
|
||||
std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
std::vector<Target_t> vTargets;
|
||||
const auto iSort = Vars::Aimbot::General::TargetSelection.Value;
|
||||
@@ -53,6 +53,7 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
if (!F::AimbotGlobal.PlayerBoneInFOV(pEntity->As<CTFPlayer>(), vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo, Vars::Aimbot::Hitscan::Hitboxes.Value))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
int iPriority = F::AimbotGlobal.GetPriority(pEntity->entindex());
|
||||
if (bTeam && bHeal)
|
||||
{
|
||||
@@ -67,8 +68,6 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
iPriority = std::numeric_limits<int>::max();
|
||||
}
|
||||
}
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
vTargets.emplace_back(pEntity, TargetEnum::Player, vPos, vAngleTo, flFOVTo, flDistTo, iPriority);
|
||||
}
|
||||
|
||||
@@ -89,7 +88,7 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, pEntity->IsSentrygun() ? TargetEnum::Sentry : pEntity->IsDispenser() ? TargetEnum::Dispenser : TargetEnum::Teleporter, vPos, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
}
|
||||
@@ -107,7 +106,7 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, TargetEnum::Sticky, vPos, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
}
|
||||
@@ -125,7 +124,7 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, TargetEnum::NPC, vPos, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
}
|
||||
@@ -143,7 +142,7 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, TargetEnum::Bomb, vPos, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
}
|
||||
@@ -151,16 +150,6 @@ std::vector<Target_t> CAimbotHitscan::GetTargets(CTFPlayer* pLocal, CTFWeaponBas
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
std::vector<Target_t> CAimbotHitscan::SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
auto vTargets = GetTargets(pLocal, pWeapon);
|
||||
|
||||
F::AimbotGlobal.SortTargets(vTargets, Vars::Aimbot::General::TargetSelection.Value);
|
||||
vTargets.resize(std::min(size_t(Vars::Aimbot::General::MaxTargets.Value), vTargets.size()));
|
||||
F::AimbotGlobal.SortPriority(vTargets);
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CBaseEntity* pTarget)
|
||||
@@ -760,7 +749,7 @@ void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC
|
||||
break;
|
||||
}
|
||||
|
||||
auto vTargets = SortTargets(pLocal, pWeapon);
|
||||
auto vTargets = F::AimbotGlobal.ManageTargets(GetTargets, pLocal, pWeapon);
|
||||
if (vTargets.empty())
|
||||
return;
|
||||
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
class CAimbotHitscan
|
||||
{
|
||||
private:
|
||||
std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
std::vector<Target_t> SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
|
||||
int GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CBaseEntity* pTarget);
|
||||
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
|
||||
|
||||
@@ -6,7 +6,22 @@
|
||||
#include "../../Ticks/Ticks.h"
|
||||
#include "../../Visuals/Visuals.h"
|
||||
|
||||
std::vector<Target_t> CAimbotMelee::GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
static inline bool AimFriendlyBuilding(CBaseObject* pBuilding)
|
||||
{
|
||||
if (!pBuilding->m_bMiniBuilding() && pBuilding->m_iUpgradeLevel() != 3 || pBuilding->m_iHealth() < pBuilding->m_iMaxHealth() || pBuilding->m_bHasSapper())
|
||||
return true;
|
||||
|
||||
if (pBuilding->IsSentrygun())
|
||||
{
|
||||
int iShells, iMaxShells, iRockets, iMaxRockets; pBuilding->As<CObjectSentrygun>()->GetAmmoCount(iShells, iMaxShells, iRockets, iMaxRockets);
|
||||
if (iShells < iMaxShells || iRockets < iMaxRockets)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
std::vector<Target_t> vTargets;
|
||||
|
||||
@@ -29,12 +44,11 @@ std::vector<Target_t> CAimbotMelee::GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
if (!F::AimbotGlobal.PlayerBoneInFOV(pEntity->As<CTFPlayer>(), vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
bool bTeam = pEntity->m_iTeamNum() == pLocal->m_iTeamNum();
|
||||
int iPriority = F::AimbotGlobal.GetPriority(pEntity->entindex());
|
||||
if (bTeam && !F::AimbotGlobal.FriendlyFire())
|
||||
iPriority = 0;
|
||||
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, TargetEnum::Player, vPos, vAngleTo, flFOVTo, flDistTo, iPriority);
|
||||
}
|
||||
}
|
||||
@@ -102,31 +116,6 @@ std::vector<Target_t> CAimbotMelee::GetTargets(CTFPlayer* pLocal, CTFWeaponBase*
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
bool CAimbotMelee::AimFriendlyBuilding(CBaseObject* pBuilding)
|
||||
{
|
||||
if (!pBuilding->m_bMiniBuilding() && pBuilding->m_iUpgradeLevel() != 3 || pBuilding->m_iHealth() < pBuilding->m_iMaxHealth() || pBuilding->m_bHasSapper())
|
||||
return true;
|
||||
|
||||
if (pBuilding->IsSentrygun())
|
||||
{
|
||||
int iShells, iMaxShells, iRockets, iMaxRockets; pBuilding->As<CObjectSentrygun>()->GetAmmoCount(iShells, iMaxShells, iRockets, iMaxRockets);
|
||||
if (iShells < iMaxShells || iRockets < iMaxRockets)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<Target_t> CAimbotMelee::SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
auto vTargets = GetTargets(pLocal, pWeapon);
|
||||
|
||||
F::AimbotGlobal.SortTargets(vTargets, Vars::Aimbot::General::TargetSelectionEnum::Distance);
|
||||
vTargets.resize(std::min(size_t(Vars::Aimbot::General::MaxTargets.Value), vTargets.size()));
|
||||
F::AimbotGlobal.SortPriority(vTargets);
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int CAimbotMelee::GetSwingTime(CTFWeaponBase* pWeapon, bool bVar)
|
||||
@@ -568,7 +557,7 @@ void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd
|
||||
if (RunSapper(pLocal, pWeapon, pCmd))
|
||||
return;
|
||||
|
||||
auto vTargets = SortTargets(pLocal, pWeapon);
|
||||
auto vTargets = F::AimbotGlobal.ManageTargets(GetTargets, pLocal, pWeapon, Vars::Aimbot::General::TargetSelectionEnum::Distance);
|
||||
if (vTargets.empty())
|
||||
return;
|
||||
|
||||
@@ -684,7 +673,7 @@ bool CAimbotMelee::RunSapper(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd
|
||||
|
||||
vTargets.emplace_back(pBuilding, TargetEnum::Unknown, vPoint, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
F::AimbotGlobal.SortTargets(vTargets, Vars::Aimbot::General::TargetSelectionEnum::Distance);
|
||||
F::AimbotGlobal.SortTargetsPre(vTargets, Vars::Aimbot::General::TargetSelectionEnum::Distance);
|
||||
if (vTargets.empty())
|
||||
return true;
|
||||
|
||||
|
||||
@@ -6,10 +6,6 @@
|
||||
class CAimbotMelee
|
||||
{
|
||||
private:
|
||||
std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
bool AimFriendlyBuilding(CBaseObject* pBuilding);
|
||||
std::vector<Target_t> SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
|
||||
int GetSwingTime(CTFWeaponBase* pWeapon, bool bVar = true);
|
||||
void UpdateInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, std::vector<Target_t> vTargets);
|
||||
bool CanBackstab(CBaseEntity* pTarget, CTFPlayer* pLocal, Vec3 vEyeAngles);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
static std::unordered_map<std::string, int> s_mTraceCount = {};
|
||||
#endif
|
||||
|
||||
std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
std::vector<Target_t> vTargets;
|
||||
const auto iSort = Vars::Aimbot::General::TargetSelection.Value;
|
||||
@@ -61,6 +61,7 @@ std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeapon
|
||||
if (!F::AimbotGlobal.PlayerBoneInFOV(pEntity->As<CTFPlayer>(), vLocalPos, vLocalAngles, flFOVTo, vPos, vAngleTo))
|
||||
continue;
|
||||
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
int iPriority = F::AimbotGlobal.GetPriority(pEntity->entindex());
|
||||
if (bTeam && bHeal)
|
||||
{
|
||||
@@ -75,8 +76,6 @@ std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeapon
|
||||
iPriority = std::numeric_limits<int>::max();
|
||||
}
|
||||
}
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
vTargets.emplace_back(pEntity, TargetEnum::Player, vPos, vAngleTo, flFOVTo, flDistTo, iPriority);
|
||||
}
|
||||
|
||||
@@ -120,7 +119,7 @@ std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeapon
|
||||
}
|
||||
}
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, pEntity->IsSentrygun() ? TargetEnum::Sentry : pEntity->IsDispenser() ? TargetEnum::Dispenser : TargetEnum::Teleporter, vPos, vAngleTo, flFOVTo, flDistTo, iPriority);
|
||||
}
|
||||
}
|
||||
@@ -153,7 +152,7 @@ std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeapon
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, TargetEnum::Sticky, vPos, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
}
|
||||
@@ -172,7 +171,7 @@ std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeapon
|
||||
if (flFOVTo > Vars::Aimbot::General::AimFOV.Value)
|
||||
continue;
|
||||
|
||||
float flDistTo = iSort == Vars::Aimbot::General::TargetSelectionEnum::Distance ? vLocalPos.DistTo(vPos) : 0.f;
|
||||
float flDistTo = vLocalPos.DistTo(vPos);
|
||||
vTargets.emplace_back(pEntity, TargetEnum::NPC, vPos, vAngleTo, flFOVTo, flDistTo);
|
||||
}
|
||||
}
|
||||
@@ -180,16 +179,6 @@ std::vector<Target_t> CAimbotProjectile::GetTargets(CTFPlayer* pLocal, CTFWeapon
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
std::vector<Target_t> CAimbotProjectile::SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
auto vTargets = GetTargets(pLocal, pWeapon);
|
||||
|
||||
F::AimbotGlobal.SortTargets(vTargets, Vars::Aimbot::General::TargetSelection.Value);
|
||||
vTargets.resize(std::min(size_t(Vars::Aimbot::General::MaxTargets.Value), vTargets.size()));
|
||||
F::AimbotGlobal.SortPriority(vTargets);
|
||||
return vTargets;
|
||||
}
|
||||
|
||||
|
||||
|
||||
float CAimbotProjectile::GetSplashRadius(CTFWeaponBase* pWeapon, CTFPlayer* pPlayer)
|
||||
@@ -1517,10 +1506,10 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
|
||||
m_flTimeTo = vPoint.m_tSolution.m_flTime + m_tInfo.m_flLatency;
|
||||
if (bVisuals)
|
||||
{
|
||||
m_vPlayerPath = tStorage.m_vPath;
|
||||
m_vPlayerPath.push_back(tStorage.m_MoveData.m_vecAbsOrigin);
|
||||
m_vProjectilePath = vProjLines;
|
||||
}
|
||||
m_vPlayerPath = tStorage.m_vPath;
|
||||
m_vPlayerPath.push_back(tStorage.m_MoveData.m_vecAbsOrigin);
|
||||
m_vProjectilePath = vProjLines;
|
||||
}
|
||||
}
|
||||
else switch (Vars::Aimbot::General::AimType.Value)
|
||||
{
|
||||
@@ -1542,8 +1531,8 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
|
||||
vAngleTo = vAngles, vPredicted = tTarget.m_vPos;
|
||||
if (bVisuals)
|
||||
{
|
||||
m_vPlayerPath = tStorage.m_vPath;
|
||||
m_vPlayerPath.push_back(tStorage.m_MoveData.m_vecAbsOrigin);
|
||||
m_vPlayerPath = tStorage.m_vPath;
|
||||
m_vPlayerPath.push_back(tStorage.m_MoveData.m_vecAbsOrigin);
|
||||
}
|
||||
iReturn = 2;
|
||||
}
|
||||
@@ -1763,7 +1752,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
return false;
|
||||
}
|
||||
|
||||
auto vTargets = SortTargets(pLocal, pWeapon);
|
||||
auto vTargets = F::AimbotGlobal.ManageTargets(GetTargets, pLocal, pWeapon);
|
||||
if (vTargets.empty())
|
||||
return false;
|
||||
|
||||
@@ -1838,7 +1827,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
float flCharge = pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime() - I::GlobalVars->curtime;
|
||||
flCharge = floorf(flCharge / GRENADE_CHECK_INTERVAL) * GRENADE_CHECK_INTERVAL + F::ProjSim.GetDesync();
|
||||
if (flCharge > GRENADE_CHECK_INTERVAL)
|
||||
{
|
||||
{
|
||||
auto tTarget2 = tTarget;
|
||||
float flOldDetonateTime = pWeapon->As<CTFGrenadeLauncher>()->m_flDetonateTime();
|
||||
|
||||
@@ -2270,7 +2259,7 @@ bool CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBa
|
||||
|
||||
bool CAimbotProjectile::AutoAirblast(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, CBaseEntity* pProjectile)
|
||||
{
|
||||
auto vTargets = SortTargets(pLocal, pWeapon);
|
||||
auto vTargets = F::AimbotGlobal.ManageTargets(GetTargets, pLocal, pWeapon);
|
||||
if (vTargets.empty())
|
||||
return false;
|
||||
|
||||
|
||||
@@ -46,9 +46,6 @@ struct Info_t
|
||||
class CAimbotProjectile
|
||||
{
|
||||
private:
|
||||
std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
std::vector<Target_t> SortTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon);
|
||||
|
||||
std::unordered_map<int, Vec3> GetDirectPoints(Target_t& tTarget, CBaseEntity* pProjectile = nullptr);
|
||||
std::vector<Point_t> GetSplashPoints(Target_t& tTarget, std::vector<std::pair<Vec3, int>>& vSpherePoints, int iSimTime);
|
||||
void SetupSplashPoints(Target_t& tTarget, std::vector<std::pair<Vec3, int>>& vSpherePoints, std::vector<std::pair<Vec3, Vec3>>& vSimplePoints);
|
||||
|
||||
@@ -12,88 +12,81 @@ MAKE_HOOK(CBaseHudChatLine_InsertAndColorizeText, S::CBaseHudChatLine_InsertAndC
|
||||
return CALL_ORIGINAL(rcx, buf, clientIndex);
|
||||
#endif
|
||||
|
||||
auto pResource = H::Entities.GetResource();
|
||||
if (!pResource || !pResource->IsValid(clientIndex))
|
||||
return CALL_ORIGINAL(rcx, buf, clientIndex);
|
||||
|
||||
std::string sMessage = SDK::ConvertWideToUTF8(buf);
|
||||
const char* sName = pResource->GetName(clientIndex);
|
||||
auto iFind = sMessage.find(sName);
|
||||
|
||||
if (clientIndex)
|
||||
int iType;
|
||||
if (const char* sReplace = F::PlayerUtils.GetPlayerName(clientIndex, nullptr, &iType))
|
||||
{
|
||||
auto pResource = H::Entities.GetResource();
|
||||
if (!pResource)
|
||||
return CALL_ORIGINAL(rcx, buf, clientIndex);
|
||||
if (iFind != std::string::npos)
|
||||
sMessage = sMessage.replace(std::max(iFind - 1, 0ui64), strlen(sName) + 1, std::format("\x3{}\x1", sReplace));
|
||||
sName = sReplace;
|
||||
}
|
||||
|
||||
const char* sName = pResource->GetName(clientIndex);
|
||||
auto iFind = sMessage.find(sName);
|
||||
|
||||
int iType;
|
||||
if (const char* sReplace = F::PlayerUtils.GetPlayerName(clientIndex, nullptr, &iType))
|
||||
if (Vars::Visuals::UI::ChatTags.Value && !(iType & NameTypeEnum::Privacy))
|
||||
{
|
||||
std::string sTag, cColor;
|
||||
if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Local && clientIndex == I::EngineClient->GetLocalPlayer())
|
||||
sTag = "You", cColor = Vars::Colors::Local.Value.ToHexA();
|
||||
else if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Friends && H::Entities.IsFriend(clientIndex))
|
||||
sTag = "Friend", cColor = F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(FRIEND_TAG)].m_tColor.ToHexA();
|
||||
else if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Party && H::Entities.InParty(clientIndex))
|
||||
sTag = "Party", cColor = F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(PARTY_TAG)].m_tColor.ToHexA();
|
||||
else if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Assigned)
|
||||
{
|
||||
if (iFind != std::string::npos)
|
||||
sMessage = sMessage.replace(std::max(iFind - 1, 0ui64), strlen(sName) + 1, std::format("\x3{}\x1", sReplace));
|
||||
sName = sReplace;
|
||||
if (auto pTag = F::PlayerUtils.GetSignificantTag(clientIndex, 0))
|
||||
sTag = pTag->m_sName, cColor = pTag->m_tColor.ToHexA();
|
||||
}
|
||||
|
||||
if (Vars::Visuals::UI::ChatTags.Value && !(iType & NameTypeEnum::Privacy))
|
||||
if (!sTag.empty())
|
||||
{
|
||||
std::string sTag, cColor;
|
||||
if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Local && clientIndex == I::EngineClient->GetLocalPlayer())
|
||||
sTag = "You", cColor = Vars::Colors::Local.Value.ToHexA();
|
||||
else if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Friends && H::Entities.IsFriend(clientIndex))
|
||||
sTag = "Friend", cColor = F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(FRIEND_TAG)].m_tColor.ToHexA();
|
||||
else if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Party && H::Entities.InParty(clientIndex))
|
||||
sTag = "Party", cColor = F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(PARTY_TAG)].m_tColor.ToHexA();
|
||||
else if (Vars::Visuals::UI::ChatTags.Value & Vars::Visuals::UI::ChatTagsEnum::Assigned)
|
||||
{
|
||||
if (auto pTag = F::PlayerUtils.GetSignificantTag(clientIndex, 0))
|
||||
sTag = pTag->m_sName, cColor = pTag->m_tColor.ToHexA();
|
||||
}
|
||||
|
||||
if (!sTag.empty())
|
||||
{
|
||||
if (iFind != std::string::npos)
|
||||
sMessage.insert(iFind + strlen(sName), "\x1");
|
||||
sMessage.insert(0, std::format("{}[{}] \x3", cColor, sTag));
|
||||
}
|
||||
if (iFind != std::string::npos)
|
||||
sMessage.insert(iFind + strlen(sName), "\x1");
|
||||
sMessage.insert(0, std::format("{}[{}] \x3", cColor, sTag));
|
||||
}
|
||||
}
|
||||
|
||||
if (Vars::Visuals::UI::StreamerMode.Value)
|
||||
{
|
||||
if (auto pResource = H::Entities.GetResource())
|
||||
std::vector<std::pair<std::string, std::string>> vReplace;
|
||||
for (int n = 1; n <= I::EngineClient->GetMaxClients(); n++)
|
||||
{
|
||||
if (!pResource->m_bValid(n))
|
||||
continue;
|
||||
|
||||
int iType; const char* sReplace = F::PlayerUtils.GetPlayerName(n, nullptr, &iType);
|
||||
if (!sReplace || !(iType & NameTypeEnum::Privacy))
|
||||
continue;
|
||||
|
||||
vReplace.emplace_back(pResource->GetName(n), sReplace);
|
||||
}
|
||||
for (auto& [sFind, sReplace] : vReplace)
|
||||
{
|
||||
std::vector<std::pair<std::string, std::string>> vReplace;
|
||||
for (int n = 1; n <= I::EngineClient->GetMaxClients(); n++)
|
||||
{
|
||||
if (!pResource->m_bValid(n))
|
||||
std::string sReplace2 = sReplace;
|
||||
std::transform(sFind.begin(), sFind.end(), sFind.begin(), ::tolower);
|
||||
std::transform(sReplace2.begin(), sReplace2.end(), sReplace2.begin(), ::tolower);
|
||||
if (FNV1A::Hash32(sFind.c_str()) == FNV1A::Hash32(sReplace2.c_str()))
|
||||
continue;
|
||||
|
||||
int iType; const char* sReplace = F::PlayerUtils.GetPlayerName(n, nullptr, &iType);
|
||||
if (!sReplace || !(iType & NameTypeEnum::Privacy))
|
||||
continue;
|
||||
|
||||
vReplace.emplace_back(pResource->GetName(n), sReplace);
|
||||
}
|
||||
for (auto& [sFind, sReplace] : vReplace)
|
||||
|
||||
size_t iPos = 0;
|
||||
while (true)
|
||||
{
|
||||
{
|
||||
std::string sReplace2 = sReplace;
|
||||
std::transform(sFind.begin(), sFind.end(), sFind.begin(), ::tolower);
|
||||
std::transform(sReplace2.begin(), sReplace2.end(), sReplace2.begin(), ::tolower);
|
||||
if (FNV1A::Hash32(sFind.c_str()) == FNV1A::Hash32(sReplace2.c_str()))
|
||||
continue;
|
||||
}
|
||||
std::string sMessage2 = sMessage;
|
||||
std::transform(sMessage2.begin(), sMessage2.end(), sMessage2.begin(), ::tolower);
|
||||
|
||||
size_t iPos = 0;
|
||||
while (true)
|
||||
{
|
||||
std::string sMessage2 = sMessage;
|
||||
std::transform(sMessage2.begin(), sMessage2.end(), sMessage2.begin(), ::tolower);
|
||||
auto iFind = sMessage2.find(sFind, iPos);
|
||||
if (iFind == std::string::npos)
|
||||
break;
|
||||
|
||||
auto iFind = sMessage2.find(sFind, iPos);
|
||||
if (iFind == std::string::npos)
|
||||
break;
|
||||
|
||||
iPos = iFind + sReplace.length();
|
||||
sMessage = sMessage.replace(iFind, sFind.length(), sReplace);
|
||||
}
|
||||
iPos = iFind + sReplace.length();
|
||||
sMessage = sMessage.replace(iFind, sFind.length(), sReplace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,8 +260,8 @@ namespace Vars
|
||||
VA_LIST("Off", "Plain", "Smooth", "Silent", "Locking", "Assistive"),
|
||||
Off, Plain, Smooth, Silent, Locking, Assistive);
|
||||
CVarEnum(TargetSelection, "Target selection", 0, NONE, nullptr,
|
||||
VA_LIST("FOV", "Distance"),
|
||||
FOV, Distance);
|
||||
VA_LIST("FOV", "Distance", "Hybrid"),
|
||||
FOV, Distance, Hybrid);
|
||||
CVarEnum(Target, "Target", 0b0000001, DROPDOWN_MULTI, nullptr,
|
||||
VA_LIST("Players", "Sentries", "Dispensers", "Teleporters", "Stickies", "NPCs", "Bombs"),
|
||||
Players = 1 << 0, Sentry = 1 << 1, Dispenser = 1 << 2, Teleporter = 1 << 3, Stickies = 1 << 4, NPCs = 1 << 5, Bombs = 1 << 6,
|
||||
|
||||
Reference in New Issue
Block a user