mirror of
https://github.com/rei-2/Amalgam
synced 2026-10-10 04:43:09 +08:00
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:
@@ -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" />
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user