2022-08-15 14:44:54 +02:00
|
|
|
|
//====== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. =======//
|
|
|
|
|
//
|
|
|
|
|
// Purpose:
|
|
|
|
|
//
|
|
|
|
|
// $NoKeywords: $
|
|
|
|
|
//=============================================================================//
|
|
|
|
|
|
2022-02-19 16:42:40 +01:00
|
|
|
|
#pragma once
|
2022-04-30 03:00:24 +02:00
|
|
|
|
#include "tier1/bitbuf.h"
|
2022-08-15 14:44:54 +02:00
|
|
|
|
#include "public/inetmessage.h"
|
2022-08-09 17:18:07 +02:00
|
|
|
|
#include "public/inetmsghandler.h"
|
2022-04-30 03:00:24 +02:00
|
|
|
|
|
2022-08-15 02:59:41 +02:00
|
|
|
|
#define HUD_PRINTNOTIFY 1
|
|
|
|
|
#define HUD_PRINTCONSOLE 2
|
|
|
|
|
#define HUD_PRINTTALK 3
|
|
|
|
|
#define HUD_PRINTCENTER 4
|
2022-02-19 16:42:40 +01:00
|
|
|
|
|
2022-08-15 14:44:54 +02:00
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
|
|
|
// Forward declarations
|
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
|
|
|
class CNetChan;
|
2022-06-23 18:20:17 +02:00
|
|
|
|
|
|
|
|
|
class CNetMessage : public INetMessage
|
2022-04-02 02:48:54 +02:00
|
|
|
|
{
|
2022-04-27 16:29:14 +02:00
|
|
|
|
public:
|
2022-04-02 02:48:54 +02:00
|
|
|
|
int m_nGroup;
|
|
|
|
|
bool m_bReliable;
|
2022-08-15 14:44:54 +02:00
|
|
|
|
CNetChan* m_NetChannel;
|
2022-04-02 02:48:54 +02:00
|
|
|
|
};
|
|
|
|
|
|
2022-08-15 14:44:54 +02:00
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// server messages:
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
2022-06-23 18:20:17 +02:00
|
|
|
|
class SVC_Print : public CNetMessage, IServerMessageHandler
|
2022-04-27 16:29:14 +02:00
|
|
|
|
{
|
|
|
|
|
public:
|
2022-08-15 14:44:54 +02:00
|
|
|
|
virtual ~SVC_Print() {};
|
|
|
|
|
|
|
|
|
|
virtual void SetNetChannel(INetChannel* netchan) = 0;
|
|
|
|
|
virtual void SetReliable(bool state) = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool Process(void) = 0; bool ProcessImpl(void);
|
|
|
|
|
|
|
|
|
|
virtual bool ReadFromBuffer(bf_read& buffer) = 0;
|
|
|
|
|
virtual bool WriteToBuffer(bf_write& buffer) = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool IsReliable(void) const = 0;
|
|
|
|
|
|
|
|
|
|
virtual int GetGroup(void) const = 0;
|
|
|
|
|
virtual int GetType(void) const = 0;
|
|
|
|
|
virtual const char* GetName(void) const = 0;
|
|
|
|
|
virtual INetChannel* GetNetChannel(void) const = 0;
|
|
|
|
|
virtual const char* ToString(void) const = 0;
|
|
|
|
|
virtual size_t GetSize(void) const = 0;
|
2022-04-30 03:00:24 +02:00
|
|
|
|
|
2022-08-15 02:59:41 +02:00
|
|
|
|
const void* m_pData;
|
2022-04-27 16:29:14 +02:00
|
|
|
|
const char* m_szText;
|
2022-04-30 03:00:24 +02:00
|
|
|
|
private:
|
|
|
|
|
char m_szTextBuffer[2048];
|
|
|
|
|
};
|
|
|
|
|
|
2022-06-23 18:20:17 +02:00
|
|
|
|
class SVC_UserMessage : public CNetMessage, IServerMessageHandler
|
2022-04-30 03:00:24 +02:00
|
|
|
|
{
|
|
|
|
|
public:
|
2022-08-15 14:44:54 +02:00
|
|
|
|
virtual ~SVC_UserMessage() {};
|
|
|
|
|
|
|
|
|
|
virtual void SetNetChannel(INetChannel* netchan) = 0;
|
|
|
|
|
virtual void SetReliable(bool state) = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool Process(void) = 0; bool ProcessImpl(void);
|
|
|
|
|
|
|
|
|
|
virtual bool ReadFromBuffer(bf_read& buffer) = 0;
|
|
|
|
|
virtual bool WriteToBuffer(bf_write& buffer) = 0;
|
|
|
|
|
|
|
|
|
|
virtual bool IsReliable(void) const = 0;
|
|
|
|
|
|
|
|
|
|
virtual int GetGroup(void) const = 0;
|
|
|
|
|
virtual int GetType(void) const = 0;
|
|
|
|
|
virtual const char* GetName(void) const = 0;
|
|
|
|
|
virtual INetChannel* GetNetChannel(void) const = 0;
|
|
|
|
|
virtual const char* ToString(void) const = 0;
|
|
|
|
|
virtual size_t GetSize(void) const = 0;
|
2022-04-27 18:42:49 +02:00
|
|
|
|
|
2022-04-30 03:00:24 +02:00
|
|
|
|
int m_nMsgType;
|
|
|
|
|
int m_nLength; // data length in bits
|
|
|
|
|
bf_read m_DataIn;
|
|
|
|
|
bf_write m_DataOut;
|
2022-04-27 16:29:14 +02:00
|
|
|
|
};
|
|
|
|
|
|
2022-09-20 22:48:55 +02:00
|
|
|
|
struct NET_StringCmd : CNetMessage, INetMessageHandler
|
|
|
|
|
{
|
|
|
|
|
const char* cmd;
|
|
|
|
|
char buffer[1024];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2022-04-09 02:18:57 +02:00
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
// MM_HEARTBEAT
|
|
|
|
|
//-------------------------------------------------------------------------
|
2022-04-18 03:35:08 +02:00
|
|
|
|
inline CMemory MM_Heartbeat__ToString; // server HeartBeat? (baseserver.cpp).
|
2022-02-19 16:42:40 +01:00
|
|
|
|
|
2022-04-27 16:29:14 +02:00
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
// SVC_Print
|
|
|
|
|
//-------------------------------------------------------------------------
|
2022-04-30 03:00:24 +02:00
|
|
|
|
inline auto SVC_Print_Process = CMemory().RCast<bool(*)(SVC_Print* thisptr)>();
|
2022-09-09 19:47:31 +02:00
|
|
|
|
inline void* g_pSVC_Print_VFTable = nullptr;
|
2022-04-27 16:29:14 +02:00
|
|
|
|
|
2022-04-30 03:00:24 +02:00
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
// SVC_UserMessage
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
inline auto SVC_UserMessage_Process = CMemory().RCast<bool(*)(SVC_UserMessage* thisptr)>();
|
2022-09-09 19:47:31 +02:00
|
|
|
|
inline void* g_pSVC_UserMessage_VFTable = nullptr;
|
2022-04-30 03:00:24 +02:00
|
|
|
|
|
2022-04-27 16:29:14 +02:00
|
|
|
|
void CNetMessages_Attach();
|
|
|
|
|
void CNetMessages_Detach();
|
|
|
|
|
|
2022-02-19 16:42:40 +01:00
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
class HMM_Heartbeat : public IDetour
|
|
|
|
|
{
|
2022-04-11 01:44:30 +02:00
|
|
|
|
virtual void GetAdr(void) const
|
2022-02-19 16:42:40 +01:00
|
|
|
|
{
|
2022-05-13 14:53:25 +02:00
|
|
|
|
spdlog::debug("| FUN: MM_Heartbeat::ToString : {:#18x} |\n", MM_Heartbeat__ToString.GetPtr());
|
2022-09-09 19:47:31 +02:00
|
|
|
|
spdlog::debug("| CON: SVC_Print (VFTable) : {:#18x} |\n", reinterpret_cast<uintptr_t>(g_pSVC_Print_VFTable));
|
|
|
|
|
spdlog::debug("| CON: SVC_UserMessage (VFTable) : {:#18x} |\n", reinterpret_cast<uintptr_t>(g_pSVC_UserMessage_VFTable));
|
2022-05-13 14:53:25 +02:00
|
|
|
|
spdlog::debug("+----------------------------------------------------------------+\n");
|
2022-02-19 16:42:40 +01:00
|
|
|
|
}
|
2022-04-18 03:35:08 +02:00
|
|
|
|
virtual void GetFun(void) const
|
|
|
|
|
{
|
2022-12-01 22:44:55 +01:00
|
|
|
|
MM_Heartbeat__ToString = g_GameDll.FindPatternSIMD("48 83 EC 38 E8 ?? ?? ?? ?? 3B 05 ?? ?? ?? ??");
|
2022-06-23 21:08:56 +02:00
|
|
|
|
// 48 83 EC 38 E8 ? ? ? ? 3B 05 ? ? ? ?
|
2022-04-27 16:29:14 +02:00
|
|
|
|
}
|
2022-08-15 14:44:54 +02:00
|
|
|
|
virtual void GetVar(void) const { }
|
|
|
|
|
virtual void GetCon(void) const
|
|
|
|
|
{
|
2022-09-09 19:47:31 +02:00
|
|
|
|
// We get the actual address of the vftable here, not the class instance.
|
|
|
|
|
g_pSVC_Print_VFTable = g_GameDll.GetVirtualMethodTable(".?AVSVC_Print@@");
|
|
|
|
|
g_pSVC_UserMessage_VFTable = g_GameDll.GetVirtualMethodTable(".?AVSVC_UserMessage@@");
|
2022-04-18 03:35:08 +02:00
|
|
|
|
}
|
2022-04-11 01:44:30 +02:00
|
|
|
|
virtual void Attach(void) const { }
|
|
|
|
|
virtual void Detach(void) const { }
|
2022-02-19 16:42:40 +01:00
|
|
|
|
};
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
REGISTER(HMM_Heartbeat);
|