//===============================================================================// // // Purpose: // // $NoKeywords: $ // //===============================================================================// // baseclient.cpp: implementation of the CBaseClient class. // /////////////////////////////////////////////////////////////////////////////////// #include "core/stdafx.h" #include "engine/baseclient.h" #include "engine/baseserver.h" //--------------------------------------------------------------------------------- // Purpose: gets the client from buffer by index //--------------------------------------------------------------------------------- CBaseClient* CBaseClient::GetClient(int nIndex) const { return (CBaseClient*)(std::uintptr_t)(g_pClientBuffer.GetPtr() + (nIndex * sizeof(CBaseClient))); } //--------------------------------------------------------------------------------- // Purpose: gets the userID of this client //--------------------------------------------------------------------------------- std::int32_t CBaseClient::GetUserID(void) const { return m_nUserID; } //--------------------------------------------------------------------------------- // Purpose: gets the userID of this client //--------------------------------------------------------------------------------- std::int64_t CBaseClient::GetOriginID(void) const { return m_nOriginID; } //--------------------------------------------------------------------------------- // Purpose: gets the signon state of this client //--------------------------------------------------------------------------------- SIGNONSTATE CBaseClient::GetSignonState(void) const { return m_nSignonState; } //--------------------------------------------------------------------------------- // Purpose: gets the persistence state of this client //--------------------------------------------------------------------------------- PERSISTENCE CBaseClient::GetPersistenceState(void) const { return m_nPersistenceState; } //--------------------------------------------------------------------------------- // Purpose: gets the net channel of this client //--------------------------------------------------------------------------------- CNetChan* CBaseClient::GetNetChan(void) const { return m_NetChannel; } //--------------------------------------------------------------------------------- // Purpose: sets the userID of this client //--------------------------------------------------------------------------------- void CBaseClient::SetUserID(std::int32_t nUserID) { m_nUserID = nUserID; } //--------------------------------------------------------------------------------- // Purpose: sets the originID of this client //--------------------------------------------------------------------------------- void CBaseClient::SetOriginID(std::int64_t nOriginID) { m_nOriginID = nOriginID; } //--------------------------------------------------------------------------------- // Purpose: sets the signon state of this client //--------------------------------------------------------------------------------- void CBaseClient::SetSignonState(SIGNONSTATE nSignonState) { m_nSignonState = nSignonState; } //--------------------------------------------------------------------------------- // Purpose: sets the persistence state of this client //--------------------------------------------------------------------------------- void CBaseClient::SetPersistenceState(PERSISTENCE nPersistenceState) { m_nPersistenceState = nPersistenceState; } //--------------------------------------------------------------------------------- // Purpose: sets the net channel of this client // !TODO : Remove this and rebuild INetChannel //--------------------------------------------------------------------------------- void CBaseClient::SetNetChan(CNetChan* pNetChan) { m_NetChannel = pNetChan; } //--------------------------------------------------------------------------------- // Purpose: checks if client is connected to server // Output : true if connected, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsConnected(void) const { return m_nSignonState >= SIGNONSTATE::SIGNONSTATE_CONNECTED; } //--------------------------------------------------------------------------------- // Purpose: checks if client is spawned to server // Output : true if connected, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsSpawned(void) const { return m_nSignonState >= SIGNONSTATE::SIGNONSTATE_NEW; } //--------------------------------------------------------------------------------- // Purpose: checks if client is active to server // Output : true if connected, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsActive(void) const { return m_nSignonState == SIGNONSTATE::SIGNONSTATE_FULL; } //--------------------------------------------------------------------------------- // Purpose: checks if client's persistence data is available // Output : true if available, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsPersistenceAvailable(void) const { return m_nPersistenceState >= PERSISTENCE::PERSISTENCE_AVAILABLE; } //--------------------------------------------------------------------------------- // Purpose: checks if client's persistence data is ready // Output : true if ready, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsPersistenceReady(void) const { return m_nPersistenceState == PERSISTENCE::PERSISTENCE_READY; } //--------------------------------------------------------------------------------- // Purpose: checks if client is a fake client // Output : true if connected, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsFakeClient(void) const { return m_bFakePlayer; } //--------------------------------------------------------------------------------- // Purpose: checks if this client is an actual human player // Output : true if human, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::IsHumanPlayer(void) const { if (!IsConnected()) return false; if (IsFakeClient()) return false; return true; } //--------------------------------------------------------------------------------- // Purpose: throw away any residual garbage in the channel // Input : *pBaseClient - //--------------------------------------------------------------------------------- void CBaseClient::Clear(CBaseClient* pBaseClient) { CBaseClient_Clear(pBaseClient); } //--------------------------------------------------------------------------------- // Purpose: connect new client // Input : *pClient - // *szName - // *pNetChannel - // bFakePlayer - // *a5 - // *szMessage - // nMessageSize - // Output : true if connection was succesfull, false otherwise //--------------------------------------------------------------------------------- bool CBaseClient::Connect(CBaseClient* pClient, const char* szName, void* pNetChannel, bool bFakePlayer, void* a5, char* szMessage, int nMessageSize) { return CBaseClient_Connect(pClient, szName, pNetChannel, bFakePlayer, a5, szMessage, nMessageSize); } /////////////////////////////////////////////////////////////////////////////////// void CBaseClient_Attach() { DetourAttach((LPVOID*)&CBaseClient_Clear, &CBaseClient::Clear); DetourAttach((LPVOID*)&CBaseClient_Connect, &CBaseClient::Connect); } void CBaseClient_Detach() { DetourDetach((LPVOID*)&CBaseClient_Clear, &CBaseClient::Clear); DetourDetach((LPVOID*)&CBaseClient_Connect, &CBaseClient::Connect); } /////////////////////////////////////////////////////////////////////////////// CBaseClient* g_pClient = nullptr;