visual changes and fixes

glow should be more consistent between different types now
also actually stage menu vars for f82af0a5 wow amazing
This commit is contained in:
rei-2
2026-02-22 03:54:22 -05:00
parent 0e607a1190
commit ed04dd5816
33 changed files with 358 additions and 190 deletions
+2
View File
@@ -1055,6 +1055,7 @@
<ClCompile Include="src\Hooks\NotificationQueue_Add.cpp" /> <ClCompile Include="src\Hooks\NotificationQueue_Add.cpp" />
<ClCompile Include="src\Hooks\RecvProxy_SimulationTime.cpp" /> <ClCompile Include="src\Hooks\RecvProxy_SimulationTime.cpp" />
<ClCompile Include="src\Hooks\R_DrawSkyBox.cpp" /> <ClCompile Include="src\Hooks\R_DrawSkyBox.cpp" />
<ClCompile Include="src\Hooks\CTFPlayer_InSameDisguisedTeam.cpp" />
<ClCompile Include="src\Hooks\TF_IsHolidayActive.cpp" /> <ClCompile Include="src\Hooks\TF_IsHolidayActive.cpp" />
<ClCompile Include="src\Hooks\VGuiMenuBuilder_AddMenuItem.cpp" /> <ClCompile Include="src\Hooks\VGuiMenuBuilder_AddMenuItem.cpp" />
<ClCompile Include="src\SDK\Definitions\Main\CBaseAnimating.cpp" /> <ClCompile Include="src\SDK\Definitions\Main\CBaseAnimating.cpp" />
@@ -1255,6 +1256,7 @@
<ClInclude Include="src\SDK\Definitions\Interfaces\CTFGameRules.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\CTFGameRules.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CTFGCClientSystem.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\CTFGCClientSystem.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLClient.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\CHLClient.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CThirdPersonManager.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IFileSystem.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\IFileSystem.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IGameMovement.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\IGameMovement.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IInput.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\IInput.h" />
+2
View File
@@ -200,6 +200,7 @@
<ClCompile Include="src\Hooks\CBasePlayer_CalcObserverView.cpp" /> <ClCompile Include="src\Hooks\CBasePlayer_CalcObserverView.cpp" />
<ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" /> <ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" />
<ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" /> <ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" />
<ClCompile Include="src\Hooks\CTFPlayer_InSameDisguisedTeam.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\Utils\UtlVector\UtlVector.h" /> <ClInclude Include="src\Utils\UtlVector\UtlVector.h" />
@@ -585,6 +586,7 @@
<ClInclude Include="src\SDK\Definitions\Interfaces\IMemAlloc.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\IMemAlloc.h" />
<ClInclude Include="src\SDK\Definitions\Main\CPredictionCopy.h" /> <ClInclude Include="src\SDK\Definitions\Main\CPredictionCopy.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" /> <ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CThirdPersonManager.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="cpp.hint" /> <None Include="cpp.hint" />
+7 -6
View File
@@ -318,8 +318,9 @@ void CMenu::MenuAimbot(int iTab)
FSlider(Vars::Aimbot::Projectile::SplashNormalSkip, FSliderEnum::Right); FSlider(Vars::Aimbot::Projectile::SplashNormalSkip, FSliderEnum::Right);
FDropdown(Vars::Aimbot::Projectile::SplashMode, FDropdownEnum::Left); FDropdown(Vars::Aimbot::Projectile::SplashMode, FDropdownEnum::Left);
FDropdown(Vars::Aimbot::Projectile::RocketSplashMode, FDropdownEnum::Right, 0, &Hovered); FTooltip("Special splash type for rockets, more expensive", Hovered); FDropdown(Vars::Aimbot::Projectile::RocketSplashMode, FDropdownEnum::Right, 0, &Hovered); FTooltip("Special splash type for rockets, more expensive", Hovered);
FToggle(Vars::Aimbot::Projectile::SplashGrates, FSliderEnum::Left); FToggle(Vars::Aimbot::Projectile::SplashGrates);
FSlider(Vars::Aimbot::Projectile::Out2NormalCheck, FSliderEnum::Right); FSlider(Vars::Aimbot::Projectile::Out2NormalMin, FSliderEnum::Left);
FSlider(Vars::Aimbot::Projectile::Out2NormalMax, FSliderEnum::Right);
Divider(); Divider();
FText("Misc"); FText("Misc");
@@ -1100,7 +1101,7 @@ void CMenu::MenuMisc(int iTab)
if (Section("Queueing")) if (Section("Queueing"))
{ {
FDropdown(Vars::Misc::Queueing::ForceRegions); FDropdown(Vars::Misc::Queueing::ForceRegions);
FToggle(Vars::Misc::Queueing::FreezeQueue, FToggleEnum::Left); FToggle(Vars::Misc::Queueing::ExtendQueue, FToggleEnum::Left);
FToggle(Vars::Misc::Queueing::AutoCasualQueue, FToggleEnum::Right); FToggle(Vars::Misc::Queueing::AutoCasualQueue, FToggleEnum::Right);
} EndSection(); } EndSection();
if (Section("Sound")) if (Section("Sound"))
@@ -1312,13 +1313,13 @@ void CMenu::MenuLogs(int iTab)
// text + icons // text + icons
int lOffset = H::Draw.Scale(10); int lOffset = H::Draw.Scale(10);
if (tPlayer.m_bLocal || F::Spectate.m_iIntendedTarget == tPlayer.m_iUserID || tPlayer.m_bFriend || tPlayer.m_bParty) if (tPlayer.m_bLocal || F::Spectate.GetTarget(true) == tPlayer.m_iUserID || tPlayer.m_bFriend || tPlayer.m_bParty)
{ {
lOffset += H::Draw.Scale(19); lOffset += H::Draw.Scale(19);
SetCursorPos({ vOriginalPos.x + H::Draw.Scale(7), vOriginalPos.y + H::Draw.Scale(6) }); SetCursorPos({ vOriginalPos.x + H::Draw.Scale(7), vOriginalPos.y + H::Draw.Scale(6) });
if (tPlayer.m_bLocal) if (tPlayer.m_bLocal)
IconImage(ICON_MD_PERSON); IconImage(ICON_MD_PERSON);
else if (F::Spectate.m_iIntendedTarget == tPlayer.m_iUserID) else if (F::Spectate.GetTarget(true) == tPlayer.m_iUserID)
IconImage(ICON_MD_VISIBILITY); IconImage(ICON_MD_VISIBILITY);
else if (tPlayer.m_bFriend) else if (tPlayer.m_bFriend)
IconImage(ICON_MD_GROUP); IconImage(ICON_MD_GROUP);
@@ -1412,7 +1413,7 @@ void CMenu::MenuLogs(int iTab)
I::SteamFriends->ActivateGameOverlayToWebPage(std::format("https://steamhistory.net/id/{}", CSteamID(tPlayer.m_uAccountID, k_EUniversePublic, k_EAccountTypeIndividual).ConvertToUint64()).c_str()); I::SteamFriends->ActivateGameOverlayToWebPage(std::format("https://steamhistory.net/id/{}", CSteamID(tPlayer.m_uAccountID, k_EUniversePublic, k_EAccountTypeIndividual).ConvertToUint64()).c_str());
} }
if (FSelectable(F::Spectate.m_iIntendedTarget == tPlayer.m_iUserID ? "Unspectate" : "Spectate")) if (FSelectable(F::Spectate.GetTarget(true) == tPlayer.m_iUserID ? "Unspectate" : "Spectate"))
F::Spectate.SetTarget(tPlayer.m_iUserID); F::Spectate.SetTarget(tPlayer.m_iUserID);
if (!I::EngineClient->IsPlayingDemo() && FBeginMenu("Votekick")) if (!I::EngineClient->IsPlayingDemo() && FBeginMenu("Votekick"))
+10 -10
View File
@@ -382,17 +382,17 @@ const char* CPlayerlistUtils::GetPlayerName(int iIndex, const char* sDefault, in
switch (iType) switch (iType)
{ {
case NameTypeEnum::Local: case NameTypeEnum::Local:
return "Local"; return LOCAL;
case NameTypeEnum::Friend: case NameTypeEnum::Friend:
return "Friend"; return FRIEND;
case NameTypeEnum::Party: case NameTypeEnum::Party:
return "Party"; return PARTY;
case NameTypeEnum::Player: case NameTypeEnum::Player:
if (auto pTag = GetSignificantTag(iIndex, 0)) if (auto pTag = GetSignificantTag(iIndex, 0))
return pTag->m_sName.c_str(); return pTag->m_sName.c_str();
else if (auto pResource = H::Entities.GetResource(); pResource && pResource->m_bValid(iIndex)) else if (auto pResource = H::Entities.GetResource(); pResource && pResource->m_bValid(iIndex))
return pResource->m_iTeam(I::EngineClient->GetLocalPlayer()) != pResource->m_iTeam(iIndex) ? "Enemy" : "Teammate"; return pResource->m_iTeam(I::EngineClient->GetLocalPlayer()) != pResource->m_iTeam(iIndex) ? ENEMY : TEAMMATE;
return "Player"; return PLAYER;
case NameTypeEnum::Custom: case NameTypeEnum::Custom:
if (auto sAlias = GetPlayerAlias(GetAccountID(iIndex))) if (auto sAlias = GetPlayerAlias(GetAccountID(iIndex)))
return sAlias->c_str(); return sAlias->c_str();
@@ -408,17 +408,17 @@ const char* CPlayerlistUtils::GetPlayerName(uint32_t uAccountID, const char* sDe
switch (iType) switch (iType)
{ {
case NameTypeEnum::Local: case NameTypeEnum::Local:
return "Local"; return LOCAL;
case NameTypeEnum::Friend: case NameTypeEnum::Friend:
return "Friend"; return FRIEND;
case NameTypeEnum::Party: case NameTypeEnum::Party:
return "Party"; return PARTY;
case NameTypeEnum::Player: case NameTypeEnum::Player:
if (auto pTag = GetSignificantTag(uAccountID, 0)) if (auto pTag = GetSignificantTag(uAccountID, 0))
return pTag->m_sName.c_str(); return pTag->m_sName.c_str();
else if (auto pResource = H::Entities.GetResource(); (iType = GetIndex(uAccountID)) && pResource && pResource->m_bValid(iType)) else if (auto pResource = H::Entities.GetResource(); (iType = GetIndex(uAccountID)) && pResource && pResource->m_bValid(iType))
return pResource->m_iTeam(I::EngineClient->GetLocalPlayer()) != pResource->m_iTeam(iType) ? "Enemy" : "Teammate"; return pResource->m_iTeam(I::EngineClient->GetLocalPlayer()) != pResource->m_iTeam(iType) ? ENEMY : TEAMMATE;
return "Player"; return PLAYER;
case NameTypeEnum::Custom: case NameTypeEnum::Custom:
if (auto sAlias = GetPlayerAlias(uAccountID)) if (auto sAlias = GetPlayerAlias(uAccountID))
return sAlias->c_str(); return sAlias->c_str();
@@ -9,6 +9,13 @@
#define F2P_TAG (PARTY_TAG-1) #define F2P_TAG (PARTY_TAG-1)
#define TAG_COUNT (-F2P_TAG) #define TAG_COUNT (-F2P_TAG)
#define LOCAL "Local"
#define FRIEND "Friend"
#define PARTY "Party"
#define ENEMY "Enemy"
#define TEAMMATE "Teammate"
#define PLAYER "Player"
struct ListPlayer struct ListPlayer
{ {
std::string m_sName; std::string m_sName;
@@ -6,7 +6,7 @@
bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, Vec3 vAngles, ProjectileInfo& tProjInfo, int iFlags, float flAutoCharge) bool CProjectileSimulation::GetInfoMain(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, Vec3 vAngles, ProjectileInfo& tProjInfo, int iFlags, float flAutoCharge)
{ {
if (!pPlayer || !pPlayer->IsAlive() || pPlayer->IsAGhost() || pPlayer->IsTaunting() || !pWeapon) if (!pWeapon || !pPlayer->IsAlive() || pPlayer->IsAGhost() || pPlayer->IsTaunting())
return false; return false;
static auto sv_gravity = H::ConVars.FindVar("sv_gravity"); static auto sv_gravity = H::ConVars.FindVar("sv_gravity");
@@ -287,11 +287,17 @@ bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon,
{ {
bool bInitCheck = iFlags & ProjSimEnum::InitCheck; bool bInitCheck = iFlags & ProjSimEnum::InitCheck;
bool bInterp = iFlags & ProjSimEnum::Interp; bool bInterp = iFlags & ProjSimEnum::Interp;
bool bReturn = false;
const float flOldCurrentTime = I::GlobalVars->curtime; if (auto pLocal = bInterp ? H::Entities.GetLocal() : nullptr)
I::GlobalVars->curtime = TICKS_TO_TIME(pPlayer->m_nTickBase()); {
bool bReturn = GetInfoMain(pPlayer, pWeapon, vAngles, tProjInfo, iFlags, flAutoCharge); const float flOldCurrentTime = I::GlobalVars->curtime;
I::GlobalVars->curtime = flOldCurrentTime; I::GlobalVars->curtime = TICKS_TO_TIME(pLocal->m_nTickBase());
bReturn = GetInfoMain(pPlayer, pWeapon, vAngles, tProjInfo, iFlags, flAutoCharge);
I::GlobalVars->curtime = flOldCurrentTime;
}
else
bReturn = GetInfoMain(pPlayer, pWeapon, vAngles, tProjInfo, iFlags, flAutoCharge);
tProjInfo.m_iFlags = iFlags; tProjInfo.m_iFlags = iFlags;
if (!bReturn || !bInitCheck) if (!bReturn || !bInitCheck)
@@ -627,6 +633,9 @@ Vec3 CProjectileSimulation::GetVelocity()
float CProjectileSimulation::GetDesync() float CProjectileSimulation::GetDesync()
{ {
if (I::EngineClient->IsPlayingDemo())
return 0.f;
return I::GlobalVars->curtime - TICKS_TO_TIME(I::ClientState->m_ClockDriftMgr.m_nServerTick) - F::Backtrack.GetReal(); return I::GlobalVars->curtime - TICKS_TO_TIME(I::ClientState->m_ClockDriftMgr.m_nServerTick) - F::Backtrack.GetReal();
} }
+10 -3
View File
@@ -1,5 +1,10 @@
#include "Spectate.h" #include "Spectate.h"
void CSpectate::Reset()
{
m_iIntendedTarget = m_iTarget = -1;
}
void CSpectate::NetUpdateEnd(CTFPlayer* pLocal) void CSpectate::NetUpdateEnd(CTFPlayer* pLocal)
{ {
if (!pLocal) if (!pLocal)
@@ -39,9 +44,6 @@ void CSpectate::NetUpdateEnd(CTFPlayer* pLocal)
} }
pLocal->m_iObserverMode() = Vars::Visuals::Thirdperson::Enabled.Value ? OBS_MODE_THIRDPERSON : OBS_MODE_FIRSTPERSON; pLocal->m_iObserverMode() = Vars::Visuals::Thirdperson::Enabled.Value ? OBS_MODE_THIRDPERSON : OBS_MODE_FIRSTPERSON;
Vars::Visuals::Thirdperson::Enabled.Value ? I::Input->CAM_ToThirdPerson() : I::Input->CAM_ToFirstPerson(); Vars::Visuals::Thirdperson::Enabled.Value ? I::Input->CAM_ToThirdPerson() : I::Input->CAM_ToFirstPerson();
m_hTargetTarget = pLocal->m_hObserverTarget();
m_iTargetMode = pLocal->m_iObserverMode();
} }
void CSpectate::NetUpdateStart(CTFPlayer* pLocal) void CSpectate::NetUpdateStart(CTFPlayer* pLocal)
@@ -75,4 +77,9 @@ void CSpectate::CreateMove(CUserCmd* pCmd)
void CSpectate::SetTarget(int iTarget) void CSpectate::SetTarget(int iTarget)
{ {
m_iIntendedTarget = m_iIntendedTarget == iTarget ? -1 : iTarget; m_iIntendedTarget = m_iIntendedTarget == iTarget ? -1 : iTarget;
}
int CSpectate::GetTarget(bool bIntended)
{
return bIntended ? m_iIntendedTarget : m_iTarget;
} }
+10 -8
View File
@@ -3,22 +3,24 @@
class CSpectate class CSpectate
{ {
private:
int m_iTarget = -1;
int m_iIntendedTarget = -1;
public: public:
void NetUpdateEnd(CTFPlayer* pLocal); void NetUpdateEnd(CTFPlayer* pLocal);
void NetUpdateStart(CTFPlayer* pLocal); void NetUpdateStart(CTFPlayer* pLocal);
void CreateMove(CUserCmd* pCmd); void CreateMove(CUserCmd* pCmd);
void Reset();
void SetTarget(int iTarget); void SetTarget(int iTarget);
int GetTarget(bool bIntended = false);
inline bool HasTarget() { return m_iTarget != -1; } inline bool HasTarget(bool bIntended = false) { return (bIntended ? m_iIntendedTarget : m_iTarget) != -1; }
int m_iTarget = -1;
int m_iIntendedTarget = -1;
Vec3 m_vOldView = {}; // don't let spectating change viewangles
EHANDLE m_hOriginalTarget; EHANDLE m_hOriginalTarget;
int m_iOriginalMode = OBS_MODE_NONE; int m_iOriginalMode = OBS_MODE_NONE;
EHANDLE m_hTargetTarget;
int m_iTargetMode = OBS_MODE_NONE; Vec3 m_vOldView = {}; // don't let spectating change viewangles
}; };
ADD_FEATURE(CSpectate, Spectate); ADD_FEATURE(CSpectate, Spectate);
+22 -35
View File
@@ -5,15 +5,25 @@
#include "../FakeAngle/FakeAngle.h" #include "../FakeAngle/FakeAngle.h"
#include "../../Backtrack/Backtrack.h" #include "../../Backtrack/Backtrack.h"
void CChams::Begin()
{
m_tOriginalColor = I::RenderView->GetColorModulation();
m_flOriginalBlend = I::RenderView->GetBlend();
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
}
void CChams::End()
{
I::RenderView->SetColorModulation(m_tOriginalColor);
I::RenderView->SetBlend(m_flOriginalBlend);
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
}
void CChams::DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext* pRenderContext, bool bTwoModels) void CChams::DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext* pRenderContext, bool bTwoModels)
{ {
const auto& vVisibleMaterials = !tChams.Visible.empty() ? tChams.Visible : std::vector<std::pair<std::string, Color_t>> { { "None", {} } }; const auto& vVisibleMaterials = !tChams.Visible.empty() ? tChams.Visible : std::vector<std::pair<std::string, Color_t>> { { "None", {} } };
const auto& vOccludedMaterials = !tChams.Occluded.empty() ? tChams.Occluded : std::vector<std::pair<std::string, Color_t>> { { "None", {} } }; const auto& vOccludedMaterials = !tChams.Occluded.empty() ? tChams.Occluded : std::vector<std::pair<std::string, Color_t>> { { "None", {} } };
m_tOriginalColor = I::RenderView->GetColorModulation(); Begin();
m_flOriginalBlend = I::RenderView->GetBlend();
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
if (bTwoModels) if (bTwoModels)
{ {
pRenderContext->SetStencilEnable(true); pRenderContext->SetStencilEnable(true);
@@ -77,10 +87,7 @@ void CChams::DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext*
m_mEntities[pEntity->entindex()]; m_mEntities[pEntity->entindex()];
} }
End();
I::RenderView->SetColorModulation(m_tOriginalColor);
I::RenderView->SetBlend(m_flOriginalBlend);
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
} }
@@ -161,8 +168,6 @@ void CChams::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderIn
if (!pEntity || !pEntity->IsPlayer()) if (!pEntity || !pEntity->IsPlayer())
return; return;
std::vector<TickRecord*> vRecords = {}; std::vector<TickRecord*> vRecords = {};
if (!F::Backtrack.GetRecords(pEntity, vRecords)) if (!F::Backtrack.GetRecords(pEntity, vRecords))
return; return;
@@ -214,11 +219,9 @@ void CChams::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderIn
} }
void CChams::RenderFakeAngle(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo) void CChams::RenderFakeAngle(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo)
{ {
auto pRenderContext = I::MaterialSystem->GetRenderContext(); //auto pRenderContext = I::MaterialSystem->GetRenderContext();
if (!pRenderContext) //if (!pRenderContext)
return; // return;
//pRenderContext->DepthRange(0.f, Vars::Chams::FakeAngle::IgnoreZ.Value ? 0.2f : 1.f); //pRenderContext->DepthRange(0.f, Vars::Chams::FakeAngle::IgnoreZ.Value ? 0.2f : 1.f);
@@ -252,16 +255,11 @@ bool CChams::RenderViewmodel(void* ecx, int flags, int* iReturn)
if (!pRenderContext) if (!pRenderContext)
return false; return false;
Group_t* pGroup = nullptr; Group_t* pGroup = nullptr;
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelWeapon, pGroup) || !pGroup->m_tChams(true)) if (!F::Groups.GetGroup(TargetsEnum::ViewmodelWeapon, pGroup) || !pGroup->m_tChams(true))
return false; return false;
m_tOriginalColor = I::RenderView->GetColorModulation(); Begin();
m_flOriginalBlend = I::RenderView->GetBlend();
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
for (auto& [sName, tColor] : pGroup->m_tChams.Visible) for (auto& [sName, tColor] : pGroup->m_tChams.Visible)
{ {
auto pMaterial = F::Materials.GetMaterial(FNV1A::Hash32(sName.c_str())); auto pMaterial = F::Materials.GetMaterial(FNV1A::Hash32(sName.c_str()));
@@ -278,10 +276,7 @@ bool CChams::RenderViewmodel(void* ecx, int flags, int* iReturn)
if (pMaterial && pMaterial->m_bInvertCull) if (pMaterial && pMaterial->m_bInvertCull)
pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW); pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW);
} }
End();
I::RenderView->SetColorModulation(m_tOriginalColor);
I::RenderView->SetBlend(m_flOriginalBlend);
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
return true; return true;
} }
@@ -294,16 +289,11 @@ bool CChams::RenderViewmodel(const DrawModelState_t& pState, const ModelRenderIn
if (!pRenderContext) if (!pRenderContext)
return false; return false;
Group_t* pGroup = nullptr; Group_t* pGroup = nullptr;
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelHands, pGroup) || !pGroup->m_tChams(true)) if (!F::Groups.GetGroup(TargetsEnum::ViewmodelHands, pGroup) || !pGroup->m_tChams(true))
return false; return false;
m_tOriginalColor = I::RenderView->GetColorModulation(); Begin();
m_flOriginalBlend = I::RenderView->GetBlend();
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
for (auto& [sName, tColor] : pGroup->m_tChams.Visible) for (auto& [sName, tColor] : pGroup->m_tChams.Visible)
{ {
auto pMaterial = F::Materials.GetMaterial(FNV1A::Hash32(sName.c_str())); auto pMaterial = F::Materials.GetMaterial(FNV1A::Hash32(sName.c_str()));
@@ -320,10 +310,7 @@ bool CChams::RenderViewmodel(const DrawModelState_t& pState, const ModelRenderIn
if (pMaterial && pMaterial->m_bInvertCull) if (pMaterial && pMaterial->m_bInvertCull)
pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW); pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW);
} }
End();
I::RenderView->SetColorModulation(m_tOriginalColor);
I::RenderView->SetBlend(m_flOriginalBlend);
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
return true; return true;
} }
@@ -4,6 +4,9 @@
class CChams class CChams
{ {
private: private:
void Begin();
void End();
void DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext* pRenderContext, bool bTwoModels = true); void DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext* pRenderContext, bool bTwoModels = true);
void RenderBacktrack(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo); void RenderBacktrack(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo);
+7 -14
View File
@@ -12,24 +12,17 @@ MAKE_SIGNATURE(CEconItemView_GetItemName, "client.dll", "40 53 48 83 EC ? 48 8B
static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* pGroup, std::unordered_map<CBaseEntity*, PlayerCache_t>& mCache) static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* pGroup, std::unordered_map<CBaseEntity*, PlayerCache_t>& mCache)
{ {
int iIndex = pPlayer->entindex(); int iIndex = pPlayer->entindex();
auto pResource = H::Entities.GetResource();
int iObserverTarget = pLocal->m_hObserverTarget().GetEntryIndex(); if (int iObserverMode = pLocal->m_iObserverMode();
int iObserverMode = pLocal->m_iObserverMode(); iObserverMode == OBS_MODE_FIRSTPERSON || iObserverMode == OBS_MODE_THIRDPERSON
if (F::Spectate.HasTarget()) ? !I::Input->CAM_IsThirdPerson() && iIndex == I::EngineClient->GetLocalPlayer()
{ : iObserverMode == OBS_MODE_FIRSTPERSON && pLocal->m_hObserverTarget().GetEntryIndex() == iIndex)
iObserverTarget = F::Spectate.m_hTargetTarget.GetEntryIndex();
iObserverMode = F::Spectate.m_iTargetMode;
}
bool bSpectate = iObserverMode == OBS_MODE_FIRSTPERSON || iObserverMode == OBS_MODE_THIRDPERSON;
bool bLocal = iIndex == I::EngineClient->GetLocalPlayer();
bool bTarget = bSpectate && iObserverTarget == iIndex;
if (!bSpectate ? !I::Input->CAM_IsThirdPerson() && bLocal : iObserverMode == OBS_MODE_FIRSTPERSON && bTarget)
return; return;
int iClassNum = pPlayer->m_iClass();
auto pWeapon = pPlayer->m_hActiveWeapon()->As<CTFWeaponBase>(); auto pWeapon = pPlayer->m_hActiveWeapon()->As<CTFWeaponBase>();
auto pResource = H::Entities.GetResource();
bool bLocal = pPlayer->entindex() == I::EngineClient->GetLocalPlayer();
int iClassNum = pPlayer->m_iClass();
PlayerCache_t& tCache = mCache[pPlayer]; PlayerCache_t& tCache = mCache[pPlayer];
tCache.m_flAlpha = pGroup->m_tColor.a / 255.f; tCache.m_flAlpha = pGroup->m_tColor.a / 255.f;
+51 -34
View File
@@ -5,7 +5,7 @@
#include "../FakeAngle/FakeAngle.h" #include "../FakeAngle/FakeAngle.h"
#include "../../Backtrack/Backtrack.h" #include "../../Backtrack/Backtrack.h"
void CGlow::SetupBegin(IMatRenderContext* pRenderContext) void CGlow::Begin()
{ {
m_tOriginalColor = I::RenderView->GetColorModulation(); m_tOriginalColor = I::RenderView->GetColorModulation();
m_flOriginalBlend = I::RenderView->GetBlend(); m_flOriginalBlend = I::RenderView->GetBlend();
@@ -14,6 +14,17 @@ void CGlow::SetupBegin(IMatRenderContext* pRenderContext)
I::RenderView->SetBlend(0.f); I::RenderView->SetBlend(0.f);
I::RenderView->SetColorModulation(1.f, 1.f, 1.f); I::RenderView->SetColorModulation(1.f, 1.f, 1.f);
I::ModelRender->ForcedMaterialOverride(m_pMatGlowColor); I::ModelRender->ForcedMaterialOverride(m_pMatGlowColor);
}
void CGlow::End()
{
I::RenderView->SetColorModulation(m_tOriginalColor);
I::RenderView->SetBlend(m_flOriginalBlend);
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
}
void CGlow::FirstBegin(IMatRenderContext* pRenderContext)
{
Begin();
pRenderContext->SetStencilEnable(true); pRenderContext->SetStencilEnable(true);
pRenderContext->SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_ALWAYS); pRenderContext->SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_ALWAYS);
@@ -24,17 +35,24 @@ void CGlow::SetupBegin(IMatRenderContext* pRenderContext)
pRenderContext->SetStencilWriteMask(0xFF); pRenderContext->SetStencilWriteMask(0xFF);
pRenderContext->SetStencilTestMask(0x0); pRenderContext->SetStencilTestMask(0x0);
} }
void CGlow::SetupMid(IMatRenderContext* pRenderContext, int w, int h) void CGlow::FirstEnd(IMatRenderContext* pRenderContext)
{ {
pRenderContext->SetStencilEnable(false); pRenderContext->SetStencilEnable(false);
End();
}
void CGlow::SecondBegin(IMatRenderContext* pRenderContext, int w, int h)
{
Begin();
pRenderContext->PushRenderTargetAndViewport(); pRenderContext->PushRenderTargetAndViewport();
pRenderContext->SetRenderTarget(m_pRenderBuffer1); pRenderContext->SetRenderTarget(m_pRenderBuffer1);
pRenderContext->Viewport(0, 0, w, h); pRenderContext->Viewport(0, 0, w, h);
pRenderContext->ClearColor4ub(0, 0, 0, 0); pRenderContext->ClearColor4ub(0, 0, 0, 0);
pRenderContext->ClearBuffers(true, false, false); pRenderContext->ClearBuffers(true, false, false);
} }
void CGlow::SetupEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int h) void CGlow::SecondEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int h)
{ {
pRenderContext->PopRenderTargetAndViewport(); pRenderContext->PopRenderTargetAndViewport();
@@ -82,9 +100,7 @@ void CGlow::SetupEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int
pRenderContext->SetStencilEnable(false); pRenderContext->SetStencilEnable(false);
I::RenderView->SetColorModulation(m_tOriginalColor); End();
I::RenderView->SetBlend(m_flOriginalBlend);
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
} }
void CGlow::DrawModel(CBaseEntity* pEntity) void CGlow::DrawModel(CBaseEntity* pEntity)
@@ -149,26 +165,35 @@ void CGlow::Store(CTFPlayer* pLocal)
} }
} }
void CGlow::RenderMain() void CGlow::RenderFirst()
{ {
const int w = H::Draw.m_nScreenW, h = H::Draw.m_nScreenH;
if (w < 1 || h < 1 || w > 4096 || h > 2160)
return;
auto pRenderContext = I::MaterialSystem->GetRenderContext(); auto pRenderContext = I::MaterialSystem->GetRenderContext();
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen) if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
return F::Materials.ReloadMaterials(); return F::Materials.ReloadMaterials();
FirstBegin(pRenderContext);
for (auto& [tGlow, vInfo] : m_mEntities) for (auto& [tGlow, vInfo] : m_mEntities)
{ {
SetupBegin(pRenderContext);
for (auto& tInfo : vInfo) for (auto& tInfo : vInfo)
{ {
m_iFlags = tInfo.m_iFlags; m_iFlags = tInfo.m_iFlags;
DrawModel(tInfo.m_pEntity); DrawModel(tInfo.m_pEntity);
m_iFlags = false; m_iFlags = false;
} }
SetupMid(pRenderContext, w, h); }
FirstEnd(pRenderContext);
}
void CGlow::RenderSecond()
{
auto pRenderContext = I::MaterialSystem->GetRenderContext();
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
return F::Materials.ReloadMaterials();
const int w = H::Draw.m_nScreenW, h = H::Draw.m_nScreenH;
for (auto& [tGlow, vInfo] : m_mEntities)
{
SecondBegin(pRenderContext, w, h);
for (auto& tInfo : vInfo) for (auto& tInfo : vInfo)
{ {
I::RenderView->SetColorModulation(tInfo.m_cColor); I::RenderView->SetColorModulation(tInfo.m_cColor);
@@ -178,7 +203,7 @@ void CGlow::RenderMain()
DrawModel(tInfo.m_pEntity); DrawModel(tInfo.m_pEntity);
m_iFlags = false; m_iFlags = false;
} }
SetupEnd(tGlow, pRenderContext, w, h); SecondEnd(tGlow, pRenderContext, w, h);
} }
} }
@@ -188,8 +213,6 @@ void CGlow::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderInf
if (!pEntity || !pEntity->IsPlayer()) if (!pEntity || !pEntity->IsPlayer())
return; return;
std::vector<TickRecord*> vRecords = {}; std::vector<TickRecord*> vRecords = {};
if (!F::Backtrack.GetRecords(pEntity, vRecords)) if (!F::Backtrack.GetRecords(pEntity, vRecords))
return; return;
@@ -261,30 +284,27 @@ void CGlow::RenderViewmodel(void* ecx, int flags)
if (!F::Groups.GroupsActive()) if (!F::Groups.GroupsActive())
return; return;
const int w = H::Draw.m_nScreenW, h = H::Draw.m_nScreenH;
if (w < 1 || h < 1 || w > 4096 || h > 2160)
return;
auto pRenderContext = I::MaterialSystem->GetRenderContext(); auto pRenderContext = I::MaterialSystem->GetRenderContext();
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen) if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
return F::Materials.ReloadMaterials(); return F::Materials.ReloadMaterials();
Group_t* pGroup = nullptr; Group_t* pGroup = nullptr;
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelWeapon, pGroup) || !pGroup->m_tGlow()) if (!F::Groups.GetGroup(TargetsEnum::ViewmodelWeapon, pGroup) || !pGroup->m_tGlow())
return; return;
static auto CBaseAnimating_InternalDrawModel = U::Hooks.m_mHooks["CBaseAnimating_InternalDrawModel"]; static auto CBaseAnimating_InternalDrawModel = U::Hooks.m_mHooks["CBaseAnimating_InternalDrawModel"];
const int w = H::Draw.m_nScreenW, h = H::Draw.m_nScreenH;
pRenderContext->CullMode(MATERIAL_CULLMODE_CCW); // glow won't work properly with MATERIAL_CULLMODE_CW pRenderContext->CullMode(MATERIAL_CULLMODE_CCW); // glow won't work properly with MATERIAL_CULLMODE_CW
SetupBegin(pRenderContext);
FirstBegin(pRenderContext);
CBaseAnimating_InternalDrawModel->Call<int>(ecx, flags); CBaseAnimating_InternalDrawModel->Call<int>(ecx, flags);
SetupMid(pRenderContext, w, h); FirstEnd(pRenderContext);
SecondBegin(pRenderContext, w, h);
I::RenderView->SetColorModulation(pGroup->m_tColor); I::RenderView->SetColorModulation(pGroup->m_tColor);
I::RenderView->SetBlend(pGroup->m_tColor.a / 255.f); I::RenderView->SetBlend(pGroup->m_tColor.a / 255.f);
CBaseAnimating_InternalDrawModel->Call<int>(ecx, flags); CBaseAnimating_InternalDrawModel->Call<int>(ecx, flags);
SetupEnd(pGroup->m_tGlow, pRenderContext, w, h); SecondEnd(pGroup->m_tGlow, pRenderContext, w, h);
pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW); pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW);
} }
@@ -293,30 +313,27 @@ void CGlow::RenderViewmodel(const DrawModelState_t& pState, const ModelRenderInf
if (!F::Groups.GroupsActive()) if (!F::Groups.GroupsActive())
return; return;
const int w = H::Draw.m_nScreenW, h = H::Draw.m_nScreenH;
if (w < 1 || h < 1 || w > 4096 || h > 2160)
return;
auto pRenderContext = I::MaterialSystem->GetRenderContext(); auto pRenderContext = I::MaterialSystem->GetRenderContext();
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen) if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
return F::Materials.ReloadMaterials(); return F::Materials.ReloadMaterials();
Group_t* pGroup = nullptr; Group_t* pGroup = nullptr;
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelHands, pGroup) || !pGroup->m_tGlow()) if (!F::Groups.GetGroup(TargetsEnum::ViewmodelHands, pGroup) || !pGroup->m_tGlow())
return; return;
static auto IVModelRender_DrawModelExecute = U::Hooks.m_mHooks["IVModelRender_DrawModelExecute"]; static auto IVModelRender_DrawModelExecute = U::Hooks.m_mHooks["IVModelRender_DrawModelExecute"];
const int w = H::Draw.m_nScreenW, h = H::Draw.m_nScreenH;
pRenderContext->CullMode(MATERIAL_CULLMODE_CCW); // glow won't work properly with MATERIAL_CULLMODE_CW pRenderContext->CullMode(MATERIAL_CULLMODE_CCW); // glow won't work properly with MATERIAL_CULLMODE_CW
SetupBegin(pRenderContext);
FirstBegin(pRenderContext);
IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld); IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld);
SetupMid(pRenderContext, w, h); FirstEnd(pRenderContext);
SecondBegin(pRenderContext, w, h);
I::RenderView->SetColorModulation(pGroup->m_tColor); I::RenderView->SetColorModulation(pGroup->m_tColor);
I::RenderView->SetBlend(pGroup->m_tColor.a / 255.f); I::RenderView->SetBlend(pGroup->m_tColor.a / 255.f);
IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld); IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld);
SetupEnd(pGroup->m_tGlow, pRenderContext, w, h); SecondEnd(pGroup->m_tGlow, pRenderContext, w, h);
pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW); pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW);
} }
+8 -4
View File
@@ -6,9 +6,12 @@
class CGlow class CGlow
{ {
private: private:
void SetupBegin(IMatRenderContext* pRenderContext); void Begin();
void SetupMid(IMatRenderContext* pRenderContext, int w, int h); void End();
void SetupEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int h); void FirstBegin(IMatRenderContext* pRenderContext);
void FirstEnd(IMatRenderContext* pRenderContext);
void SecondBegin(IMatRenderContext* pRenderContext, int w, int h);
void SecondEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int h);
void DrawModel(CBaseEntity* pEntity); void DrawModel(CBaseEntity* pEntity);
@@ -55,7 +58,8 @@ private:
public: public:
void Store(CTFPlayer* pLocal); void Store(CTFPlayer* pLocal);
void RenderMain(); void RenderFirst();
void RenderSecond();
void RenderHandler(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld); void RenderHandler(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld);
void RenderViewmodel(void* ecx, int flags); void RenderViewmodel(void* ecx, int flags);
@@ -306,9 +306,10 @@ void CMaterials::AddMaterial(const char* sName)
auto& tMaterial = m_mMaterials[uHash]; auto& tMaterial = m_mMaterials[uHash];
KeyValues* kv = new KeyValues(sName); KeyValues* kv = new KeyValues(sName);
kv->LoadFromBuffer(sName, tMaterial.m_sVMT.c_str()); if (!kv->LoadFromBuffer(sName, tMaterial.m_sVMT.c_str()))
ModifyKeyValues(kv); return;
ModifyKeyValues(kv);
tMaterial.m_pMaterial = Create(sName, kv); tMaterial.m_pMaterial = Create(sName, kv);
//StoreVars(tMaterial); //StoreVars(tMaterial);
@@ -334,9 +335,10 @@ void CMaterials::EditMaterial(const char* sName, const char* sVMT)
tMaterial.m_sVMT = sVMT; tMaterial.m_sVMT = sVMT;
KeyValues* kv = new KeyValues(sName); KeyValues* kv = new KeyValues(sName);
kv->LoadFromBuffer(sName, sVMT); if (!kv->LoadFromBuffer(sName, sVMT))
ModifyKeyValues(kv); return;
ModifyKeyValues(kv);
tMaterial.m_pMaterial = Create(sName, kv); tMaterial.m_pMaterial = Create(sName, kv);
//StoreVars(tMaterial); //StoreVars(tMaterial);
@@ -5,7 +5,7 @@
void COffscreenArrows::DrawArrowTo(const Vec3& vFromPos, const Vec3& vToPos, Color_t tColor, int iOffset, float flMaxDistance) void COffscreenArrows::DrawArrowTo(const Vec3& vFromPos, const Vec3& vToPos, Color_t tColor, int iOffset, float flMaxDistance)
{ {
float flMap = Math::RemapVal(vFromPos.DistTo(vToPos), flMaxDistance, flMaxDistance * 0.9f, 0.f, 1.f); float flMap = Math::RemapVal(vFromPos.DistTo(vToPos), flMaxDistance, flMaxDistance * 0.9f, 0.f, 1.f);
tColor.a = byte(flMap * 255.f); tColor.a *= flMap;
if (!tColor.a) if (!tColor.a)
return; return;
+29 -25
View File
@@ -42,32 +42,35 @@ static std::vector<Vec3> SplashTrace(Vec3 vOrigin, float flRadius, Vec3 vNormal
return vPoints; return vPoints;
} }
void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const bool bQuick) void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const bool bInterp)
{ {
if (bQuick) if (bInterp)
F::CameraWindow.m_bShouldDraw = false; F::CameraWindow.m_bShouldDraw = false;
if (bQuick ? !Vars::Visuals::Simulation::TrajectoryPath.Value && !Vars::Visuals::Simulation::ProjectileCamera.Value : !Vars::Visuals::Simulation::ShotPath.Value) if (bInterp ? !Vars::Visuals::Simulation::TrajectoryPath.Value && !Vars::Visuals::Simulation::ProjectileCamera.Value : !Vars::Visuals::Simulation::ShotPath.Value)
return; return;
Vec3 vAngles = bQuick ? I::EngineClient->GetViewAngles() : G::CurrentUserCmd->viewangles; Vec3 vAngles = bInterp ? I::EngineClient->GetViewAngles() : G::CurrentUserCmd->viewangles;
int iFlags = bQuick ? ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::Quick : ProjSimEnum::Trace | ProjSimEnum::InitCheck; int iFlags = bInterp ? ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::Interp : ProjSimEnum::Trace | ProjSimEnum::InitCheck;
if (bQuick && F::Spectate.HasTarget()) if (F::Spectate.HasTarget() && bInterp && pPlayer && pPlayer->m_hObserverTarget())
{ {
pPlayer = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget))->As<CTFPlayer>(); bool bThirdperson = pPlayer->m_iObserverMode() != OBS_MODE_FIRSTPERSON;
pPlayer = pPlayer->m_hObserverTarget()->As<CTFPlayer>();
if (!pPlayer || pPlayer->IsDormant()) if (!pPlayer || pPlayer->IsDormant())
return; return;
pWeapon = pPlayer->m_hActiveWeapon()->As<CTFWeaponBase>(); pWeapon = pPlayer->m_hActiveWeapon()->As<CTFWeaponBase>();
if (I::Input->CAM_IsThirdPerson()) if (!pWeapon || pWeapon->GetWeaponID() == TF_WEAPON_FLAMETHROWER)
vAngles = pPlayer->GetEyeAngles(); return;
pPlayer->m_vecViewOffset() = pPlayer->GetViewOffset(); pPlayer->m_vecViewOffset() = pPlayer->GetViewOffset();
if (bThirdperson)
vAngles = pPlayer->GetEyeAngles();
} }
if (!pPlayer || !pWeapon || pWeapon->GetWeaponID() == TF_WEAPON_FLAMETHROWER) else if (!pPlayer || !pWeapon || pWeapon->GetWeaponID() == TF_WEAPON_FLAMETHROWER)
return; return;
ProjectileInfo tProjInfo = {}; ProjectileInfo tProjInfo = {};
if (!F::ProjSim.GetInfo(pPlayer, pWeapon, vAngles, tProjInfo, iFlags, (bQuick && Vars::Aimbot::Projectile::AutoRelease.Value) ? Vars::Aimbot::Projectile::AutoRelease.Value / 100 : -1.f) if (!F::ProjSim.GetInfo(pPlayer, pWeapon, vAngles, tProjInfo, iFlags, (bInterp && Vars::Aimbot::Projectile::AutoRelease.Value) ? Vars::Aimbot::Projectile::AutoRelease.Value / 100 : -1.f)
|| !F::ProjSim.Initialize(tProjInfo)) || !F::ProjSim.Initialize(tProjInfo))
return; return;
@@ -75,9 +78,13 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
CTraceFilterCollideable filter = {}; CTraceFilterCollideable filter = {};
filter.pSkip = pPlayer; filter.pSkip = pPlayer;
int nMask = MASK_SOLID; int nMask = MASK_SOLID;
F::ProjSim.SetupTrace(filter, nMask, pWeapon, 0, bQuick); F::ProjSim.SetupTrace(filter, nMask, pWeapon, 0, bInterp);
Vec3* pNormal = nullptr; Vec3* pNormal = nullptr;
SDK::TraceHull(F::ProjSim.GetOrigin(), F::ProjSim.GetOrigin(), tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
if (trace.startsolid)
return;
int iTicks = TIME_TO_TICKS(std::min(tProjInfo.m_flLifetime, 10.f)); int iTicks = TIME_TO_TICKS(std::min(tProjInfo.m_flLifetime, 10.f));
for (int n = 1; n <= iTicks; n++) for (int n = 1; n <= iTicks; n++)
{ {
@@ -86,16 +93,13 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
Vec3 New = F::ProjSim.GetOrigin(); Vec3 New = F::ProjSim.GetOrigin();
SDK::TraceHull(Old, New, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace); SDK::TraceHull(Old, New, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
F::ProjSim.SetupTrace(filter, nMask, pWeapon, n, bQuick); F::ProjSim.SetupTrace(filter, nMask, pWeapon, n, bInterp);
if (trace.DidHit()) if (trace.DidHit())
{ {
pNormal = &trace.plane.normal; pNormal = &trace.plane.normal;
if (trace.startsolid)
*pNormal = F::ProjSim.GetVelocity().Normalized();
break; break;
} }
} }
if (tProjInfo.m_vPath.empty()) if (tProjInfo.m_vPath.empty())
return; return;
@@ -103,7 +107,7 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
float flRadius = 0.f; float flRadius = 0.f;
Vec3 vEndPos = trace.endpos; Vec3 vEndPos = trace.endpos;
if ((bQuick ? Vars::Visuals::Simulation::TrajectoryPath.Value : Vars::Visuals::Simulation::ShotPath.Value) && Vars::Visuals::Simulation::SplashRadius.Value & Vars::Visuals::Simulation::SplashRadiusEnum::Enabled) if ((bInterp ? Vars::Visuals::Simulation::TrajectoryPath.Value : Vars::Visuals::Simulation::ShotPath.Value) && Vars::Visuals::Simulation::SplashRadius.Value & Vars::Visuals::Simulation::SplashRadiusEnum::Enabled)
{ {
switch (pWeapon->GetWeaponID()) switch (pWeapon->GetWeaponID())
{ {
@@ -143,7 +147,7 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
} }
} }
if (bQuick) if (bInterp)
{ {
if (Vars::Visuals::Simulation::ProjectileCamera.Value && !I::EngineVGui->IsGameUIVisible() && pPlayer->m_vecOrigin().DistTo(trace.endpos) > 500.f) if (Vars::Visuals::Simulation::ProjectileCamera.Value && !I::EngineVGui->IsGameUIVisible() && pPlayer->m_vecOrigin().DistTo(trace.endpos) > 500.f)
{ {
@@ -603,13 +607,13 @@ void CVisuals::DrawHitboxes(int iStore)
break; break;
auto pLocal = H::Entities.GetLocal(); auto pLocal = H::Entities.GetLocal();
if (pLocal && pLocal->SetupBones(F::Backtrack.m_tRecord.m_aBones, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, pLocal->m_flSimulationTime())) if (!pLocal || !pLocal->SetupBones(F::Backtrack.m_tRecord.m_aBones, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, pLocal->m_flSimulationTime()))
{ break;
auto vBoxes = GetHitboxes(F::Backtrack.m_tRecord.m_aBones, pLocal);
for (auto& tBox : vBoxes) auto vBoxes = GetHitboxes(F::Backtrack.m_tRecord.m_aBones, pLocal);
tBox.m_tColorEdge = { 255, 255, 255, 255 }; for (auto& tBox : vBoxes)
s_vLocalHitboxes.insert(s_vLocalHitboxes.end(), vBoxes.begin(), vBoxes.end()); tBox.m_tColorEdge = { 255, 255, 255, 255 };
} s_vLocalHitboxes.insert(s_vLocalHitboxes.end(), vBoxes.begin(), vBoxes.end());
} }
} }
} }
+1 -1
View File
@@ -46,7 +46,7 @@ public:
void Store(); void Store();
void Tick(); void Tick();
void ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const bool bQuick = true); void ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const bool bInterp = true);
void DrawPickupTimers(); void DrawPickupTimers();
void DrawAntiAim(CTFPlayer* pLocal); void DrawAntiAim(CTFPlayer* pLocal);
void DrawDebugInfo(CTFPlayer* pLocal); void DrawDebugInfo(CTFPlayer* pLocal);
+30 -2
View File
@@ -3,6 +3,8 @@
#include "../Features/Spectate/Spectate.h" #include "../Features/Spectate/Spectate.h"
MAKE_SIGNATURE(CBasePlayer_CalcView, "client.dll", "40 57 48 83 EC ? 44 8B 91", 0x0); MAKE_SIGNATURE(CBasePlayer_CalcView, "client.dll", "40 57 48 83 EC ? 44 8B 91", 0x0);
MAKE_SIGNATURE(CTFPlayer_HandleTaunting, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 48 8B D9 E8 ? ? ? ? 48 8B F8 48 85 C0 74 ? 48 8B 00 48 8B CF FF 90 ? ? ? ? 84 C0 75 ? 33 FF 80 BB", 0x0);
MAKE_SIGNATURE(CThirdPersonManager_GetFinalCameraOffset, "client.dll", "F2 0F 10 41 ? 8B 41", 0x0);
MAKE_HOOK(CBasePlayer_CalcView, S::CBasePlayer_CalcView(), void, MAKE_HOOK(CBasePlayer_CalcView, S::CBasePlayer_CalcView(), void,
void* rcx, Vector& eyeOrigin, QAngle& eyeAngles, float& zNear, float& zFar, float& fov) void* rcx, Vector& eyeOrigin, QAngle& eyeAngles, float& zNear, float& zFar, float& fov)
@@ -14,8 +16,34 @@ MAKE_HOOK(CBasePlayer_CalcView, S::CBasePlayer_CalcView(), void,
auto pPlayer = reinterpret_cast<CBasePlayer*>(rcx); auto pPlayer = reinterpret_cast<CBasePlayer*>(rcx);
Vec3 vOldPunch = pPlayer->m_vecPunchAngle(); Vec3 vOriginalPunch = pPlayer->m_vecPunchAngle();
pPlayer->m_vecPunchAngle() = {}; pPlayer->m_vecPunchAngle() = {};
CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles, zNear, zFar, fov); CALL_ORIGINAL(rcx, eyeOrigin, eyeAngles, zNear, zFar, fov);
pPlayer->m_vecPunchAngle() = vOldPunch; pPlayer->m_vecPunchAngle() = vOriginalPunch;
}
MAKE_HOOK(CTFPlayer_HandleTaunting, S::CTFPlayer_HandleTaunting(), void,
void* rcx)
{
DEBUG_RETURN(CTFPlayer_HandleTaunting, rcx);
if (!F::Spectate.HasTarget())
return CALL_ORIGINAL(rcx);
I::ThirdPersonManager->m_bOverrideThirdPerson = false;
}
MAKE_HOOK(CThirdPersonManager_GetFinalCameraOffset, S::CThirdPersonManager_GetFinalCameraOffset(), Vector,
void* rcx)
{
DEBUG_RETURN(CThirdPersonManager_GetFinalCameraOffset, rcx);
if (!F::Spectate.HasTarget())
return CALL_ORIGINAL(rcx);
float flOriginalUpOffset = I::ThirdPersonManager->m_flUpOffset;
I::ThirdPersonManager->m_flUpOffset = 0.f;
Vec3 vReturn = CALL_ORIGINAL(rcx);
I::ThirdPersonManager->m_flUpOffset = flOriginalUpOffset;
return vReturn;
} }
@@ -5,6 +5,9 @@
#include "../Features/Visuals/CameraWindow/CameraWindow.h" #include "../Features/Visuals/CameraWindow/CameraWindow.h"
#include "../Features/Visuals/Visuals.h" #include "../Features/Visuals/Visuals.h"
#include "../Features/Visuals/Materials/Materials.h" #include "../Features/Visuals/Materials/Materials.h"
#include "../Features/Spectate/Spectate.h"
MAKE_SIGNATURE(CViewRender_DrawViewModels, "client.dll", "48 89 5C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 8B FA", 0x0);
MAKE_HOOK(CClientModeShared_DoPostScreenSpaceEffects, U::Memory.GetVirtual(I::ClientModeShared, 39), bool, MAKE_HOOK(CClientModeShared_DoPostScreenSpaceEffects, U::Memory.GetVirtual(I::ClientModeShared, 39), bool,
void* rcx, const CViewSetup* pSetup) void* rcx, const CViewSetup* pSetup)
@@ -13,22 +16,31 @@ MAKE_HOOK(CClientModeShared_DoPostScreenSpaceEffects, U::Memory.GetVirtual(I::Cl
if (SDK::CleanScreenshot()) if (SDK::CleanScreenshot())
return CALL_ORIGINAL(rcx, pSetup); return CALL_ORIGINAL(rcx, pSetup);
F::Visuals.ProjectileTrace(H::Entities.GetLocal(), H::Entities.GetWeapon());
if (F::CameraWindow.m_bDrawing)
return CALL_ORIGINAL(rcx, pSetup);
auto pLocal = H::Entities.GetLocal(); F::Visuals.DrawEffects();
auto pWeapon = H::Entities.GetWeapon(); F::Chams.m_mEntities.clear();
if (pLocal && pWeapon) if (I::EngineVGui->IsGameUIVisible() || !F::Materials.m_bLoaded)
F::Visuals.ProjectileTrace(pLocal, pWeapon); return CALL_ORIGINAL(rcx, pSetup);
if (!F::CameraWindow.m_bDrawing) F::Chams.RenderMain();
{ F::Glow.RenderFirst();
F::Visuals.DrawEffects();
F::Chams.m_mEntities.clear();
if (!I::EngineVGui->IsGameUIVisible() && F::Materials.m_bLoaded)
{
F::Chams.RenderMain();
F::Glow.RenderMain();
}
}
return CALL_ORIGINAL(rcx, pSetup); return CALL_ORIGINAL(rcx, pSetup);
}
MAKE_HOOK(CViewRender_DrawViewModels, S::CViewRender_DrawViewModels(), void,
void* rcx, const CViewSetup& viewRender, bool drawViewmodel)
{
DEBUG_RETURN(CViewRender_DrawViewModels, rcx, viewRender, drawViewmodel);
CALL_ORIGINAL(rcx, viewRender, F::Spectate.HasTarget() && !I::EngineClient->IsHLTV() ? false : drawViewmodel);
if (SDK::CleanScreenshot() || F::CameraWindow.m_bDrawing || I::EngineVGui->IsGameUIVisible() || !F::Materials.m_bLoaded)
return;
F::Glow.RenderSecond();
} }
@@ -10,7 +10,7 @@ MAKE_HOOK(CHLClient_LevelShutdown, U::Memory.GetVirtual(I::Client, 7), void,
H::Entities.Clear(true); H::Entities.Clear(true);
F::EnginePrediction.Unload(); F::EnginePrediction.Unload();
F::Spectate.m_iIntendedTarget = -1; F::Spectate.Reset();
CALL_ORIGINAL(rcx); CALL_ORIGINAL(rcx);
} }
+1 -1
View File
@@ -39,7 +39,7 @@ MAKE_HOOK(CHLTVCamera_GetPrimaryTarget, S::CHLTVCamera_GetPrimaryTarget(), CBase
auto pHLTVCamera = reinterpret_cast<CHLTVCamera*>(rcx); auto pHLTVCamera = reinterpret_cast<CHLTVCamera*>(rcx);
if (F::Spectate.HasTarget()) if (F::Spectate.HasTarget())
pHLTVCamera->m_iTraget1 = I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget), F::Spectate.m_iTarget = F::Spectate.m_iIntendedTarget = -1; pHLTVCamera->m_iTraget1 = I::EngineClient->GetPlayerForUserID(F::Spectate.GetTarget()), F::Spectate.Reset();
return CALL_ORIGINAL(rcx); return CALL_ORIGINAL(rcx);
} }
@@ -2,13 +2,30 @@
MAKE_SIGNATURE(CMatchInviteNotification_OnTick, "client.dll", "40 53 48 83 EC ? 48 8B D9 E8 ? ? ? ? F7 83", 0x0); MAKE_SIGNATURE(CMatchInviteNotification_OnTick, "client.dll", "40 53 48 83 EC ? 48 8B D9 E8 ? ? ? ? F7 83", 0x0);
#define JOIN_TIME (10.0)
#define FULL_TIME (180.0 - JOIN_TIME)
static std::unordered_map<void*, double> s_mLastAutoJoinTime = {};
MAKE_HOOK(CMatchInviteNotification_OnTick, S::CMatchInviteNotification_OnTick(), void, MAKE_HOOK(CMatchInviteNotification_OnTick, S::CMatchInviteNotification_OnTick(), void,
void* rcx) void* rcx)
{ {
DEBUG_RETURN(CMatchInviteNotification_OnTick, rcx); DEBUG_RETURN(CMatchInviteNotification_OnTick, rcx);
if (Vars::Misc::Queueing::FreezeQueue.Value) if (Vars::Misc::Queueing::ExtendQueue.Value)
*reinterpret_cast<double*>(uintptr_t(rcx) + 616) = 0.0; {
auto dFloatTime = SDK::PlatFloatTime();
auto& dAutoJoinTime = *reinterpret_cast<double*>(uintptr_t(rcx) + 616);
auto& dLastAutoJoinTime = s_mLastAutoJoinTime[rcx];
double dExtend = dAutoJoinTime != dLastAutoJoinTime ? FULL_TIME : 0.0;
dLastAutoJoinTime = dAutoJoinTime = std::max(dAutoJoinTime + dExtend, dFloatTime + 1.0);
for (auto& [pMatchInviteNotification, dLastAutoJoinTime] : s_mLastAutoJoinTime)
{
if (dFloatTime > dLastAutoJoinTime)
s_mLastAutoJoinTime.erase(pMatchInviteNotification);
}
}
CALL_ORIGINAL(rcx); CALL_ORIGINAL(rcx);
} }
@@ -0,0 +1,40 @@
#include "../SDK/SDK.h"
#include "../Features/Spectate/Spectate.h"
MAKE_SIGNATURE(CTFPlayer_InSameDisguisedTeam, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 48 8B DA 48 8B F9 48 85 D2 75 ? 32 C0", 0x0);
MAKE_SIGNATURE(CTFFreezePanel_ShouldDraw, "client.dll", "48 81 C1 ? ? ? ? 48 8B 01 48 FF A0 ? ? ? ? CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC 40 55", 0x0);
MAKE_SIGNATURE(CTFFreezePanel_FireGameEvent, "client.dll", "40 55 53 56 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 02", 0x0);
MAKE_HOOK(CTFPlayer_InSameDisguisedTeam, S::CTFPlayer_InSameDisguisedTeam(), bool,
void* rcx, CBaseEntity* pEnt)
{
DEBUG_RETURN(CTFPlayer_InSameDisguisedTeam, rcx, pEnt);
if (F::Spectate.HasTarget())
return true;
return CALL_ORIGINAL(rcx, pEnt);
}
MAKE_HOOK(CTFFreezePanel_ShouldDraw, S::CTFFreezePanel_ShouldDraw(), bool,
void* rcx)
{
DEBUG_RETURN(CTFFreezePanel_ShouldDraw, rcx);
if (F::Spectate.HasTarget())
return false;
return CALL_ORIGINAL(rcx);
}
MAKE_HOOK(CTFFreezePanel_FireGameEvent, S::CTFFreezePanel_FireGameEvent(), void,
void* rcx, IGameEvent* event)
{
DEBUG_RETURN(CTFFreezePanel_FireGameEvent, rcx, event);
if (F::Spectate.HasTarget())
return;
CALL_ORIGINAL(rcx, event);
}
+2 -11
View File
@@ -6,7 +6,6 @@ MAKE_SIGNATURE(CTFPlayer_ShouldDraw, "client.dll", "48 89 74 24 ? 57 48 83 EC ?
MAKE_SIGNATURE(CBasePlayer_ShouldDrawThisPlayer, "client.dll", "48 83 EC ? E8 ? ? ? ? 84 C0 74 ? 48 8B 0D ? ? ? ? 48 85 C9", 0x0); MAKE_SIGNATURE(CBasePlayer_ShouldDrawThisPlayer, "client.dll", "48 83 EC ? E8 ? ? ? ? 84 C0 74 ? 48 8B 0D ? ? ? ? 48 85 C9", 0x0);
MAKE_SIGNATURE(CBasePlayer_ShouldDrawLocalPlayer, "client.dll", "48 83 EC ? 48 8B 0D ? ? ? ? 48 85 C9 74 ? 48 8B 01 FF 50 ? 84 C0 74 ? 8B 05", 0x0); MAKE_SIGNATURE(CBasePlayer_ShouldDrawLocalPlayer, "client.dll", "48 83 EC ? 48 8B 0D ? ? ? ? 48 85 C9 74 ? 48 8B 01 FF 50 ? 84 C0 74 ? 8B 05", 0x0);
MAKE_SIGNATURE(CBaseCombatWeapon_ShouldDraw, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 83 B9 ? ? ? ? ? 48 8B D9 74 ? 8B 81", 0x0); MAKE_SIGNATURE(CBaseCombatWeapon_ShouldDraw, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 83 B9 ? ? ? ? ? 48 8B D9 74 ? 8B 81", 0x0);
MAKE_SIGNATURE(CViewRender_DrawViewModels, "client.dll", "48 89 5C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 8B FA", 0x0);
//MAKE_SIGNATURE(CTFWeaponBase_PostDataUpdate_ShouldDrawThisPlayer_Call, "client.dll", "84 C0 75 ? 8B BE", 0x0); //MAKE_SIGNATURE(CTFWeaponBase_PostDataUpdate_ShouldDrawThisPlayer_Call, "client.dll", "84 C0 75 ? 8B BE", 0x0);
MAKE_SIGNATURE(CBasePlayer_BuildFirstPersonMeathookTransformations_ShouldDrawThisPlayer_Call, "client.dll", "84 C0 0F 84 ? ? ? ? 48 8B 94 24 ? ? ? ? 48 8B CE", 0x0); MAKE_SIGNATURE(CBasePlayer_BuildFirstPersonMeathookTransformations_ShouldDrawThisPlayer_Call, "client.dll", "84 C0 0F 84 ? ? ? ? 48 8B 94 24 ? ? ? ? 48 8B CE", 0x0);
//MAKE_SIGNATURE(CBaseCombatWeapon_CalcOverrideModelIndex_ShouldDrawLocalPlayer_Call, "client.dll", "84 C0 75 ? B8 ? ? ? ? 48 8B 5C 24", 0x0); //MAKE_SIGNATURE(CBaseCombatWeapon_CalcOverrideModelIndex_ShouldDrawLocalPlayer_Call, "client.dll", "84 C0 75 ? B8 ? ? ? ? 48 8B 5C 24", 0x0);
@@ -19,7 +18,7 @@ MAKE_HOOK(CTFPlayer_ShouldDraw, S::CTFPlayer_ShouldDraw(), bool,
if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV()) if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV())
{ {
auto pLocal = H::Entities.GetLocal(); auto pLocal = H::Entities.GetLocal();
auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget))->As<CTFPlayer>(); auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.GetTarget()))->As<CTFPlayer>();
if (pLocal && pLocal->IsAlive() && rcx == pLocal->GetClientRenderable()) if (pLocal && pLocal->IsAlive() && rcx == pLocal->GetClientRenderable())
return true; return true;
else if (pTarget && pTarget->IsAlive() && rcx == pTarget->GetClientRenderable()) else if (pTarget && pTarget->IsAlive() && rcx == pTarget->GetClientRenderable())
@@ -47,7 +46,7 @@ MAKE_HOOK(CBasePlayer_ShouldDrawThisPlayer, S::CBasePlayer_ShouldDrawThisPlayer(
return false; return false;
auto pLocal = H::Entities.GetLocal(); auto pLocal = H::Entities.GetLocal();
auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget))->As<CTFPlayer>(); auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.GetTarget()))->As<CTFPlayer>();
if (pLocal && pLocal->IsAlive() && rcx == pLocal) if (pLocal && pLocal->IsAlive() && rcx == pLocal)
return true; return true;
else if (pTarget && pTarget->IsAlive() && rcx == pTarget) else if (pTarget && pTarget->IsAlive() && rcx == pTarget)
@@ -91,12 +90,4 @@ MAKE_HOOK(CBaseCombatWeapon_ShouldDraw, S::CBaseCombatWeapon_ShouldDraw(), bool,
} }
return CALL_ORIGINAL(rcx); return CALL_ORIGINAL(rcx);
}
MAKE_HOOK(CViewRender_DrawViewModels, S::CViewRender_DrawViewModels(), void,
void* rcx, const CViewSetup& viewRender, bool drawViewmodel)
{
DEBUG_RETURN(CViewRender_DrawViewModels, rcx, viewRender, drawViewmodel);
CALL_ORIGINAL(rcx, viewRender, F::Spectate.HasTarget() && !I::EngineClient->IsHLTV() ? false : drawViewmodel);
} }
+1 -1
View File
@@ -22,7 +22,7 @@ MAKE_HOOK(CViewRender_LevelInit, U::Memory.GetVirtual(I::ViewRender, 1), void,
F::NoSpreadHitscan.Reset(); F::NoSpreadHitscan.Reset();
F::CheaterDetection.Reset(); F::CheaterDetection.Reset();
F::Resolver.Reset(); F::Resolver.Reset();
F::Spectate.m_iIntendedTarget = -1; F::Spectate.Reset();
CALL_ORIGINAL(rcx); CALL_ORIGINAL(rcx);
} }
@@ -16,9 +16,9 @@ MAKE_HOOK(ISteamFriends_GetFriendPersonaName, U::Memory.GetVirtual(I::SteamFrien
{ {
switch (F::PlayerUtils.GetNameType(steamIDFriend.GetAccountID())) switch (F::PlayerUtils.GetNameType(steamIDFriend.GetAccountID()))
{ {
case NameTypeEnum::Local: return "Local"; case NameTypeEnum::Local: return LOCAL;
case NameTypeEnum::Friend: return "Friend"; case NameTypeEnum::Friend: return FRIEND;
case NameTypeEnum::Party: return "Party"; case NameTypeEnum::Party: return PARTY;
} }
} }
@@ -6,7 +6,7 @@
#include "../Features/Visuals/CameraWindow/CameraWindow.h" #include "../Features/Visuals/CameraWindow/CameraWindow.h"
MAKE_SIGNATURE(CBaseAnimating_DrawModel, "client.dll", "4C 8B DC 49 89 5B ? 89 54 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 83 EC ? 48 8B 05 ? ? ? ? 48 8D 3D", 0x0); MAKE_SIGNATURE(CBaseAnimating_DrawModel, "client.dll", "4C 8B DC 49 89 5B ? 89 54 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 83 EC ? 48 8B 05 ? ? ? ? 48 8D 3D", 0x0);
MAKE_SIGNATURE(CEconEntity_DrawOverriddenViewmodel_DrawModel_Call, "client.dll", "41 8B D5 FF 50 ? 8B 97", 0x6); MAKE_SIGNATURE(CEconEntity_DrawOverriddenViewmodel_DrawModel_Call, "client.dll", "8B 97 ? ? ? ? 85 D2 74 ? 83 FA ? 74 ? 0F B7 EA 4C 8B 05 ? ? ? ? 8B CD 49 83 C0 ? 48 C1 E1 ? 4C 03 C1 74 ? C1 EA ? 41 39 50 ? 75 ? 49 8B 18 BA", 0x0);
MAKE_SIGNATURE(CBaseAnimating_InternalDrawModel, "client.dll", "48 8B C4 55 56 48 8D 6C 24 ? 48 81 EC ? ? ? ? 44 8B 81", 0x0); MAKE_SIGNATURE(CBaseAnimating_InternalDrawModel, "client.dll", "48 8B C4 55 56 48 8D 6C 24 ? 48 81 EC ? ? ? ? 44 8B 81", 0x0);
MAKE_HOOK(IVModelRender_DrawModelExecute, U::Memory.GetVirtual(I::ModelRender, 19), void, MAKE_HOOK(IVModelRender_DrawModelExecute, U::Memory.GetVirtual(I::ModelRender, 19), void,
@@ -48,7 +48,7 @@ MAKE_HOOK(VGuiMenuBuilder_AddMenuItem, S::VGuiMenuBuilder_AddMenuItem(), void*,
s_sPlayerName = pResource->GetName(s_iPlayerIndex); s_sPlayerName = pResource->GetName(s_iPlayerIndex);
CALL_ORIGINAL(rcx, "History", "history", "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, I::EngineClient->GetPlayerForUserID(F::Spectate.GetTarget(true)) == s_iPlayerIndex ? "Unspectate" : "Spectate", "specplayer", "profile");
CALL_ORIGINAL(rcx, std::format("Tags for {}", s_sPlayerName).c_str(), "listtags", "tags"); 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++) for (auto it = F::PlayerUtils.m_vTags.begin(); it != F::PlayerUtils.m_vTags.end(); it++)
@@ -77,7 +77,7 @@ MAKE_HOOK(CTFClientScoreBoardDialog_OnCommand, S::CTFClientScoreBoardDialog_OnCo
{ {
DEBUG_RETURN(CTFClientScoreBoardDialog_OnCommand, rcx, command); DEBUG_RETURN(CTFClientScoreBoardDialog_OnCommand, rcx, command);
if (!Vars::Visuals::UI::ScoreboardUtility.Value && !command) if (!Vars::Visuals::UI::ScoreboardUtility.Value || !command)
return CALL_ORIGINAL(rcx, command); return CALL_ORIGINAL(rcx, command);
auto uHash = FNV1A::Hash32(command); auto uHash = FNV1A::Hash32(command);
+14
View File
@@ -388,6 +388,20 @@
#define LIFE_RESPAWNABLE 3 #define LIFE_RESPAWNABLE 3
#define LIFE_DISCARDBODY 4 #define LIFE_DISCARDBODY 4
#define CAM_MIN_DIST 30.0
#define CAM_ANGLE_MOVE .5
#define MAX_ANGLE_DIFF 10.0
#define PITCH_MAX 90.0
#define PITCH_MIN 0
#define YAW_MAX 135.0
#define YAW_MIN -135.0
#define DIST 2
#define CAM_HULL_OFFSET 14.0
#define CAMERA_UP_OFFSET 25.0f
#define CAMERA_OFFSET_LERP_TIME 0.5f
#define CAMERA_UP_OFFSET_LERP_TIME 0.25f
#define EF_PARITY_BITS 3 #define EF_PARITY_BITS 3
#define EF_PARITY_MASK ((1<<EF_PARITY_BITS)-1) #define EF_PARITY_MASK ((1<<EF_PARITY_BITS)-1)
#define EF_MUZZLEFLASH_BITS 2 #define EF_MUZZLEFLASH_BITS 2
+1
View File
@@ -9,6 +9,7 @@
#include "Interfaces/CHLTVCamera.h" #include "Interfaces/CHLTVCamera.h"
#include "Interfaces/CTFGameRules.h" #include "Interfaces/CTFGameRules.h"
#include "Interfaces/CTFGCClientSystem.h" #include "Interfaces/CTFGCClientSystem.h"
#include "Interfaces/CThirdPersonManager.h"
#include "Interfaces/CTFPartyClient.h" #include "Interfaces/CTFPartyClient.h"
#include "Interfaces/IClientEntityList.h" #include "Interfaces/IClientEntityList.h"
#include "Interfaces/ICVar.h" #include "Interfaces/ICVar.h"
@@ -0,0 +1,25 @@
#pragma once
#include "Interface.h"
#include "../Types.h"
class CThirdPersonManager
{
public:
Vector m_vecCameraOffset;
Vector m_vecDesiredCameraOffset;
Vector m_vecCameraOrigin;
bool m_bUseCameraOffsets;
QAngle m_ViewAngles;
float m_flFraction;
float m_flUpFraction;
float m_flTargetFraction;
float m_flTargetUpFraction;
bool m_bOverrideThirdPerson;
bool m_bForced;
float m_flUpOffset;
float m_flLerpTime;
float m_flUpLerpTime;
};
MAKE_INTERFACE_SIGNATURE(CThirdPersonManager, ThirdPersonManager, "client.dll", "48 8D 0D ? ? ? ? 0F 29 BC 24", 0x0, 0);
+1 -1
View File
@@ -1019,7 +1019,7 @@ struct Chams_t
inline bool operator()(bool bVisibleOnly = false) const inline bool operator()(bool bVisibleOnly = false) const
{ {
return bVisibleOnly ? !Visible.empty() : Visible != std::vector<std::pair<std::string, Color_t>>{ { "Original", Color_t() } } || !Occluded.empty(); return Visible != std::vector<std::pair<std::string, Color_t>>{ { "Original", Color_t() } } || !bVisibleOnly && !Occluded.empty();
} }
}; };
+1 -1
View File
@@ -796,7 +796,7 @@ NAMESPACE_BEGIN(Vars)
// Africa // Africa
JNB = 1 << 28, // Johannesburg JNB = 1 << 28, // Johannesburg
); );
CVar(FreezeQueue, "Freeze queue", false); CVar(ExtendQueue, "Extend queue", false);
CVar(AutoCasualQueue, "Auto casual queue", false); CVar(AutoCasualQueue, "Auto casual queue", false);
NAMESPACE_END(Queueing) NAMESPACE_END(Queueing)