Add Left 4 Dead 2 support
This commit is contained in:
		
							parent
							
								
									e622428037
								
							
						
					
					
						commit
						54b0a16219
					
				@ -31,7 +31,7 @@ else:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
project.sources += sourceFiles
 | 
					project.sources += sourceFiles
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
for sdk_name in ['css', 'tf2', 'dods', 'hl2dm', 'csgo', 'l4d']:
 | 
					for sdk_name in ['css', 'tf2', 'dods', 'hl2dm', 'csgo', 'l4d', 'l4d2']:
 | 
				
			||||||
  if sdk_name not in Extension.sdks:
 | 
					  if sdk_name not in Extension.sdks:
 | 
				
			||||||
    continue
 | 
					    continue
 | 
				
			||||||
  sdk = Extension.sdks[sdk_name]
 | 
					  sdk = Extension.sdks[sdk_name]
 | 
				
			||||||
 | 
				
			|||||||
@ -54,7 +54,7 @@ SH_DECL_HOOK1_void(IClient, Disconnect, SH_NOATTRIB, 0, const char *);
 | 
				
			|||||||
SH_DECL_MANUALHOOK1_void(CBaseClient_Disconnect, 0, 0, 0, const char *);
 | 
					SH_DECL_MANUALHOOK1_void(CBaseClient_Disconnect, 0, 0, 0, const char *);
 | 
				
			||||||
#endif // !WIN32
 | 
					#endif // !WIN32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#elif SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
SH_DECL_MANUALHOOK10(CHLTVServer_ConnectClient, 0, 0, 0, IClient *, const netadr_t &, int, int, int, const char *, const char *, const char *, int, CUtlVector<CLC_SplitPlayerConnect *> &, bool);
 | 
					SH_DECL_MANUALHOOK10(CHLTVServer_ConnectClient, 0, 0, 0, IClient *, const netadr_t &, int, int, int, const char *, const char *, const char *, int, CUtlVector<CLC_SplitPlayerConnect *> &, bool);
 | 
				
			||||||
SH_DECL_MANUALHOOK1_void_vafmt(CHLTVServer_RejectConnection, 0, 0, 0, const netadr_t &);
 | 
					SH_DECL_MANUALHOOK1_void_vafmt(CHLTVServer_RejectConnection, 0, 0, 0, const netadr_t &);
 | 
				
			||||||
SH_DECL_HOOK0_void_vafmt(IClient, Disconnect, SH_NOATTRIB, 0);
 | 
					SH_DECL_HOOK0_void_vafmt(IClient, Disconnect, SH_NOATTRIB, 0);
 | 
				
			||||||
@ -296,7 +296,7 @@ char passwordBuffer[255];
 | 
				
			|||||||
#if SOURCE_ENGINE == SE_CSGO
 | 
					#if SOURCE_ENGINE == SE_CSGO
 | 
				
			||||||
// CHLTVServer::ConnectClient(ns_address const&, int, int, int, char const*, char const*, char const*, int, CUtlVector<CNetMessagePB<16, CCLCMsg_SplitPlayerConnect, 0, true> *, CUtlMemory<CNetMessagePB<16, CCLCMsg_SplitPlayerConnect, 0, true> *, int>> &, bool, CrossPlayPlatform_t, unsigned char const*, int)
 | 
					// CHLTVServer::ConnectClient(ns_address const&, int, int, int, char const*, char const*, char const*, int, CUtlVector<CNetMessagePB<16, CCLCMsg_SplitPlayerConnect, 0, true> *, CUtlMemory<CNetMessagePB<16, CCLCMsg_SplitPlayerConnect, 0, true> *, int>> &, bool, CrossPlayPlatform_t, unsigned char const*, int)
 | 
				
			||||||
IClient *CForwardManager::OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie, CUtlVector<NetMsg_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown, CrossPlayPlatform_t platform, const unsigned char *pUnknown, int iUnknown)
 | 
					IClient *CForwardManager::OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie, CUtlVector<NetMsg_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown, CrossPlayPlatform_t platform, const unsigned char *pUnknown, int iUnknown)
 | 
				
			||||||
