mirror of
https://github.com/rei-2/Amalgam
synced 2026-10-10 04:43:09 +08:00
change other party tag appearance, display in esp
misc fixes/backend changes
This commit is contained in:
@@ -1077,7 +1077,7 @@
|
||||
<ClCompile Include="src\SDK\Helpers\Fonts\Fonts.cpp" />
|
||||
<ClCompile Include="src\SDK\Helpers\TraceFilters\TraceFilters.cpp" />
|
||||
<ClCompile Include="src\SDK\SDK.cpp" />
|
||||
<ClCompile Include="src\Utils\ConVars\ConVars.cpp" />
|
||||
<ClCompile Include="src\SDK\Helpers\ConVars\ConVars.cpp" />
|
||||
<ClCompile Include="src\Utils\CrashLog\CrashLog.cpp" />
|
||||
<ClCompile Include="src\Utils\Hooks\Hooks.cpp" />
|
||||
<ClCompile Include="src\Utils\Interfaces\Interfaces.cpp" />
|
||||
@@ -1451,14 +1451,13 @@
|
||||
<ClInclude Include="src\SDK\Events\Events.h" />
|
||||
<ClInclude Include="src\SDK\Globals.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Draw\Draw.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Draw\Icons.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Entities\Entities.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Fonts\Fonts.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Particles\Particles.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\TraceFilters\TraceFilters.h" />
|
||||
<ClInclude Include="src\SDK\SDK.h" />
|
||||
<ClInclude Include="src\SDK\Vars.h" />
|
||||
<ClInclude Include="src\Utils\ConVars\ConVars.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\ConVars\ConVars.h" />
|
||||
<ClInclude Include="src\Utils\CrashLog\CrashLog.h" />
|
||||
<ClInclude Include="src\Utils\Macros\Macros.h" />
|
||||
<ClInclude Include="src\Utils\Hash\FNV1A.h" />
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<ClCompile Include="include\MinHook\hook.c" />
|
||||
<ClCompile Include="include\MinHook\trampoline.c" />
|
||||
<ClCompile Include="src\SDK\SDK.cpp" />
|
||||
<ClCompile Include="src\Utils\ConVars\ConVars.cpp" />
|
||||
<ClCompile Include="src\SDK\Helpers\ConVars\ConVars.cpp" />
|
||||
<ClCompile Include="src\Features\Commands\Commands.cpp" />
|
||||
<ClCompile Include="src\Features\ImGui\Render.cpp" />
|
||||
<ClCompile Include="src\Features\Aimbot\Aimbot.cpp" />
|
||||
@@ -313,7 +313,6 @@
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Types.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Draw\Draw.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Draw\Icons.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Entities\Entities.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\Fonts\Fonts.h" />
|
||||
<ClInclude Include="src\SDK\Globals.h" />
|
||||
@@ -346,7 +345,7 @@
|
||||
<ClInclude Include="include\MinHook\buffer.h" />
|
||||
<ClInclude Include="include\MinHook\MinHook.h" />
|
||||
<ClInclude Include="include\MinHook\trampoline.h" />
|
||||
<ClInclude Include="src\Utils\ConVars\ConVars.h" />
|
||||
<ClInclude Include="src\SDK\Helpers\ConVars\ConVars.h" />
|
||||
<ClInclude Include="src\Features\Commands\Commands.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\CTFPartyClient.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Steam\ISteamController.h" />
|
||||
|
||||
@@ -28,7 +28,7 @@ static inline std::string GetProcessName(DWORD dwProcessID)
|
||||
|
||||
static inline bool CheckDXLevel()
|
||||
{
|
||||
auto mat_dxlevel = U::ConVars.FindVar("mat_dxlevel");
|
||||
auto mat_dxlevel = H::ConVars.FindVar("mat_dxlevel");
|
||||
if (mat_dxlevel->GetInt() < 90)
|
||||
{
|
||||
//const char* sMessage = "You are running with graphics options that Amalgam does not support. -dxlevel must be at least 90.";
|
||||
@@ -83,7 +83,7 @@ void CCore::Load()
|
||||
Sleep(500), flTime += 0.5f;
|
||||
if (m_bUnload = m_bFailed = flTime >= 60.f)
|
||||
{
|
||||
AppendFailText(std::format("Failed to load in time ({:#x}, {:#x})", uSignature, uintptr_t(hWindow)).c_str());
|
||||
AppendFailText(std::format("Failed to load in time:\n {:#x}\n {:#x}", uSignature, uintptr_t(hWindow)).c_str());
|
||||
return;
|
||||
}
|
||||
if (m_bUnload = m_bFailed = U::KeyHandler.Down(VK_F11, true))
|
||||
@@ -99,7 +99,7 @@ void CCore::Load()
|
||||
if (m_bUnload = m_bFailed2 = !U::Hooks.Initialize() || !U::BytePatches.Initialize() || !H::Events.Initialize())
|
||||
return;
|
||||
F::Materials.LoadMaterials();
|
||||
U::ConVars.Unlock();
|
||||
H::ConVars.Unlock();
|
||||
|
||||
F::Configs.LoadConfig(F::Configs.m_sCurrentConfig, false);
|
||||
|
||||
@@ -142,12 +142,12 @@ void CCore::Unload()
|
||||
pLocal->ThirdPersonSwitch();
|
||||
}
|
||||
}
|
||||
U::ConVars.FindVar("cl_wpn_sway_interp")->SetValue(0.f);
|
||||
U::ConVars.FindVar("cl_wpn_sway_scale")->SetValue(0.f);
|
||||
H::ConVars.FindVar("cl_wpn_sway_interp")->SetValue(0.f);
|
||||
H::ConVars.FindVar("cl_wpn_sway_scale")->SetValue(0.f);
|
||||
|
||||
Sleep(250);
|
||||
F::EnginePrediction.Unload();
|
||||
U::ConVars.Restore();
|
||||
H::ConVars.Restore();
|
||||
F::Materials.UnloadMaterials();
|
||||
|
||||
if (m_bFailed2)
|
||||
|
||||
@@ -274,7 +274,7 @@ int CAimbotGlobal::GetPriority(int iIndex)
|
||||
|
||||
bool CAimbotGlobal::FriendlyFire()
|
||||
{
|
||||
static auto mp_friendlyfire = U::ConVars.FindVar("mp_friendlyfire");
|
||||
static auto mp_friendlyfire = H::ConVars.FindVar("mp_friendlyfire");
|
||||
return mp_friendlyfire->GetBool();
|
||||
}
|
||||
|
||||
|
||||
@@ -669,7 +669,7 @@ bool CAimbotHitscan::Aim(Vec3 vCurAngle, Vec3 vToAngle, Vec3& vOut, int iMethod)
|
||||
// assume angle calculated outside with other overload
|
||||
void CAimbotHitscan::Aim(CUserCmd* pCmd, Vec3& vAngle, int iMethod)
|
||||
{
|
||||
bool bUnsure = F::Ticks.IsTimingUnsure() || F::Ticks.GetTicks(H::Entities.GetWeapon());
|
||||
bool bUnsure = F::Ticks.IsTimingUnsure();
|
||||
switch (iMethod)
|
||||
{
|
||||
case Vars::Aimbot::General::AimTypeEnum::Plain:
|
||||
|
||||
@@ -468,7 +468,7 @@ bool CAimbotMelee::Aim(Vec3 vCurAngle, Vec3 vToAngle, Vec3& vOut, int iMethod)
|
||||
// assume angle calculated outside with other overload
|
||||
void CAimbotMelee::Aim(CUserCmd* pCmd, Vec3& vAngle, int iMethod)
|
||||
{
|
||||
bool bUnsure = F::Ticks.IsTimingUnsure() || F::Ticks.GetTicks(H::Entities.GetWeapon());
|
||||
bool bUnsure = F::Ticks.IsTimingUnsure();
|
||||
switch (iMethod)
|
||||
{
|
||||
case Vars::Aimbot::General::AimTypeEnum::Plain:
|
||||
@@ -629,7 +629,7 @@ bool CAimbotMelee::FindNearestBuildPoint(CBaseObject* pBuilding, CTFPlayer* pLoc
|
||||
bool bFoundPoint = false;
|
||||
|
||||
m_vEyePos = pLocal->GetShootPos();
|
||||
static auto tf_obj_max_attach_dist = U::ConVars.FindVar("tf_obj_max_attach_dist");
|
||||
static auto tf_obj_max_attach_dist = H::ConVars.FindVar("tf_obj_max_attach_dist");
|
||||
float flNearestPoint = tf_obj_max_attach_dist->GetFloat();
|
||||
|
||||
for (int i = 0; i < pBuilding->GetNumBuildPoints(); i++)
|
||||
|
||||
@@ -282,7 +282,7 @@ static inline float PrimeTime(CTFWeaponBase* pWeapon)
|
||||
{
|
||||
if (Vars::Aimbot::Projectile::Modifiers.Value & Vars::Aimbot::Projectile::ModifiersEnum::UsePrimeTime && pWeapon->GetWeaponID() == TF_WEAPON_PIPEBOMBLAUNCHER)
|
||||
{
|
||||
static auto tf_grenadelauncher_livetime = U::ConVars.FindVar("tf_grenadelauncher_livetime");
|
||||
static auto tf_grenadelauncher_livetime = H::ConVars.FindVar("tf_grenadelauncher_livetime");
|
||||
const float flLiveTime = tf_grenadelauncher_livetime->GetFloat();
|
||||
return SDK::AttribHookValue(flLiveTime, "sticky_arm_time", pWeapon);
|
||||
}
|
||||
@@ -1630,7 +1630,7 @@ bool CAimbotProjectile::Aim(Vec3 vCurAngle, Vec3 vToAngle, Vec3& vOut, int iMeth
|
||||
// assume angle calculated outside with other overload
|
||||
void CAimbotProjectile::Aim(CUserCmd* pCmd, Vec3& vAngle, int iMethod)
|
||||
{
|
||||
bool bUnsure = F::Ticks.IsTimingUnsure() || F::Ticks.GetTicks(H::Entities.GetWeapon());
|
||||
bool bUnsure = F::Ticks.IsTimingUnsure();
|
||||
switch (iMethod)
|
||||
{
|
||||
case Vars::Aimbot::General::AimTypeEnum::Plain:
|
||||
@@ -1746,7 +1746,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
if (F::AimbotGlobal.ShouldHoldAttack(pWeapon))
|
||||
pCmd->buttons |= IN_ATTACK;
|
||||
if (!Vars::Aimbot::General::AimType.Value
|
||||
|| !F::AimbotGlobal.ShouldAim() && nWeaponID != TF_WEAPON_PIPEBOMBLAUNCHER && nWeaponID != TF_WEAPON_CANNON && nWeaponID != TF_WEAPON_FLAMETHROWER)
|
||||
|| !F::AimbotGlobal.ShouldAim() && nWeaponID != TF_WEAPON_FLAMETHROWER)
|
||||
return false;
|
||||
|
||||
auto vTargets = SortTargets(pLocal, pWeapon);
|
||||
|
||||
@@ -53,7 +53,7 @@ void CAutoAirblast::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCm
|
||||
if (iWeaponID != TF_WEAPON_FLAMETHROWER && iWeaponID != TF_WEAPON_FLAME_BALL || SDK::AttribHookValue(0, "airblast_disabled", pWeapon))
|
||||
return;
|
||||
|
||||
static auto tf_flamethrower_burstammo = U::ConVars.FindVar("tf_flamethrower_burstammo");
|
||||
static auto tf_flamethrower_burstammo = H::ConVars.FindVar("tf_flamethrower_burstammo");
|
||||
int iAmmoPerShot = tf_flamethrower_burstammo->GetInt() * SDK::AttribHookValue(1, "mult_airblast_cost", pWeapon);
|
||||
int iAmmo = pLocal->GetAmmoCount(pWeapon->m_iPrimaryAmmoType());
|
||||
int iBuffType = SDK::AttribHookValue(0, "set_buff_type", pWeapon);
|
||||
|
||||
@@ -48,9 +48,9 @@ static inline bool GetRadius(EntityEnum::EntityEnum iGroup, CBaseEntity* pProjec
|
||||
flRadius *= 146.f;
|
||||
if (!pPipebomb->m_bTouched())
|
||||
{
|
||||
static auto tf_grenadelauncher_livetime = U::ConVars.FindVar("tf_grenadelauncher_livetime");
|
||||
static auto tf_sticky_radius_ramp_time = U::ConVars.FindVar("tf_sticky_radius_ramp_time");
|
||||
static auto tf_sticky_airdet_radius = U::ConVars.FindVar("tf_sticky_airdet_radius");
|
||||
static auto tf_grenadelauncher_livetime = H::ConVars.FindVar("tf_grenadelauncher_livetime");
|
||||
static auto tf_sticky_radius_ramp_time = H::ConVars.FindVar("tf_sticky_radius_ramp_time");
|
||||
static auto tf_sticky_airdet_radius = H::ConVars.FindVar("tf_sticky_airdet_radius");
|
||||
float flLiveTime = tf_grenadelauncher_livetime->GetFloat();
|
||||
float flRampTime = tf_sticky_radius_ramp_time->GetFloat();
|
||||
float flAirdetRadius = tf_sticky_airdet_radius->GetFloat();
|
||||
|
||||
@@ -249,7 +249,7 @@ void CBacktrack::MakeRecords()
|
||||
{
|
||||
const Vec3 vDelta = tCurRecord.m_vOrigin - pLastRecord->m_vOrigin;
|
||||
|
||||
static auto sv_lagcompensation_teleport_dist = U::ConVars.FindVar("sv_lagcompensation_teleport_dist");
|
||||
static auto sv_lagcompensation_teleport_dist = H::ConVars.FindVar("sv_lagcompensation_teleport_dist");
|
||||
const float flDist = powf(sv_lagcompensation_teleport_dist->GetFloat(), 2.f);
|
||||
if (vDelta.Length2DSqr() > flDist)
|
||||
{
|
||||
@@ -320,7 +320,7 @@ void CBacktrack::Store()
|
||||
if (!I::EngineClient->IsInGame())
|
||||
return;
|
||||
|
||||
static auto sv_maxunlag = U::ConVars.FindVar("sv_maxunlag");
|
||||
static auto sv_maxunlag = H::ConVars.FindVar("sv_maxunlag");
|
||||
m_flMaxUnlag = sv_maxunlag->GetFloat();
|
||||
|
||||
MakeRecords();
|
||||
@@ -362,7 +362,7 @@ void CBacktrack::AdjustPing(CNetChannel* pNetChan)
|
||||
if (!pLocal || !pLocal->m_iClass())
|
||||
return 0.f;
|
||||
|
||||
static auto host_timescale = U::ConVars.FindVar("host_timescale");
|
||||
static auto host_timescale = H::ConVars.FindVar("host_timescale");
|
||||
float flTimescale = host_timescale->GetFloat();
|
||||
|
||||
static float flStaticReal = 0.f;
|
||||
|
||||
@@ -106,7 +106,7 @@ void CCritHack::UpdateWeaponInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
if (pWeapon == pOldWeapon && flBucket == flLastBucket && iCritChecks == iLastCritChecks && iCritSeedRequests == iLastCritSeedRequests)
|
||||
return;
|
||||
|
||||
static auto tf_weapon_criticals_bucket_cap = U::ConVars.FindVar("tf_weapon_criticals_bucket_cap");
|
||||
static auto tf_weapon_criticals_bucket_cap = H::ConVars.FindVar("tf_weapon_criticals_bucket_cap");
|
||||
const float flBucketCap = tf_weapon_criticals_bucket_cap->GetFloat();
|
||||
bool bRapidFire = pWeapon->IsRapidFire();
|
||||
float flFireRate = pWeapon->GetFireRate();
|
||||
|
||||
@@ -1248,23 +1248,14 @@ void CMenu::MenuLogs(int iTab)
|
||||
const auto& vPlayers = F::PlayerUtils.m_vPlayerCache;
|
||||
|
||||
std::unordered_map<uint64_t, std::vector<const ListPlayer*>> mParties = {};
|
||||
std::unordered_map<uint64_t, float> mHues = {}; // don't just shift based on party id in the case that it will be similar
|
||||
int iPartyCount = 0;
|
||||
for (auto& tPlayer : vPlayers)
|
||||
{
|
||||
if (tPlayer.m_iParty)
|
||||
{
|
||||
mParties[tPlayer.m_iParty].push_back(&tPlayer);
|
||||
}
|
||||
for (auto it = mParties.begin(); it != mParties.end();)
|
||||
{
|
||||
if (it->second.size() > 1)
|
||||
it++;
|
||||
else
|
||||
it = mParties.erase(it);
|
||||
}
|
||||
{
|
||||
float flParties = mParties.size() + 1 - mParties.contains(1);
|
||||
int i = 0; for (auto& [iParty, _] : mParties)
|
||||
mHues[iParty] = iParty != 1 ? 360 * ++i / flParties : 0;
|
||||
iPartyCount = std::max(iPartyCount, tPlayer.m_iParty);
|
||||
}
|
||||
}
|
||||
|
||||
auto getTeamColor = [&](int iTeam, bool bAlive)
|
||||
@@ -1318,10 +1309,19 @@ void CMenu::MenuLogs(int iTab)
|
||||
{
|
||||
std::vector<PriorityLabel_t> vLabels = {};
|
||||
std::vector<std::pair<PriorityLabel_t*, int>> vTags = {};
|
||||
if (mHues.contains(tPlayer.m_iParty))
|
||||
vLabels.emplace_back("Party", F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(PARTY_TAG)].m_tColor.HueShift(mHues[tPlayer.m_iParty]));
|
||||
if (int iParty = tPlayer.m_iParty)
|
||||
{
|
||||
auto pTag = &F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(PARTY_TAG)];
|
||||
if (!--iParty)
|
||||
vTags.emplace_back(pTag, 0);
|
||||
else
|
||||
vLabels.emplace_back(std::format("{}: {}", pTag->m_sName, iParty), pTag->m_tColor.HueShift(iParty * 360.f / iPartyCount));
|
||||
}
|
||||
if (tPlayer.m_bF2P)
|
||||
vTags.emplace_back(&F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(F2P_TAG)], 0);
|
||||
{
|
||||
auto pTag = &F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(F2P_TAG)];
|
||||
vTags.emplace_back(pTag, 0);
|
||||
}
|
||||
for (auto& iID : F::PlayerUtils.GetPlayerTags(tPlayer.m_uAccountID))
|
||||
{
|
||||
if (auto pTag = F::PlayerUtils.GetTag(iID))
|
||||
|
||||
@@ -111,7 +111,7 @@ void CMisc::AutoStrafe(CTFPlayer* pLocal, CUserCmd* pCmd)
|
||||
{
|
||||
case Vars::Misc::Movement::AutoStrafeEnum::Legit:
|
||||
{
|
||||
static auto cl_sidespeed = U::ConVars.FindVar("cl_sidespeed");
|
||||
static auto cl_sidespeed = H::ConVars.FindVar("cl_sidespeed");
|
||||
const float flSideSpeed = cl_sidespeed->GetFloat();
|
||||
|
||||
if (pCmd->mousedx)
|
||||
@@ -232,7 +232,7 @@ void CMisc::NoisemakerSpam(CTFPlayer* pLocal)
|
||||
void CMisc::CheatsBypass()
|
||||
{
|
||||
static bool bCheatSet = false;
|
||||
static auto sv_cheats = U::ConVars.FindVar("sv_cheats");
|
||||
static auto sv_cheats = H::ConVars.FindVar("sv_cheats");
|
||||
if (Vars::Misc::Exploits::CheatsBypass.Value)
|
||||
{
|
||||
sv_cheats->m_nValue = 1;
|
||||
@@ -247,8 +247,8 @@ void CMisc::CheatsBypass()
|
||||
|
||||
void CMisc::WeaponSway()
|
||||
{
|
||||
static auto cl_wpn_sway_interp = U::ConVars.FindVar("cl_wpn_sway_interp");
|
||||
static auto cl_wpn_sway_scale = U::ConVars.FindVar("cl_wpn_sway_scale");
|
||||
static auto cl_wpn_sway_interp = H::ConVars.FindVar("cl_wpn_sway_interp");
|
||||
static auto cl_wpn_sway_scale = H::ConVars.FindVar("cl_wpn_sway_scale");
|
||||
|
||||
bool bSway = Vars::Visuals::Viewmodel::SwayInterp.Value || Vars::Visuals::Viewmodel::SwayScale.Value;
|
||||
cl_wpn_sway_interp->SetValue(bSway ? Vars::Visuals::Viewmodel::SwayInterp.Value : 0.f);
|
||||
@@ -530,7 +530,7 @@ void CMisc::PingReducer()
|
||||
if (!tTimer.Run(0.1f))
|
||||
return;
|
||||
|
||||
static auto cl_cmdrate = U::ConVars.FindVar("cl_cmdrate");
|
||||
static auto cl_cmdrate = H::ConVars.FindVar("cl_cmdrate");
|
||||
int iTarget = Vars::Misc::Exploits::PingReducer.Value ? Vars::Misc::Exploits::PingTarget.Value : cl_cmdrate->GetInt();
|
||||
if (m_iWishCmdrate != iTarget)
|
||||
{
|
||||
@@ -544,7 +544,7 @@ void CMisc::PingReducer()
|
||||
}
|
||||
}
|
||||
|
||||
static auto sv_maxupdaterate = U::ConVars.FindVar("sv_maxupdaterate"); // force highest cl_updaterate command possible
|
||||
static auto sv_maxupdaterate = H::ConVars.FindVar("sv_maxupdaterate"); // force highest cl_updaterate command possible
|
||||
iTarget = sv_maxupdaterate->GetInt();
|
||||
if (m_iWishUpdaterate != iTarget)
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@ bool CNoSpreadHitscan::ShouldRun(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, bool
|
||||
|
||||
int CNoSpreadHitscan::GetSeed(CUserCmd* pCmd)
|
||||
{
|
||||
static auto sv_usercmd_custom_random_seed = U::ConVars.FindVar("sv_usercmd_custom_random_seed");
|
||||
static auto sv_usercmd_custom_random_seed = H::ConVars.FindVar("sv_usercmd_custom_random_seed");
|
||||
if (!sv_usercmd_custom_random_seed->GetBool())
|
||||
return pCmd->random_seed & 255;
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ bool CFakeLag::IsAllowed(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC
|
||||
return I::ClientState->chokedcommands < m_iGoal;
|
||||
case Vars::Fakelag::FakelagEnum::Adaptive:
|
||||
{
|
||||
static auto sv_lagcompensation_teleport_dist = U::ConVars.FindVar("sv_lagcompensation_teleport_dist");
|
||||
static auto sv_lagcompensation_teleport_dist = H::ConVars.FindVar("sv_lagcompensation_teleport_dist");
|
||||
const float flDist = powf(sv_lagcompensation_teleport_dist->GetFloat(), 2.f);
|
||||
return (m_vLastPosition - pLocal->m_vecOrigin()).Length2DSqr() < flDist;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ struct ListPlayer
|
||||
bool m_bParty;
|
||||
bool m_bF2P;
|
||||
int m_iLevel;
|
||||
uint64_t m_iParty;
|
||||
int m_iParty;
|
||||
};
|
||||
|
||||
struct PriorityLabel_t
|
||||
|
||||
@@ -300,7 +300,7 @@ bool CMovementSimulation::SetupMoveData(MoveStorage& tStorage)
|
||||
|
||||
static inline float GetGravity()
|
||||
{
|
||||
static auto sv_gravity = U::ConVars.FindVar("sv_gravity");
|
||||
static auto sv_gravity = H::ConVars.FindVar("sv_gravity");
|
||||
|
||||
return sv_gravity->GetFloat();
|
||||
}
|
||||
@@ -310,7 +310,7 @@ static inline float GetFrictionScale(float flVelocityXY, float flTurn, float flV
|
||||
if (0.f >= flVelocityZ || flVelocityZ > 250.f)
|
||||
return 1.f;
|
||||
|
||||
static auto sv_airaccelerate = U::ConVars.FindVar("sv_airaccelerate");
|
||||
static auto sv_airaccelerate = H::ConVars.FindVar("sv_airaccelerate");
|
||||
float flScale = std::max(sv_airaccelerate->GetFloat(), 1.f);
|
||||
flMin *= flScale, flMax *= flScale;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
|
||||
if (!pPlayer || !pPlayer->IsAlive() || pPlayer->IsAGhost() || pPlayer->IsTaunting() || !pWeapon)
|
||||
return false;
|
||||
|
||||
static auto sv_gravity = U::ConVars.FindVar("sv_gravity");
|
||||
static auto sv_gravity = H::ConVars.FindVar("sv_gravity");
|
||||
float flGravity = sv_gravity->GetFloat() / 800.f;
|
||||
bool bDucking = pPlayer->m_fFlags() & FL_DUCKING;
|
||||
|
||||
@@ -179,7 +179,7 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
|
||||
}
|
||||
case TF_WEAPON_FLAMETHROWER:
|
||||
{
|
||||
static auto tf_flamethrower_boxsize = U::ConVars.FindVar("tf_flamethrower_boxsize");
|
||||
static auto tf_flamethrower_boxsize = H::ConVars.FindVar("tf_flamethrower_boxsize");
|
||||
const float flHull = tf_flamethrower_boxsize->GetFloat();
|
||||
|
||||
SDK::GetProjectileFireSetup(pPlayer, vAngles, { 40.f, 5.f, 0.f }, vPos, vAngle, true, bQuick, false);
|
||||
@@ -204,7 +204,7 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
|
||||
case TF_WEAPON_BAT_WOOD:
|
||||
case TF_WEAPON_BAT_GIFTWRAP:
|
||||
{
|
||||
static auto tf_scout_stunball_base_speed = U::ConVars.FindVar("tf_scout_stunball_base_speed");
|
||||
static auto tf_scout_stunball_base_speed = H::ConVars.FindVar("tf_scout_stunball_base_speed");
|
||||
const bool bWrapAssassin = pWeapon->GetWeaponID() == TF_WEAPON_BAT_GIFTWRAP;
|
||||
|
||||
SDK::GetProjectileFireSetup(pPlayer, vAngles, { 0.f, 0.f, 0.f }, vPos, vAngle, true, bQuick);
|
||||
@@ -239,8 +239,8 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
|
||||
}
|
||||
case TF_WEAPON_GRAPPLINGHOOK:
|
||||
{
|
||||
static auto tf_grapplinghook_projectile_speed = U::ConVars.FindVar("tf_grapplinghook_projectile_speed");
|
||||
static auto tf_grapplinghook_max_distance = U::ConVars.FindVar("tf_grapplinghook_max_distance");
|
||||
static auto tf_grapplinghook_projectile_speed = H::ConVars.FindVar("tf_grapplinghook_projectile_speed");
|
||||
static auto tf_grapplinghook_max_distance = H::ConVars.FindVar("tf_grapplinghook_max_distance");
|
||||
|
||||
SDK::GetProjectileFireSetup(pPlayer, vAngles, { 23.5f, -8.f, -3.f }, vPos, vAngle, !bTrace ? true : false, bQuick);
|
||||
|
||||
@@ -594,7 +594,7 @@ void CProjectileSimulation::RunTick(ProjectileInfo& tProjInfo, bool bPath) // bu
|
||||
/* // params.maxVelocity limits velocity uniformly
|
||||
Vec3 vVelocity, vAngular;
|
||||
m_pObj->GetVelocity(&vVelocity, &vAngular);
|
||||
static auto sv_maxvelocity = U::ConVars.FindVar("sv_maxvelocity");
|
||||
static auto sv_maxvelocity = H::ConVars.FindVar("sv_maxvelocity");
|
||||
const float flMaxVel = sv_maxvelocity->GetFloat();
|
||||
vVelocity = { std::clamp(vVelocity.x, -flMaxVel, flMaxVel), std::clamp(vVelocity.y, -flMaxVel, flMaxVel), std::clamp(vVelocity.z, -flMaxVel, flMaxVel) };
|
||||
m_pObj->SetVelocity(&vVelocity, &vAngular);
|
||||
|
||||
@@ -149,7 +149,7 @@ public:
|
||||
{
|
||||
float flReturn = 0.f;
|
||||
|
||||
static auto sv_gravity = U::ConVars.FindVar("sv_gravity");
|
||||
static auto sv_gravity = H::ConVars.FindVar("sv_gravity");
|
||||
float flGravity = sv_gravity->GetFloat() / 800.f;
|
||||
switch (pProjectile->GetClassID())
|
||||
{
|
||||
|
||||
@@ -188,7 +188,7 @@ void CTicks::Move(float accumulated_extra_samples, bool bFinalTick)
|
||||
else
|
||||
m_iWait = 2;
|
||||
|
||||
static auto sv_maxusrcmdprocessticks = U::ConVars.FindVar("sv_maxusrcmdprocessticks");
|
||||
static auto sv_maxusrcmdprocessticks = H::ConVars.FindVar("sv_maxusrcmdprocessticks");
|
||||
m_iMaxShift = sv_maxusrcmdprocessticks->GetInt();
|
||||
if (Vars::Misc::Game::AntiCheatCompatibility.Value)
|
||||
m_iMaxShift = std::min(m_iMaxShift, 8);
|
||||
@@ -310,7 +310,7 @@ void CTicks::End(CTFPlayer* pLocal, CUserCmd* pCmd)
|
||||
|
||||
bool CTicks::CanChoke()
|
||||
{
|
||||
static auto sv_maxusrcmdprocessticks = U::ConVars.FindVar("sv_maxusrcmdprocessticks");
|
||||
static auto sv_maxusrcmdprocessticks = H::ConVars.FindVar("sv_maxusrcmdprocessticks");
|
||||
int iMaxTicks = sv_maxusrcmdprocessticks->GetInt();
|
||||
if (Vars::Misc::Game::AntiCheatCompatibility.Value)
|
||||
iMaxTicks = std::min(iMaxTicks, 8);
|
||||
@@ -376,7 +376,7 @@ Vec3 CTicks::GetShootPos()
|
||||
|
||||
void CTicks::SaveShootAngle(CUserCmd* pCmd, bool bSendPacket)
|
||||
{
|
||||
static auto sv_maxusrcmdprocessticks_holdaim = U::ConVars.FindVar("sv_maxusrcmdprocessticks_holdaim");
|
||||
static auto sv_maxusrcmdprocessticks_holdaim = H::ConVars.FindVar("sv_maxusrcmdprocessticks_holdaim");
|
||||
|
||||
if (bSendPacket)
|
||||
m_bShootAngle = false;
|
||||
|
||||
@@ -60,30 +60,35 @@ static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* p
|
||||
|
||||
if (pGroup->m_iESP & ESPEnum::Labels)
|
||||
{
|
||||
std::vector<PriorityLabel_t*> vTags = {};
|
||||
std::vector<std::tuple<std::string, Color_t, int>> vTags = {};
|
||||
for (auto& iID : F::PlayerUtils.GetPlayerTags(uAccountID))
|
||||
{
|
||||
auto pTag = F::PlayerUtils.GetTag(iID);
|
||||
if (pTag && pTag->m_bLabel)
|
||||
vTags.push_back(pTag);
|
||||
vTags.emplace_back(pTag->m_sName, pTag->m_tColor, pTag->m_iPriority);
|
||||
}
|
||||
if (H::Entities.IsFriend(uAccountID))
|
||||
{
|
||||
auto pTag = &F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(FRIEND_TAG)];
|
||||
if (pTag->m_bLabel)
|
||||
vTags.push_back(pTag);
|
||||
vTags.emplace_back(pTag->m_sName, pTag->m_tColor, pTag->m_iPriority);
|
||||
}
|
||||
if (H::Entities.InParty(uAccountID))
|
||||
if (auto iParty = H::Entities.GetParty(uAccountID))
|
||||
{
|
||||
auto pTag = &F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(PARTY_TAG)];
|
||||
if (pTag->m_bLabel)
|
||||
vTags.push_back(pTag);
|
||||
if (int iPartyCount = H::Entities.GetPartyCount() + 1; pTag->m_bLabel)
|
||||
{
|
||||
if (!--iParty)
|
||||
vTags.emplace_back(pTag->m_sName, pTag->m_tColor, pTag->m_iPriority);
|
||||
else
|
||||
vTags.emplace_back(std::format("{}: {}", pTag->m_sName, iParty), pTag->m_tColor.HueShift(iParty * 360.f / iPartyCount), pTag->m_iPriority);
|
||||
}
|
||||
}
|
||||
if (H::Entities.IsF2P(uAccountID))
|
||||
{
|
||||
auto pTag = &F::PlayerUtils.m_vTags[F::PlayerUtils.TagToIndex(F2P_TAG)];
|
||||
if (pTag->m_bLabel)
|
||||
vTags.push_back(pTag);
|
||||
vTags.emplace_back(pTag->m_sName, pTag->m_tColor, pTag->m_iPriority);
|
||||
}
|
||||
|
||||
if (!vTags.empty())
|
||||
@@ -91,14 +96,14 @@ static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* p
|
||||
std::sort(vTags.begin(), vTags.end(), [&](const auto a, const auto b) -> bool
|
||||
{
|
||||
// sort by priority if unequal
|
||||
if (a->m_iPriority != b->m_iPriority)
|
||||
return a->m_iPriority > b->m_iPriority;
|
||||
if (std::get<2>(a) != std::get<2>(b))
|
||||
return std::get<2>(a) > std::get<2>(b);
|
||||
|
||||
return a->m_sName < b->m_sName;
|
||||
return std::get<0>(a) < std::get<0>(b);
|
||||
});
|
||||
|
||||
for (auto& pTag : vTags)
|
||||
tCache.m_vText.emplace_back(ALIGN_TOPRIGHT, pTag->m_sName, pTag->m_tColor, pTag->m_tColor.IsColorDark() ? Color_t(255, 255, 255) : Color_t(0, 0, 0));
|
||||
for (auto& [sName, tColor, _] : vTags)
|
||||
tCache.m_vText.emplace_back(ALIGN_TOPRIGHT, sName, tColor, tColor.IsColorDark() ? Color_t(255, 255, 255) : Color_t(0, 0, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -858,8 +863,21 @@ void CESP::DrawPlayers()
|
||||
|
||||
if (tCache.m_iClassIcon)
|
||||
{
|
||||
int size = H::Draw.Scale(18, Scale_Round);
|
||||
H::Draw.Texture(m, t - tOffset, size, size, tCache.m_iClassIcon - 1, ALIGN_BOTTOM);
|
||||
const char* sTexture = "vgui/glyph_multiplayer.vtf";
|
||||
switch (tCache.m_iClassIcon)
|
||||
{
|
||||
case TF_CLASS_SCOUT: sTexture = "hud/leaderboard_class_scout.vtf"; break;
|
||||
case TF_CLASS_SOLDIER: sTexture = "hud/leaderboard_class_soldier.vtf"; break;
|
||||
case TF_CLASS_PYRO: sTexture = "hud/leaderboard_class_pyro.vtf"; break;
|
||||
case TF_CLASS_DEMOMAN: sTexture = "hud/leaderboard_class_demo.vtf"; break;
|
||||
case TF_CLASS_HEAVY: sTexture = "hud/leaderboard_class_heavy.vtf"; break;
|
||||
case TF_CLASS_ENGINEER: sTexture = "hud/leaderboard_class_engineer.vtf"; break;
|
||||
case TF_CLASS_MEDIC: sTexture = "hud/leaderboard_class_medic.vtf"; break;
|
||||
case TF_CLASS_SNIPER: sTexture = "hud/leaderboard_class_sniper.vtf"; break;
|
||||
case TF_CLASS_SPY: sTexture = "hud/leaderboard_class_spy.vtf"; break;
|
||||
}
|
||||
int iSize = H::Draw.Scale(18, Scale_Round);
|
||||
H::Draw.Texture(sTexture, m, t - tOffset, iSize, iSize, ALIGN_BOTTOM);
|
||||
}
|
||||
|
||||
if (tCache.m_pWeaponIcon)
|
||||
|
||||
@@ -651,7 +651,7 @@ MAKE_HOOK(NDebugOverlay_BoxAngles, S::NDebugOverlay_BoxAngles(), void,
|
||||
|
||||
void CVisuals::FOV(CTFPlayer* pLocal, CViewSetup* pView)
|
||||
{
|
||||
static auto fov_desired = U::ConVars.FindVar("fov_desired");
|
||||
static auto fov_desired = H::ConVars.FindVar("fov_desired");
|
||||
bool bZoomed = pLocal->InCond(TF_COND_ZOOMED);
|
||||
|
||||
float flRegularFOV = fov_desired->GetFloat();
|
||||
@@ -697,7 +697,7 @@ void CVisuals::ThirdPerson(CTFPlayer* pLocal, CViewSetup* pView)
|
||||
I::Input->CAM_ToFirstPerson();
|
||||
pLocal->ThirdPersonSwitch();
|
||||
|
||||
static auto cam_ideallag = U::ConVars.FindVar("cam_ideallag");
|
||||
static auto cam_ideallag = H::ConVars.FindVar("cam_ideallag");
|
||||
cam_ideallag->SetValue(0.f);
|
||||
|
||||
if (I::Input->CAM_IsThirdPerson())
|
||||
@@ -1016,7 +1016,7 @@ void CVisuals::CreateMove(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
iOldMedigunCharge = iNewMedigunCharge;
|
||||
}
|
||||
|
||||
static auto r_aspectratio = U::ConVars.FindVar("r_aspectratio");
|
||||
static auto r_aspectratio = H::ConVars.FindVar("r_aspectratio");
|
||||
static float flStaticRatio = 0.f;
|
||||
float flOldRatio = flStaticRatio;
|
||||
float flNewRatio = flStaticRatio = Vars::Visuals::UI::AspectRatio.Value;
|
||||
|
||||
@@ -15,7 +15,7 @@ public:
|
||||
float flGravityCorrection = 0.f;
|
||||
if (bZ)
|
||||
{
|
||||
static auto sv_gravity = U::ConVars.FindVar("sv_gravity");
|
||||
static auto sv_gravity = H::ConVars.FindVar("sv_gravity");
|
||||
float flDeltaTicks = float(iDeltaTicks) + 0.5f; // ?
|
||||
flGravityCorrection = (powf(flDeltaTicks, 2.f) - flDeltaTicks) / 2.f * sv_gravity->GetFloat() * powf(TICK_INTERVAL, 2);
|
||||
}
|
||||
@@ -83,7 +83,7 @@ MAKE_HOOK(CBaseEntity_SetAbsVelocity, S::CBaseEntity_SetAbsVelocity(), void,
|
||||
if (iDeltaTicks <= 0)
|
||||
return;
|
||||
|
||||
static auto sv_lagcompensation_teleport_dist = U::ConVars.FindVar("sv_lagcompensation_teleport_dist");
|
||||
static auto sv_lagcompensation_teleport_dist = H::ConVars.FindVar("sv_lagcompensation_teleport_dist");
|
||||
float flDist = powf(sv_lagcompensation_teleport_dist->GetFloat(), 2.f) * iDeltaTicks;
|
||||
if ((tNewRecord.m_vecOrigin - tOldRecord.m_vecOrigin).Length2DSqr() >= flDist)
|
||||
return pRecords->clear();
|
||||
@@ -122,7 +122,7 @@ MAKE_HOOK(CBaseEntity_SetAbsVelocity, S::CBaseEntity_SetAbsVelocity(), void,
|
||||
FloatRange_t flPositionRange = { tAxisInfo[i].m_flNewAxisValue + flVelocityRange.Max * flRewind, tAxisInfo[i].m_flNewAxisValue + flVelocityRange.Min * flRewind };
|
||||
if (i == 2)
|
||||
{
|
||||
static auto sv_gravity = U::ConVars.FindVar("sv_gravity");
|
||||
static auto sv_gravity = H::ConVars.FindVar("sv_gravity");
|
||||
float flGravityCorrection = sv_gravity->GetFloat() * powf(flRewind + TICK_INTERVAL / 2, 2.f) / 2;
|
||||
flPositionRange.Min -= flGravityCorrection, flPositionRange.Max -= flGravityCorrection;
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ MAKE_HOOK(CNetChannel_SendNetMsg, S::CNetChannel_SendNetMsg(), bool,
|
||||
auto cvarName = reinterpret_cast<const char*>(pMsg[6]);
|
||||
if (!cvarName) break;
|
||||
|
||||
auto pConVar = U::ConVars.FindVar(cvarName);
|
||||
auto pConVar = H::ConVars.FindVar(cvarName);
|
||||
if (!pConVar) break;
|
||||
|
||||
static std::string sValue = "";
|
||||
@@ -155,7 +155,7 @@ MAKE_HOOK(CNetChannel_SendNetMsg, S::CNetChannel_SendNetMsg(), bool,
|
||||
|
||||
if (!F::Ticks.m_bSpeedhack)
|
||||
{
|
||||
static auto sv_maxusrcmdprocessticks = U::ConVars.FindVar("sv_maxusrcmdprocessticks");
|
||||
static auto sv_maxusrcmdprocessticks = H::ConVars.FindVar("sv_maxusrcmdprocessticks");
|
||||
const int iAllowedNewCommands = std::max(sv_maxusrcmdprocessticks->GetInt() - F::Ticks.m_iShiftedTicks, 0);
|
||||
const int iCmdCount = pMsg->m_nNewCommands + pMsg->m_nBackupCommands - 3;
|
||||
if (iCmdCount > iAllowedNewCommands)
|
||||
|
||||
@@ -13,7 +13,7 @@ MAKE_HOOK(R_DrawSkyBox, S::R_DrawSkyBox(), void,
|
||||
if (FNV1A::Hash32(Vars::Visuals::World::SkyboxChanger.Value.c_str()) == FNV1A::Hash32Const("Off") || Vars::Visuals::UI::CleanScreenshots.Value && I::EngineClient->IsTakingScreenshot())
|
||||
return CALL_ORIGINAL(zFar, nDrawFlags);
|
||||
|
||||
static auto sv_skyname = U::ConVars.FindVar("sv_skyname");
|
||||
static auto sv_skyname = H::ConVars.FindVar("sv_skyname");
|
||||
std::string sOriginal = sv_skyname->GetString();
|
||||
sv_skyname->SetValue(Vars::Visuals::World::SkyboxChanger.Value.c_str());
|
||||
CALL_ORIGINAL(zFar, nDrawFlags);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ConVars.h"
|
||||
|
||||
#include "../../SDK/Definitions/Interfaces/ICVar.h"
|
||||
#include "../../Definitions/Interfaces/ICVar.h"
|
||||
|
||||
bool CConVars::Unlock()
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
#include "../Macros/Macros.h"
|
||||
#include "../../SDK/Definitions/Misc/ConVar.h"
|
||||
#include "../Hash/FNV1A.h"
|
||||
#include "../../Definitions/Misc/ConVar.h"
|
||||
#include "../../../Utils/Macros/Macros.h"
|
||||
#include "../../../Utils/Hash/FNV1A.h"
|
||||
#include <unordered_map>
|
||||
|
||||
class CConVars
|
||||
@@ -18,4 +18,4 @@ public:
|
||||
ConVar* FindVar(const char* sCVar);
|
||||
};
|
||||
|
||||
ADD_FEATURE_CUSTOM(CConVars, ConVars, U);
|
||||
ADD_FEATURE_CUSTOM(CConVars, ConVars, H);
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "Draw.h"
|
||||
|
||||
#include "../../SDK.h"
|
||||
#include "Icons.h"
|
||||
#include "../../Definitions/Interfaces.h"
|
||||
#include "../../../Utils/Math/Math.h"
|
||||
#include "../../../Utils/Timer/Timer.h"
|
||||
@@ -58,9 +57,7 @@ void CDraw::UpdateW2SMatrix()
|
||||
CViewSetup tViewSetup;
|
||||
if (I::Client->GetPlayerView(tViewSetup))
|
||||
{
|
||||
static VMatrix mWorldToView;
|
||||
static VMatrix mViewToProjection;
|
||||
static VMatrix mWorldToPixels;
|
||||
static VMatrix mWorldToView, mViewToProjection, mWorldToPixels;
|
||||
I::RenderView->GetMatricesForView(tViewSetup, &mWorldToView, &mViewToProjection, &m_mWorldToProjection, &mWorldToPixels);
|
||||
}
|
||||
}
|
||||
@@ -343,8 +340,10 @@ void CDraw::LineCircle(int x, int y, float iRadius, int iSegments, Color_t tColo
|
||||
I::MatSystemSurface->DrawOutlinedCircle(x, y, iRadius, iSegments);
|
||||
}
|
||||
|
||||
void CDraw::Texture(int x, int y, int w, int h, int iId, EAlign eAlign)
|
||||
void CDraw::Texture(const char* sTexture, int x, int y, int w, int h, EAlign eAlign)
|
||||
{
|
||||
static std::unordered_map<uint32_t, int> mTextures = {};
|
||||
|
||||
switch (eAlign)
|
||||
{
|
||||
case ALIGN_TOPLEFT: break;
|
||||
@@ -358,14 +357,9 @@ void CDraw::Texture(int x, int y, int w, int h, int iId, EAlign eAlign)
|
||||
case ALIGN_BOTTOMRIGHT: x -= w; y -= h; break;
|
||||
}
|
||||
|
||||
int nTexture = 0;
|
||||
if (ICONS::TEXTURES[iId].first != -1)
|
||||
nTexture = ICONS::TEXTURES[iId].first;
|
||||
else
|
||||
{
|
||||
nTexture = ICONS::TEXTURES[iId].first = I::MatSystemSurface->CreateNewTextureID();
|
||||
I::MatSystemSurface->DrawSetTextureFile(nTexture, ICONS::TEXTURES[iId].second.c_str(), false, true);
|
||||
}
|
||||
auto& nTexture = mTextures[FNV1A::Hash32Const(sTexture)];
|
||||
if (!nTexture)
|
||||
I::MatSystemSurface->DrawSetTextureFile(nTexture = I::MatSystemSurface->CreateNewTextureID(), sTexture, false, true);
|
||||
|
||||
I::MatSystemSurface->DrawSetColor(255, 255, 255, 255);
|
||||
I::MatSystemSurface->DrawSetTexture(nTexture);
|
||||
|
||||
@@ -92,7 +92,7 @@ public:
|
||||
void FillCircle(int x, int y, float iRadius, int iSegments, Color_t tColor);
|
||||
void LineCircle(int x, int y, float iRadius, int iSegments, Color_t tColor);
|
||||
|
||||
void Texture(int x, int y, int w, int h, int iId, EAlign eAlign = ALIGN_CENTER);
|
||||
void Texture(const char* sTexture, int x, int y, int w, int h, EAlign eAlign = ALIGN_CENTER);
|
||||
CHudTexture* GetIcon(const char* szIcon, int eIconFormat = 0);
|
||||
int CreateTextureFromArray(const unsigned char* rgba, int w, int h);
|
||||
void DrawHudTexture(float x, float y, float s, const CHudTexture* pTexture, Color_t tColor = { 255, 255, 255, 255 });
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
namespace ICONS
|
||||
{
|
||||
inline std::vector<std::pair<int, std::string>> TEXTURES = {
|
||||
{ -1, "hud/leaderboard_class_scout.vtf" },
|
||||
{ -1, "hud/leaderboard_class_sniper.vtf" },
|
||||
{ -1, "hud/leaderboard_class_soldier.vtf" },
|
||||
{ -1, "hud/leaderboard_class_demo.vtf" },
|
||||
{ -1, "hud/leaderboard_class_medic.vtf" },
|
||||
{ -1, "hud/leaderboard_class_heavy.vtf" },
|
||||
{ -1, "hud/leaderboard_class_pyro.vtf" },
|
||||
{ -1, "hud/leaderboard_class_spy.vtf" },
|
||||
{ -1, "hud/leaderboard_class_engineer.vtf" },
|
||||
{ -1, "vgui/class_portraits/scout_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/sniper_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/soldier_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/demoman_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/medic_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/heavy_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/pyro_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/spy_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/engineer_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/scout_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/sniper_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/soldier_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/demoman_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/medic_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/heavy_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/pyro_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/spy_blue_alpha.vtf" },
|
||||
{ -1, "vgui/class_portraits/engineer_blue_alpha.vtf" },
|
||||
{ -1, "hud/hud_obj_status_sentry_1.vtf" },
|
||||
{ -1, "hud/hud_obj_status_sentry_2.vtf" },
|
||||
{ -1, "hud/hud_obj_status_sentry_3.vtf" },
|
||||
{ -1, "hud/hud_obj_status_dispenser.vtf" },
|
||||
{ -1, "hud/hud_obj_status_tele_entrance.vtf" },
|
||||
{ -1, "hud/hud_obj_status_tele_exit.vtf" },
|
||||
{ -1, "sprites/healbeam.vtf" },
|
||||
{ -1, "hud/hud_obj_status_ammo_64.vtf" },
|
||||
{ -1, "hud/mvm_cash.vtf" },
|
||||
{ -1, "effects/powerup_supernova_icon.vtf" },
|
||||
{ -1, "hud/ico_demolish.vtf" },
|
||||
{ -1, "vgui/spellbook_book.vtf" },
|
||||
{ -1, "backpack/player/items/crafting/hwn2015_gargoyle_stone.vtf" }
|
||||
};
|
||||
}
|
||||
@@ -201,6 +201,28 @@ void CEntities::Store()
|
||||
mParties[uAccountID] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
std::map<uint64_t, std::vector<uint32_t>> mParties2 = {};
|
||||
for (auto& [uAccountID, uParty] : mParties)
|
||||
{
|
||||
if (uParty)
|
||||
mParties2[uParty].push_back(uAccountID);
|
||||
}
|
||||
for (auto it = mParties2.begin(); it != mParties2.end();)
|
||||
{
|
||||
if (it->second.size() > 1)
|
||||
it++;
|
||||
else
|
||||
it = mParties2.erase(it);
|
||||
}
|
||||
mParties.clear();
|
||||
uint64_t uPartyCount = 0; for (auto& [uParty, vAccountIDs] : mParties2)
|
||||
{
|
||||
int iParty = uParty == 1 ? 1 : ++uPartyCount + 1;
|
||||
for (auto uAccountID : vAccountIDs)
|
||||
mParties[uAccountID] = iParty;
|
||||
}
|
||||
m_iPartyCount = uPartyCount;
|
||||
}
|
||||
for (int n = 1; n <= I::EngineClient->GetMaxClients(); n++)
|
||||
{
|
||||
@@ -506,5 +528,6 @@ bool CEntities::IsF2P(int iIndex) { return m_mIF2P[iIndex]; }
|
||||
bool CEntities::IsF2P(uint32_t uAccountID) { return m_mUF2P[uAccountID]; }
|
||||
int CEntities::GetLevel(int iIndex) { return m_mILevels.contains(iIndex) ? m_mILevels[iIndex] : -2; }
|
||||
int CEntities::GetLevel(uint32_t uAccountID) { return m_mULevels.contains(uAccountID) ? m_mULevels[uAccountID] : -2; }
|
||||
uint64_t CEntities::GetParty(int iIndex) { return m_mIParty.contains(iIndex) ? m_mIParty[iIndex] : 0; }
|
||||
uint64_t CEntities::GetParty(uint32_t uAccountID) { return m_mUParty.contains(uAccountID) ? m_mUParty[uAccountID] : 0; }
|
||||
int CEntities::GetParty(int iIndex) { return m_mIParty.contains(iIndex) ? m_mIParty[iIndex] : 0; }
|
||||
int CEntities::GetParty(uint32_t uAccountID) { return m_mUParty.contains(uAccountID) ? m_mUParty[uAccountID] : 0; }
|
||||
int CEntities::GetPartyCount() { return m_iPartyCount; }
|
||||
@@ -2,7 +2,6 @@
|
||||
#include "../../../Utils/Macros/Macros.h"
|
||||
#include "../../Definitions/Classes.h"
|
||||
#include "../../Vars.h"
|
||||
#include <unordered_map>
|
||||
|
||||
Enum(Entity, Invalid = -1,
|
||||
PlayerAll, PlayerEnemy, PlayerTeam,
|
||||
@@ -48,13 +47,14 @@ private:
|
||||
std::unordered_map<uint32_t, int> m_mUPriorities = {};
|
||||
std::unordered_map<int, bool> m_mIFriends = {};
|
||||
std::unordered_map<uint32_t, bool> m_mUFriends = {};
|
||||
std::unordered_map<int, uint64_t> m_mIParty = {};
|
||||
std::unordered_map<uint32_t, uint64_t> m_mUParty = {};
|
||||
std::unordered_map<int, int> m_mIParty = {};
|
||||
std::unordered_map<uint32_t, int> m_mUParty = {};
|
||||
std::unordered_map<int, bool> m_mIF2P = {};
|
||||
std::unordered_map<uint32_t, bool> m_mUF2P = {};
|
||||
std::unordered_map<int, int> m_mILevels = {};
|
||||
std::unordered_map<uint32_t, int> m_mULevels = {};
|
||||
uint32_t m_uAccountID;
|
||||
int m_iPartyCount = 0;
|
||||
|
||||
public:
|
||||
void Store();
|
||||
@@ -95,8 +95,9 @@ public:
|
||||
bool IsF2P(uint32_t uAccountID);
|
||||
int GetLevel(int iIndex);
|
||||
int GetLevel(uint32_t uAccountID);
|
||||
uint64_t GetParty(int iIndex);
|
||||
uint64_t GetParty(uint32_t uAccountID);
|
||||
int GetParty(int iIndex);
|
||||
int GetParty(uint32_t uAccountID);
|
||||
int GetPartyCount();
|
||||
};
|
||||
|
||||
ADD_FEATURE_CUSTOM(CEntities, Entities, H);
|
||||
@@ -31,12 +31,10 @@ bool CTraceFilterHitscan::ShouldHitEntity(IHandleEntity* pServerEntity, int nCon
|
||||
case ETFClassID::CObjectSentrygun:
|
||||
case ETFClassID::CObjectDispenser:
|
||||
case ETFClassID::CObjectTeleporter:
|
||||
{
|
||||
if (iType != SKIP_CHECK && (iWeapon == WEAPON_INCLUDE ? bWeapon : !bWeapon))
|
||||
return iType == FORCE_HIT ? true : false;
|
||||
return pEntity->m_iTeamNum() != iTeam;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -84,7 +82,6 @@ bool CTraceFilterCollideable::ShouldHitEntity(IHandleEntity* pServerEntity, int
|
||||
return pEntity->m_iTeamNum() != iTeam;
|
||||
break;
|
||||
case ETFClassID::CTFPlayer:
|
||||
{
|
||||
if (iPlayer == PLAYER_ALL)
|
||||
return true;
|
||||
if (iPlayer == PLAYER_NONE)
|
||||
@@ -92,7 +89,6 @@ bool CTraceFilterCollideable::ShouldHitEntity(IHandleEntity* pServerEntity, int
|
||||
if (iType != SKIP_CHECK && (iWeapon == WEAPON_INCLUDE ? bWeapon : !bWeapon))
|
||||
return iType == FORCE_HIT ? true : false;
|
||||
return pEntity->m_iTeamNum() != iTeam;
|
||||
}
|
||||
case ETFClassID::CBaseObject:
|
||||
case ETFClassID::CObjectSentrygun:
|
||||
case ETFClassID::CObjectDispenser: return iObject == OBJECT_ALL ? true : iObject == OBJECT_NONE ? false : pEntity->m_iTeamNum() != iTeam;
|
||||
@@ -102,9 +98,8 @@ bool CTraceFilterCollideable::ShouldHitEntity(IHandleEntity* pServerEntity, int
|
||||
//case ETFClassID::CMerasmus:
|
||||
//case ETFClassID::CEyeballBoss:
|
||||
//case ETFClassID::CHeadlessHatman:
|
||||
//case ETFClassID::CZombie:
|
||||
case ETFClassID::CTFGrenadePipebombProjectile:
|
||||
return bMisc ? true : false;
|
||||
//case ETFClassID::CZombie: return bMisc;
|
||||
case ETFClassID::CTFGrenadePipebombProjectile: return bMisc && pEntity->As<CTFGrenadePipebombProjectile>()->m_iType() == TF_GL_MODE_REMOTE_DETONATE;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -135,9 +130,7 @@ bool CTraceFilterWorldAndPropsOnly::ShouldHitEntity(IHandleEntity* pServerEntity
|
||||
case ETFClassID::CObjectCartDispenser:
|
||||
case ETFClassID::CFuncTrackTrain:
|
||||
case ETFClassID::CFuncConveyor: return true;
|
||||
case ETFClassID::CFuncRespawnRoomVisualizer:
|
||||
if (nContentsMask & CONTENTS_PLAYERCLIP)
|
||||
return pEntity->m_iTeamNum() != iTeam;
|
||||
case ETFClassID::CFuncRespawnRoomVisualizer: return nContentsMask & CONTENTS_PLAYERCLIP && pEntity->m_iTeamNum() != iTeam;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -619,7 +619,7 @@ int SDK::IsAttacking(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, const CUserCmd*
|
||||
CGameTrace trace = {};
|
||||
CTraceFilterHitscan filter = {};
|
||||
filter.pSkip = pLocal;
|
||||
static auto tf_grapplinghook_max_distance = U::ConVars.FindVar("tf_grapplinghook_max_distance");
|
||||
static auto tf_grapplinghook_max_distance = H::ConVars.FindVar("tf_grapplinghook_max_distance");
|
||||
const float flGrappleDistance = tf_grapplinghook_max_distance->GetFloat();
|
||||
Trace(vPos, vPos + vForward * flGrappleDistance, MASK_SOLID, &filter, &trace);
|
||||
return trace.DidHit() && !(trace.surface.flags & SURF_SKY);
|
||||
@@ -785,7 +785,7 @@ void SDK::WalkTo(CUserCmd* pCmd, CTFPlayer* pLocal, Vec3& vTo, float flScale)
|
||||
|
||||
void SDK::GetProjectileFireSetup(CTFPlayer* pPlayer, const Vec3& vAngIn, Vec3 vOffset, Vec3& vPosOut, Vec3& vAngOut, bool bPipes, bool bInterp, bool bAllowFlip)
|
||||
{
|
||||
static auto cl_flipviewmodels = U::ConVars.FindVar("cl_flipviewmodels");
|
||||
static auto cl_flipviewmodels = H::ConVars.FindVar("cl_flipviewmodels");
|
||||
if (bAllowFlip && FNV1A::Hash32(cl_flipviewmodels->GetString()) == FNV1A::Hash32Const("1"))
|
||||
vOffset.y *= -1.f;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Vars.h"
|
||||
#include "Globals.h"
|
||||
#include "Helpers/ConVars/ConVars.h"
|
||||
#include "Helpers/Entities/Entities.h"
|
||||
#include "Helpers/Draw/Draw.h"
|
||||
#include "Helpers/TraceFilters/TraceFilters.h"
|
||||
@@ -13,7 +14,6 @@
|
||||
#include "../Utils/Interfaces/Interfaces.h"
|
||||
#include "../Utils/Hooks/Hooks.h"
|
||||
#include "../Utils/Memory/Memory.h"
|
||||
#include "../Utils/ConVars/ConVars.h"
|
||||
#include "../Utils/KeyHandler/KeyHandler.h"
|
||||
#include "../Utils/Hash/FNV1A.h"
|
||||
#include "../Utils/Math/Math.h"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "../Utils/Macros/Macros.h"
|
||||
#include <windows.h>
|
||||
#include <unordered_map>
|
||||
#include <map>
|
||||
#include <typeinfo>
|
||||
|
||||
#define DEFAULT_BIND -1
|
||||
|
||||
Reference in New Issue
Block a user