mirror of
https://github.com/rei-2/Amalgam.git
synced 2026-10-11 17:58:15 +08:00
misc changes
This commit is contained in:
1 parent
76149e1b77
commit
36a5957878
53 files changed
+473
-372
No files matched your search
@@ -964,6 +964,7 @@
|
||||
<ClCompile Include="src\Hooks\CBaseEntity_BaseInterpolatePart1.cpp" />
|
||||
<ClCompile Include="src\Hooks\CBaseEntity_EstimateAbsVelocity.cpp" />
|
||||
<ClCompile Include="src\Hooks\CBasePlayer_CalcObserverView.cpp" />
|
||||
<ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" />
|
||||
<ClCompile Include="src\Hooks\CInput_ValidateUserCmd.cpp" />
|
||||
<ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" />
|
||||
<ClCompile Include="src\Hooks\CTFRocketLauncher_CheckReloadMisfire.cpp" />
|
||||
@@ -1274,6 +1275,7 @@
|
||||
<ClInclude Include="src\SDK\Definitions\Main\CEconWearable.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Main\CEntitySphereQuery.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Main\CGameTrace.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Misc\CInterpolatedVar.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Main\CModel.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\IEngineTrace.h" />
|
||||
|
||||
@@ -199,6 +199,7 @@
|
||||
<ClCompile Include="src\Hooks\IMaterialSystem_FindTexture.cpp" />
|
||||
<ClCompile Include="src\Hooks\CBasePlayer_CalcObserverView.cpp" />
|
||||
<ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" />
|
||||
<ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\Utils\UtlVector\UtlVector.h" />
|
||||
@@ -583,6 +584,7 @@
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\ILocalize.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\IMemAlloc.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Main\CPredictionCopy.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="cpp.hint" />
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
std::vector<Target_t> vTargets;
|
||||
const auto iSort = Vars::Aimbot::General::TargetSelection.Value;
|
||||
|
||||
Vec3 vLocalPos = F::Ticks.GetShootPos();
|
||||
Vec3 vLocalAngles = I::EngineClient->GetViewAngles();
|
||||
|
||||
@@ -9,19 +9,17 @@
|
||||
|
||||
//#define SPLASH_DEBUG1 // normal splash visualization
|
||||
//#define SPLASH_DEBUG2 // obstructed splash visualization
|
||||
//#define SPLASH_DEBUG3 // simple splash visualization
|
||||
//#define SPLASH_DEBUG4 // points visualization
|
||||
//#define SPLASH_DEBUG5 // trace visualization
|
||||
//#define SPLASH_DEBUG6 // trace count
|
||||
//#define SPLASH_DEBUG3 // points visualization
|
||||
//#define SPLASH_DEBUG4 // trace visualization
|
||||
//#define SPLASH_DEBUG5 // trace count
|
||||
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
static std::unordered_map<std::string, int> s_mTraceCount = {};
|
||||
#endif
|
||||
|
||||
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
|
||||
{
|
||||
std::vector<Target_t> vTargets;
|
||||
const auto iSort = Vars::Aimbot::General::TargetSelection.Value;
|
||||
|
||||
const Vec3 vLocalPos = F::Ticks.GetShootPos();
|
||||
const Vec3 vLocalAngles = I::EngineClient->GetViewAngles();
|
||||
@@ -189,12 +187,12 @@ float CAimbotProjectile::GetSplashRadius(CTFWeaponBase* pWeapon, CTFPlayer* pPla
|
||||
case TF_WEAPON_ROCKETLAUNCHER_DIRECTHIT:
|
||||
case TF_WEAPON_PARTICLE_CANNON:
|
||||
case TF_WEAPON_PIPEBOMBLAUNCHER:
|
||||
flRadius = 146.f;
|
||||
flRadius = TF_ROCKET_RADIUS;
|
||||
break;
|
||||
case TF_WEAPON_FLAREGUN:
|
||||
case TF_WEAPON_FLAREGUN_REVENGE:
|
||||
if (pWeapon->As<CTFFlareGun>()->GetFlareGunType() == FLAREGUN_SCORCHSHOT)
|
||||
flRadius = 110.f;
|
||||
flRadius = TF_FLARE_DET_RADIUS;
|
||||
}
|
||||
if (!flRadius)
|
||||
return 0.f;
|
||||
@@ -226,15 +224,15 @@ float CAimbotProjectile::GetSplashRadius(CBaseEntity* pProjectile, CTFWeaponBase
|
||||
case ETFClassID::CTFProjectile_Rocket:
|
||||
case ETFClassID::CTFProjectile_SentryRocket:
|
||||
case ETFClassID::CTFProjectile_EnergyBall:
|
||||
flRadius = 146.f;
|
||||
flRadius = TF_ROCKET_RADIUS;
|
||||
break;
|
||||
case ETFClassID::CTFGrenadePipebombProjectile:
|
||||
if (pProjectile->As<CTFGrenadePipebombProjectile>()->HasStickyEffects())
|
||||
flRadius = 146.f;
|
||||
flRadius = TF_ROCKET_RADIUS;
|
||||
break;
|
||||
case ETFClassID::CTFProjectile_Flare:
|
||||
if (pWeapon && pWeapon->As<CTFFlareGun>()->GetFlareGunType() == FLAREGUN_SCORCHSHOT)
|
||||
flRadius = 110.f;
|
||||
flRadius = TF_FLARE_DET_RADIUS;
|
||||
}
|
||||
if (pPlayer && pWeapon)
|
||||
{
|
||||
@@ -446,7 +444,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
if (iType & PointTypeEnum::Regular)
|
||||
{
|
||||
SDK::TraceHull(vTargetEye, vPoint, tInfo.m_vHull * -1, tInfo.m_vHull, MASK_SOLID, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash regular"]++;
|
||||
#endif
|
||||
|
||||
@@ -480,7 +478,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
if (!(iOriginalType & PointTypeEnum::Regular)) // don't do the same trace over again
|
||||
{
|
||||
SDK::Trace(vTargetEye, vPoint, MASK_SOLID, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash rocket (2)"]++;
|
||||
#endif
|
||||
bNormal = !trace.m_pEnt || trace.fraction == 1.f;
|
||||
@@ -494,7 +492,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
filter.pSkip = trace.m_pEnt->GetClassID() != ETFClassID::CWorld || trace.hitbox ? trace.m_pEnt : nullptr; // make sure we get past entity or prop
|
||||
SDK::Trace(trace.endpos - (vTargetEye - vPoint).Normalized(), vPoint, MASK_SOLID | CONTENTS_NOSTARTSOLID, &filter, &trace);
|
||||
filter.pSkip = nullptr;
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash rocket (2, 2)"]++;
|
||||
#endif
|
||||
bNormal = trace.fraction == 1.f || trace.allsolid || (trace.startpos - trace.endpos).IsZero() || trace.surface.flags & (/*SURF_NODRAW |*/ SURF_SKY);
|
||||
@@ -507,7 +505,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
if (checkPoint(trace, bErase, bNormal))
|
||||
{
|
||||
SDK::Trace(trace.endpos + trace.plane.normal, vTargetEye, MASK_SHOT, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash rocket check (2)"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG2
|
||||
@@ -535,7 +533,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
if (tInfo.m_iSplashMode == Vars::Aimbot::Projectile::RocketSplashModeEnum::Regular) // just do this for non rockets, it's less expensive
|
||||
{
|
||||
SDK::Trace(vPoint, vTargetEye, MASK_SHOT, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash grate check"]++;
|
||||
#endif
|
||||
bNormal = trace.DidHit();
|
||||
@@ -546,7 +544,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
goto breakOut;
|
||||
|
||||
SDK::TraceHull(vPoint, vTargetEye, tInfo.m_vHull * -1, tInfo.m_vHull, MASK_SOLID, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash grate"]++;
|
||||
#endif
|
||||
|
||||
@@ -558,7 +556,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
else // currently experimental, there may be a more efficient way to do this?
|
||||
{
|
||||
SDK::Trace(vPoint, vTargetEye, MASK_SOLID | CONTENTS_NOSTARTSOLID, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash rocket (1)"]++;
|
||||
#endif
|
||||
bNormal = trace.fraction == 1.f || trace.allsolid || trace.surface.flags & SURF_SKY;
|
||||
@@ -572,7 +570,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
|
||||
CGameTrace trace2 = {};
|
||||
SDK::Trace(trace.endpos - (vPoint - vTargetEye).Normalized(), vTargetEye, MASK_SOLID | CONTENTS_NOSTARTSOLID, &filter, &trace2);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash rocket (1, 2)"]++;
|
||||
#endif
|
||||
bNormal = trace2.fraction == 1.f || trace.allsolid || (trace2.startpos - trace2.endpos).IsZero() || trace2.surface.flags & (SURF_NODRAW | SURF_SKY);
|
||||
@@ -588,7 +586,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
|
||||
if (checkPoint(trace, bErase, bNormal))
|
||||
{
|
||||
SDK::Trace(trace.endpos + trace.plane.normal, vTargetEye, MASK_SHOT, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash rocket check (1)"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG2
|
||||
@@ -703,7 +701,7 @@ std::vector<Point_t> CAimbotProjectile::GetSplashPoints(Target_t& tTarget, std::
|
||||
return vPoints;
|
||||
}
|
||||
|
||||
void CAimbotProjectile::SetupSplashPoints(Target_t& tTarget, std::vector<std::pair<Vec3, int>>& vSpherePoints, std::vector<std::pair<Vec3, Vec3>>& vSimplePoints)
|
||||
void CAimbotProjectile::SetupSplashPoints(Target_t& tTarget, std::vector<std::pair<Vec3, int>>& vSpherePoints, std::vector<Vec3>& vSimplePoints)
|
||||
{
|
||||
vSimplePoints.clear();
|
||||
Vec3 vTargetEye = tTarget.m_vPos + m_tInfo.m_vTargetEye;
|
||||
@@ -735,7 +733,7 @@ void CAimbotProjectile::SetupSplashPoints(Target_t& tTarget, std::vector<std::pa
|
||||
|
||||
if (tPoint.m_tSolution.m_iCalculated != CalculatedEnum::Bad)
|
||||
{
|
||||
vSimplePoints.emplace_back(tPoint.m_vPoint, trace.plane.normal);
|
||||
vSimplePoints.emplace_back(tPoint.m_vPoint);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -754,22 +752,12 @@ void CAimbotProjectile::SetupSplashPoints(Target_t& tTarget, std::vector<std::pa
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<Point_t> CAimbotProjectile::GetSplashPointsSimple(Target_t& tTarget, std::vector<std::pair<Vec3, Vec3>>& vSpherePoints, int iSimTime)
|
||||
std::vector<Point_t> CAimbotProjectile::GetSplashPointsSimple(Target_t& tTarget, std::vector<Vec3>& vSpherePoints, int iSimTime)
|
||||
{
|
||||
std::vector<std::pair<Point_t, float>> vPointDistances = {};
|
||||
|
||||
Vec3 vTargetEye = tTarget.m_vPos + m_tInfo.m_vTargetEye;
|
||||
|
||||
#if defined(SPLASH_DEBUG3)
|
||||
auto drawTrace = [](bool bSuccess, Color_t tColor, CGameTrace& trace)
|
||||
{
|
||||
Vec3 vMins = Vec3(-1, -1, -1) / (bSuccess ? 1 : 2), vMaxs = Vec3(1, 1, 1) / (bSuccess ? 1 : 2);
|
||||
Vec3 vAngles = Math::VectorAngles(trace.plane.normal);
|
||||
G::BoxStorage.emplace_back(trace.endpos, vMins, vMaxs, vAngles, I::GlobalVars->curtime + 60.f, tColor.Alpha(tColor.a / (bSuccess ? 1 : 10)), Color_t(0, 0, 0, 0));
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(trace.startpos, trace.endpos), I::GlobalVars->curtime + 60.f, tColor.Alpha(tColor.a / (bSuccess ? 1 : 10)));
|
||||
};
|
||||
#endif
|
||||
|
||||
auto checkPoint = [&](Vec3& vPoint, bool& bErase)
|
||||
{
|
||||
Point_t tPoint = { vPoint, {} };
|
||||
@@ -784,31 +772,9 @@ std::vector<Point_t> CAimbotProjectile::GetSplashPointsSimple(Target_t& tTarget,
|
||||
};
|
||||
for (auto it = vSpherePoints.begin(); it != vSpherePoints.end();)
|
||||
{
|
||||
Vec3& vPoint = it->first;
|
||||
Vec3& vNormal = it->second;
|
||||
bool bErase = false;
|
||||
|
||||
if (checkPoint(vPoint, bErase))
|
||||
{
|
||||
#ifdef SPLASH_DEBUG3
|
||||
drawTrace(bErase, Vars::Colors::Halloween.Value, trace);
|
||||
#endif
|
||||
|
||||
/*
|
||||
CGameTrace trace = {};
|
||||
CTraceFilterWorldAndPropsOnly filter = {};
|
||||
|
||||
SDK::Trace(vPoint + vNormal, vTargetEye, MASK_SHOT, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
s_mTraceCount["Splash trace check"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG3
|
||||
drawTrace(bErase, Vars::Colors::Powerup.Value, trace);
|
||||
#endif
|
||||
if (trace.fraction < 1.f)
|
||||
vPointDistances.pop_back();
|
||||
*/
|
||||
}
|
||||
checkPoint(*it, bErase);
|
||||
|
||||
if (bErase)
|
||||
it = vSpherePoints.erase(it);
|
||||
@@ -956,9 +922,9 @@ static inline void SolveProjectileSpeed(CTFWeaponBase* pWeapon, const Vec3& vLoc
|
||||
flDragTime = powf(flTime, 2) * flDrag / (flOverride ? flOverride : 1.5f); // rough estimate to prevent m_flTime being too low
|
||||
flVelocity = flVelocity - flVelocity * flTime * flDrag;
|
||||
}
|
||||
void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, int iSimTime, Solution_t& out, bool bAccuracy)
|
||||
void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, int iSimTime, Solution_t& tOut, bool bAccuracy)
|
||||
{
|
||||
if (out.m_iCalculated != CalculatedEnum::Pending)
|
||||
if (tOut.m_iCalculated != CalculatedEnum::Pending)
|
||||
return;
|
||||
|
||||
const float flGrav = m_tInfo.m_flGravity * 800.f;
|
||||
@@ -982,29 +948,29 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
else
|
||||
{ // arch
|
||||
float flRoot = pow(flVelocity, 4) - flGrav * (flGrav * pow(flDist, 2) + 2.f * vDelta.z * pow(flVelocity, 2));
|
||||
if (out.m_iCalculated = flRoot < 0.f ? CalculatedEnum::Bad : CalculatedEnum::Pending)
|
||||
if (tOut.m_iCalculated = flRoot < 0.f ? CalculatedEnum::Bad : CalculatedEnum::Pending)
|
||||
return;
|
||||
flPitch = atan((pow(flVelocity, 2) - sqrt(flRoot)) / (flGrav * flDist));
|
||||
}
|
||||
out.m_flTime = flDist / (cos(flPitch) * flVelocity) - m_tInfo.m_flOffsetTime + flDragTime;
|
||||
out.m_flPitch = flPitch = -RAD2DEG(flPitch) - m_tInfo.m_vAngFix.x;
|
||||
out.m_flYaw = flYaw = vAngleTo.y - m_tInfo.m_vAngFix.y;
|
||||
tOut.m_flTime = flDist / (cos(flPitch) * flVelocity) - m_tInfo.m_flOffsetTime + flDragTime;
|
||||
tOut.m_flPitch = flPitch = -RAD2DEG(flPitch) - m_tInfo.m_vAngFix.x;
|
||||
tOut.m_flYaw = flYaw = vAngleTo.y - m_tInfo.m_vAngFix.y;
|
||||
}
|
||||
|
||||
int iTimeTo = int(out.m_flTime / TICK_INTERVAL) + 1;
|
||||
int iTimeTo = int(tOut.m_flTime / TICK_INTERVAL) + 1;
|
||||
if (!m_tInfo.m_vOffset.IsZero())
|
||||
{
|
||||
if (out.m_iCalculated = iTimeTo > iSimTime ? CalculatedEnum::Time : CalculatedEnum::Pending)
|
||||
if (tOut.m_iCalculated = iTimeTo > iSimTime ? CalculatedEnum::Time : CalculatedEnum::Pending)
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
out.m_iCalculated = iTimeTo > iSimTime ? CalculatedEnum::Time : CalculatedEnum::Good;
|
||||
tOut.m_iCalculated = iTimeTo > iSimTime ? CalculatedEnum::Time : CalculatedEnum::Good;
|
||||
return;
|
||||
}
|
||||
|
||||
int iFlags = (bAccuracy ? ProjSimEnum::Trace : ProjSimEnum::None) | ProjSimEnum::NoRandomAngles | ProjSimEnum::PredictCmdNum;
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
if (iFlags & ProjSimEnum::Trace)
|
||||
{
|
||||
if (Vars::Visuals::Trajectory::Override.Value)
|
||||
@@ -1034,7 +1000,7 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
}
|
||||
#endif
|
||||
ProjectileInfo tProjInfo = {};
|
||||
if (out.m_iCalculated = !F::ProjSim.GetInfo(m_tInfo.m_pLocal, m_tInfo.m_pWeapon, { flPitch, flYaw, 0 }, tProjInfo, iFlags) ? CalculatedEnum::Bad : CalculatedEnum::Pending)
|
||||
if (tOut.m_iCalculated = !F::ProjSim.GetInfo(m_tInfo.m_pLocal, m_tInfo.m_pWeapon, { flPitch, flYaw, 0 }, tProjInfo, iFlags) ? CalculatedEnum::Bad : CalculatedEnum::Pending)
|
||||
return;
|
||||
|
||||
{ // calculate trajectory from projectile origin
|
||||
@@ -1046,15 +1012,15 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
|
||||
Vec3 vAngleTo = Math::CalcAngle(tProjInfo.m_vPos, vTargetPos);
|
||||
if (!flGrav)
|
||||
out.m_flPitch = -DEG2RAD(vAngleTo.x);
|
||||
tOut.m_flPitch = -DEG2RAD(vAngleTo.x);
|
||||
else
|
||||
{ // arch
|
||||
float flRoot = pow(flVelocity, 4) - flGrav * (flGrav * pow(flDist, 2) + 2.f * vDelta.z * pow(flVelocity, 2));
|
||||
if (out.m_iCalculated = flRoot < 0.f ? CalculatedEnum::Bad : CalculatedEnum::Pending)
|
||||
if (tOut.m_iCalculated = flRoot < 0.f ? CalculatedEnum::Bad : CalculatedEnum::Pending)
|
||||
return;
|
||||
out.m_flPitch = atan((pow(flVelocity, 2) - sqrt(flRoot)) / (flGrav * flDist));
|
||||
tOut.m_flPitch = atan((pow(flVelocity, 2) - sqrt(flRoot)) / (flGrav * flDist));
|
||||
}
|
||||
out.m_flTime = flDist / (cos(out.m_flPitch) * flVelocity) + flDragTime;
|
||||
tOut.m_flTime = flDist / (cos(tOut.m_flPitch) * flVelocity) + flDragTime;
|
||||
}
|
||||
|
||||
{ // correct yaw
|
||||
@@ -1067,7 +1033,7 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
if (!vSolutions.empty())
|
||||
{
|
||||
vShootPos += vForward * vSolutions.front();
|
||||
out.m_flYaw = flYaw - (RAD2DEG(atan2(vShootPos.y, vShootPos.x)) - flYaw);
|
||||
tOut.m_flYaw = flYaw - (RAD2DEG(atan2(vShootPos.y, vShootPos.x)) - flYaw);
|
||||
flYaw = RAD2DEG(atan2(vShootPos.y, vShootPos.x));
|
||||
}
|
||||
}
|
||||
@@ -1076,7 +1042,7 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
if (flGrav)
|
||||
{
|
||||
flPitch -= tProjInfo.m_vAng.x;
|
||||
out.m_flPitch = -RAD2DEG(out.m_flPitch) + flPitch - m_tInfo.m_vAngFix.x;
|
||||
tOut.m_flPitch = -RAD2DEG(tOut.m_flPitch) + flPitch - m_tInfo.m_vAngFix.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1089,13 +1055,13 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
if (!vSolutions.empty())
|
||||
{
|
||||
vShootPos += vForward * vSolutions.front();
|
||||
out.m_flPitch = flPitch - (RAD2DEG(atan2(-vShootPos.z, vShootPos.x)) - flPitch);
|
||||
tOut.m_flPitch = flPitch - (RAD2DEG(atan2(-vShootPos.z, vShootPos.x)) - flPitch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
iTimeTo = int(out.m_flTime / TICK_INTERVAL) + 1;
|
||||
out.m_iCalculated = iTimeTo > iSimTime ? CalculatedEnum::Time : CalculatedEnum::Good;
|
||||
iTimeTo = int(tOut.m_flTime / TICK_INTERVAL) + 1;
|
||||
tOut.m_iCalculated = iTimeTo > iSimTime ? CalculatedEnum::Time : CalculatedEnum::Good;
|
||||
}
|
||||
|
||||
|
||||
@@ -1103,7 +1069,7 @@ void CAimbotProjectile::CalculateAngle(const Vec3& vLocalPos, const Vec3& vTarge
|
||||
bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Target_t& tTarget, Vec3& vPoint, Vec3& vAngles, int iSimTime, bool bSplash, bool* pHitSolid, std::vector<Vec3>* pProjectilePath)
|
||||
{
|
||||
int iFlags = ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::NoRandomAngles | ProjSimEnum::PredictCmdNum;
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
if (Vars::Visuals::Trajectory::Override.Value)
|
||||
{
|
||||
if (!Vars::Visuals::Trajectory::Pipes.Value)
|
||||
@@ -1156,7 +1122,7 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
|
||||
}
|
||||
F::ProjSim.SetupTrace(filter, nMask, pWeapon);
|
||||
|
||||
#ifdef SPLASH_DEBUG5
|
||||
#ifdef SPLASH_DEBUG4
|
||||
Vec3 vHull = tProjInfo.m_vHull.Max(1);
|
||||
G::BoxStorage.emplace_back(vPoint, vHull * -1, vHull, Vec3(), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 0), Color_t(0, 0, 0, 0));
|
||||
#endif
|
||||
@@ -1164,11 +1130,11 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
|
||||
if (!tProjInfo.m_flGravity)
|
||||
{
|
||||
SDK::TraceHull(tProjInfo.m_vPos, vPoint, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Nograv trace"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG5
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tProjInfo.m_vPos, vPoint), I::GlobalVars->curtime + 5.f, Color_t(0, 0, 0));
|
||||
#ifdef SPLASH_DEBUG4
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tProjInfo.m_vPos, trace.endpos), I::GlobalVars->curtime + 5.f, Color_t(0, 0, 0));
|
||||
#endif
|
||||
if (trace.fraction < 0.999f && trace.m_pEnt != tTarget.m_pEntity)
|
||||
return false;
|
||||
@@ -1194,12 +1160,11 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
|
||||
if (!bSplash)
|
||||
{
|
||||
SDK::TraceHull(vOld, vNew, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Direct trace"]++;
|
||||
#endif
|
||||
|
||||
#ifdef SPLASH_DEBUG5
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vOld, vNew), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 0));
|
||||
#ifdef SPLASH_DEBUG4
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vOld, trace.endpos), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 0));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
@@ -1211,11 +1176,11 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
|
||||
continue;
|
||||
|
||||
SDK::TraceHull(vStaticPos, vNew, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash trace"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG5
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vStaticPos, vNew), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 0));
|
||||
#ifdef SPLASH_DEBUG4
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vStaticPos, trace.endpos), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 0));
|
||||
#endif
|
||||
vStaticPos = vNew;
|
||||
}
|
||||
@@ -1232,8 +1197,11 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
|
||||
if (bValid && bSplash)
|
||||
{
|
||||
bValid = SDK::VisPosWorld(nullptr, tTarget.m_pEntity, trace.endpos, vPoint, nMask);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Splash vispos"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG4
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(trace.endpos, vPoint), I::GlobalVars->curtime + 5.f, Color_t(0, 0, 255));
|
||||
#endif
|
||||
if (bValid)
|
||||
{
|
||||
@@ -1249,13 +1217,16 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar
|
||||
CGameTrace eyeTrace = {};
|
||||
SDK::Trace(vFrom, tTarget.m_vPos + tTarget.m_pEntity->As<CTFPlayer>()->GetViewOffset(), MASK_SHOT, &filter, &eyeTrace);
|
||||
bValid = eyeTrace.fraction == 1.f;
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
s_mTraceCount["Eye trace"]++;
|
||||
#endif
|
||||
#ifdef SPLASH_DEBUG4
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vFrom, trace.endpos), I::GlobalVars->curtime + 5.f, Color_t(255, 0, 255));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SPLASH_DEBUG5
|
||||
#ifdef SPLASH_DEBUG4
|
||||
G::BoxStorage.pop_back();
|
||||
if (bValid)
|
||||
G::BoxStorage.emplace_back(vPoint, vHull * -1, vHull, Vec3(), I::GlobalVars->curtime + 5.f, Color_t(0, 255, 0), Color_t(0, 0, 0, 0));
|
||||
@@ -1397,7 +1368,7 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
|
||||
|
||||
auto mDirectPoints = iSplash == Vars::Aimbot::Projectile::SplashPredictionEnum::Only ? std::unordered_map<int, Vec3>() : GetDirectPoints(tTarget);
|
||||
auto vSpherePoints = !iSplash ? std::vector<std::pair<Vec3, int>>() : ComputeSphere(m_tInfo.m_flRadius + flSize, iPoints);
|
||||
#ifdef SPLASH_DEBUG4
|
||||
#ifdef SPLASH_DEBUG3
|
||||
for (auto& [vPoint, _] : vSpherePoints)
|
||||
G::BoxStorage.emplace_back(tTarget.m_pEntity->m_vecOrigin() + m_tInfo.m_vTargetEye + vPoint, Vec3(-1, -1, -1), Vec3(1, 1, 1), Vec3(), I::GlobalVars->curtime + 60.f, Color_t(0, 0, 0, 0), Vars::Colors::Local.Value);
|
||||
#endif
|
||||
@@ -1419,15 +1390,15 @@ int CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBas
|
||||
std::vector<Point_t> vSplashPoints = {};
|
||||
if (iSplash)
|
||||
{
|
||||
Solution_t solution; CalculateAngle(m_tInfo.m_vLocalEye, tTarget.m_vPos, i, solution, false);
|
||||
if (solution.m_iCalculated != CalculatedEnum::Bad)
|
||||
Solution_t tSolution; CalculateAngle(m_tInfo.m_vLocalEye, tTarget.m_vPos, i, tSolution, false);
|
||||
if (tSolution.m_iCalculated != CalculatedEnum::Bad)
|
||||
{
|
||||
bDirectBreaks = false;
|
||||
|
||||
const float flTimeTo = solution.m_flTime - TICKS_TO_TIME(i);
|
||||
const float flTimeTo = tSolution.m_flTime - TICKS_TO_TIME(i);
|
||||
if (flTimeTo < m_tInfo.m_flBoundingTime)
|
||||
{
|
||||
static std::vector<std::pair<Vec3, Vec3>> vSimplePoints = {};
|
||||
static std::vector<Vec3> vSimplePoints = {};
|
||||
if (iMulti == Vars::Aimbot::Projectile::SplashModeEnum::Single)
|
||||
{
|
||||
SetupSplashPoints(tTarget, vSpherePoints, vSimplePoints);
|
||||
@@ -1758,10 +1729,10 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
if (!G::AimTarget.m_iEntIndex)
|
||||
G::AimTarget = { vTargets.front().m_pEntity->entindex(), I::GlobalVars->tickcount, 0 };
|
||||
|
||||
#if defined(SPLASH_DEBUG1) || defined(SPLASH_DEBUG2) || defined(SPLASH_DEBUG3) || defined(SPLASH_DEBUG5)
|
||||
#if defined(SPLASH_DEBUG1) || defined(SPLASH_DEBUG2) || defined(SPLASH_DEBUG4)
|
||||
G::LineStorage.clear();
|
||||
#endif
|
||||
#if defined(SPLASH_DEBUG1) || defined(SPLASH_DEBUG2) || defined(SPLASH_DEBUG3) || defined(SPLASH_DEBUG4) || defined(SPLASH_DEBUG5)
|
||||
#if defined(SPLASH_DEBUG1) || defined(SPLASH_DEBUG2) || defined(SPLASH_DEBUG3) || defined(SPLASH_DEBUG4)
|
||||
G::BoxStorage.clear();
|
||||
#endif
|
||||
for (auto& tTarget : vTargets)
|
||||
@@ -1885,7 +1856,7 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
void CAimbotProjectile::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd)
|
||||
{
|
||||
const bool bSuccess = RunMain(pLocal, pWeapon, pCmd);
|
||||
#ifdef SPLASH_DEBUG6
|
||||
#ifdef SPLASH_DEBUG5
|
||||
if (Vars::Aimbot::General::AimType.Value && !s_mTraceCount.empty())
|
||||
{
|
||||
int iTraceCount = 0;
|
||||
@@ -2136,7 +2107,7 @@ bool CAimbotProjectile::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBa
|
||||
const float flTimeTo = solution.m_flTime - TICKS_TO_TIME(i);
|
||||
if (flTimeTo < m_tInfo.m_flBoundingTime)
|
||||
{
|
||||
static std::vector<std::pair<Vec3, Vec3>> vSimplePoints = {};
|
||||
static std::vector<Vec3> vSimplePoints = {};
|
||||
if (iMulti == Vars::Aimbot::Projectile::SplashModeEnum::Single)
|
||||
{
|
||||
SetupSplashPoints(tTarget, vSpherePoints, vSimplePoints);
|
||||
|
||||
@@ -48,10 +48,10 @@ class CAimbotProjectile
|
||||
private:
|
||||
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);
|
||||
std::vector<Point_t> GetSplashPointsSimple(Target_t& tTarget, std::vector<std::pair<Vec3, Vec3>>& vSpherePoints, int iSimTime);
|
||||
void SetupSplashPoints(Target_t& tTarget, std::vector<std::pair<Vec3, int>>& vSpherePoints, std::vector<Vec3>& vSimplePoints);
|
||||
std::vector<Point_t> GetSplashPointsSimple(Target_t& tTarget, std::vector<Vec3>& vSpherePoints, int iSimTime);
|
||||
|
||||
void CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, int iSimTime, Solution_t& out, bool bAccuracy = true);
|
||||
void CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, int iSimTime, Solution_t& tOut, bool bAccuracy = true);
|
||||
bool TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Target_t& tTarget, Vec3& vPoint, Vec3& vAngles, int iSimTime, bool bSplash, bool* pHitSolid = nullptr, std::vector<Vec3>* pProjectilePath = nullptr);
|
||||
|
||||
int CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, bool bVisuals = true);
|
||||
@@ -75,7 +75,7 @@ private:
|
||||
public:
|
||||
void Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd);
|
||||
float GetSplashRadius(CTFWeaponBase* pWeapon, CTFPlayer* pPlayer);
|
||||
|
||||
|
||||
bool AutoAirblast(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, CBaseEntity* pProjectile);
|
||||
float GetSplashRadius(CBaseEntity* pProjectile, CTFWeaponBase* pWeapon = nullptr, CTFPlayer* pPlayer = nullptr, float flScale = 1.f, CTFWeaponBase* pAirblast = nullptr);
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static inline bool GetRadius(EntityEnum::EntityEnum iGroup, CBaseEntity* pProjec
|
||||
if (!pPipebomb->m_flCreationTime() || I::GlobalVars->curtime < pPipebomb->m_flCreationTime() + SDK::AttribHookValue(0.8f, "sticky_arm_time", pWeapon))
|
||||
return false;
|
||||
|
||||
flRadius *= 146.f;
|
||||
flRadius *= TF_ROCKET_RADIUS;
|
||||
if (!pPipebomb->m_bTouched())
|
||||
{
|
||||
static auto tf_grenadelauncher_livetime = H::ConVars.FindVar("tf_grenadelauncher_livetime");
|
||||
@@ -58,7 +58,7 @@ static inline bool GetRadius(EntityEnum::EntityEnum iGroup, CBaseEntity* pProjec
|
||||
}
|
||||
}
|
||||
else
|
||||
flRadius *= 110.f;
|
||||
flRadius *= TF_FLARE_DET_RADIUS;
|
||||
flRadius = SDK::AttribHookValue(flRadius, "mult_explosion_radius", pWeapon);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -72,10 +72,9 @@ bool CAutoRocketJump::SetAngles(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
Vec3 vShootPos = (tProjInfo.m_vPos - vLocalPos).To2D();
|
||||
Vec3 vTarget = vPoint - vLocalPos;
|
||||
Vec3 vForward; Math::AngleVectors(tProjInfo.m_vAng, &vForward); vForward.Normalize2D();
|
||||
float flA = 1.f;
|
||||
float flB = 2 * (vShootPos.x * vForward.x + vShootPos.y * vForward.y);
|
||||
float flC = vShootPos.Length2DSqr() - vTarget.Length2DSqr();
|
||||
auto vSolutions = Math::SolveQuadratic(flA, flB, flC);
|
||||
auto vSolutions = Math::SolveQuadratic(1.f, flB, flC);
|
||||
if (!vSolutions.empty())
|
||||
{
|
||||
vShootPos += vForward * vSolutions.front();
|
||||
@@ -88,10 +87,9 @@ bool CAutoRocketJump::SetAngles(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
|
||||
Vec3 vShootPos = Math::RotatePoint(tProjInfo.m_vPos - vLocalPos, {}, { 0, -flYaw, 0 }); vShootPos.y = 0;
|
||||
Vec3 vTarget = Math::RotatePoint(vPoint - vLocalPos, {}, { 0, -flYaw, 0 });
|
||||
Vec3 vForward; Math::AngleVectors(tProjInfo.m_vAng - Vec3(0, flYaw, 0), &vForward); vForward.y = 0; vForward.Normalize();
|
||||
float flA = 1.f;
|
||||
float flB = 2 * (vShootPos.x * vForward.x + vShootPos.z * vForward.z);
|
||||
float flC = (powf(vShootPos.x, 2) + powf(vShootPos.z, 2)) - (powf(vTarget.x, 2) + powf(vTarget.z, 2));
|
||||
auto vSolutions = Math::SolveQuadratic(flA, flB, flC);
|
||||
auto vSolutions = Math::SolveQuadratic(1.f, flB, flC);
|
||||
if (!vSolutions.empty())
|
||||
{
|
||||
vShootPos += vForward * vSolutions.front();
|
||||
@@ -120,7 +118,7 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
return;
|
||||
}
|
||||
|
||||
bool bValidWeapon = false;
|
||||
bool bValidWeapon = false, bBeggars = pWeapon->m_iItemDefinitionIndex() == Soldier_m_TheBeggarsBazooka;
|
||||
{
|
||||
switch (pWeapon->GetWeaponID())
|
||||
{
|
||||
@@ -137,7 +135,7 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
else if (Vars::Misc::Movement::AutoRocketJump.Value || Vars::Misc::Movement::AutoCTap.Value)
|
||||
pCmd->buttons &= ~IN_ATTACK2; // fix for retarded issue
|
||||
|
||||
if (m_iFrame == -1 && (pWeapon->m_iItemDefinitionIndex() == Soldier_m_TheBeggarsBazooka ? G::Attacking == 1 : G::CanPrimaryAttack || G::Reloading)
|
||||
if (m_iFrame == -1 && (bCurrGrounded && bBeggars ? G::Attacking == 1 : G::CanPrimaryAttack || G::Reloading)
|
||||
&& SetAngles(pLocal, pWeapon, pCmd))
|
||||
{
|
||||
bool bWillHit = false;
|
||||
@@ -151,10 +149,14 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
if (bMoveSimSetup && bProjSimSetup)
|
||||
{
|
||||
Vec3 vOriginal = F::ProjSim.GetOrigin();
|
||||
int iSkip = bCurrGrounded ? Vars::Misc::Movement::AutoRocketJumpSkipGround.Value : Vars::Misc::Movement::AutoRocketJumpSkipAir.Value;
|
||||
for (int n = 1; n < 10; n++)
|
||||
{
|
||||
Vec3 Old = F::ProjSim.GetOrigin();
|
||||
F::MoveSim.RunTick(tStorage);
|
||||
if (n <= iSkip)
|
||||
continue;
|
||||
|
||||
Vec3 Old = F::ProjSim.GetOrigin();
|
||||
F::ProjSim.RunTick(tProjInfo);
|
||||
Vec3 New = F::ProjSim.GetOrigin();
|
||||
|
||||
@@ -174,21 +176,26 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
Vec3 vPos; pLocal->m_Collision()->CalcNearestPoint(vPoint, &vPos);
|
||||
pLocal->SetAbsOrigin(vOriginal);
|
||||
|
||||
return vPoint.DistTo(vPos) < 120.f && SDK::VisPosWorld(pLocal, pLocal, vPoint, vOrigin + pLocal->m_vecViewOffset(), MASK_SHOT);
|
||||
return vPoint.DistTo(vPos) < TF_ROCKET_RADIUS_FOR_RJS && SDK::VisPosWorld(pLocal, pLocal, vPoint, vOrigin + pLocal->m_vecViewOffset(), MASK_SHOT);
|
||||
};
|
||||
|
||||
bWillHit = WillHit(pLocal, tStorage.m_MoveData.m_vecAbsOrigin, trace.endpos + trace.plane.normal);
|
||||
m_iDelay = std::max(n + (n > Vars::Misc::Movement::ApplyAbove.Value ? Vars::Misc::Movement::TimingOffset.Value : 0), 0);
|
||||
|
||||
if (bWillHit && G::CanPrimaryAttack)
|
||||
if (bWillHit)
|
||||
{
|
||||
SDK::Output("Auto jump", std::format("Ticks to hit: {} ({})", m_iDelay, n).c_str(), { 255, 0, 0 }, Vars::Debug::Logging.Value);
|
||||
if (Vars::Debug::Info.Value)
|
||||
m_iDelay = n;
|
||||
if (Vars::Misc::Movement::AutoRocketJumpTimingOffset.Value && n > Vars::Misc::Movement::AutoRocketJumpApplyAbove.Value)
|
||||
m_iDelay = std::max(m_iDelay + Vars::Misc::Movement::AutoRocketJumpTimingOffset.Value, 0);
|
||||
|
||||
if (G::CanPrimaryAttack)
|
||||
{
|
||||
//G::LineStorage.clear(); G::BoxStorage.clear();
|
||||
Vec3 vAngles = Math::VectorAngles(trace.plane.normal);
|
||||
G::BoxStorage.emplace_back(trace.endpos + trace.plane.normal, Vec3(-1.f, -1.f, -1.f), Vec3(1.f, 1.f, 1.f), vAngles, I::GlobalVars->curtime + 5.f, Color_t(), Color_t(0, 0, 0, 0), true);
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tStorage.m_MoveData.m_vecAbsOrigin + pLocal->m_vecViewOffset(), trace.endpos + trace.plane.normal), I::GlobalVars->curtime + 5.f, Color_t(), true);
|
||||
SDK::Output("Auto jump", std::format("Ticks to hit: {} ({})", m_iDelay, n).c_str(), { 255, 0, 0 }, Vars::Debug::Logging.Value);
|
||||
if (Vars::Debug::Info.Value)
|
||||
{
|
||||
//G::LineStorage.clear(); G::BoxStorage.clear();
|
||||
Vec3 vAngles = Math::VectorAngles(trace.plane.normal);
|
||||
G::BoxStorage.emplace_back(trace.endpos + trace.plane.normal, Vec3(-1.f, -1.f, -1.f), Vec3(1.f, 1.f, 1.f), vAngles, I::GlobalVars->curtime + 5.f, Color_t(), Color_t(0, 0, 0, 0), true);
|
||||
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tStorage.m_MoveData.m_vecAbsOrigin + pLocal->m_vecViewOffset(), trace.endpos + trace.plane.normal), I::GlobalVars->curtime + 5.f, Color_t(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,30 +213,24 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
if (bWillHit)
|
||||
{
|
||||
if (bCurrGrounded && bCurrGrounded == bLastGrounded)
|
||||
{
|
||||
if (Vars::Misc::Movement::AutoRocketJump.Value || Vars::Misc::Movement::AutoCTap.Value)
|
||||
m_iFrame = 0;
|
||||
if (Vars::Misc::Movement::AutoRocketJump.Value)
|
||||
m_bFull = true;
|
||||
}
|
||||
m_iFrame = 0;
|
||||
else if (!bCurrGrounded)
|
||||
{
|
||||
if (pWeapon->m_iItemDefinitionIndex() != Soldier_m_TheBeggarsBazooka)
|
||||
pCmd->buttons |= IN_ATTACK;
|
||||
m_iFrame = m_iDelay = 0;
|
||||
|
||||
if (Vars::Misc::Movement::AutoRocketJump.Value && G::CanPrimaryAttack)
|
||||
if (m_iFrame != -1)
|
||||
{
|
||||
m_bFull = Vars::Misc::Movement::AutoRocketJump.Value;
|
||||
m_iChoke = bCurrGrounded ? Vars::Misc::Movement::AutoRocketJumpChokeGrounded.Value : Vars::Misc::Movement::AutoRocketJumpChokeAir.Value;
|
||||
|
||||
if (G::Reloading)
|
||||
{
|
||||
G::SilentAngles = true;
|
||||
pCmd->viewangles = m_vAngles;
|
||||
m_iFrame = -1;
|
||||
if (!bBeggars)
|
||||
pCmd->buttons |= IN_ATTACK;
|
||||
else
|
||||
pCmd->buttons &= ~IN_ATTACK;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_iFrame != -1 && G::Reloading)
|
||||
{
|
||||
m_iFrame = -1;
|
||||
m_bFull = false;
|
||||
pCmd->buttons |= IN_ATTACK;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_iFrame == -1 && pWeapon->GetWeaponID() == TF_WEAPON_PARTICLE_CANNON && G::OriginalCmd.buttons & IN_ATTACK2)
|
||||
@@ -243,7 +244,7 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
|
||||
if (m_iFrame == 1)
|
||||
{
|
||||
if (pWeapon->m_iItemDefinitionIndex() != Soldier_m_TheBeggarsBazooka)
|
||||
if (!bBeggars)
|
||||
pCmd->buttons |= IN_ATTACK;
|
||||
|
||||
if (m_bFull)
|
||||
@@ -253,7 +254,7 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
}
|
||||
}
|
||||
|
||||
if (m_iFrame <= Vars::Misc::Movement::ChokeCount.Value)
|
||||
if (m_iFrame <= m_iChoke)
|
||||
G::PSilentAngles = true, G::SilentAngles = false; // only con to this is that you may not be able to choke depending on the ticks charged
|
||||
|
||||
if (m_iDelay > 1)
|
||||
@@ -271,10 +272,7 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
|
||||
pCmd->buttons |= IN_DUCK | IN_JUMP;
|
||||
|
||||
if (m_iFrame == m_iDelay + 3)
|
||||
{
|
||||
m_iFrame = -1;
|
||||
m_bFull = false;
|
||||
}
|
||||
}
|
||||
|
||||
m_bRunning = m_iFrame != -1; // prevent stuff like antiaim messing with timing
|
||||
|
||||
@@ -10,6 +10,7 @@ private:
|
||||
bool m_bFull = false;
|
||||
int m_iFrame = -1;
|
||||
int m_iDelay = 0;
|
||||
int m_iChoke = 0;
|
||||
bool m_bRunning = false;
|
||||
|
||||
public:
|
||||
|
||||
@@ -38,7 +38,7 @@ void CEnginePrediction::Simulate(CTFPlayer* pLocal, CUserCmd* pCmd)
|
||||
|
||||
I::MoveHelper->SetHost(pLocal);
|
||||
pLocal->m_pCurrentCommand() = pCmd;
|
||||
*G::RandomSeed() = MD5_PseudoRandom(pCmd->command_number) & std::numeric_limits<int>::max();
|
||||
G::RandomSeed() = MD5_PseudoRandom(pCmd->command_number) & std::numeric_limits<int>::max();
|
||||
|
||||
I::Prediction->m_bFirstTimePredicted = false;
|
||||
I::Prediction->m_bInPrediction = true;
|
||||
@@ -52,7 +52,7 @@ void CEnginePrediction::Simulate(CTFPlayer* pLocal, CUserCmd* pCmd)
|
||||
|
||||
I::MoveHelper->SetHost(nullptr);
|
||||
pLocal->m_pCurrentCommand() = nullptr;
|
||||
*G::RandomSeed() = -1;
|
||||
G::RandomSeed() = -1;
|
||||
|
||||
pLocal->m_nTickBase() = nOldTickBase;
|
||||
I::Prediction->m_bFirstTimePredicted = bOldIsFirstPrediction;
|
||||
|
||||
@@ -1028,9 +1028,12 @@ void CMenu::MenuMisc(int iTab)
|
||||
{
|
||||
if (Section("##Debug"))
|
||||
{
|
||||
FSlider(Vars::Misc::Movement::TimingOffset);
|
||||
FSlider(Vars::Misc::Movement::ChokeCount);
|
||||
FSlider(Vars::Misc::Movement::ApplyAbove);
|
||||
FSlider(Vars::Misc::Movement::AutoRocketJumpChokeGrounded, FToggleEnum::Left);
|
||||
FSlider(Vars::Misc::Movement::AutoRocketJumpChokeAir, FToggleEnum::Right);
|
||||
FSlider(Vars::Misc::Movement::AutoRocketJumpSkipGround, FToggleEnum::Left);
|
||||
FSlider(Vars::Misc::Movement::AutoRocketJumpSkipAir, FToggleEnum::Right);
|
||||
FSlider(Vars::Misc::Movement::AutoRocketJumpTimingOffset, FToggleEnum::Left);
|
||||
FSlider(Vars::Misc::Movement::AutoRocketJumpApplyAbove, FToggleEnum::Right);
|
||||
} EndSection();
|
||||
}
|
||||
if (Section("Automation"))
|
||||
|
||||
@@ -285,7 +285,7 @@ bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeap
|
||||
|
||||
bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, Vec3 vAngles, ProjectileInfo& tProjInfo, int iFlags, float flAutoCharge)
|
||||
{
|
||||
bool InitCheck = iFlags & ProjSimEnum::InitCheck;
|
||||
bool bInitCheck = iFlags & ProjSimEnum::InitCheck;
|
||||
bool bQuick = iFlags & ProjSimEnum::Quick;
|
||||
|
||||
const float flOldCurrentTime = I::GlobalVars->curtime;
|
||||
@@ -294,7 +294,7 @@ bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon,
|
||||
I::GlobalVars->curtime = flOldCurrentTime;
|
||||
tProjInfo.m_iFlags = iFlags;
|
||||
|
||||
if (!bReturn || !InitCheck)
|
||||
if (!bReturn || !bInitCheck)
|
||||
return bReturn;
|
||||
|
||||
CGameTrace trace = {};
|
||||
@@ -305,7 +305,9 @@ bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon,
|
||||
Vec3 vEnd = tProjInfo.m_vPos;
|
||||
|
||||
SDK::TraceHull(vStart, vEnd, tProjInfo.m_vHull * -1.f, tProjInfo.m_vHull, MASK_SOLID, &filter, &trace);
|
||||
return !trace.DidHit();
|
||||
tProjInfo.m_vPos = trace.endpos;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CProjectileSimulation::GetInfo(CBaseEntity* pProjectile, ProjectileInfo& tProjInfo)
|
||||
|
||||
@@ -7,13 +7,13 @@ void CSpectate::NetUpdateEnd(CTFPlayer* pLocal)
|
||||
|
||||
m_iTarget = m_iIntendedTarget;
|
||||
CTFPlayer* pEntity = nullptr;
|
||||
if (m_iTarget != -1)
|
||||
if (HasTarget())
|
||||
{
|
||||
pEntity = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(m_iTarget))->As<CTFPlayer>();
|
||||
if (pEntity == pLocal)
|
||||
m_iTarget = m_iIntendedTarget = -1;
|
||||
}
|
||||
if (m_iTarget == -1)
|
||||
if (!HasTarget())
|
||||
{
|
||||
if (pLocal->IsAlive() && pLocal->m_hObserverTarget())
|
||||
{
|
||||
@@ -46,7 +46,7 @@ void CSpectate::NetUpdateEnd(CTFPlayer* pLocal)
|
||||
|
||||
void CSpectate::NetUpdateStart(CTFPlayer* pLocal)
|
||||
{
|
||||
if (!pLocal || m_iTarget == -1)
|
||||
if (!pLocal || !HasTarget())
|
||||
return;
|
||||
|
||||
pLocal->m_hObserverTarget().Set(m_hOriginalTarget);
|
||||
@@ -61,15 +61,15 @@ void CSpectate::CreateMove(CUserCmd* pCmd)
|
||||
|
||||
static bool bStaticView = false;
|
||||
const bool bLastView = bStaticView;
|
||||
const bool bCurrView = bStaticView = m_iTarget != -1;
|
||||
if (!bCurrView)
|
||||
{
|
||||
if (bLastView)
|
||||
I::EngineClient->SetViewAngles(m_vOldView);
|
||||
const bool bCurrView = bStaticView = HasTarget();
|
||||
if (!bCurrView && !bLastView)
|
||||
m_vOldView = pCmd->viewangles;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!bCurrView)
|
||||
I::EngineClient->SetViewAngles(m_vOldView);
|
||||
pCmd->viewangles = m_vOldView;
|
||||
}
|
||||
}
|
||||
|
||||
void CSpectate::SetTarget(int iTarget)
|
||||
|
||||
@@ -9,6 +9,8 @@ public:
|
||||
void CreateMove(CUserCmd* pCmd);
|
||||
void SetTarget(int iTarget);
|
||||
|
||||
inline bool HasTarget() { return m_iTarget != -1; }
|
||||
|
||||
int m_iTarget = -1;
|
||||
int m_iIntendedTarget = -1;
|
||||
Vec3 m_vOldView = {}; // don't let spectating change viewangles
|
||||
|
||||
@@ -16,7 +16,7 @@ static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* p
|
||||
|
||||
int iObserverTarget = pLocal->m_hObserverTarget().GetEntryIndex();
|
||||
int iObserverMode = pLocal->m_iObserverMode();
|
||||
if (F::Spectate.m_iTarget != -1)
|
||||
if (F::Spectate.HasTarget())
|
||||
{
|
||||
iObserverTarget = F::Spectate.m_hTargetTarget.GetEntryIndex();
|
||||
iObserverMode = F::Spectate.m_iTargetMode;
|
||||
|
||||
@@ -36,12 +36,12 @@ bool CSpectatorList::GetSpectators(CTFPlayer* pTarget)
|
||||
|
||||
int iObserverTarget = !pPlayer->IsDormant() ? pPlayer->m_hObserverTarget().GetEntryIndex() : iTarget;
|
||||
int iObserverMode = pPlayer->m_iObserverMode();
|
||||
if (bLocal && F::Spectate.m_iTarget != -1)
|
||||
if (bLocal && F::Spectate.HasTarget())
|
||||
{
|
||||
iObserverTarget = F::Spectate.m_hOriginalTarget.GetEntryIndex();
|
||||
iObserverMode = F::Spectate.m_iOriginalMode;
|
||||
}
|
||||
if (iObserverTarget != iTarget || bLocal && !I::EngineClient->IsPlayingDemo() && F::Spectate.m_iTarget == -1)
|
||||
if (iObserverTarget != iTarget || bLocal && !I::EngineClient->IsPlayingDemo() && !F::Spectate.HasTarget())
|
||||
{
|
||||
if (m_mRespawnCache.contains(n))
|
||||
m_mRespawnCache.erase(n);
|
||||
|
||||
@@ -51,7 +51,7 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
|
||||
|
||||
Vec3 vAngles = bQuick ? I::EngineClient->GetViewAngles() : G::CurrentUserCmd->viewangles;
|
||||
int iFlags = bQuick ? ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::Quick : ProjSimEnum::Trace | ProjSimEnum::InitCheck;
|
||||
if (bQuick && F::Spectate.m_iTarget != -1)
|
||||
if (bQuick && F::Spectate.HasTarget())
|
||||
{
|
||||
pPlayer = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget))->As<CTFPlayer>();
|
||||
if (!pPlayer || pPlayer->IsDormant())
|
||||
@@ -111,20 +111,20 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
|
||||
case TF_WEAPON_ROCKETLAUNCHER_DIRECTHIT:
|
||||
case TF_WEAPON_PARTICLE_CANNON:
|
||||
if (Vars::Visuals::Simulation::SplashRadius.Value & Vars::Visuals::Simulation::SplashRadiusEnum::Rockets)
|
||||
flRadius = 146.f;
|
||||
flRadius = TF_ROCKET_RADIUS;
|
||||
break;
|
||||
case TF_WEAPON_PIPEBOMBLAUNCHER:
|
||||
if (Vars::Visuals::Simulation::SplashRadius.Value & Vars::Visuals::Simulation::SplashRadiusEnum::Stickies)
|
||||
flRadius = 146.f;
|
||||
flRadius = TF_ROCKET_RADIUS;
|
||||
break;
|
||||
case TF_WEAPON_GRENADELAUNCHER:
|
||||
if (Vars::Visuals::Simulation::SplashRadius.Value & Vars::Visuals::Simulation::SplashRadiusEnum::Pipes)
|
||||
flRadius = 146.f;
|
||||
flRadius = TF_ROCKET_RADIUS;
|
||||
break;
|
||||
case TF_WEAPON_FLAREGUN:
|
||||
case TF_WEAPON_FLAREGUN_REVENGE:
|
||||
if (Vars::Visuals::Simulation::SplashRadius.Value & Vars::Visuals::Simulation::SplashRadiusEnum::ScorchShot && pWeapon->As<CTFFlareGun>()->GetFlareGunType() == FLAREGUN_SCORCHSHOT)
|
||||
flRadius = 110.f;
|
||||
flRadius = TF_FLARE_DET_RADIUS;
|
||||
}
|
||||
|
||||
if (flRadius)
|
||||
@@ -648,8 +648,8 @@ MAKE_HOOK(NDebugOverlay_BoxAngles, S::NDebugOverlay_BoxAngles(), void,
|
||||
|
||||
if (s_bBoxesHeadOnly)
|
||||
{
|
||||
const auto dwDesired = S::CBaseAnimating_DrawServerHitboxes_BoxAngles_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CBaseAnimating_DrawServerHitboxes_BoxAngles_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && (r != 255 || g != 127 || b != 127))
|
||||
return;
|
||||
@@ -712,7 +712,7 @@ void CVisuals::FOV(CTFPlayer* pLocal, CViewSetup* pView)
|
||||
|
||||
void CVisuals::ThirdPerson(CTFPlayer* pLocal, CViewSetup* pView)
|
||||
{
|
||||
if (!pLocal->IsAlive() || F::Spectate.m_iTarget != -1)
|
||||
if (!pLocal->IsAlive() || F::Spectate.HasTarget())
|
||||
return I::Input->CAM_ToFirstPerson();
|
||||
|
||||
const bool bForce = pLocal->IsTaunting() || pLocal->IsAGhost() || pLocal->InCond(TF_COND_HALLOWEEN_KART) || pLocal->InCond(TF_COND_STUNNED) && pLocal->m_iStunFlags() & (TF_STUN_CONTROLS | TF_STUN_LOSER_STATE);
|
||||
|
||||
@@ -12,12 +12,12 @@ MAKE_HOOK(CAttributeManager_AttribHookInt, S::CAttributeManager_AttribHookInt(),
|
||||
int value, const char* name, void* econent, void* buffer, bool isGlobalConstString)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CAttributeManager_AttribHookValue[DEFAULT_BIND])
|
||||
if (!Vars::Hooks::CAttributeManager_AttribHookInt[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(value, name, econent, buffer, isGlobalConstString);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFPlayer_FireEvent_AttribHookValue_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFPlayer_FireEvent_AttribHookValue_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::Effects::SpellFootsteps.Value
|
||||
&& econent == H::Entities.GetLocal() && FNV1A::Hash32(name) == FNV1A::Hash32Const("halloween_footstep_type"))
|
||||
|
||||
@@ -62,8 +62,8 @@ MAKE_HOOK(CBaseEntity_SetAbsVelocity, S::CBaseEntity_SetAbsVelocity(), void,
|
||||
return CALL_ORIGINAL(rcx, vecAbsVelocity);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CBasePlayer_PostDataUpdate_SetAbsVelocity_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CBasePlayer_PostDataUpdate_SetAbsVelocity_Call();
|
||||
|
||||
if (dwRetAddr != dwDesired)
|
||||
return CALL_ORIGINAL(rcx, vecAbsVelocity);
|
||||
|
||||
@@ -12,8 +12,8 @@ MAKE_HOOK(CBaseEntity_WorldSpaceCenter, S::CBaseEntity_WorldSpaceCenter(), const
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CDamageAccountPanel_DisplayDamageFeedback_WorldSpaceCenter_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CDamageAccountPanel_DisplayDamageFeedback_WorldSpaceCenter_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::Effects::DrawDamageNumbersThroughWalls.Value)
|
||||
return S::MainViewOrigin.Call<const Vec3&>();
|
||||
|
||||
@@ -24,7 +24,7 @@ MAKE_HOOK(CBaseHudChatLine_InsertAndColorizeText, S::CBaseHudChatLine_InsertAndC
|
||||
if (const char* sReplace = F::PlayerUtils.GetPlayerName(clientIndex, nullptr, &iType))
|
||||
{
|
||||
if (iFind != std::string::npos)
|
||||
sMessage = sMessage.replace(std::max(iFind - 1, 0ui64), strlen(sName) + 1, std::format("\x3{}\x1", sReplace));
|
||||
sMessage = sMessage.replace(std::max(int(iFind) - 1, 0), strlen(sName) + 1, std::format("\x3{}\x1", sReplace));
|
||||
sName = sReplace;
|
||||
}
|
||||
|
||||
@@ -45,9 +45,9 @@ MAKE_HOOK(CBaseHudChatLine_InsertAndColorizeText, S::CBaseHudChatLine_InsertAndC
|
||||
|
||||
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 && iType == NameTypeEnum::None)
|
||||
sMessage = sMessage.replace(std::max(int(iFind) - 1, 0), strlen(sName) + 1, std::format("\x3{}\x1", sName));
|
||||
sMessage.insert(0, std::format("{}[{}] ", cColor, sTag));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ MAKE_HOOK(CBasePlayer_CalcObserverView, S::CBasePlayer_CalcObserverView(), void,
|
||||
return CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles, fov);
|
||||
#endif
|
||||
|
||||
if (F::Spectate.m_iTarget == -1)
|
||||
if (!F::Spectate.HasTarget())
|
||||
return CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles, fov);
|
||||
|
||||
auto pPlayer = reinterpret_cast<CBasePlayer*>(rcx);
|
||||
|
||||
@@ -12,7 +12,7 @@ MAKE_HOOK(CBasePlayer_CalcView, S::CBasePlayer_CalcView(), void,
|
||||
return CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles, zNear, zFar, fov);
|
||||
#endif
|
||||
|
||||
if (!Vars::Visuals::Removals::ViewPunch.Value && F::Spectate.m_iTarget == -1)
|
||||
if (!Vars::Visuals::Removals::ViewPunch.Value && !F::Spectate.HasTarget())
|
||||
return CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles, zNear, zFar, fov);
|
||||
|
||||
auto pPlayer = reinterpret_cast<CBasePlayer*>(rcx);
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
#include "../SDK/SDK.h"
|
||||
|
||||
MAKE_SIGNATURE(CBasePlayer_CalcViewModelView, "client.dll", "48 89 74 24 ? 55 41 56 41 57 48 8D AC 24", 0x0);
|
||||
MAKE_SIGNATURE(CBaseViewModel_CalcViewModelView, "client.dll", "48 89 74 24 ? 55 41 56 41 57 48 8D AC 24", 0x0);
|
||||
MAKE_SIGNATURE(CBasePlayer_CalcViewModelView, "client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 49 8B F0 48 8B EA 48 8B F9 33 DB", 0x0);
|
||||
|
||||
MAKE_HOOK(CBasePlayer_CalcViewModelView, S::CBasePlayer_CalcViewModelView(), void,
|
||||
void* rcx, CBaseEntity* pOwner, /*const*/ Vec3& vEyePosition, Vec3& vEyeAngles)
|
||||
MAKE_HOOK(CBaseViewModel_CalcViewModelView, S::CBaseViewModel_CalcViewModelView(), void,
|
||||
void* rcx, CBasePlayer* owner, /*const*/ Vector& eyePosition, /*const*/ QAngle& eyeAngles)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CBasePlayer_CalcViewModelView[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, pOwner, vEyePosition, vEyeAngles);
|
||||
if (!Vars::Hooks::CBaseViewModel_CalcViewModelView[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, owner, eyePosition, eyeAngles);
|
||||
#endif
|
||||
|
||||
Vec3 vOffset = { Vars::Visuals::Viewmodel::OffsetX.Value, Vars::Visuals::Viewmodel::OffsetY.Value, Vars::Visuals::Viewmodel::OffsetZ.Value };
|
||||
bool bOffset = !vOffset.IsZero();
|
||||
|
||||
if (!Vars::Visuals::Viewmodel::ViewmodelAim.Value && !bOffset && !Vars::Visuals::Viewmodel::Roll.Value || SDK::CleanScreenshot())
|
||||
return CALL_ORIGINAL(rcx, pOwner, vEyePosition, vEyeAngles);
|
||||
Vec3 vAngles = { Vars::Visuals::Viewmodel::Pitch.Value, Vars::Visuals::Viewmodel::Yaw.Value, Vars::Visuals::Viewmodel::Roll.Value };
|
||||
if (!Vars::Visuals::Viewmodel::ViewmodelAim.Value && vOffset.IsZero() && vAngles.IsZero() || SDK::CleanScreenshot())
|
||||
return CALL_ORIGINAL(rcx, owner, eyePosition, eyeAngles);
|
||||
|
||||
bool bFlip = G::FlipViewmodels;
|
||||
|
||||
@@ -23,26 +23,39 @@ MAKE_HOOK(CBasePlayer_CalcViewModelView, S::CBasePlayer_CalcViewModelView(), voi
|
||||
auto pLocal = H::Entities.GetLocal();
|
||||
if (pLocal && pLocal->IsAlive() && G::AimPoint.m_iTickCount)
|
||||
{
|
||||
Vec3 vDiff = I::EngineClient->GetViewAngles() - Math::CalcAngle(vEyePosition, G::AimPoint.m_vOrigin);
|
||||
Vec3 vDiff = I::EngineClient->GetViewAngles() - Math::CalcAngle(eyePosition, G::AimPoint.m_vOrigin);
|
||||
if (bFlip)
|
||||
vDiff.y *= -1;
|
||||
vEyeAngles = I::EngineClient->GetViewAngles() - vDiff;
|
||||
eyeAngles = I::EngineClient->GetViewAngles() - vDiff;
|
||||
}
|
||||
}
|
||||
|
||||
if (bOffset)
|
||||
if (!vOffset.IsZero())
|
||||
{
|
||||
Vec3 vForward, vRight, vUp; Math::AngleVectors(vEyeAngles, &vForward, &vRight, &vUp);
|
||||
vEyePosition += vForward * vOffset.y;
|
||||
vEyePosition += vRight * vOffset.x * (bFlip ? -1 : 1);
|
||||
vEyePosition += vUp * vOffset.z;
|
||||
Vec3 vForward, vRight, vUp; Math::AngleVectors(eyeAngles, &vForward, &vRight, &vUp);
|
||||
eyePosition += vForward * vOffset.y;
|
||||
eyePosition += vRight * vOffset.x * (bFlip ? -1 : 1);
|
||||
eyePosition += vUp * vOffset.z;
|
||||
}
|
||||
if (Vars::Visuals::Viewmodel::Pitch.Value)
|
||||
vEyeAngles.x += Vars::Visuals::Viewmodel::Pitch.Value;
|
||||
if (Vars::Visuals::Viewmodel::Yaw.Value)
|
||||
vEyeAngles.y += Vars::Visuals::Viewmodel::Yaw.Value * (bFlip ? -1 : 1);
|
||||
if (Vars::Visuals::Viewmodel::Roll.Value)
|
||||
vEyeAngles.z += Vars::Visuals::Viewmodel::Roll.Value * (bFlip ? -1 : 1);
|
||||
if (vAngles.x)
|
||||
eyeAngles.x += vAngles.x;
|
||||
if (vAngles.y)
|
||||
eyeAngles.y += vAngles.y * (bFlip ? -1 : 1);
|
||||
if (vAngles.z)
|
||||
eyeAngles.z += vAngles.z * (bFlip ? -1 : 1);
|
||||
|
||||
CALL_ORIGINAL(rcx, pOwner, vEyePosition, vEyeAngles);
|
||||
CALL_ORIGINAL(rcx, owner, eyePosition, eyeAngles);
|
||||
}
|
||||
|
||||
MAKE_HOOK(CBasePlayer_CalcViewModelView, S::CBasePlayer_CalcViewModelView(), void,
|
||||
void* rcx, /*const*/ Vector& eyeOrigin, /*const*/ QAngle& eyeAngles)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CBasePlayer_CalcViewModelView[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles);
|
||||
#endif
|
||||
|
||||
Vector vOldEyeOrigin = eyeOrigin, vOldEyeAngles = eyeAngles;
|
||||
CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles);
|
||||
eyeOrigin = vOldEyeOrigin, eyeAngles = vOldEyeAngles;
|
||||
}
|
||||
@@ -15,7 +15,7 @@ MAKE_HOOK(CClientState_ProcessFixAngle, S::CClientState_ProcessFixAngle(), bool,
|
||||
if (Vars::Visuals::Removals::AngleForcing.Value)
|
||||
return false;
|
||||
|
||||
if (F::Spectate.m_iTarget != -1)
|
||||
if (F::Spectate.HasTarget())
|
||||
F::Spectate.m_vOldView = msg->m_Angle;
|
||||
|
||||
return CALL_ORIGINAL(rcx, msg);
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
#include "../SDK/SDK.h"
|
||||
|
||||
#include "../Features/Spectate/Spectate.h"
|
||||
|
||||
MAKE_SIGNATURE(CHLTVCamera_CalcView, "client.dll", "48 89 5C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 80 79 ? ? 4D 8B F9", 0x0);
|
||||
MAKE_SIGNATURE(CHLTVCamera_GetPrimaryTarget, "client.dll", "40 53 48 83 EC ? 48 8B D9 8B 49 ? 85 C9 7E ? E8 ? ? ? ? 48 85 C0 74 ? 48 8B 10 48 8B C8 48 83 C4 ? 5B 48 FF A2 ? ? ? ? 8B 53", 0x0);
|
||||
MAKE_SIGNATURE(CHLTVCamera_GetMode, "client.dll", "40 53 48 83 EC ? 48 8B D9 8B 49 ? 85 C9 7E ? E8 ? ? ? ? 48 85 C0 74 ? 48 8B 10 48 8B C8 48 83 C4 ? 5B 48 FF A2 ? ? ? ? 8B 43", 0x0);
|
||||
|
||||
MAKE_HOOK(CHLTVCamera_CalcView, S::CHLTVCamera_CalcView(), void,
|
||||
void* rcx, Vector& origin, QAngle& angles, float& fov)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CHLTVCamera_CalcView[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, origin, angles, fov);
|
||||
#endif
|
||||
|
||||
auto pHLTVCamera = reinterpret_cast<CHLTVCamera*>(rcx);
|
||||
|
||||
if (F::Spectate.HasTarget())
|
||||
pHLTVCamera->m_nCameraMode = Vars::Visuals::Thirdperson::Enabled.Value ? OBS_MODE_THIRDPERSON : OBS_MODE_FIRSTPERSON;
|
||||
|
||||
auto pEntity = I::ClientEntityList->GetClientEntity(pHLTVCamera->m_iTraget1)->As<CTFPlayer>();
|
||||
if (!pEntity)
|
||||
return CALL_ORIGINAL(rcx, origin, angles, fov);
|
||||
|
||||
auto pGameRules = I::TFGameRules();
|
||||
auto pViewVectors = pGameRules ? pGameRules->GetViewVectors() : nullptr;
|
||||
if (!pViewVectors)
|
||||
return CALL_ORIGINAL(rcx, origin, angles, fov);
|
||||
|
||||
Vec3 vOriginalOffset = pViewVectors->m_vView;
|
||||
pViewVectors->m_vView = pEntity->GetViewOffset(pHLTVCamera->m_iCameraMan <= 0);
|
||||
CALL_ORIGINAL(rcx, origin, angles, fov);
|
||||
pViewVectors->m_vView = vOriginalOffset;
|
||||
}
|
||||
|
||||
MAKE_HOOK(CHLTVCamera_GetPrimaryTarget, S::CHLTVCamera_GetPrimaryTarget(), CBaseEntity*,
|
||||
void* rcx)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CHLTVCamera_GetPrimaryTarget[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
auto pHLTVCamera = reinterpret_cast<CHLTVCamera*>(rcx);
|
||||
|
||||
if (F::Spectate.HasTarget())
|
||||
pHLTVCamera->m_iTraget1 = I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget), F::Spectate.m_iTarget = F::Spectate.m_iIntendedTarget = -1;
|
||||
|
||||
return CALL_ORIGINAL(rcx);
|
||||
}
|
||||
|
||||
MAKE_HOOK(CHLTVCamera_GetMode, S::CHLTVCamera_GetMode(), int,
|
||||
void* rcx)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CHLTVCamera_GetMode[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
auto pHLTVCamera = reinterpret_cast<CHLTVCamera*>(rcx);
|
||||
|
||||
if (F::Spectate.HasTarget())
|
||||
pHLTVCamera->m_nCameraMode = Vars::Visuals::Thirdperson::Enabled.Value ? OBS_MODE_THIRDPERSON : OBS_MODE_FIRSTPERSON;
|
||||
|
||||
return CALL_ORIGINAL(rcx);
|
||||
}
|
||||
@@ -17,10 +17,10 @@ MAKE_HOOK(CParticleProperty_Create_Name, S::CParticleProperty_Create_Name(), voi
|
||||
return CALL_ORIGINAL(rcx, pszParticleName, iAttachType, pszAttachmentName);
|
||||
#endif
|
||||
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwUpdateEffects1 = S::CWeaponMedigun_UpdateEffects_CreateName_Call1();
|
||||
const auto dwUpdateEffects2 = S::CWeaponMedigun_UpdateEffects_CreateName_Call2();
|
||||
const auto dwManageChargeEffect = S::CWeaponMedigun_ManageChargeEffect_CreateName_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
bool bUpdateEffects = dwRetAddr == dwUpdateEffects1 || dwRetAddr == dwUpdateEffects2, bManageChargeEffect = dwRetAddr == dwManageChargeEffect;
|
||||
if (bUpdateEffects || bManageChargeEffect)
|
||||
|
||||
@@ -36,8 +36,8 @@ MAKE_HOOK(CBasePlayer_EyePosition, S::CBasePlayer_EyePosition(), Vec3*,
|
||||
return CALL_ORIGINAL(rcx, rdx);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CSniperDot_GetRenderingPositions_EyePosition_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CSniperDot_GetRenderingPositions_EyePosition_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired)
|
||||
return &s_vEyePosition;
|
||||
@@ -53,8 +53,8 @@ MAKE_HOOK(CTFPlayer_EyeAngles, S::CTFPlayer_EyeAngles(), Vec3*,
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CSniperDot_GetRenderingPositions_EyeAngles_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CSniperDot_GetRenderingPositions_EyeAngles_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired)
|
||||
return &s_vEyeAngles;
|
||||
|
||||
@@ -124,8 +124,8 @@ MAKE_HOOK(SectionedListPanel_SetItemFgColor, S::SectionedListPanel_SetItemFgColo
|
||||
return CALL_ORIGINAL(rcx, itemID, color);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_UpdatePlayerList_SetItemFgColor_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_UpdatePlayerList_SetItemFgColor_Call();
|
||||
|
||||
if (dwDesired == dwRetAddr && Vars::Visuals::UI::ScoreboardColors.Value && !SDK::CleanScreenshot())
|
||||
SetScoreboardColor(s_iPlayerIndex, color);
|
||||
|
||||
@@ -39,8 +39,8 @@ MAKE_HOOK(CTFInventoryManager_GetItemInLoadoutForClass, S::CTFInventoryManager_G
|
||||
return CALL_ORIGINAL(rcx, iClass, iSlot, pID);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CEquipSlotItemSelectionPanel_UpdateModelPanelsForSelection_GetItemInLoadoutForClass_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CEquipSlotItemSelectionPanel_UpdateModelPanelsForSelection_GetItemInLoadoutForClass_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Misc::Exploits::EquipRegionUnlock.Value)
|
||||
return nullptr;
|
||||
|
||||
@@ -38,8 +38,8 @@ MAKE_HOOK(CTFPlayerPanel_GetTeam, S::CTFPlayerPanel_GetTeam(), int,
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFTeamStatusPlayerPanel_Update_GetTeam_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFTeamStatusPlayerPanel_Update_GetTeam_Call();
|
||||
|
||||
int iReturn = CALL_ORIGINAL(rcx);
|
||||
|
||||
@@ -68,8 +68,8 @@ MAKE_HOOK(vgui_Panel_SetBgColor, S::vgui_Panel_SetBgColor(), void,
|
||||
return CALL_ORIGINAL(rcx, color);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFTeamStatusPlayerPanel_Update_SetBgColor_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFTeamStatusPlayerPanel_Update_SetBgColor_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::UI::ScoreboardColors.Value && !SDK::CleanScreenshot())
|
||||
SetScoreboardColor(s_iPlayerIndex, color);
|
||||
|
||||
@@ -16,13 +16,13 @@ MAKE_HOOK(CTFPlayerShared_InCond, S::CTFPlayerShared_InCond(), bool,
|
||||
return CALL_ORIGINAL(rcx, nCond);
|
||||
#endif
|
||||
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwZoomPlayer = S::CTFPlayer_ShouldDraw_InCond_Call();
|
||||
const auto dwZoomWearable = S::CTFWearable_ShouldDraw_InCond_Call();
|
||||
const auto dwZoomHudScope = S::CHudScope_ShouldDraw_InCond_Call();
|
||||
const auto dwTaunt = S::CTFPlayer_CreateMove_InCondTaunt_Call();
|
||||
const auto dwKart1 = S::CTFPlayer_CreateMove_InCondKart_Call();
|
||||
const auto dwKart2 = S::CTFInput_ApplyMouse_InCond_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
auto GetOuter = [&rcx]() -> CBaseEntity*
|
||||
{
|
||||
|
||||
@@ -15,9 +15,9 @@ MAKE_HOOK(CTFPlayerShared_IsPlayerDominated, S::CTFPlayerShared_IsPlayerDominate
|
||||
return CALL_ORIGINAL(rcx, index);
|
||||
#endif
|
||||
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_UpdatePlayerList_IsPlayerDominated_Call();
|
||||
const auto dwJump = S::CTFClientScoreBoardDialog_UpdatePlayerList_Jump();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
bool bReturn = CALL_ORIGINAL(rcx, index);
|
||||
|
||||
@@ -35,9 +35,9 @@ MAKE_HOOK(KeyValues_SetInt, S::KeyValues_SetInt(), void,
|
||||
return CALL_ORIGINAL(rcx, keyName, value);
|
||||
#endif
|
||||
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_UpdatePlayerList_SetInt_Call();
|
||||
const auto dwJump = S::CTFClientScoreBoardDialog_UpdatePlayerList_Jump();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
CALL_ORIGINAL(rcx, keyName, value);
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ MAKE_HOOK(CTFPlayer_BRenderAsZombie, S::CTFPlayer_BRenderAsZombie(), bool,
|
||||
return CALL_ORIGINAL(rcx, bWeaponsCheck);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFRagdoll_CreateTFRagdoll_BRenderAsZombie_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFRagdoll_CreateTFRagdoll_BRenderAsZombie_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::Removals::Gibs.Value)
|
||||
return true;
|
||||
|
||||
@@ -11,8 +11,8 @@ MAKE_HOOK(CTFPlayer_IsPlayerClass, S::CTFPlayer_IsPlayerClass(), bool,
|
||||
return CALL_ORIGINAL(rcx, iClass);
|
||||
#endif
|
||||
|
||||
static const auto dwDesired = S::CDamageAccountPanel_DisplayDamageFeedback_IsPlayerClass_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
static const auto dwDesired = S::CDamageAccountPanel_DisplayDamageFeedback_IsPlayerClass_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Misc::Sound::HitsoundAlways.Value)
|
||||
return false;
|
||||
|
||||
@@ -19,7 +19,7 @@ MAKE_HOOK(CTFPlayer_ShouldDraw, S::CTFPlayer_ShouldDraw(), bool,
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
if (F::Spectate.m_iTarget != -1)
|
||||
if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV())
|
||||
{
|
||||
auto pLocal = H::Entities.GetLocal();
|
||||
auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget))->As<CTFPlayer>();
|
||||
@@ -40,14 +40,14 @@ MAKE_HOOK(CBasePlayer_ShouldDrawThisPlayer, S::CBasePlayer_ShouldDrawThisPlayer(
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
//const auto dwDesired = S::CTFWeaponBase_PostDataUpdate_ShouldDrawThisPlayer_Call();
|
||||
const auto dwUndesired = S::CBasePlayer_BuildFirstPersonMeathookTransformations_ShouldDrawThisPlayer_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
//if (dwRetAddr == dwDesired)
|
||||
// return false; // breaks thirdperson jigglebones?
|
||||
|
||||
if (F::Spectate.m_iTarget != -1)
|
||||
if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV())
|
||||
{
|
||||
if (dwRetAddr == dwUndesired)
|
||||
return false;
|
||||
@@ -71,13 +71,13 @@ MAKE_HOOK(CBasePlayer_ShouldDrawLocalPlayer, S::CBasePlayer_ShouldDrawLocalPlaye
|
||||
return CALL_ORIGINAL(/*rcx*/);
|
||||
#endif
|
||||
|
||||
//const auto dwDesired = S::CBaseCombatWeapon_CalcOverrideModelIndex_ShouldDrawLocalPlayer_Call();
|
||||
//const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
//const auto dwDesired = S::CBaseCombatWeapon_CalcOverrideModelIndex_ShouldDrawLocalPlayer_Call();
|
||||
|
||||
//if (dwRetAddr == dwDesired)
|
||||
// return false;
|
||||
|
||||
if (F::Spectate.m_iTarget != -1)
|
||||
if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV())
|
||||
{
|
||||
auto pLocal = H::Entities.GetLocal();
|
||||
if (pLocal && pLocal->IsAlive())
|
||||
@@ -95,7 +95,7 @@ MAKE_HOOK(CBaseCombatWeapon_ShouldDraw, S::CBaseCombatWeapon_ShouldDraw(), bool,
|
||||
return CALL_ORIGINAL(rcx);
|
||||
#endif
|
||||
|
||||
if (F::Spectate.m_iTarget != -1)
|
||||
if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV())
|
||||
{
|
||||
auto pWeapon = H::Entities.GetWeapon();
|
||||
if (pWeapon && rcx == pWeapon->GetClientRenderable())
|
||||
@@ -113,5 +113,5 @@ MAKE_HOOK(CViewRender_DrawViewModels, S::CViewRender_DrawViewModels(), void,
|
||||
return CALL_ORIGINAL(rcx, viewRender, drawViewmodel);
|
||||
#endif
|
||||
|
||||
CALL_ORIGINAL(rcx, viewRender, F::Spectate.m_iTarget != -1 ? false : drawViewmodel);
|
||||
CALL_ORIGINAL(rcx, viewRender, F::Spectate.HasTarget() && !I::EngineClient->IsHLTV() ? false : drawViewmodel);
|
||||
}
|
||||
@@ -10,8 +10,8 @@ MAKE_HOOK(ClientModeTFNormal_BIsFriendOrPartyMember, S::ClientModeTFNormal_BIsFr
|
||||
return CALL_ORIGINAL(rcx, pEntity);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CHudInspectPanel_UserCmd_InspectTarget_BIsFriendOrPartyMember_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CHudInspectPanel_UserCmd_InspectTarget_BIsFriendOrPartyMember_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Misc::MannVsMachine::AllowInspect.Value)
|
||||
return true;
|
||||
|
||||
@@ -15,8 +15,8 @@ MAKE_HOOK(FX_FireBullets, S::FX_FireBullets(), void,
|
||||
return CALL_ORIGINAL(pWpn, iPlayer, vecOrigin, vecAngles, iWeapon, iMode, iSeed, flSpread, flDamage, bCritical);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFWeaponBaseGun_FireBullet_FireBullets_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFWeaponBaseGun_FireBullet_FireBullets_Call();
|
||||
|
||||
if (iPlayer != I::EngineClient->GetLocalPlayer())
|
||||
F::Backtrack.ReportShot(iPlayer);
|
||||
|
||||
@@ -15,9 +15,9 @@ MAKE_HOOK(GetClientInterpAmount, S::GetClientInterpAmount(), float,
|
||||
if (!Vars::Visuals::Removals::Lerp.Value && !Vars::Visuals::Removals::Interpolation.Value)
|
||||
return CALL_ORIGINAL();
|
||||
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwUndesired1 = S::CNetGraphPanel_DrawTextFields_GetClientInterpAmount_Call1();
|
||||
const auto dwUndesired2 = S::CNetGraphPanel_DrawTextFields_GetClientInterpAmount_Call2();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
|
||||
if (dwRetAddr != dwUndesired1 && dwRetAddr != dwUndesired2)
|
||||
return 0.f;
|
||||
|
||||
@@ -46,8 +46,8 @@ MAKE_HOOK(IEngineTrace_SetTraceEntity, U::Memory.GetVirtual(I::EngineTrace, 20),
|
||||
return CALL_ORIGINAL(rcx, pCollideable, pTrace);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::IEngineTrace_TraceRay_SetTraceEntity_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::IEngineTrace_TraceRay_SetTraceEntity_Call();
|
||||
|
||||
CALL_ORIGINAL(rcx, pCollideable, pTrace);
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ MAKE_HOOK(ISteamFriends_GetFriendPersonaName, U::Memory.GetVirtual(I::SteamFrien
|
||||
return CALL_ORIGINAL(rcx, steamIDFriend);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::GetPlayerNameForSteamID_GetFriendPersonaName_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::GetPlayerNameForSteamID_GetFriendPersonaName_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::UI::StreamerMode.Value)
|
||||
{
|
||||
|
||||
@@ -51,8 +51,8 @@ MAKE_HOOK(CBaseAnimating_DrawModel, S::CBaseAnimating_DrawModel(), int,
|
||||
return CALL_ORIGINAL(rcx, flags);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CEconEntity_DrawOverriddenViewmodel_DrawModel_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CEconEntity_DrawOverriddenViewmodel_DrawModel_Call();
|
||||
|
||||
if (dwRetAddr != dwDesired || I::EngineVGui->IsGameUIVisible() || SDK::CleanScreenshot()
|
||||
|| F::CameraWindow.m_bDrawing || !F::Materials.m_bLoaded || G::Unload)
|
||||
@@ -68,7 +68,7 @@ MAKE_HOOK(CBaseAnimating_InternalDrawModel, S::CBaseAnimating_InternalDrawModel(
|
||||
void* rcx, int flags)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::IVModelRender_DrawModelExecute[DEFAULT_BIND])
|
||||
if (!Vars::Hooks::CBaseAnimating_InternalDrawModel[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, flags);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -28,8 +28,8 @@ MAKE_HOOK(TF_IsHolidayActive, S::TF_IsHolidayActive(), bool,
|
||||
return CALL_ORIGINAL(eHoliday);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFPlayer_FireEvent_IsHolidayActive_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFPlayer_FireEvent_IsHolidayActive_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired)
|
||||
return true;
|
||||
|
||||
@@ -4,114 +4,122 @@
|
||||
#include "../Features/Spectate/Spectate.h"
|
||||
#include "../Features/Output/Output.h"
|
||||
|
||||
MAKE_SIGNATURE(CVoiceStatus_IsPlayerBlocked, "client.dll", "40 53 48 81 EC ? ? ? ? 48 8B D9 4C 8D 44 24", 0x0);
|
||||
MAKE_SIGNATURE(CPlayerResource_IsFakePlayer, "client.dll", "48 89 5C 24 ? 57 48 81 EC ? ? ? ? 48 8B 01 48 8B F9 48 63 DA", 0x0);
|
||||
MAKE_SIGNATURE(VGuiMenuBuilder_AddMenuItem, "client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B EA 49 8B F9 48 8B 51 ? 49 8B F0 48 8B D9 48 85 D2 74 ? 49 8B C9 E8 ? ? ? ? 85 C0 74 ? 48 8B 0B 48 8B 01 FF 90 ? ? ? ? 48 8B 0B 4C 8B C6 4C 8B 4B ? 48 8B D5 48 89 7B ? 48 C7 44 24 ? ? ? ? ? 48 8B 01 FF 90 ? ? ? ? 48 8B 13 3B 82 ? ? ? ? 73 ? 3B 82 ? ? ? ? 7F ? 48 8B 92 ? ? ? ? 8B C8 48 03 C9 39 44 CA ? 75 ? 39 44 CA ? 75 ? 48 8B 04 CA EB ? 33 C0 48 8B 5C 24 ? 48 8B 6C 24 ? 48 8B 74 24 ? 48 83 C4 ? 5F C3 CC CC CC CC 48 89 5C 24", 0x0);
|
||||
MAKE_SIGNATURE(CTFClientScoreBoardDialog_OnCommand, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 48 8B DA 48 8B F9 48 8B CB 48 8D 15 ? ? ? ? E8 ? ? ? ? 48 85 C0 74 ? 48 8B 0D", 0x0);
|
||||
MAKE_SIGNATURE(CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_IsPlayerBlocked_Call, "client.dll", "84 C0 48 8D 0D ? ? ? ? 48 8D 15 ? ? ? ? 48 0F 45 D1 4C 8D 0D", 0x0);
|
||||
MAKE_SIGNATURE(CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_AddMenuItem_Call, "client.dll", "48 8B 0D ? ? ? ? 4C 8D 85 ? ? ? ? 48 8D 95 ? ? ? ? 48 8B 01 FF 90 ? ? ? ? 44 8B 85", 0x0);
|
||||
MAKE_SIGNATURE(CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_IsFakePlayer_Call, "client.dll", "48 8B 0D ? ? ? ? 41 8B D6 48 81 C1 ? ? ? ? 44 0F B6 E8", 0x0);
|
||||
MAKE_SIGNATURE(CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_AddMenuItem_CallProfile, "client.dll", "48 8B 0D ? ? ? ? 4C 8D 85 ? ? ? ? 48 8D 95 ? ? ? ? 48 8B 01 FF 90 ? ? ? ? 44 8B 85", 0x0);
|
||||
MAKE_SIGNATURE(CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_AddMenuItem_CallSpectate, "client.dll", "45 84 ED 4C 8B AC 24 ? ? ? ? 0F 85", 0x0);
|
||||
|
||||
static int s_iPlayerIndex;
|
||||
static uint32_t s_uAccountID;
|
||||
static const char* s_sPlayerName;
|
||||
|
||||
MAKE_HOOK(CVoiceStatus_IsPlayerBlocked, S::CVoiceStatus_IsPlayerBlocked(), bool,
|
||||
void* rcx, int playerIndex)
|
||||
MAKE_HOOK(CPlayerResource_IsFakePlayer, S::CPlayerResource_IsFakePlayer(), bool,
|
||||
void* rcx, int index)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CVoiceStatus_IsPlayerBlocked[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, playerIndex);
|
||||
if (!Vars::Hooks::CPlayerResource_IsFakePlayer[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, index);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_IsPlayerBlocked_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_IsFakePlayer_Call();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::UI::ScoreboardUtility.Value)
|
||||
s_iPlayerIndex = playerIndex;
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::UI::ScoreboardUtility.Value)
|
||||
s_iPlayerIndex = index;
|
||||
|
||||
return CALL_ORIGINAL(rcx, playerIndex);
|
||||
return CALL_ORIGINAL(rcx, index);
|
||||
}
|
||||
|
||||
MAKE_HOOK(VGuiMenuBuilder_AddMenuItem, S::VGuiMenuBuilder_AddMenuItem(), void*,
|
||||
void* rcx, const char* pszButtonText, const char* pszCommand, const char* pszCategoryName)
|
||||
void* rcx, const char* pszButtonText, const char* pszCommand, const char* pszCategoryName)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::VGuiMenuBuilder_AddMenuItem[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, pszButtonText, pszCommand, pszCategoryName);
|
||||
if (!Vars::Hooks::VGuiMenuBuilder_AddMenuItem[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, pszButtonText, pszCommand, pszCategoryName);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_AddMenuItem_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired1 = S::CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_AddMenuItem_CallProfile();
|
||||
const auto dwDesired2 = S::CTFClientScoreBoardDialog_OnScoreBoardMouseRightRelease_AddMenuItem_CallSpectate();
|
||||
|
||||
if (dwRetAddr == dwDesired && Vars::Visuals::UI::ScoreboardUtility.Value && s_iPlayerIndex != -1)
|
||||
{
|
||||
auto pReturn = CALL_ORIGINAL(rcx, pszButtonText, pszCommand, pszCategoryName);
|
||||
if (dwRetAddr == dwDesired1 && Vars::Visuals::UI::ScoreboardUtility.Value && s_iPlayerIndex != -1)
|
||||
{
|
||||
auto pReturn = CALL_ORIGINAL(rcx, pszButtonText, pszCommand, pszCategoryName);
|
||||
|
||||
if (auto pResource = H::Entities.GetResource())
|
||||
{
|
||||
s_uAccountID = pResource->m_iAccountID(s_iPlayerIndex);
|
||||
s_sPlayerName = pResource->GetName(s_iPlayerIndex);
|
||||
if (auto pResource = H::Entities.GetResource())
|
||||
{
|
||||
s_uAccountID = pResource->m_iAccountID(s_iPlayerIndex);
|
||||
s_sPlayerName = pResource->GetName(s_iPlayerIndex);
|
||||
|
||||
CALL_ORIGINAL(rcx, "History", "history", "profile");
|
||||
CALL_ORIGINAL(rcx, I::EngineClient->GetPlayerForUserID(F::Spectate.m_iIntendedTarget) == s_iPlayerIndex ? "Unspectate" : "Spectate", "spectate", "profile");
|
||||
CALL_ORIGINAL(rcx, "History", "history", "profile");
|
||||
CALL_ORIGINAL(rcx, I::EngineClient->GetPlayerForUserID(F::Spectate.m_iIntendedTarget) == s_iPlayerIndex ? "Unspectate" : "Spectate", "specplayer", "profile");
|
||||
|
||||
CALL_ORIGINAL(rcx, std::format("Tags for {}", s_sPlayerName).c_str(), "listtags", "tags");
|
||||
for (auto it = F::PlayerUtils.m_vTags.begin(); it != F::PlayerUtils.m_vTags.end(); it++)
|
||||
{
|
||||
int iID = std::distance(F::PlayerUtils.m_vTags.begin(), it);
|
||||
auto& tTag = *it;
|
||||
if (!tTag.m_bAssignable)
|
||||
continue;
|
||||
CALL_ORIGINAL(rcx, std::format("Tags for {}", s_sPlayerName).c_str(), "listtags", "tags");
|
||||
for (auto it = F::PlayerUtils.m_vTags.begin(); it != F::PlayerUtils.m_vTags.end(); it++)
|
||||
{
|
||||
int iID = std::distance(F::PlayerUtils.m_vTags.begin(), it);
|
||||
auto& tTag = *it;
|
||||
if (!tTag.m_bAssignable)
|
||||
continue;
|
||||
|
||||
bool bHasTag = F::PlayerUtils.HasTag(s_uAccountID, iID);
|
||||
CALL_ORIGINAL(rcx, std::format("{} {}", bHasTag ? "Remove" : "Add", tTag.m_sName).c_str(), std::format("modifytag{}", iID).c_str(), "tags");
|
||||
}
|
||||
}
|
||||
|
||||
return pReturn;
|
||||
}
|
||||
bool bHasTag = F::PlayerUtils.HasTag(s_uAccountID, iID);
|
||||
CALL_ORIGINAL(rcx, std::format("{} {}", bHasTag ? "Remove" : "Add", tTag.m_sName).c_str(), std::format("modifytag{}", iID).c_str(), "tags");
|
||||
}
|
||||
}
|
||||
|
||||
return pReturn;
|
||||
}
|
||||
|
||||
return CALL_ORIGINAL(rcx, pszButtonText, pszCommand, pszCategoryName);
|
||||
if (dwRetAddr == dwDesired2 && Vars::Visuals::UI::ScoreboardUtility.Value && s_iPlayerIndex != -1)
|
||||
return nullptr;
|
||||
|
||||
return CALL_ORIGINAL(rcx, pszButtonText, pszCommand, pszCategoryName);
|
||||
}
|
||||
|
||||
MAKE_HOOK(CTFClientScoreBoardDialog_OnCommand, S::CTFClientScoreBoardDialog_OnCommand(), void,
|
||||
void* rcx, const char* command)
|
||||
void* rcx, const char* command)
|
||||
{
|
||||
#ifdef DEBUG_HOOKS
|
||||
if (!Vars::Hooks::CTFClientScoreBoardDialog_OnCommand[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, command);
|
||||
if (!Vars::Hooks::CTFClientScoreBoardDialog_OnCommand[DEFAULT_BIND])
|
||||
return CALL_ORIGINAL(rcx, command);
|
||||
#endif
|
||||
|
||||
if (!Vars::Visuals::UI::ScoreboardUtility.Value && !command)
|
||||
return CALL_ORIGINAL(rcx, command);
|
||||
if (!Vars::Visuals::UI::ScoreboardUtility.Value && !command)
|
||||
return CALL_ORIGINAL(rcx, command);
|
||||
|
||||
auto uHash = FNV1A::Hash32(command);
|
||||
switch (uHash)
|
||||
{
|
||||
case FNV1A::Hash32Const("history"):
|
||||
I::SteamFriends->ActivateGameOverlayToWebPage(std::format("https://steamhistory.net/id/{}", CSteamID(s_uAccountID, k_EUniversePublic, k_EAccountTypeIndividual).ConvertToUint64()).c_str());
|
||||
break;
|
||||
case FNV1A::Hash32Const("spectate"):
|
||||
if (auto pResource = H::Entities.GetResource())
|
||||
F::Spectate.SetTarget(pResource->m_iUserID(s_iPlayerIndex));
|
||||
break;
|
||||
case FNV1A::Hash32Const("listtags"):
|
||||
F::Output.TagsOnJoin(s_sPlayerName, s_uAccountID);
|
||||
break;
|
||||
default:
|
||||
if (strstr(command, "modifytag"))
|
||||
{
|
||||
try
|
||||
{
|
||||
std::string sTag = command;
|
||||
sTag = sTag.replace(0, strlen("modifytag"), "");
|
||||
int iID = std::stoi(sTag);
|
||||
if (!F::PlayerUtils.HasTag(s_uAccountID, iID))
|
||||
F::PlayerUtils.AddTag(s_uAccountID, iID, true, s_sPlayerName);
|
||||
else
|
||||
F::PlayerUtils.RemoveTag(s_uAccountID, iID, true, s_sPlayerName);
|
||||
}
|
||||
catch (...) {}
|
||||
}
|
||||
CALL_ORIGINAL(rcx, command);
|
||||
}
|
||||
auto uHash = FNV1A::Hash32(command);
|
||||
switch (uHash)
|
||||
{
|
||||
case FNV1A::Hash32Const("history"):
|
||||
I::SteamFriends->ActivateGameOverlayToWebPage(std::format("https://steamhistory.net/id/{}", CSteamID(s_uAccountID, k_EUniversePublic, k_EAccountTypeIndividual).ConvertToUint64()).c_str());
|
||||
break;
|
||||
case FNV1A::Hash32Const("listtags"):
|
||||
F::Output.TagsOnJoin(s_sPlayerName, s_uAccountID);
|
||||
break;
|
||||
case FNV1A::Hash32Const("specplayer"):
|
||||
if (auto pResource = H::Entities.GetResource(); pResource && Vars::Visuals::UI::ScoreboardUtility.Value)
|
||||
{
|
||||
F::Spectate.SetTarget(pResource->m_iUserID(s_iPlayerIndex));
|
||||
break;
|
||||
}
|
||||
[[fallthrough]];
|
||||
default:
|
||||
if (strstr(command, "modifytag"))
|
||||
{
|
||||
try
|
||||
{
|
||||
std::string sTag = command;
|
||||
sTag = sTag.replace(0, strlen("modifytag"), "");
|
||||
int iID = std::stoi(sTag);
|
||||
if (!F::PlayerUtils.HasTag(s_uAccountID, iID))
|
||||
F::PlayerUtils.AddTag(s_uAccountID, iID, true, s_sPlayerName);
|
||||
else
|
||||
F::PlayerUtils.RemoveTag(s_uAccountID, iID, true, s_sPlayerName);
|
||||
}
|
||||
catch (...) {}
|
||||
}
|
||||
CALL_ORIGINAL(rcx, command);
|
||||
}
|
||||
}
|
||||
@@ -13,8 +13,8 @@ MAKE_HOOK(bf_read_ReadString, S::bf_read_ReadString(), bool,
|
||||
return CALL_ORIGINAL(rcx, pStr, maxLen, bLine, pOutNumChars);
|
||||
#endif
|
||||
|
||||
const auto dwDesired = S::CHudVote_MsgFunc_VoteStart_ReadString_Call();
|
||||
const auto dwRetAddr = uintptr_t(_ReturnAddress());
|
||||
const auto dwDesired = S::CHudVote_MsgFunc_VoteStart_ReadString_Call();
|
||||
|
||||
bool bReturn = CALL_ORIGINAL(rcx, pStr, maxLen, bLine, pOutNumChars);
|
||||
|
||||
|
||||
@@ -194,6 +194,11 @@
|
||||
#define TF_WEAPON_ZOOM_FOV 20
|
||||
#define TF_PARTICLE_MAX_CHARGE_TIME 2.f
|
||||
|
||||
#define TF_ROCKET_RADIUS_FOR_RJS (110.f * 1.1f)
|
||||
#define TF_ROCKET_RADIUS (146.f)
|
||||
#define TF_FLARE_DET_RADIUS (110.f)
|
||||
#define TF_FLARE_RADIUS_FOR_FJS (100.f)
|
||||
|
||||
#define TF_PLAYER_VIEW_OFFSET Vector( 0, 0, 64.0 )
|
||||
#define TF_BURNING_FREQUENCY 0.5f
|
||||
#define TF_BURNING_FLAME_LIFE 10.0
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "Interfaces/CClientState.h"
|
||||
#include "Interfaces/CGlobalVarsBase.h"
|
||||
#include "Interfaces/CHLClient.h"
|
||||
#include "Interfaces/CHLTVCamera.h"
|
||||
#include "Interfaces/CTFGameRules.h"
|
||||
#include "Interfaces/CTFGCClientSystem.h"
|
||||
#include "Interfaces/CTFPartyClient.h"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include "../Main/CUserCmd.h"
|
||||
#include "../Misc/CGameEventListener.h"
|
||||
|
||||
class CHLTVCamera : CGameEventListener
|
||||
{
|
||||
public:
|
||||
int m_nCameraMode; // current camera mode
|
||||
int m_iCameraMan; // camera man entindex or 0
|
||||
Vector m_vCamOrigin; //current camera origin
|
||||
QAngle m_aCamAngle; //current camera angle
|
||||
int m_iTraget1; // first tracked target or 0
|
||||
int m_iTraget2; // second tracked target or 0
|
||||
float m_flFOV; // current FOV
|
||||
float m_flOffset; // z-offset from target origin
|
||||
float m_flDistance; // distance to traget origin+offset
|
||||
float m_flLastDistance; // too smooth distance
|
||||
float m_flTheta; // view angle horizontal
|
||||
float m_flPhi; // view angle vertical
|
||||
float m_flInertia; // camera inertia 0..100
|
||||
float m_flLastAngleUpdateTime;
|
||||
bool m_bEntityPacketReceived; // true after a new packet was received
|
||||
int m_nNumSpectators;
|
||||
char m_szTitleText[64];
|
||||
CUserCmd m_LastCmd;
|
||||
Vector m_vecVelocity;
|
||||
};
|
||||
@@ -7,37 +7,30 @@ Vec3 CTFPlayer::GetEyeAngles()
|
||||
return { m_angEyeAnglesX(), m_angEyeAnglesY(), 0.f };
|
||||
}
|
||||
|
||||
Vec3 CTFPlayer::GetViewOffset()
|
||||
Vec3 CTFPlayer::GetViewOffset(bool bScale)
|
||||
{
|
||||
Vec3 vOffset = GetOffset() / 2;
|
||||
|
||||
if (!IsPlayer())
|
||||
return GetOffset() / 2;
|
||||
return vOffset;
|
||||
|
||||
auto getMainOffset = [this]() -> Vec3
|
||||
if (IsDucking())
|
||||
vOffset = { 0.f, 0.f, 45.f };
|
||||
else switch (m_iClass())
|
||||
{
|
||||
if (IsDucking())
|
||||
return { 0.f, 0.f, 45.f };
|
||||
case TF_CLASS_SCOUT: vOffset = { 0.f, 0.f, 65.f }; break;
|
||||
case TF_CLASS_SOLDIER: vOffset = { 0.f, 0.f, 68.f }; break;
|
||||
case TF_CLASS_PYRO: vOffset = { 0.f, 0.f, 68.f }; break;
|
||||
case TF_CLASS_DEMOMAN: vOffset = { 0.f, 0.f, 68.f }; break;
|
||||
case TF_CLASS_HEAVY: vOffset = { 0.f, 0.f, 75.f }; break;
|
||||
case TF_CLASS_ENGINEER: vOffset = { 0.f, 0.f, 68.f }; break;
|
||||
case TF_CLASS_MEDIC: vOffset = { 0.f, 0.f, 75.f }; break;
|
||||
case TF_CLASS_SNIPER: vOffset = { 0.f, 0.f, 75.f }; break;
|
||||
case TF_CLASS_SPY: vOffset = { 0.f, 0.f, 75.f }; break;
|
||||
default: vOffset = m_vecViewOffset().z ? m_vecViewOffset() : Vec3(0.f, 0.f, 72.f);
|
||||
}
|
||||
|
||||
switch (m_iClass())
|
||||
{
|
||||
case TF_CLASS_SCOUT: return { 0.f, 0.f, 65.f };
|
||||
case TF_CLASS_SOLDIER: return { 0.f, 0.f, 68.f };
|
||||
case TF_CLASS_PYRO: return { 0.f, 0.f, 68.f };
|
||||
case TF_CLASS_DEMOMAN: return { 0.f, 0.f, 68.f };
|
||||
case TF_CLASS_HEAVY: return { 0.f, 0.f, 75.f };
|
||||
case TF_CLASS_ENGINEER: return { 0.f, 0.f, 68.f };
|
||||
case TF_CLASS_MEDIC: return { 0.f, 0.f, 75.f };
|
||||
case TF_CLASS_SNIPER: return { 0.f, 0.f, 75.f };
|
||||
case TF_CLASS_SPY: return { 0.f, 0.f, 75.f };
|
||||
}
|
||||
|
||||
const Vec3 vOffset = m_vecViewOffset();
|
||||
if (vOffset.z)
|
||||
return vOffset;
|
||||
|
||||
return { 0.f, 0.f, 68.f };
|
||||
};
|
||||
|
||||
return getMainOffset() * m_flModelScale();
|
||||
return bScale ? vOffset * m_flModelScale() : vOffset;
|
||||
}
|
||||
|
||||
bool CTFPlayer::InCond(ETFCond eCond)
|
||||
|
||||
@@ -203,7 +203,7 @@ public:
|
||||
SIGNATURE(UpdateWearables, void, CTFPlayer, this);
|
||||
|
||||
Vec3 GetEyeAngles();
|
||||
Vec3 GetViewOffset(); // use on nonlocal players
|
||||
Vec3 GetViewOffset(bool bScale = true); // use on nonlocal players
|
||||
bool InCond(ETFCond eCond);
|
||||
void AddCond(ETFCond eCond); // bits only
|
||||
void RemoveCond(ETFCond eCond); // bits only
|
||||
|
||||
@@ -108,9 +108,9 @@ namespace G
|
||||
inline std::vector<DrawSphere_t> SphereStorage = {};
|
||||
inline std::vector<DrawSwept_t> SweptStorage = {};
|
||||
|
||||
inline int* RandomSeed()
|
||||
inline int& RandomSeed()
|
||||
{
|
||||
static auto pRandomSeed = reinterpret_cast<int*>(U::Memory.RelToAbs(S::RandomSeed()));
|
||||
static auto& pRandomSeed = *reinterpret_cast<int*>(U::Memory.RelToAbs(S::RandomSeed()));
|
||||
return pRandomSeed;
|
||||
}
|
||||
};
|
||||
@@ -98,7 +98,7 @@ void CDraw::String(const Font_t& tFont, int x, int y, Color_t tColor, EAlign eAl
|
||||
|
||||
I::MatSystemSurface->DrawSetTextPos(x, y);
|
||||
I::MatSystemSurface->DrawSetTextFont(dwFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor);
|
||||
I::MatSystemSurface->DrawPrintText(s_wstr, int(wcslen(s_wstr)));
|
||||
}
|
||||
void CDraw::String(const Font_t& tFont, int x, int y, Color_t tColor, EAlign eAlign, const wchar_t* wstr)
|
||||
@@ -121,7 +121,7 @@ void CDraw::String(const Font_t& tFont, int x, int y, Color_t tColor, EAlign eAl
|
||||
|
||||
I::MatSystemSurface->DrawSetTextPos(x, y);
|
||||
I::MatSystemSurface->DrawSetTextFont(dwFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor);
|
||||
I::MatSystemSurface->DrawPrintText(wstr, int(wcslen(wstr)));
|
||||
}
|
||||
void CDraw::StringOutlined(const Font_t& tFont, int x, int y, Color_t tColor, Color_t tColorOut, EAlign eAlign, const char* str, bool bAlpha)
|
||||
@@ -156,14 +156,14 @@ void CDraw::StringOutlined(const Font_t& tFont, int x, int y, Color_t tColor, Co
|
||||
{
|
||||
I::MatSystemSurface->DrawSetTextPos(x + x2, y + y2);
|
||||
I::MatSystemSurface->DrawSetTextFont(dwFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColorOut.r, tColorOut.g, tColorOut.b, tColorOut.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColorOut);
|
||||
I::MatSystemSurface->DrawPrintText(s_wstr, int(wcslen(s_wstr)));
|
||||
}
|
||||
}
|
||||
|
||||
I::MatSystemSurface->DrawSetTextPos(x, y);
|
||||
I::MatSystemSurface->DrawSetTextFont(dwFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor);
|
||||
I::MatSystemSurface->DrawPrintText(s_wstr, int(wcslen(s_wstr)));
|
||||
}
|
||||
void CDraw::StringOutlined(const Font_t& tFont, int x, int y, Color_t tColor, Color_t tColorOut, EAlign eAlign, const wchar_t* wstr, bool bAlpha)
|
||||
@@ -197,20 +197,20 @@ void CDraw::StringOutlined(const Font_t& tFont, int x, int y, Color_t tColor, Co
|
||||
{
|
||||
I::MatSystemSurface->DrawSetTextPos(x + x2, y + y2);
|
||||
I::MatSystemSurface->DrawSetTextFont(dwFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColorOut.r, tColorOut.g, tColorOut.b, tColorOut.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColorOut);
|
||||
I::MatSystemSurface->DrawPrintText(wstr, int(wcslen(wstr)));
|
||||
}
|
||||
}
|
||||
|
||||
I::MatSystemSurface->DrawSetTextPos(x, y);
|
||||
I::MatSystemSurface->DrawSetTextFont(dwFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor);
|
||||
I::MatSystemSurface->DrawPrintText(wstr, int(wcslen(wstr)));
|
||||
}
|
||||
|
||||
void CDraw::Line(int x1, int y1, int x2, int y2, Color_t tColor)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawLine(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ void CDraw::FillPolygon(std::vector<Vertex_t> vVertices, Color_t tColor)
|
||||
if (!I::MatSystemSurface->IsTextureIDValid(iId))
|
||||
iId = I::MatSystemSurface->CreateNewTextureID();
|
||||
|
||||
I::MatSystemSurface->DrawSetColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawSetTexture(iId);
|
||||
I::MatSystemSurface->DrawTexturedPolygon(int(vVertices.size()), vVertices.data());
|
||||
}
|
||||
@@ -230,26 +230,26 @@ void CDraw::LinePolygon(std::vector<Vertex_t> vVertices, Color_t tColor)
|
||||
if (!I::MatSystemSurface->IsTextureIDValid(iId))
|
||||
iId = I::MatSystemSurface->CreateNewTextureID();
|
||||
|
||||
I::MatSystemSurface->DrawSetColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawSetTexture(iId);
|
||||
I::MatSystemSurface->DrawTexturedPolyLine(vVertices.data(), int(vVertices.size()));
|
||||
}
|
||||
|
||||
void CDraw::FillRect(int x, int y, int w, int h, Color_t tColor)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawFilledRect(x, y, x + w, y + h);
|
||||
}
|
||||
void CDraw::LineRect(int x, int y, int w, int h, Color_t tColor)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawOutlinedRect(x, y, x + w, y + h);
|
||||
}
|
||||
void CDraw::GradientRect(int x, int y, int w, int h, Color_t tColorTop, Color_t tColorBottom, bool bHorizontal)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetColor(tColorTop.r, tColorTop.g, tColorTop.b, tColorTop.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColorTop);
|
||||
I::MatSystemSurface->DrawFilledRectFade(x, y, x + w, y + h, tColorTop.a, tColorBottom.a, bHorizontal);
|
||||
I::MatSystemSurface->DrawSetColor(tColorBottom.r, tColorBottom.g, tColorBottom.b, tColorBottom.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColorBottom);
|
||||
I::MatSystemSurface->DrawFilledRectFade(x, y, x + w, y + h, tColorTop.a, tColorBottom.a, bHorizontal);
|
||||
}
|
||||
void CDraw::FillRectOutline(int x, int y, int w, int h, Color_t tColor, Color_t tColorOut)
|
||||
@@ -336,7 +336,7 @@ void CDraw::FillCircle(int x, int y, float iRadius, int iSegments, Color_t tColo
|
||||
}
|
||||
void CDraw::LineCircle(int x, int y, float iRadius, int iSegments, Color_t tColor)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetColor(tColor.r, tColor.g, tColor.b, tColor.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawOutlinedCircle(x, y, iRadius, iSegments);
|
||||
}
|
||||
|
||||
@@ -375,7 +375,7 @@ int CDraw::CreateTextureFromArray(const unsigned char* rgba, int w, int h)
|
||||
I::MatSystemSurface->DrawSetTextureRGBAEx(nTextureIdOut, rgba, w, h, IMAGE_FORMAT_RGBA8888);
|
||||
return nTextureIdOut;
|
||||
}
|
||||
void CDraw::DrawHudTexture(float x, float y, float s, const CHudTexture* pTexture, Color_t clr)
|
||||
void CDraw::DrawHudTexture(float x, float y, float s, const CHudTexture* pTexture, Color_t tColor)
|
||||
{
|
||||
if (!pTexture)
|
||||
return;
|
||||
@@ -383,18 +383,18 @@ void CDraw::DrawHudTexture(float x, float y, float s, const CHudTexture* pTextur
|
||||
if (pTexture->bRenderUsingFont)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetTextFont(pTexture->hFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(clr.r, clr.g, clr.b, clr.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor);
|
||||
I::MatSystemSurface->DrawSetTextPos(x, y);
|
||||
I::MatSystemSurface->DrawUnicodeChar(pTexture->cCharacterInFont);
|
||||
}
|
||||
else if (pTexture->textureId != -1)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetTexture(pTexture->textureId);
|
||||
I::MatSystemSurface->DrawSetColor(clr.r, clr.g, clr.b, clr.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawTexturedSubRect(x, y, x + pTexture->Width() * s, y + pTexture->Height() * s, pTexture->texCoords[0], pTexture->texCoords[1], pTexture->texCoords[2], pTexture->texCoords[3]);
|
||||
}
|
||||
}
|
||||
void CDraw::DrawHudTextureByName(float x, float y, float s, const char* sTexture, Color_t clr)
|
||||
void CDraw::DrawHudTextureByName(float x, float y, float s, const char* sTexture, Color_t tColor)
|
||||
{
|
||||
const CHudTexture* pIcon = GetIcon(sTexture, 0);
|
||||
|
||||
@@ -404,14 +404,14 @@ void CDraw::DrawHudTextureByName(float x, float y, float s, const char* sTexture
|
||||
if (pIcon->bRenderUsingFont)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetTextFont(pIcon->hFont);
|
||||
I::MatSystemSurface->DrawSetTextColor(clr.r, clr.g, clr.b, clr.a);
|
||||
I::MatSystemSurface->DrawSetTextColor(tColor);
|
||||
I::MatSystemSurface->DrawSetTextPos(x, y);
|
||||
I::MatSystemSurface->DrawUnicodeChar(pIcon->cCharacterInFont);
|
||||
}
|
||||
else if (pIcon->textureId != -1)
|
||||
{
|
||||
I::MatSystemSurface->DrawSetTexture(pIcon->textureId);
|
||||
I::MatSystemSurface->DrawSetColor(clr.r, clr.g, clr.b, clr.a);
|
||||
I::MatSystemSurface->DrawSetColor(tColor);
|
||||
I::MatSystemSurface->DrawTexturedSubRect(x, y, x + pIcon->Width() * s, y + pIcon->Height() * s, pIcon->texCoords[0], pIcon->texCoords[1], pIcon->texCoords[2], pIcon->texCoords[3]);
|
||||
}
|
||||
}
|
||||
|
||||
+15
-8
@@ -361,10 +361,10 @@ namespace Vars
|
||||
CVar(HuntsmanClamp, "Huntsman clamp", 5.f, NOSAVE | DEBUGVAR | SLIDER_CLAMP | SLIDER_PRECISION, 0.f, 10.f, 0.5f);
|
||||
CVar(HuntsmanPullPoint, "Huntsman pull point", false, NOSAVE | DEBUGVAR);
|
||||
|
||||
CVar(SplashPointsDirect, "Splash points direct", 100, NOSAVE | DEBUGVAR | SLIDER_MIN, 0, 400, 5);
|
||||
CVar(SplashPointsArc, "Splash points arc", 100, NOSAVE | DEBUGVAR | SLIDER_MIN, 0, 400, 5);
|
||||
CVar(SplashCountDirect, "Splash count direct", 100, NOSAVE | DEBUGVAR | SLIDER_MIN, 1, 100);
|
||||
CVar(SplashCountArc, "Splash count arc", 5, NOSAVE | DEBUGVAR | SLIDER_MIN, 1, 100);
|
||||
CVar(SplashPointsDirect, "Splash points direct", 100, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 0, 400, 5);
|
||||
CVar(SplashPointsArc, "Splash points arc", 100, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 0, 400, 5);
|
||||
CVar(SplashCountDirect, "Splash count direct", 100, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 1, 400, 5);
|
||||
CVar(SplashCountArc, "Splash count arc", 5, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, 1, 400, 5);
|
||||
CVar(SplashRotateX, "Splash Rx", -1.f, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, -1.f, 360.f);
|
||||
CVar(SplashRotateY, "Splash Ry", -1.f, NOSAVE | DEBUGVAR | SLIDER_MIN | SLIDER_PRECISION, -1.f, 360.f);
|
||||
CVar(SplashTraceInterval, "Splash trace interval", 10, NOSAVE | DEBUGVAR, 1, 10);
|
||||
@@ -715,9 +715,12 @@ namespace Vars
|
||||
CVar(BreakJump, "Break jump", false);
|
||||
CVar(ShieldTurnRate, "Shield turn rate", false);
|
||||
|
||||
CVar(TimingOffset, "Timing offset", 0, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(ChokeCount, "Choke count", 1, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(ApplyAbove, "Apply timing offset above", 0, NOSAVE | DEBUGVAR, 0, 8);
|
||||
CVar(AutoRocketJumpChokeGrounded, "Choke grounded", 1, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(AutoRocketJumpChokeAir, "Choke air", 1, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(AutoRocketJumpSkipGround, "Skip grounded", 0, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(AutoRocketJumpSkipAir, "Skip air", 1, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(AutoRocketJumpTimingOffset, "Timing offset", 0, NOSAVE | DEBUGVAR, 0, 3);
|
||||
CVar(AutoRocketJumpApplyAbove, "Apply offset above", 0, NOSAVE | DEBUGVAR, 0, 10);
|
||||
SUBNAMESPACE_END(Movement);
|
||||
|
||||
SUBNAMESPACE_BEGIN(Automation)
|
||||
@@ -904,6 +907,7 @@ namespace Vars
|
||||
CVar(CBasePlayer_ItemPostFrame, "CBasePlayer_ItemPostFrame", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CBasePlayer_ShouldDrawLocalPlayer, "CBasePlayer_ShouldDrawLocalPlayer", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CBasePlayer_ShouldDrawThisPlayer, "CBasePlayer_ShouldDrawThisPlayer", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CBaseViewModel_CalcViewModelView, "CBaseViewModel_CalcViewModelView", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CBaseViewModel_ShouldFlipViewModel, "CBaseViewModel_ShouldFlipViewModel", true, NOSAVE | DEBUGVAR);
|
||||
CVar(Cbuf_ExecuteCommand, "Cbuf_ExecuteCommand", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CClientModeShared_DoPostScreenSpaceEffects, "CClientModeShared_DoPostScreenSpaceEffects", true, NOSAVE | DEBUGVAR);
|
||||
@@ -916,6 +920,9 @@ namespace Vars
|
||||
CVar(CHLClient_DispatchUserMessage, "CHLClient_DispatchUserMessage", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CHLClient_FrameStageNotify, "CHLClient_FrameStageNotify", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CHLClient_LevelShutdown, "CHLClient_LevelShutdown", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CHLTVCamera_CalcView, "CHLTVCamera_CalcView", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CHLTVCamera_GetMode, "CHLTVCamera_GetMode", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CHLTVCamera_GetPrimaryTarget, "CHLTVCamera_GetPrimaryTarget", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CHudCrosshair_GetDrawPosition, "CHudCrosshair_GetDrawPosition", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CInput_GetUserCmd, "CInput_GetUserCmd", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CInput_ValidateUserCmd, "CInput_ValidateUserCmd", true, NOSAVE | DEBUGVAR);
|
||||
@@ -941,6 +948,7 @@ namespace Vars
|
||||
CVar(CParticleProperty_Create_Point, "CParticleProperty_Create_Point", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CParticleProperty_AddControlPoint_Pointer, "CParticleProperty_AddControlPoint_Pointer", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CPlayerResource_GetPlayerName, "CPlayerResource_GetPlayerName", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CPlayerResource_IsFakePlayer, "CPlayerResource_IsFakePlayer", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CPrediction_RunSimulation, "CPrediction_RunSimulation", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CRendering3dView_EnableWorldFog, "CRendering3dView_EnableWorldFog", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CSkyboxView_Enable3dSkyboxFog, "CSkyboxView_Enable3dSkyboxFog", true, NOSAVE | DEBUGVAR);
|
||||
@@ -994,7 +1002,6 @@ namespace Vars
|
||||
CVar(CViewRender_LevelInit, "CViewRender_LevelInit", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CViewRender_PerformScreenOverlay, "CViewRender_PerformScreenOverlay", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CViewRender_RenderView, "CViewRender_RenderView", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CVoiceStatus_IsPlayerBlocked, "CVoiceStatus_IsPlayerBlocked", true, NOSAVE | DEBUGVAR);
|
||||
CVar(CWeaponMedigun_PrimaryAttack, "CWeaponMedigun_PrimaryAttack", true, NOSAVE | DEBUGVAR);
|
||||
CVar(DoEnginePostProcessing, "DoEnginePostProcessing", true, NOSAVE | DEBUGVAR);
|
||||
CVar(DSP_Process, "DSP_Process", true, NOSAVE | DEBUGVAR);
|
||||
|
||||
@@ -117,12 +117,12 @@ static LONG APIENTRY ExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo)
|
||||
|
||||
std::stringstream ssErrorStream;
|
||||
ssErrorStream << std::format("Error: {} (0x{:X}) ({})\n", sError, ExceptionInfo->ExceptionRecord->ExceptionCode, ++s_iExceptions);
|
||||
if (U::Memory.GetOffsetFromBase(s_lpParam))
|
||||
ssErrorStream << std::format("This: {}\n", U::Memory.GetModuleOffset(s_lpParam));
|
||||
ssErrorStream << "Built @ " __DATE__ ", " __TIME__ ", " __CONFIGURATION__ "\n";
|
||||
ssErrorStream << std::format("Time @ {}, {}\n", SDK::GetDate(), SDK::GetTime());
|
||||
|
||||
ssErrorStream << "\n";
|
||||
if (U::Memory.GetOffsetFromBase(s_lpParam))
|
||||
ssErrorStream << std::format("This: {}\n", U::Memory.GetModuleOffset(s_lpParam));
|
||||
ssErrorStream << std::format("RIP: {:#x}\n", ExceptionInfo->ContextRecord->Rip);
|
||||
ssErrorStream << std::format("RAX: {:#x}\n", ExceptionInfo->ContextRecord->Rax);
|
||||
ssErrorStream << std::format("RCX: {:#x}\n", ExceptionInfo->ContextRecord->Rcx);
|
||||
|
||||
Reference in new issue
Block a user