#elif SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#elif SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
IClient *CForwardManager::OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie, CUtlVector<CLC_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown)
 | 
					IClient *CForwardManager::OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie, CUtlVector<CLC_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
IClient *CForwardManager::OnSpectatorConnect(netadr_t & address, int nProtocol, int iChallenge, int iClientChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie)
 | 
					IClient *CForwardManager::OnSpectatorConnect(netadr_t & address, int nProtocol, int iChallenge, int iClientChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie)
 | 
				
			||||||
@ -334,7 +334,7 @@ IClient *CForwardManager::OnSpectatorConnect(netadr_t & address, int nProtocol,
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (m_bHasRejectConnectionOffset)
 | 
							if (m_bHasRejectConnectionOffset)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
			SH_MCALL(server, CHLTVServer_RejectConnection)(address, rejectReason);
 | 
								SH_MCALL(server, CHLTVServer_RejectConnection)(address, rejectReason);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
			SH_MCALL(server, CHLTVServer_RejectConnection)(address, iClientChallenge, rejectReason);
 | 
								SH_MCALL(server, CHLTVServer_RejectConnection)(address, iClientChallenge, rejectReason);
 | 
				
			||||||
@ -346,7 +346,7 @@ IClient *CForwardManager::OnSpectatorConnect(netadr_t & address, int nProtocol,
 | 
				
			|||||||
	// Call the original function.
 | 
						// Call the original function.
 | 
				
			||||||
#if SOURCE_ENGINE == SE_CSGO
 | 
					#if SOURCE_ENGINE == SE_CSGO
 | 
				
			||||||
	IClient *client = SH_MCALL(server, CHLTVServer_ConnectClient)(address, nProtocol, iChallenge, nAuthProtocol, pchName, passwordBuffer, pCookie, cbCookie, pSplitPlayerConnectVector, bUnknown, platform, pUnknown, iUnknown);
 | 
						IClient *client = SH_MCALL(server, CHLTVServer_ConnectClient)(address, nProtocol, iChallenge, nAuthProtocol, pchName, passwordBuffer, pCookie, cbCookie, pSplitPlayerConnectVector, bUnknown, platform, pUnknown, iUnknown);
 | 
				
			||||||
#elif SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#elif SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
	IClient *client = SH_MCALL(server, CHLTVServer_ConnectClient)(address, nProtocol, iChallenge, nAuthProtocol, pchName, passwordBuffer, pCookie, cbCookie, pSplitPlayerConnectVector, bUnknown);
 | 
						IClient *client = SH_MCALL(server, CHLTVServer_ConnectClient)(address, nProtocol, iChallenge, nAuthProtocol, pchName, passwordBuffer, pCookie, cbCookie, pSplitPlayerConnectVector, bUnknown);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	IClient *client = SH_MCALL(server, CHLTVServer_ConnectClient)(address, nProtocol, iChallenge, iClientChallenge, nAuthProtocol, pchName, passwordBuffer, pCookie, cbCookie);
 | 
						IClient *client = SH_MCALL(server, CHLTVServer_ConnectClient)(address, nProtocol, iChallenge, iClientChallenge, nAuthProtocol, pchName, passwordBuffer, pCookie, cbCookie);
 | 
				
			||||||
 | 
				
			|||||||
@ -99,7 +99,7 @@ private:
 | 
				
			|||||||
#if SOURCE_ENGINE == SE_CSGO
 | 
					#if SOURCE_ENGINE == SE_CSGO
 | 
				
			||||||
	void OnStopRecording(CGameInfo const *info);
 | 
						void OnStopRecording(CGameInfo const *info);
 | 
				
			||||||
	IClient *OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie, CUtlVector<NetMsg_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown, CrossPlayPlatform_t platform, const unsigned char *pUnknown, int iUnknown);
 | 
						IClient *OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int nAuthProtocol, const char *pchName, const char *pchPassword, const char *pCookie, int cbCookie, CUtlVector<NetMsg_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown, CrossPlayPlatform_t platform, const unsigned char *pUnknown, int iUnknown);
 | 
				
			||||||
