From 6c1f27f10a65106f14e1ea7dfd2bfe2b1695e498 Mon Sep 17 00:00:00 2001 From: Alexander Akulich Date: Wed, 5 Apr 2023 01:22:51 +0300 Subject: [PATCH] Support 'Invisible' infclass character property --- datasrc/network.py | 2 ++ src/game/client/components/players.cpp | 26 ++++++++++++++++++++++++-- src/game/client/gameclient.cpp | 2 ++ src/game/client/gameclient.h | 1 + 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/datasrc/network.py b/datasrc/network.py index 66d34edd812..5fb4898f8a8 100644 --- a/datasrc/network.py +++ b/datasrc/network.py @@ -38,6 +38,7 @@ InfClassPlayerFlags = ["INFECTED", "HOOK_PROTECTION_OFF"] InfClassObjectFlags = ["HAS_SECOND_POSITION"] +InfClassClassInfoFlags = ["IS_INVISIBLE"] Emoticons = ["OOP", "EXCLAMATION", "HEARTS", "DROP", "DOTDOT", "MUSIC", "SORRY", "GHOST", "SUSHI", "SPLATTEE", "DEVILTEE", "ZOMG", "ZZZ", "WTF", "EYES", "QUESTION"] @@ -97,6 +98,7 @@ Flags("PROJECTILEFLAG", ProjectileFlags), Flags("INFCLASS_PLAYER_FLAG", InfClassPlayerFlags), Flags("INFCLASS_OBJECT_FLAG", InfClassObjectFlags), + Flags("INFCLASS_CLASSINFO_FLAG", InfClassClassInfoFlags), ] Objects = [ diff --git a/src/game/client/components/players.cpp b/src/game/client/components/players.cpp index 2002d64ed32..ae956a707b5 100644 --- a/src/game/client/components/players.cpp +++ b/src/game/client/components/players.cpp @@ -373,8 +373,30 @@ void CPlayers::RenderPlayer( bool Local = m_pClient->m_Snap.m_LocalClientID == ClientID; bool OtherTeam = m_pClient->IsOtherTeam(ClientID); float Alpha = (OtherTeam || ClientID < 0) ? g_Config.m_ClShowOthersAlpha / 100.0f : 1.0f; - if((PlayerClass == PLAYERCLASS_GHOST) && (Player.m_Emote == EMOTE_BLINK)) - Alpha = 0.6; + + if(pClientData) + { + bool Invisible = false; + if(m_pClient->m_InfclassDataVersion >= 2) + { + if(pClientData->m_InfClassClassFlags & INFCLASS_CLASSINFO_FLAG_IS_INVISIBLE) + { + Invisible = true; + } + } + else + { + if((PlayerClass == PLAYERCLASS_GHOST) && (Player.m_Emote == EMOTE_BLINK)) + { + Invisible = true; + } + } + + if(Invisible) + { + Alpha = 0.625f; + } + } // set size RenderInfo.m_Size = 64.0f; diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index 1dec3d192ce..ad2b91338ae 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -2095,6 +2095,7 @@ void CGameClient::CClientData::Reset() m_InfClassPlayerClass = -1; m_InfClassCustomSkin = false; + m_InfClassClassFlags = 0; m_InfClassClassData1 = 0; m_Solo = false; @@ -2747,6 +2748,7 @@ void CGameClient::ProcessInfClassPlayerInfo(int ClientID, const CNetObj_InfClass void CGameClient::ProcessInfClassClassInfo(int ClientID, const CNetObj_InfClassClassInfo *pClassInfo) { CClientData *pClient = &m_aClients[ClientID]; + pClient->m_InfClassClassFlags = pClassInfo->m_Flags; pClient->m_InfClassClassData1 = pClassInfo->m_Data1; } diff --git a/src/game/client/gameclient.h b/src/game/client/gameclient.h index dc8977ab7a1..ef393781730 100644 --- a/src/game/client/gameclient.h +++ b/src/game/client/gameclient.h @@ -349,6 +349,7 @@ class CGameClient : public IGameClient int m_InfClassPlayerClass; bool m_InfClassCustomSkin; + int m_InfClassClassFlags; int m_InfClassClassData1; char m_aName[MAX_NAME_LENGTH];