diff --git a/Amalgam/Amalgam.vcxproj b/Amalgam/Amalgam.vcxproj index 5349e186..8b1a94d6 100644 --- a/Amalgam/Amalgam.vcxproj +++ b/Amalgam/Amalgam.vcxproj @@ -969,6 +969,7 @@ + diff --git a/Amalgam/Amalgam.vcxproj.filters b/Amalgam/Amalgam.vcxproj.filters index 87459c3d..f53d8c83 100644 --- a/Amalgam/Amalgam.vcxproj.filters +++ b/Amalgam/Amalgam.vcxproj.filters @@ -204,6 +204,7 @@ + diff --git a/Amalgam/src/Features/CritHack/CritHack.cpp b/Amalgam/src/Features/CritHack/CritHack.cpp index c4c70205..62722669 100644 --- a/Amalgam/src/Features/CritHack/CritHack.cpp +++ b/Amalgam/src/Features/CritHack/CritHack.cpp @@ -411,6 +411,19 @@ int CCritHack::PredictCmdNum(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd return iCommandNumber; } +bool CCritHack::ShouldForceEffects(CTFPlayer* pLocal) +{ + if (!Vars::CritHack::CritEffects.Value || !pLocal->IsAlive() || pLocal->IsAGhost() || pLocal->IsCritBoosted()) + return false; + + auto pWeapon = H::Entities.GetWeapon(); + if (!pWeapon || !WeaponCanCrit(pWeapon)) + return false; + + float flTickBase = TICKS_TO_TIME(pLocal->m_nTickBase()); + return Vars::CritHack::ForceCrits.Value && !m_bCritBanned && m_iAvailableCrits > 0 || pWeapon->m_flCritTime() > flTickBase; +} + void CCritHack::Event(IGameEvent* pEvent, uint32_t uHash, CTFPlayer* pLocal) { switch (uHash) @@ -595,8 +608,7 @@ void CCritHack::Draw(CTFPlayer* pLocal) return; auto pWeapon = H::Entities.GetWeapon(); - if (!pWeapon || !pLocal->IsAlive() || pLocal->IsAGhost() - || !WeaponCanCrit(pWeapon, true)) + if (!pWeapon || !pLocal->IsAlive() || pLocal->IsAGhost() || !WeaponCanCrit(pWeapon, true)) return; diff --git a/Amalgam/src/Features/CritHack/CritHack.h b/Amalgam/src/Features/CritHack/CritHack.h index 9e0f523f..0c521dfe 100644 --- a/Amalgam/src/Features/CritHack/CritHack.h +++ b/Amalgam/src/Features/CritHack/CritHack.h @@ -63,6 +63,7 @@ public: bool WeaponCanCrit(CTFWeaponBase* pWeapon, bool bWeaponOnly = false); int PredictCmdNum(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd); + bool ShouldForceEffects(CTFPlayer* pLocal); float GetCritDamage() { return m_iCritDamage; } float GetRangedDamage() { return m_iRangedDamage; } diff --git a/Amalgam/src/Features/ImGui/Menu/Menu.cpp b/Amalgam/src/Features/ImGui/Menu/Menu.cpp index b9e5bba8..4da71d1b 100644 --- a/Amalgam/src/Features/ImGui/Menu/Menu.cpp +++ b/Amalgam/src/Features/ImGui/Menu/Menu.cpp @@ -203,7 +203,8 @@ void CMenu::MenuAimbot(int iTab) { FToggle(Vars::CritHack::ForceCrits, FToggleEnum::Left); FToggle(Vars::CritHack::AvoidRandomCrits, FToggleEnum::Right); - FToggle(Vars::CritHack::AlwaysMeleeCrit); + FToggle(Vars::CritHack::AlwaysMeleeCrit, FToggleEnum::Left); + FToggle(Vars::CritHack::CritEffects, FToggleEnum::Right); } EndSection(); if (Vars::Debug::Options.Value) { diff --git a/Amalgam/src/Features/Visuals/Visuals.cpp b/Amalgam/src/Features/Visuals/Visuals.cpp index b9fdfb3b..2b02228c 100644 --- a/Amalgam/src/Features/Visuals/Visuals.cpp +++ b/Amalgam/src/Features/Visuals/Visuals.cpp @@ -1,20 +1,23 @@ #include "Visuals.h" -#include "../Aimbot/Aimbot.h" -#include "../Aimbot/AimbotProjectile/AimbotProjectile.h" -#include "../Ticks/Ticks.h" -#include "../Backtrack/Backtrack.h" #include "../Simulation/ProjectileSimulation/ProjectileSimulation.h" +#include "../Aimbot/AimbotProjectile/AimbotProjectile.h" +#include "../Aimbot/Aimbot.h" #include "CameraWindow/CameraWindow.h" -#include "../Players/PlayerUtils.h" -#include "../Spectate/Spectate.h" #include "Groups/Groups.h" +#include "../Backtrack/Backtrack.h" +#include "../Spectate/Spectate.h" +#include "../CritHack/CritHack.h" +#include "../Ticks/Ticks.h" #include "../World/World.h" MAKE_SIGNATURE(UTIL_PlayerByIndex, "server.dll", "48 83 EC ? 8B D1 85 C9 7E ? 48 8B 05", 0x0); MAKE_SIGNATURE(CBaseAnimating_DrawServerHitboxes, "server.dll", "44 88 44 24 ? 53 48 81 EC", 0x0); MAKE_SIGNATURE(NDebugOverlay_BoxAngles, "server.dll", "48 83 EC ? 4C 8B D9 48 8B 0D ? ? ? ? 48 85 C9 74 ? 8B 84 24 ? ? ? ? F3 0F 10 84 24 ? ? ? ? 4C 8B 11 F3 0F 11 44 24 ? 89 44 24 ? 8B 84 24 ? ? ? ? 89 44 24 ? 8B 84 24 ? ? ? ? 89 44 24 ? 8B 84 24 ? ? ? ? 89 44 24 ? 4C 89 4C 24", 0x0); MAKE_SIGNATURE(CBaseAnimating_DrawServerHitboxes_BoxAngles_Call, "server.dll", "8B 84 24 ? ? ? ? 49 83 C6", 0x0); +MAKE_SIGNATURE(CTFPlayerShared_UpdateCritBoostEffect, "client.dll", "48 8B C4 48 89 58 ? 48 89 70 ? 48 89 78 ? 41 56 48 81 EC ? ? ? ? 48 89 68", 0x0); + +enum ECritBoostUpdateType { kCritBoost_Ignore, kCritBoost_ForceRefresh }; static std::vector SplashTrace(Vec3 vOrigin, float flRadius, Vec3 vNormal = { 0, 0, 1 }, bool bTrace = true, int iSegments = 100) { @@ -1159,12 +1162,20 @@ void CVisuals::CreateMove(CTFPlayer* pLocal, CTFWeaponBase* pWeapon) } } - if (Vars::Visuals::Effects::SpellFootsteps.Value && (F::Ticks.m_bDoubletap || F::Ticks.m_bWarp)) - pLocal->FireEvent(pLocal->GetAbsOrigin(), QAngle(), 7001, nullptr); + bool bEffects = F::CritHack.ShouldForceEffects(pLocal); + if (!bEffects && !pLocal->IsCritBoosted() && pLocal->m_pCritBoostSoundLoop()) + S::CTFPlayerShared_UpdateCritBoostEffect.Call(pLocal->m_Shared(), kCritBoost_Ignore); + else if (bEffects && !pLocal->m_pCritBoostSoundLoop()) + { + int iOriginalCond = pLocal->m_nPlayerCondEx(); + pLocal->AddCond(TF_COND_CRITBOOSTED_USER_BUFF); + S::CTFPlayerShared_UpdateCritBoostEffect.Call(pLocal->m_Shared(), kCritBoost_Ignore); + pLocal->m_nPlayerCondEx() = iOriginalCond; + } - static uint32_t iOldMedigunBeam = 0, iOldMedigunCharge = 0; - uint32_t iNewMedigunBeam = FNV1A::Hash32(Vars::Visuals::Effects::MedigunBeam.Value.c_str()), iNewMedigunCharge = FNV1A::Hash32(Vars::Visuals::Effects::MedigunCharge.Value.c_str()); - if (iOldMedigunBeam != iNewMedigunBeam || iOldMedigunCharge != iNewMedigunCharge) + static uint32_t uOldHashBeam = 0, uOldHashCharge = 0; + auto uHashBeam = FNV1A::Hash32(Vars::Visuals::Effects::MedigunBeam.Value.c_str()), uHashCharge = FNV1A::Hash32(Vars::Visuals::Effects::MedigunCharge.Value.c_str()); + if (uOldHashBeam != uHashBeam || uOldHashCharge != uHashCharge) { if (pWeapon && pWeapon->GetWeaponID() == TF_WEAPON_MEDIGUN) { @@ -1174,16 +1185,17 @@ void CVisuals::CreateMove(CTFPlayer* pLocal, CTFWeaponBase* pWeapon) pMedigun->ManageChargeEffect(); } - iOldMedigunBeam = iNewMedigunBeam; - iOldMedigunCharge = iNewMedigunCharge; + uOldHashBeam = uHashBeam, uOldHashCharge = uHashCharge; } + if (Vars::Visuals::Effects::SpellFootsteps.Value && (F::Ticks.m_bDoubletap || F::Ticks.m_bWarp)) + pLocal->FireEvent(pLocal->GetAbsOrigin(), QAngle(), 7001, nullptr); + static auto r_aspectratio = H::ConVars.FindVar("r_aspectratio"); - static float flStaticRatio = 0.f; - float flOldRatio = flStaticRatio; - float flNewRatio = flStaticRatio = Vars::Visuals::UI::AspectRatio.Value; + static float flOldRatio = 0.f; + float flNewRatio = Vars::Visuals::UI::AspectRatio.Value; if (flNewRatio != flOldRatio) - r_aspectratio->SetValue(flNewRatio); + r_aspectratio->SetValue(flOldRatio = flNewRatio); DrawHitboxes(2); diff --git a/Amalgam/src/Hooks/CBasePlayer_ItemPostFrame.cpp b/Amalgam/src/Hooks/CBasePlayer_ItemPostFrame.cpp index f91a2556..838f3f28 100644 --- a/Amalgam/src/Hooks/CBasePlayer_ItemPostFrame.cpp +++ b/Amalgam/src/Hooks/CBasePlayer_ItemPostFrame.cpp @@ -100,7 +100,7 @@ MAKE_HOOK(CBasePlayer_ItemPostFrame, S::CBasePlayer_ItemPostFrame(), void, if (!pViewmodel) return CALL_ORIGINAL(rcx); - auto pStudio = pViewmodel->GetModelPtr(); + auto pStudio = pViewmodel->m_pStudioHdr(); if (!pStudio) return CALL_ORIGINAL(rcx); diff --git a/Amalgam/src/Hooks/CTFPlayerShared_InCond.cpp b/Amalgam/src/Hooks/CTFPlayerShared_InCond.cpp index 83ce2f6c..dcae174e 100644 --- a/Amalgam/src/Hooks/CTFPlayerShared_InCond.cpp +++ b/Amalgam/src/Hooks/CTFPlayerShared_InCond.cpp @@ -21,13 +21,8 @@ MAKE_HOOK(CTFPlayerShared_InCond, S::CTFPlayerShared_InCond(), bool, const auto dwKart1 = S::CTFPlayer_CreateMove_InCondKart_Call(); const auto dwKart2 = S::CTFInput_ApplyMouse_InCond_Call(); - auto fGetOuter = [&rcx]() -> CBaseEntity* - { - static const auto iShared = U::NetVars.GetNetVar("CTFPlayer", "m_Shared"); - static const auto iBombHeadStage = U::NetVars.GetNetVar("CTFPlayer", "m_nHalloweenBombHeadStage"); - static const auto iOffset = iBombHeadStage - iShared + 0x4; - return *reinterpret_cast(uintptr_t(rcx) + iOffset); - }; + auto pLocal = H::Entities.GetLocal(); + auto pShared = pLocal ? pLocal->m_Shared() : nullptr; switch (nCond) { @@ -36,13 +31,13 @@ MAKE_HOOK(CTFPlayerShared_InCond, S::CTFPlayerShared_InCond(), bool, return false; break; case TF_COND_DISGUISED: - if (Vars::Visuals::Removals::Disguises.Value && H::Entities.GetLocal() != fGetOuter()) + if (Vars::Visuals::Removals::Disguises.Value && pShared != rcx) return false; break; case TF_COND_TAUNTING: if (dwRetAddr == dwTaunt && Vars::Misc::Automation::TauntControl.Value) return false; - if (Vars::Visuals::Removals::Taunts.Value && H::Entities.GetLocal() != fGetOuter()) + if (Vars::Visuals::Removals::Taunts.Value && pShared != rcx) return false; break; case TF_COND_HALLOWEEN_KART: diff --git a/Amalgam/src/Hooks/CTFPlayerShared_IsCritBoosted.cpp b/Amalgam/src/Hooks/CTFPlayerShared_IsCritBoosted.cpp new file mode 100644 index 00000000..726c0681 --- /dev/null +++ b/Amalgam/src/Hooks/CTFPlayerShared_IsCritBoosted.cpp @@ -0,0 +1,24 @@ +#include "../SDK/SDK.h" + +#include "../Features/CritHack/CritHack.h" + +MAKE_SIGNATURE(CTFPlayerShared_IsCritBoosted, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 48 8B D9 0F 29 7C 24", 0x0); +MAKE_SIGNATURE(CProxyModelGlowColor_OnBind_IsCritBoosted_Call, "client.dll", "48 8B CF 84 C0 74 ? BA", 0x0); + +MAKE_HOOK(CTFPlayerShared_IsCritBoosted, S::CTFPlayerShared_IsCritBoosted(), bool, + void* rcx) +{ + DEBUG_RETURN(CTFPlayerShared_UpdateCritBoostEffect, rcx); + + const auto dwRetAddr = uintptr_t(_ReturnAddress()); + const auto dwDesired = S::CProxyModelGlowColor_OnBind_IsCritBoosted_Call(); + + if (dwRetAddr != dwDesired) + return CALL_ORIGINAL(rcx); + + auto pLocal = H::Entities.GetLocal(); + if (!pLocal || pLocal->m_Shared() != rcx || !F::CritHack.ShouldForceEffects(pLocal)) + return CALL_ORIGINAL(rcx); + + return true; +} \ No newline at end of file diff --git a/Amalgam/src/SDK/Definitions/Definitions.h b/Amalgam/src/SDK/Definitions/Definitions.h index 4ec127c5..50ac31c6 100644 --- a/Amalgam/src/SDK/Definitions/Definitions.h +++ b/Amalgam/src/SDK/Definitions/Definitions.h @@ -1798,6 +1798,27 @@ enum ETFWeaponType TF_WEAPON_FLAME_BALL }; +enum +{ + TF_WPN_TYPE_PRIMARY = 0, + TF_WPN_TYPE_SECONDARY, + TF_WPN_TYPE_MELEE, + TF_WPN_TYPE_GRENADE, + TF_WPN_TYPE_BUILDING, + TF_WPN_TYPE_PDA, + TF_WPN_TYPE_ITEM1, + TF_WPN_TYPE_ITEM2, + TF_WPN_TYPE_HEAD, + TF_WPN_TYPE_MISC, + TF_WPN_TYPE_MELEE_ALLCLASS, + TF_WPN_TYPE_SECONDARY2, + TF_WPN_TYPE_PRIMARY2, + TF_WPN_TYPE_ITEM3, + TF_WPN_TYPE_ITEM4, + TF_WPM_TYPE_PASSTIME_BALL, + TF_WPN_TYPE_COUNT, +}; + enum ETFWeapons { Scout_m_Scattergun = 13, diff --git a/Amalgam/src/SDK/Definitions/Main/CBaseAnimating.h b/Amalgam/src/SDK/Definitions/Main/CBaseAnimating.h index e7347c4d..2f15edb7 100644 --- a/Amalgam/src/SDK/Definitions/Main/CBaseAnimating.h +++ b/Amalgam/src/SDK/Definitions/Main/CBaseAnimating.h @@ -37,9 +37,9 @@ public: return *reinterpret_cast*>(uintptr_t(this) + nOffset); } - NETVAR_OFF(GetModelPtr, CStudioHdr*, "CBaseAnimating", "m_nMuzzleFlashParity", 16); - NETVAR_OFF(m_bSequenceLoops, bool, "CBaseAnimating", "m_flFadeScale", 13); + NETVAR_OFF(m_pStudioHdr, CStudioHdr*, "CBaseAnimating", "m_nMuzzleFlashParity", 16); NETVAR_OFF(m_CachedBoneData, CUtlVector, "CBaseAnimating", "m_hLightingOrigin", -88); + NETVAR_OFF(m_bSequenceLoops, bool, "CBaseAnimating", "m_flFadeScale", 13); VIRTUAL_ARGS(GetAttachment, bool, 71, (int number, Vec3& origin), this, number, std::ref(origin)) VIRTUAL_ARGS(FireEvent, void, 175, (const Vector& origin, const QAngle& angles, int event, const char* options), this, std::ref(origin), std::ref(angles), event, options); diff --git a/Amalgam/src/SDK/Definitions/Main/CBaseCombatWeapon.h b/Amalgam/src/SDK/Definitions/Main/CBaseCombatWeapon.h index 1954b19f..be81b041 100644 --- a/Amalgam/src/SDK/Definitions/Main/CBaseCombatWeapon.h +++ b/Amalgam/src/SDK/Definitions/Main/CBaseCombatWeapon.h @@ -19,9 +19,9 @@ public: NETVAR(m_iState, int, "CBaseCombatWeapon", "m_iState"); NETVAR(m_hOwner, EHANDLE, "CBaseCombatWeapon", "m_hOwner"); + NETVAR_OFF(m_bReloadsSingly, bool, "CBaseCombatWeapon", "m_iClip2", 24); NETVAR_OFF(m_bInReload, bool, "CBaseCombatWeapon", "m_flTimeWeaponIdle", 4); NETVAR_OFF(m_bRemoveable, bool, "CBaseCombatWeapon", "m_iState", -12); - NETVAR_OFF(m_bReloadsSingly, bool, "CBaseCombatWeapon", "m_iClip2", 24); VIRTUAL(CanBeSelected, bool, 233, this); VIRTUAL(CheckReload, void, 278, this); diff --git a/Amalgam/src/SDK/Definitions/Main/CBaseEntity.h b/Amalgam/src/SDK/Definitions/Main/CBaseEntity.h index 9b1fa0d5..d7ce3383 100644 --- a/Amalgam/src/SDK/Definitions/Main/CBaseEntity.h +++ b/Amalgam/src/SDK/Definitions/Main/CBaseEntity.h @@ -92,13 +92,13 @@ public: NETVAR(movetype, int, "CBaseEntity", "movetype"); NETVAR_OFF(m_flOldSimulationTime, float, "CBaseEntity", "m_flSimulationTime", 4); + NETVAR_OFF_EMBED(m_Particles, CParticleProperty*, "CBaseEntity", "m_flElasticity", -56); + NETVAR_OFF(m_iv_angRotation, CInterpolatedVar, "CBaseEntity", "m_vecOrigin", -128); + NETVAR_OFF(m_iv_vecVelocity, CInterpolatedVar, "CBaseEntity", "m_iTeamNum", 156); + NETVAR_OFF(m_iv_vecOrigin, CInterpolatedVar, "CBaseEntity", "m_flShadowCastDistance", 84); NETVAR_OFF(m_MoveType, byte, "CTFPlayer", "m_nWaterLevel", -4); NETVAR_OFF(m_MoveCollide, byte, "CTFPlayer", "m_nWaterLevel", -3); NETVAR_OFF(m_nWaterType, byte, "CTFPlayer", "m_nWaterLevel", 1); - NETVAR_OFF_EMBED(m_Particles, CParticleProperty*, "CBaseEntity", "m_flElasticity", -56); - NETVAR_OFF(m_iv_vecVelocity, CInterpolatedVar, "CBaseEntity", "m_iTeamNum", 156); - NETVAR_OFF(m_iv_vecOrigin, CInterpolatedVar, "CBaseEntity", "m_flShadowCastDistance", 84); - NETVAR_OFF(m_iv_angRotation, CInterpolatedVar, "CBaseEntity", "m_vecOrigin", -128); inline CBaseEntity* GetMoveParent() { static int nOffset = U::NetVars.GetNetVar("CBaseEntity", "moveparent") - 8; diff --git a/Amalgam/src/SDK/Definitions/Main/CBasePlayer.h b/Amalgam/src/SDK/Definitions/Main/CBasePlayer.h index 0de2d9bc..61438d0b 100644 --- a/Amalgam/src/SDK/Definitions/Main/CBasePlayer.h +++ b/Amalgam/src/SDK/Definitions/Main/CBasePlayer.h @@ -67,14 +67,14 @@ public: NETVAR(m_hViewModel, EHANDLE, "CBasePlayer", "m_hViewModel[0]"); NETVAR(m_szLastPlaceName, const char*, "CBasePlayer", "m_szLastPlaceName"); + NETVAR_OFF(m_flWaterJumpTime, float, "CBasePlayer", "m_fOnTarget", -60); + NETVAR_OFF(m_flSwimSoundTime, float, "CBasePlayer", "m_fOnTarget", -44); + NETVAR_OFF(m_vecLadderNormal, Vec3, "CBasePlayer", "m_fOnTarget", -36); NETVAR_OFF(m_flPhysics, int, "CBasePlayer", "m_nTickBase", -4); NETVAR_OFF(m_nFinalPredictedTick, int, "CBasePlayer", "m_nTickBase", 4); NETVAR_OFF(m_nButtons, int, "CBasePlayer", "m_hConstraintEntity", -12); NETVAR_OFF(m_pCurrentCommand, CUserCmd*, "CBasePlayer", "m_hConstraintEntity", -8); NETVAR_OFF(m_afButtonLast, int, "CBasePlayer", "m_hConstraintEntity", -24); - NETVAR_OFF(m_flWaterJumpTime, float, "CBasePlayer", "m_fOnTarget", -60); - NETVAR_OFF(m_flSwimSoundTime, float, "CBasePlayer", "m_fOnTarget", -44); - NETVAR_OFF(m_vecLadderNormal, Vec3, "CBasePlayer", "m_fOnTarget", -36); NETVAR_OFF(m_surfaceProps, int, "CBasePlayer", "m_szLastPlaceName", 20); NETVAR_OFF(m_pSurfaceData, void*, "CBasePlayer", "m_szLastPlaceName", 24); NETVAR_OFF(m_surfaceFriction, float, "CBasePlayer", "m_szLastPlaceName", 32); diff --git a/Amalgam/src/SDK/Definitions/Main/CTFPlayer.cpp b/Amalgam/src/SDK/Definitions/Main/CTFPlayer.cpp index c3c8339b..69084a21 100644 --- a/Amalgam/src/SDK/Definitions/Main/CTFPlayer.cpp +++ b/Amalgam/src/SDK/Definitions/Main/CTFPlayer.cpp @@ -110,16 +110,29 @@ bool CTFPlayer::IsUbered() bool CTFPlayer::IsCritBoosted() { - return InCond(TF_COND_CRITBOOSTED) + if (InCond(TF_COND_CRITBOOSTED) || InCond(TF_COND_CRITBOOSTED_PUMPKIN) || InCond(TF_COND_CRITBOOSTED_USER_BUFF) || InCond(TF_COND_CRITBOOSTED_FIRST_BLOOD) || InCond(TF_COND_CRITBOOSTED_BONUS_TIME) || InCond(TF_COND_CRITBOOSTED_CTF_CAPTURE) || InCond(TF_COND_CRITBOOSTED_ON_KILL) - || InCond(TF_COND_CRITBOOSTED_RAGE_BUFF) || InCond(TF_COND_CRITBOOSTED_CARD_EFFECT) - || InCond(TF_COND_CRITBOOSTED_RUNE_TEMP); + || InCond(TF_COND_CRITBOOSTED_RUNE_TEMP)) + return true; + + auto pWeapon = m_hActiveWeapon()->As(); + if (!pWeapon) + return false; + + auto pWeaponInfo = pWeapon->m_pWeaponInfo(); + if (!pWeaponInfo) + return false; + + if (InCond(TF_COND_CRITBOOSTED_RAGE_BUFF) && pWeaponInfo->m_iWeaponType == TF_WPN_TYPE_PRIMARY) + return true; + + return false; } bool CTFPlayer::IsMiniCritBoosted() diff --git a/Amalgam/src/SDK/Definitions/Main/CTFPlayer.h b/Amalgam/src/SDK/Definitions/Main/CTFPlayer.h index 84dddeef..a833cc80 100644 --- a/Amalgam/src/SDK/Definitions/Main/CTFPlayer.h +++ b/Amalgam/src/SDK/Definitions/Main/CTFPlayer.h @@ -187,16 +187,18 @@ public: NETVAR(m_bRegenerating, bool, "CTFPlayer", "m_bRegenerating"); NETVAR(m_hOffHandWeapon, EHANDLE, "CTFPlayer", "m_hOffHandWeapon"); + NETVAR_OFF(m_flTankPressure, float, "CTFPlayer", "m_Shared", 636); NETVAR_OFF(m_flInvisibility, float, "CTFPlayer", "m_flInvisChangeCompleteTime", -8); NETVAR_OFF(m_flPrevInvisibility, float, "CTFPlayer", "m_flInvisChangeCompleteTime", -4); - NETVAR_OFF(m_flTankPressure, float, "CTFPlayer", "m_Shared", 636); + NETVAR_OFF(m_pCritBoostSoundLoop, void*, "CTFPlayer", "m_flSpyTranqBuffDuration", 12); + NETVAR_OFF(m_bScattergunJump, bool, "CTFPlayer", "m_flSpyTranqBuffDuration", 20); NETVAR_OFF(m_PlayerAnimState, CTFPlayerAnimState*, "CTFPlayer", "m_hItem", -88); - NETVAR_OFF(m_flPrevTauntYaw, float, "CTFPlayer", "m_flTauntYaw", 4); NETVAR_OFF(m_flLastMovementStunChange, float, "CTFPlayer", "m_hItem", -180); NETVAR_OFF(m_flStunLerpTarget, float, "CTFPlayer", "m_hItem", -184); NETVAR_OFF(m_bStunNeedsFadeOut, bool, "CTFPlayer", "m_hItem", -188); NETVAR_OFF(m_bTauntForceMoveForward, bool, "CTFPlayer", "m_bAllowMoveDuringTaunt", 1); NETVAR_OFF(m_flTauntForceMoveForwardSpeed, float, "CTFPlayer", "m_bAllowMoveDuringTaunt", 4); + NETVAR_OFF(m_flPrevTauntYaw, float, "CTFPlayer", "m_flTauntYaw", 4); VIRTUAL(GetMaxHealth, int, 107, this); VIRTUAL(ThirdPersonSwitch, void, 256, this); diff --git a/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.cpp b/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.cpp index 30879a81..96ec4c8c 100644 --- a/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.cpp +++ b/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.cpp @@ -66,7 +66,7 @@ bool CTFWeaponBase::IsInReload() float CTFWeaponBase::GetDamage(bool bAttribHookValue) { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) { if (!bAttribHookValue) #ifdef WEAPONDATA_USES_WEAPONMODE @@ -82,7 +82,7 @@ float CTFWeaponBase::GetDamage(bool bAttribHookValue) float CTFWeaponBase::GetFireRate(bool bAttribHookValue) { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) { if (!bAttribHookValue) #ifdef WEAPONDATA_USES_WEAPONMODE @@ -98,7 +98,7 @@ float CTFWeaponBase::GetFireRate(bool bAttribHookValue) int CTFWeaponBase::GetBulletsPerShot(bool bAttribHookValue) { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) { if (!bAttribHookValue) #ifdef WEAPONDATA_USES_WEAPONMODE @@ -114,7 +114,7 @@ int CTFWeaponBase::GetBulletsPerShot(bool bAttribHookValue) int CTFWeaponBase::GetAmmoPerShot(bool bAttribHookValue) { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) { if (!bAttribHookValue) #ifdef WEAPONDATA_USES_WEAPONMODE @@ -132,29 +132,29 @@ int CTFWeaponBase::GetAmmoPerShot(bool bAttribHookValue) bool CTFWeaponBase::IsRapidFire() { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) #ifdef WEAPONDATA_USES_WEAPONMODE return pWeaponInfo->GetWeaponData(m_iWeaponMode()).m_bUseRapidFireCrits; #else return pWeaponInfo->GetWeaponData(TF_WEAPON_PRIMARY_MODE).m_bUseRapidFireCrits; #endif - return false; + return false; } float CTFWeaponBase::GetSmackDelay() { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) #ifdef WEAPONDATA_USES_WEAPONMODE return pWeaponInfo->GetWeaponData(m_iWeaponMode()).m_flSmackDelay; #else return pWeaponInfo->GetWeaponData(TF_WEAPON_PRIMARY_MODE).m_flSmackDelay; #endif - return 0.2f; + return 0.2f; } float CTFWeaponBase::GetRange() { - if (auto pWeaponInfo = GetWeaponInfo()) + if (auto pWeaponInfo = m_pWeaponInfo()) #ifdef WEAPONDATA_USES_WEAPONMODE return pWeaponInfo->GetWeaponData(m_iWeaponMode()).m_flRange; #else diff --git a/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.h b/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.h index 7842a6ad..9f382c4d 100644 --- a/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.h +++ b/Amalgam/src/SDK/Definitions/Main/CTFWeaponBase.h @@ -190,8 +190,6 @@ public: NETVAR(m_nInspectStage, int, "CTFWeaponBase", "m_nInspectStage"); NETVAR(m_iConsecutiveShots, int, "CTFWeaponBase", "m_iConsecutiveShots"); - NETVAR_OFF(GetWeaponInfo, CTFWeaponInfo*, "CTFWeaponBase", "m_flEffectBarRegenTime", 16); - NETVAR_OFF(m_flSmackTime, float, "CTFWeaponBase", "m_nInspectStage", 28); NETVAR_OFF(m_flCritTokenBucket, float, "CTFWeaponBase", "m_iReloadMode", -244); NETVAR_OFF(m_nCritChecks, int, "CTFWeaponBase", "m_iReloadMode", -240); NETVAR_OFF(m_nCritSeedRequests, int, "CTFWeaponBase", "m_iReloadMode", -236); @@ -199,6 +197,8 @@ public: NETVAR_OFF(m_flCritTime, float, "CTFWeaponBase", "m_flLastCritCheckTime", -4); NETVAR_OFF(m_iCurrentSeed, int, "CTFWeaponBase", "m_flLastCritCheckTime", 8); NETVAR_OFF(m_flLastRapidFireCritCheckTime, float, "CTFWeaponBase", "m_flLastCritCheckTime", 12); + NETVAR_OFF(m_pWeaponInfo, CTFWeaponInfo*, "CTFWeaponBase", "m_flReloadPriorNextFire", 4); + NETVAR_OFF(m_flSmackTime, float, "CTFWeaponBase", "m_nInspectStage", 28); inline void* m_pMeter() { static int nOffset = U::NetVars.GetNetVar("CTFWeaponBase", "m_flEffectBarRegenTime") + -40; diff --git a/Amalgam/src/SDK/Vars.h b/Amalgam/src/SDK/Vars.h index 4461a5d1..3197b04e 100644 --- a/Amalgam/src/SDK/Vars.h +++ b/Amalgam/src/SDK/Vars.h @@ -422,6 +422,7 @@ NAMESPACE_BEGIN(Vars) CVar(ForceCrits, "Force crits", false); CVar(AvoidRandomCrits, "Avoid random crits", false); CVar(AlwaysMeleeCrit, "Always melee crit", false); + CVar(CritEffects, "Crit effects", false); NAMESPACE_END(CritHack) NAMESPACE_BEGIN(Backtrack)