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\RecvProxy_SimulationTime.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\VGuiMenuBuilder_AddMenuItem.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\CTFGCClientSystem.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\IGameMovement.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\IInput.h" />
|
||||
|
||||
@@ -200,6 +200,7 @@
|
||||
<ClCompile Include="src\Hooks\CBasePlayer_CalcObserverView.cpp" />
|
||||
<ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" />
|
||||
<ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" />
|
||||
<ClCompile Include="src\Hooks\CTFPlayer_InSameDisguisedTeam.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\Utils\UtlVector\UtlVector.h" />
|
||||
@@ -585,6 +586,7 @@
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\IMemAlloc.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Main\CPredictionCopy.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" />
|
||||
<ClInclude Include="src\SDK\Definitions\Interfaces\CThirdPersonManager.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="cpp.hint" />
|
||||
|
||||
@@ -318,8 +318,9 @@ void CMenu::MenuAimbot(int iTab)
|
||||
FSlider(Vars::Aimbot::Projectile::SplashNormalSkip, FSliderEnum::Right);
|
||||
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);
|
||||
FToggle(Vars::Aimbot::Projectile::SplashGrates, FSliderEnum::Left);
|
||||
FSlider(Vars::Aimbot::Projectile::Out2NormalCheck, FSliderEnum::Right);
|
||||
FToggle(Vars::Aimbot::Projectile::SplashGrates);
|
||||
FSlider(Vars::Aimbot::Projectile::Out2NormalMin, FSliderEnum::Left);
|
||||
FSlider(Vars::Aimbot::Projectile::Out2NormalMax, FSliderEnum::Right);
|
||||
|
||||
Divider();
|
||||
FText("Misc");
|
||||
@@ -1100,7 +1101,7 @@ void CMenu::MenuMisc(int iTab)
|
||||
if (Section("Queueing"))
|
||||
{
|
||||
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);
|
||||
} EndSection();
|
||||
if (Section("Sound"))
|
||||
@@ -1312,13 +1313,13 @@ void CMenu::MenuLogs(int iTab)
|
||||
|
||||
// text + icons
|
||||
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);
|
||||
SetCursorPos({ vOriginalPos.x + H::Draw.Scale(7), vOriginalPos.y + H::Draw.Scale(6) });
|
||||
if (tPlayer.m_bLocal)
|
||||
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);
|
||||
else if (tPlayer.m_bFriend)
|
||||
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());
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
if (!I::EngineClient->IsPlayingDemo() && FBeginMenu("Votekick"))
|
||||
|
||||
@@ -382,17 +382,17 @@ const char* CPlayerlistUtils::GetPlayerName(int iIndex, const char* sDefault, in
|
||||
switch (iType)
|
||||
{
|
||||
case NameTypeEnum::Local:
|
||||
return "Local";
|
||||
return LOCAL;
|
||||
case NameTypeEnum::Friend:
|
||||
return "Friend";
|
||||
return FRIEND;
|
||||
case NameTypeEnum::Party:
|
||||
return "Party";
|
||||
return PARTY;
|
||||
case NameTypeEnum::Player:
|
||||
if (auto pTag = GetSignificantTag(iIndex, 0))
|
||||
return pTag->m_sName.c_str();
|
||||
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 "Player";
|
||||
return pResource->m_iTeam(I::EngineClient->GetLocalPlayer()) != pResource->m_iTeam(iIndex) ? ENEMY : TEAMMATE;
|
||||
return PLAYER;
|
||||
case NameTypeEnum::Custom:
|
||||
if (auto sAlias = GetPlayerAlias(GetAccountID(iIndex)))
|
||||
return sAlias->c_str();
|
||||
@@ -408,17 +408,17 @@ const char* CPlayerlistUtils::GetPlayerName(uint32_t uAccountID, const char* sDe
|
||||
switch (iType)
|
||||
{
|
||||
case NameTypeEnum::Local:
|
||||
return "Local";
|
||||
return LOCAL;
|
||||
case NameTypeEnum::Friend:
|
||||
return "Friend";
|
||||
return FRIEND;
|
||||
case NameTypeEnum::Party:
|
||||
return "Party";
|
||||
return PARTY;
|
||||
case NameTypeEnum::Player:
|
||||
if (auto pTag = GetSignificantTag(uAccountID, 0))
|
||||
return pTag->m_sName.c_str();
|
||||
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 "Player";
|
||||
return pResource->m_iTeam(I::EngineClient->GetLocalPlayer()) != pResource->m_iTeam(iType) ? ENEMY : TEAMMATE;
|
||||
return PLAYER;
|
||||
case NameTypeEnum::Custom:
|
||||
if (auto sAlias = GetPlayerAlias(uAccountID))
|
||||
return sAlias->c_str();
|
||||
|
||||
@@ -9,6 +9,13 @@
|
||||
#define F2P_TAG (PARTY_TAG-1)
|
||||
#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
|
||||
{
|
||||
std::string m_sName;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
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;
|
||||
|
||||
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 bInterp = iFlags & ProjSimEnum::Interp;
|
||||
bool bReturn = false;
|
||||
|
||||
const float flOldCurrentTime = I::GlobalVars->curtime;
|
||||
I::GlobalVars->curtime = TICKS_TO_TIME(pPlayer->m_nTickBase());
|
||||
bool bReturn = GetInfoMain(pPlayer, pWeapon, vAngles, tProjInfo, iFlags, flAutoCharge);
|
||||
I::GlobalVars->curtime = flOldCurrentTime;
|
||||
if (auto pLocal = bInterp ? H::Entities.GetLocal() : nullptr)
|
||||
{
|
||||
const float flOldCurrentTime = I::GlobalVars->curtime;
|
||||
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;
|
||||
|
||||
if (!bReturn || !bInitCheck)
|
||||
@@ -627,6 +633,9 @@ Vec3 CProjectileSimulation::GetVelocity()
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
#include "Spectate.h"
|
||||
|
||||
void CSpectate::Reset()
|
||||
{
|
||||
m_iIntendedTarget = m_iTarget = -1;
|
||||
}
|
||||
|
||||
void CSpectate::NetUpdateEnd(CTFPlayer* 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;
|
||||
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)
|
||||
@@ -75,4 +77,9 @@ void CSpectate::CreateMove(CUserCmd* pCmd)
|
||||
void CSpectate::SetTarget(int 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
|
||||
{
|
||||
private:
|
||||
int m_iTarget = -1;
|
||||
int m_iIntendedTarget = -1;
|
||||
|
||||
public:
|
||||
void NetUpdateEnd(CTFPlayer* pLocal);
|
||||
void NetUpdateStart(CTFPlayer* pLocal);
|
||||
void CreateMove(CUserCmd* pCmd);
|
||||
void Reset();
|
||||
|
||||
void SetTarget(int iTarget);
|
||||
|
||||
inline bool HasTarget() { return m_iTarget != -1; }
|
||||
|
||||
int m_iTarget = -1;
|
||||
int m_iIntendedTarget = -1;
|
||||
Vec3 m_vOldView = {}; // don't let spectating change viewangles
|
||||
int GetTarget(bool bIntended = false);
|
||||
inline bool HasTarget(bool bIntended = false) { return (bIntended ? m_iIntendedTarget : m_iTarget) != -1; }
|
||||
|
||||
EHANDLE m_hOriginalTarget;
|
||||
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);
|
||||
@@ -5,15 +5,25 @@
|
||||
#include "../FakeAngle/FakeAngle.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)
|
||||
{
|
||||
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", {} } };
|
||||
|
||||
m_tOriginalColor = I::RenderView->GetColorModulation();
|
||||
m_flOriginalBlend = I::RenderView->GetBlend();
|
||||
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
|
||||
|
||||
Begin();
|
||||
if (bTwoModels)
|
||||
{
|
||||
pRenderContext->SetStencilEnable(true);
|
||||
@@ -77,10 +87,7 @@ void CChams::DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext*
|
||||
|
||||
m_mEntities[pEntity->entindex()];
|
||||
}
|
||||
|
||||
I::RenderView->SetColorModulation(m_tOriginalColor);
|
||||
I::RenderView->SetBlend(m_flOriginalBlend);
|
||||
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
|
||||
End();
|
||||
}
|
||||
|
||||
|
||||
@@ -161,8 +168,6 @@ void CChams::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderIn
|
||||
if (!pEntity || !pEntity->IsPlayer())
|
||||
return;
|
||||
|
||||
|
||||
|
||||
std::vector<TickRecord*> vRecords = {};
|
||||
if (!F::Backtrack.GetRecords(pEntity, vRecords))
|
||||
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)
|
||||
{
|
||||
auto pRenderContext = I::MaterialSystem->GetRenderContext();
|
||||
if (!pRenderContext)
|
||||
return;
|
||||
|
||||
|
||||
//auto pRenderContext = I::MaterialSystem->GetRenderContext();
|
||||
//if (!pRenderContext)
|
||||
// return;
|
||||
|
||||
//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)
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
Group_t* pGroup = nullptr;
|
||||
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelWeapon, pGroup) || !pGroup->m_tChams(true))
|
||||
return false;
|
||||
|
||||
m_tOriginalColor = I::RenderView->GetColorModulation();
|
||||
m_flOriginalBlend = I::RenderView->GetBlend();
|
||||
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
|
||||
|
||||
Begin();
|
||||
for (auto& [sName, tColor] : pGroup->m_tChams.Visible)
|
||||
{
|
||||
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)
|
||||
pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW);
|
||||
}
|
||||
|
||||
I::RenderView->SetColorModulation(m_tOriginalColor);
|
||||
I::RenderView->SetBlend(m_flOriginalBlend);
|
||||
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
|
||||
End();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -294,16 +289,11 @@ bool CChams::RenderViewmodel(const DrawModelState_t& pState, const ModelRenderIn
|
||||
if (!pRenderContext)
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
Group_t* pGroup = nullptr;
|
||||
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelHands, pGroup) || !pGroup->m_tChams(true))
|
||||
return false;
|
||||
|
||||
m_tOriginalColor = I::RenderView->GetColorModulation();
|
||||
m_flOriginalBlend = I::RenderView->GetBlend();
|
||||
I::ModelRender->GetMaterialOverride(&m_pOriginalMaterial, &m_iOriginalOverride);
|
||||
|
||||
Begin();
|
||||
for (auto& [sName, tColor] : pGroup->m_tChams.Visible)
|
||||
{
|
||||
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)
|
||||
pRenderContext->CullMode(G::FlipViewmodels ? MATERIAL_CULLMODE_CW : MATERIAL_CULLMODE_CCW);
|
||||
}
|
||||
|
||||
I::RenderView->SetColorModulation(m_tOriginalColor);
|
||||
I::RenderView->SetBlend(m_flOriginalBlend);
|
||||
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
|
||||
End();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -4,6 +4,9 @@
|
||||
class CChams
|
||||
{
|
||||
private:
|
||||
void Begin();
|
||||
void End();
|
||||
|
||||
void DrawModel(CBaseEntity* pEntity, Chams_t& tChams, IMatRenderContext* pRenderContext, bool bTwoModels = true);
|
||||
|
||||
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)
|
||||
{
|
||||
int iIndex = pPlayer->entindex();
|
||||
auto pResource = H::Entities.GetResource();
|
||||
|
||||
int iObserverTarget = pLocal->m_hObserverTarget().GetEntryIndex();
|
||||
int iObserverMode = pLocal->m_iObserverMode();
|
||||
if (F::Spectate.HasTarget())
|
||||
{
|
||||
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)
|
||||
if (int iObserverMode = pLocal->m_iObserverMode();
|
||||
iObserverMode == OBS_MODE_FIRSTPERSON || iObserverMode == OBS_MODE_THIRDPERSON
|
||||
? !I::Input->CAM_IsThirdPerson() && iIndex == I::EngineClient->GetLocalPlayer()
|
||||
: iObserverMode == OBS_MODE_FIRSTPERSON && pLocal->m_hObserverTarget().GetEntryIndex() == iIndex)
|
||||
return;
|
||||
|
||||
int iClassNum = pPlayer->m_iClass();
|
||||
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];
|
||||
tCache.m_flAlpha = pGroup->m_tColor.a / 255.f;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "../FakeAngle/FakeAngle.h"
|
||||
#include "../../Backtrack/Backtrack.h"
|
||||
|
||||
void CGlow::SetupBegin(IMatRenderContext* pRenderContext)
|
||||
void CGlow::Begin()
|
||||
{
|
||||
m_tOriginalColor = I::RenderView->GetColorModulation();
|
||||
m_flOriginalBlend = I::RenderView->GetBlend();
|
||||
@@ -14,6 +14,17 @@ void CGlow::SetupBegin(IMatRenderContext* pRenderContext)
|
||||
I::RenderView->SetBlend(0.f);
|
||||
I::RenderView->SetColorModulation(1.f, 1.f, 1.f);
|
||||
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->SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_ALWAYS);
|
||||
@@ -24,17 +35,24 @@ void CGlow::SetupBegin(IMatRenderContext* pRenderContext)
|
||||
pRenderContext->SetStencilWriteMask(0xFF);
|
||||
pRenderContext->SetStencilTestMask(0x0);
|
||||
}
|
||||
void CGlow::SetupMid(IMatRenderContext* pRenderContext, int w, int h)
|
||||
void CGlow::FirstEnd(IMatRenderContext* pRenderContext)
|
||||
{
|
||||
pRenderContext->SetStencilEnable(false);
|
||||
|
||||
End();
|
||||
}
|
||||
|
||||
void CGlow::SecondBegin(IMatRenderContext* pRenderContext, int w, int h)
|
||||
{
|
||||
Begin();
|
||||
|
||||
pRenderContext->PushRenderTargetAndViewport();
|
||||
pRenderContext->SetRenderTarget(m_pRenderBuffer1);
|
||||
pRenderContext->Viewport(0, 0, w, h);
|
||||
pRenderContext->ClearColor4ub(0, 0, 0, 0);
|
||||
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();
|
||||
|
||||
@@ -82,9 +100,7 @@ void CGlow::SetupEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int
|
||||
|
||||
pRenderContext->SetStencilEnable(false);
|
||||
|
||||
I::RenderView->SetColorModulation(m_tOriginalColor);
|
||||
I::RenderView->SetBlend(m_flOriginalBlend);
|
||||
I::ModelRender->ForcedMaterialOverride(m_pOriginalMaterial, m_iOriginalOverride);
|
||||
End();
|
||||
}
|
||||
|
||||
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();
|
||||
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
|
||||
return F::Materials.ReloadMaterials();
|
||||
|
||||
FirstBegin(pRenderContext);
|
||||
for (auto& [tGlow, vInfo] : m_mEntities)
|
||||
{
|
||||
SetupBegin(pRenderContext);
|
||||
for (auto& tInfo : vInfo)
|
||||
{
|
||||
m_iFlags = tInfo.m_iFlags;
|
||||
DrawModel(tInfo.m_pEntity);
|
||||
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)
|
||||
{
|
||||
I::RenderView->SetColorModulation(tInfo.m_cColor);
|
||||
@@ -178,7 +203,7 @@ void CGlow::RenderMain()
|
||||
DrawModel(tInfo.m_pEntity);
|
||||
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())
|
||||
return;
|
||||
|
||||
|
||||
|
||||
std::vector<TickRecord*> vRecords = {};
|
||||
if (!F::Backtrack.GetRecords(pEntity, vRecords))
|
||||
return;
|
||||
@@ -261,30 +284,27 @@ void CGlow::RenderViewmodel(void* ecx, int flags)
|
||||
if (!F::Groups.GroupsActive())
|
||||
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();
|
||||
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
|
||||
return F::Materials.ReloadMaterials();
|
||||
|
||||
|
||||
|
||||
Group_t* pGroup = nullptr;
|
||||
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelWeapon, pGroup) || !pGroup->m_tGlow())
|
||||
return;
|
||||
|
||||
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
|
||||
SetupBegin(pRenderContext);
|
||||
|
||||
FirstBegin(pRenderContext);
|
||||
CBaseAnimating_InternalDrawModel->Call<int>(ecx, flags);
|
||||
SetupMid(pRenderContext, w, h);
|
||||
FirstEnd(pRenderContext);
|
||||
SecondBegin(pRenderContext, w, h);
|
||||
I::RenderView->SetColorModulation(pGroup->m_tColor);
|
||||
I::RenderView->SetBlend(pGroup->m_tColor.a / 255.f);
|
||||
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);
|
||||
}
|
||||
@@ -293,30 +313,27 @@ void CGlow::RenderViewmodel(const DrawModelState_t& pState, const ModelRenderInf
|
||||
if (!F::Groups.GroupsActive())
|
||||
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();
|
||||
if (!pRenderContext || !m_pMatGlowColor || !m_pMatBlurX || !m_pMatBlurY || !m_pMatHaloAddToScreen)
|
||||
return F::Materials.ReloadMaterials();
|
||||
|
||||
|
||||
|
||||
Group_t* pGroup = nullptr;
|
||||
if (!F::Groups.GetGroup(TargetsEnum::ViewmodelHands, pGroup) || !pGroup->m_tGlow())
|
||||
return;
|
||||
|
||||
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
|
||||
SetupBegin(pRenderContext);
|
||||
|
||||
FirstBegin(pRenderContext);
|
||||
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->SetBlend(pGroup->m_tColor.a / 255.f);
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -6,9 +6,12 @@
|
||||
class CGlow
|
||||
{
|
||||
private:
|
||||
void SetupBegin(IMatRenderContext* pRenderContext);
|
||||
void SetupMid(IMatRenderContext* pRenderContext, int w, int h);
|
||||
void SetupEnd(Glow_t tGlow, IMatRenderContext* pRenderContext, int w, int h);
|
||||
void Begin();
|
||||
void End();
|
||||
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);
|
||||
|
||||
@@ -55,7 +58,8 @@ private:
|
||||
public:
|
||||
|
||||
void Store(CTFPlayer* pLocal);
|
||||
void RenderMain();
|
||||
void RenderFirst();
|
||||
void RenderSecond();
|
||||
void RenderHandler(const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld);
|
||||
|
||||
void RenderViewmodel(void* ecx, int flags);
|
||||
|
||||
@@ -306,9 +306,10 @@ void CMaterials::AddMaterial(const char* sName)
|
||||
auto& tMaterial = m_mMaterials[uHash];
|
||||
|
||||
KeyValues* kv = new KeyValues(sName);
|
||||
kv->LoadFromBuffer(sName, tMaterial.m_sVMT.c_str());
|
||||
ModifyKeyValues(kv);
|
||||
if (!kv->LoadFromBuffer(sName, tMaterial.m_sVMT.c_str()))
|
||||
return;
|
||||
|
||||
ModifyKeyValues(kv);
|
||||
tMaterial.m_pMaterial = Create(sName, kv);
|
||||
//StoreVars(tMaterial);
|
||||
|
||||
@@ -334,9 +335,10 @@ void CMaterials::EditMaterial(const char* sName, const char* sVMT)
|
||||
tMaterial.m_sVMT = sVMT;
|
||||
|
||||
KeyValues* kv = new KeyValues(sName);
|
||||
kv->LoadFromBuffer(sName, sVMT);
|
||||
ModifyKeyValues(kv);
|
||||
if (!kv->LoadFromBuffer(sName, sVMT))
|
||||
return;
|
||||
|
||||
ModifyKeyValues(kv);
|
||||
tMaterial.m_pMaterial = Create(sName, kv);
|
||||
//StoreVars(tMaterial);
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
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);
|
||||
tColor.a = byte(flMap * 255.f);
|
||||
tColor.a *= flMap;
|
||||
if (!tColor.a)
|
||||
return;
|
||||
|
||||
|
||||
@@ -42,32 +42,35 @@ static std::vector<Vec3> SplashTrace(Vec3 vOrigin, float flRadius, Vec3 vNormal
|
||||
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;
|
||||
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;
|
||||
|
||||
Vec3 vAngles = bQuick ? I::EngineClient->GetViewAngles() : G::CurrentUserCmd->viewangles;
|
||||
int iFlags = bQuick ? ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::Quick : ProjSimEnum::Trace | ProjSimEnum::InitCheck;
|
||||
if (bQuick && F::Spectate.HasTarget())
|
||||
Vec3 vAngles = bInterp ? I::EngineClient->GetViewAngles() : G::CurrentUserCmd->viewangles;
|
||||
int iFlags = bInterp ? ProjSimEnum::Trace | ProjSimEnum::InitCheck | ProjSimEnum::Interp : ProjSimEnum::Trace | ProjSimEnum::InitCheck;
|
||||
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())
|
||||
return;
|
||||
|
||||
pWeapon = pPlayer->m_hActiveWeapon()->As<CTFWeaponBase>();
|
||||
if (I::Input->CAM_IsThirdPerson())
|
||||
vAngles = pPlayer->GetEyeAngles();
|
||||
if (!pWeapon || pWeapon->GetWeaponID() == TF_WEAPON_FLAMETHROWER)
|
||||
return;
|
||||
|
||||
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;
|
||||
|
||||
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))
|
||||
return;
|
||||
|
||||
@@ -75,9 +78,13 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
|
||||
CTraceFilterCollideable filter = {};
|
||||
filter.pSkip = pPlayer;
|
||||
int nMask = MASK_SOLID;
|
||||
F::ProjSim.SetupTrace(filter, nMask, pWeapon, 0, bQuick);
|
||||
F::ProjSim.SetupTrace(filter, nMask, pWeapon, 0, bInterp);
|
||||
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));
|
||||
for (int n = 1; n <= iTicks; n++)
|
||||
{
|
||||
@@ -86,16 +93,13 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
|
||||
Vec3 New = F::ProjSim.GetOrigin();
|
||||
|
||||
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())
|
||||
{
|
||||
pNormal = &trace.plane.normal;
|
||||
if (trace.startsolid)
|
||||
*pNormal = F::ProjSim.GetVelocity().Normalized();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (tProjInfo.m_vPath.empty())
|
||||
return;
|
||||
|
||||
@@ -103,7 +107,7 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
|
||||
|
||||
float flRadius = 0.f;
|
||||
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())
|
||||
{
|
||||
@@ -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)
|
||||
{
|
||||
@@ -603,13 +607,13 @@ void CVisuals::DrawHitboxes(int iStore)
|
||||
break;
|
||||
|
||||
auto pLocal = H::Entities.GetLocal();
|
||||
if (pLocal && pLocal->SetupBones(F::Backtrack.m_tRecord.m_aBones, MAXSTUDIOBONES, BONE_USED_BY_ANYTHING, pLocal->m_flSimulationTime()))
|
||||
{
|
||||
auto vBoxes = GetHitboxes(F::Backtrack.m_tRecord.m_aBones, pLocal);
|
||||
for (auto& tBox : vBoxes)
|
||||
tBox.m_tColorEdge = { 255, 255, 255, 255 };
|
||||
s_vLocalHitboxes.insert(s_vLocalHitboxes.end(), vBoxes.begin(), vBoxes.end());
|
||||
}
|
||||
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)
|
||||
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 Tick();
|
||||
|
||||
void ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const bool bQuick = true);
|
||||
void ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const bool bInterp = true);
|
||||
void DrawPickupTimers();
|
||||
void DrawAntiAim(CTFPlayer* pLocal);
|
||||
void DrawDebugInfo(CTFPlayer* pLocal);
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include "../Features/Spectate/Spectate.h"
|
||||
|
||||
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,
|
||||
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);
|
||||
|
||||
Vec3 vOldPunch = pPlayer->m_vecPunchAngle();
|
||||
Vec3 vOriginalPunch = pPlayer->m_vecPunchAngle();
|
||||
pPlayer->m_vecPunchAngle() = {};
|
||||
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/Visuals.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,
|
||||
void* rcx, const CViewSetup* pSetup)
|
||||
@@ -13,22 +16,31 @@ MAKE_HOOK(CClientModeShared_DoPostScreenSpaceEffects, U::Memory.GetVirtual(I::Cl
|
||||
|
||||
if (SDK::CleanScreenshot())
|
||||
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();
|
||||
auto pWeapon = H::Entities.GetWeapon();
|
||||
if (pLocal && pWeapon)
|
||||
F::Visuals.ProjectileTrace(pLocal, pWeapon);
|
||||
F::Visuals.DrawEffects();
|
||||
F::Chams.m_mEntities.clear();
|
||||
if (I::EngineVGui->IsGameUIVisible() || !F::Materials.m_bLoaded)
|
||||
return CALL_ORIGINAL(rcx, pSetup);
|
||||
|
||||
if (!F::CameraWindow.m_bDrawing)
|
||||
{
|
||||
F::Visuals.DrawEffects();
|
||||
F::Chams.m_mEntities.clear();
|
||||
if (!I::EngineVGui->IsGameUIVisible() && F::Materials.m_bLoaded)
|
||||
{
|
||||
F::Chams.RenderMain();
|
||||
F::Glow.RenderMain();
|
||||
}
|
||||
}
|
||||
F::Chams.RenderMain();
|
||||
F::Glow.RenderFirst();
|
||||
|
||||
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);
|
||||
F::EnginePrediction.Unload();
|
||||
F::Spectate.m_iIntendedTarget = -1;
|
||||
F::Spectate.Reset();
|
||||
|
||||
CALL_ORIGINAL(rcx);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ MAKE_HOOK(CHLTVCamera_GetPrimaryTarget, S::CHLTVCamera_GetPrimaryTarget(), CBase
|
||||
auto pHLTVCamera = reinterpret_cast<CHLTVCamera*>(rcx);
|
||||
|
||||
if (F::Spectate.HasTarget())
|
||||
pHLTVCamera->m_iTraget1 = I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget), F::Spectate.m_iTarget = F::Spectate.m_iIntendedTarget = -1;
|
||||
pHLTVCamera->m_iTraget1 = I::EngineClient->GetPlayerForUserID(F::Spectate.GetTarget()), F::Spectate.Reset();
|
||||
|
||||
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);
|
||||
|
||||
#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,
|
||||
void* rcx)
|
||||
{
|
||||
DEBUG_RETURN(CMatchInviteNotification_OnTick, rcx);
|
||||
|
||||
if (Vars::Misc::Queueing::FreezeQueue.Value)
|
||||
*reinterpret_cast<double*>(uintptr_t(rcx) + 616) = 0.0;
|
||||
if (Vars::Misc::Queueing::ExtendQueue.Value)
|
||||
{
|
||||
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);
|
||||
}
|
||||
@@ -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_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(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(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);
|
||||
@@ -19,7 +18,7 @@ MAKE_HOOK(CTFPlayer_ShouldDraw, S::CTFPlayer_ShouldDraw(), bool,
|
||||
if (F::Spectate.HasTarget() && !I::EngineClient->IsHLTV())
|
||||
{
|
||||
auto pLocal = H::Entities.GetLocal();
|
||||
auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.m_iTarget))->As<CTFPlayer>();
|
||||
auto pTarget = I::ClientEntityList->GetClientEntity(I::EngineClient->GetPlayerForUserID(F::Spectate.GetTarget()))->As<CTFPlayer>();
|
||||
if (pLocal && pLocal->IsAlive() && rcx == pLocal->GetClientRenderable())
|
||||
return true;
|
||||
else if (pTarget && pTarget->IsAlive() && rcx == pTarget->GetClientRenderable())
|
||||
@@ -47,7 +46,7 @@ MAKE_HOOK(CBasePlayer_ShouldDrawThisPlayer, S::CBasePlayer_ShouldDrawThisPlayer(
|
||||
return false;
|
||||
|
||||
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)
|
||||
return true;
|
||||
else if (pTarget && pTarget->IsAlive() && rcx == pTarget)
|
||||
@@ -91,12 +90,4 @@ MAKE_HOOK(CBaseCombatWeapon_ShouldDraw, S::CBaseCombatWeapon_ShouldDraw(), bool,
|
||||
}
|
||||
|
||||
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::CheaterDetection.Reset();
|
||||
F::Resolver.Reset();
|
||||
F::Spectate.m_iIntendedTarget = -1;
|
||||
F::Spectate.Reset();
|
||||
|
||||
CALL_ORIGINAL(rcx);
|
||||
}
|
||||
@@ -16,9 +16,9 @@ MAKE_HOOK(ISteamFriends_GetFriendPersonaName, U::Memory.GetVirtual(I::SteamFrien
|
||||
{
|
||||
switch (F::PlayerUtils.GetNameType(steamIDFriend.GetAccountID()))
|
||||
{
|
||||
case NameTypeEnum::Local: return "Local";
|
||||
case NameTypeEnum::Friend: return "Friend";
|
||||
case NameTypeEnum::Party: return "Party";
|
||||
case NameTypeEnum::Local: return LOCAL;
|
||||
case NameTypeEnum::Friend: return FRIEND;
|
||||
case NameTypeEnum::Party: return PARTY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#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(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_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);
|
||||
|
||||
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");
|
||||
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);
|
||||
|
||||
if (!Vars::Visuals::UI::ScoreboardUtility.Value && !command)
|
||||
if (!Vars::Visuals::UI::ScoreboardUtility.Value || !command)
|
||||
return CALL_ORIGINAL(rcx, command);
|
||||
|
||||
auto uHash = FNV1A::Hash32(command);
|
||||
|
||||
@@ -388,6 +388,20 @@
|
||||
#define LIFE_RESPAWNABLE 3
|
||||
#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_MASK ((1<<EF_PARITY_BITS)-1)
|
||||
#define EF_MUZZLEFLASH_BITS 2
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "Interfaces/CHLTVCamera.h"
|
||||
#include "Interfaces/CTFGameRules.h"
|
||||
#include "Interfaces/CTFGCClientSystem.h"
|
||||
#include "Interfaces/CThirdPersonManager.h"
|
||||
#include "Interfaces/CTFPartyClient.h"
|
||||
#include "Interfaces/IClientEntityList.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
|
||||
{
|
||||
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
|
||||
JNB = 1 << 28, // Johannesburg
|
||||
);
|
||||
CVar(FreezeQueue, "Freeze queue", false);
|
||||
CVar(ExtendQueue, "Extend queue", false);
|
||||
CVar(AutoCasualQueue, "Auto casual queue", false);
|
||||
NAMESPACE_END(Queueing)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user