#elif SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#elif SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
	void OnStopRecording();
 | 
						void OnStopRecording();
 | 
				
			||||||
	IClient *OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int iClientChallenge, const char * pchName, const char * pchPassword, const char * pCookie, int, CUtlVector<CLC_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown);
 | 
						IClient *OnSpectatorConnect(const netadr_t & address, int nProtocol, int iChallenge, int iClientChallenge, const char * pchName, const char * pchPassword, const char * pCookie, int, CUtlVector<CLC_SplitPlayerConnect *> &pSplitPlayerConnectVector, bool bUnknown);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
				
			|||||||
@ -254,7 +254,7 @@ void HLTVServerWrapper::OnCGameClient_ClientPrintf_Post(const char* buf)
 | 
				
			|||||||
	IClient *pClient = (IClient *)((intptr_t)pGameClient + 4);
 | 
						IClient *pClient = (IClient *)((intptr_t)pGameClient + 4);
 | 
				
			||||||
	HandleClientPrintf(pClient, buf);
 | 
						HandleClientPrintf(pClient, buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#if SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
	// Left4Dead doesn't check the netchan before using it
 | 
						// Left4Dead doesn't check the netchan before using it
 | 
				
			||||||
	RETURN_META(MRES_SUPERCEDE);
 | 
						RETURN_META(MRES_SUPERCEDE);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@ -267,7 +267,7 @@ void HLTVServerWrapper::OnIClient_ClientPrintf_Post(const char* buf)
 | 
				
			|||||||
	IClient *pClient = META_IFACEPTR(IClient);
 | 
						IClient *pClient = META_IFACEPTR(IClient);
 | 
				
			||||||
	HandleClientPrintf(pClient, buf);
 | 
						HandleClientPrintf(pClient, buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#if SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
	// Left4Dead doesn't check the netchan before using it
 | 
						// Left4Dead doesn't check the netchan before using it
 | 
				
			||||||
	RETURN_META(MRES_SUPERCEDE);
 | 
						RETURN_META(MRES_SUPERCEDE);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ public:
 | 
				
			|||||||
	virtual void	RecordPacket(void) = 0;
 | 
						virtual void	RecordPacket(void) = 0;
 | 
				
			||||||
	virtual void	RecordServerClasses(ServerClass *pClasses) = 0;
 | 
						virtual void	RecordServerClasses(ServerClass *pClasses) = 0;
 | 
				
			||||||
	virtual void	RecordStringTables(void) = 0;
 | 
						virtual void	RecordStringTables(void) = 0;
 | 
				
			||||||
#if SOURCE_ENGINE == SE_LEFT4DEAD
 | 
					#if SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2
 | 
				
			||||||
	virtual void	RecordCustomData(int, void const *, unsigned int) = 0;
 | 
						virtual void	RecordCustomData(int, void const *, unsigned int) = 0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -506,4 +506,174 @@
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						"left4dead2"
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"Addresses"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"host_client"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"signature"	"host_client"
 | 
				
			||||||
 | 
										"read" "32"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									"linux"
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"signature" "host_client"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::m_DemoRecorder"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"signature"	"CHLTVServer::Shutdown"
 | 
				
			||||||
 | 
										"read"	"5"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									"linux"
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"signature"	"CHLTVServer::Shutdown"
 | 
				
			||||||
 | 
										"read"	"12"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							"Offsets"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"CNetChan::SendNetMsg"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"41"
 | 
				
			||||||
 | 
									"linux"	"42"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CBaseClient::m_NetChannel"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"224"
 | 
				
			||||||
 | 
									"linux"	"228"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CGameClient::ClientPrintf"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"linux"	"26"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CBaseServer::BroadcastPrintf"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"36"
 | 
				
			||||||
 | 
									"linux"		"37"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::ConnectClient"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"50"
 | 
				
			||||||
 | 
									"linux"	"51"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::RejectConnection"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"48"
 | 
				
			||||||
 | 
									"linux"	"49"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::GetChallengeType"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"54"
 | 
				
			||||||
 | 
									"linux"	"55"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CBaseClient::ActivatePlayer"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"15"
 | 
				
			||||||
 | 
									"linux"	"61"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CBaseClient::FireGameEvent"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"1"
 | 
				
			||||||
 | 
									"linux"	"2"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CBaseClient::Disconnect"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"linux"	"15"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::Shutdown"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"42"
 | 
				
			||||||
 | 
									"linux"	"43"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVDirector::m_iPVSEntity"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"16"
 | 
				
			||||||
 | 
									"linux"	"16"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVDirector::m_vPVSOrigin"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"20"
 | 
				
			||||||
 | 
									"linux"	"20"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVDirector::m_nNextShotTick"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"40"
 | 
				
			||||||
 | 
									"linux"	"40"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								"CHLTVDemoRecorder_BaseOffset"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"windows"	"0"
 | 
				
			||||||
 | 
									"linux"	"4"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							"Signatures"
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"host_client"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library"	"engine"
 | 
				
			||||||
 | 
									"linux"	"@host_client"
 | 
				
			||||||
 | 
									// ping(CCommand const&) "Client ping times:\n"
 | 
				
			||||||
 | 
									"windows" "\x55\x8B\xEC\x51\x83\x3D\x2A\x2A\x2A\x2A\x01\x75\x2A"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::BroadcastEventLocal"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library"	"engine"
 | 
				
			||||||
 | 
									"linux"	"@_ZN11CHLTVServer19BroadcastEventLocalEP10IGameEventb"
 | 
				
			||||||
 | 
									// "SourceTV broadcast local event: %s\n"
 | 
				
			||||||
 | 
									"windows"	"\x55\x8B\xEC\x81\xEC\x58\x04\x00\x00\xA1\x2A\x2A\x2A\x2A\x33\xC5\x89\x45\xFC\x53\x56"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::BroadcastLocalChat"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library"	"engine"
 | 
				
			||||||
 | 
									"linux"	"@_ZN11CHLTVServer18BroadcastLocalChatEPKcS1_"
 | 
				
			||||||
 | 
									// "hltv_chat"
 | 
				
			||||||
 | 
									"windows"	"\x55\x8B\xEC\x81\xEC\x60\x04\x00\x00\xA1\x2A\x2A\x2A\x2A\x33\xC5\x89\x45\xFC\x8B\x45\x0C\x53\x8B\x5D\x08\x56\x57\x8B\xF1"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVServer::Shutdown"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library"	"engine"
 | 
				
			||||||
 | 
									"linux"	"@_ZN11CHLTVServer8ShutdownEv"
 | 
				
			||||||
 | 
									// "SourceTV stop."
 | 
				
			||||||
 | 
									"windows"	"\x56\x8B\xF1\x8B\x86\x2A\x2A\x2A\x2A\x8B\x50\x2A\x8D\x8E\x2A\x2A\x2A\x2A\xFF\xD2\x8B\x86\x2A\x2A\x2A\x2A\x8B\x50\x2A\x8D\x8E"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// StartRecording and StopRecording are virtual, but get called directly in the linux binary..
 | 
				
			||||||
 | 
								// Need to add a detour.
 | 
				
			||||||
 | 
								"CHLTVDemoRecorder::StartRecording"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library"	"engine"
 | 
				
			||||||
 | 
									"linux"	"@_ZN17CHLTVDemoRecorder14StartRecordingEPKcb"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								"CHLTVDemoRecorder::StopRecording"
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									"library"	"engine"
 | 
				
			||||||
 | 
									"linux"	"@_ZN17CHLTVDemoRecorder13StopRecordingEv"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user