2024-04-05 18:06:36 +02:00
|
|
|
//===========================================================================//
|
|
|
|
//
|
|
|
|
// Purpose: client side data block receiver
|
|
|
|
//
|
|
|
|
//===========================================================================//
|
2023-06-22 00:33:00 +02:00
|
|
|
#ifndef DATABLOCK_RECEIVER_H
|
|
|
|
#define DATABLOCK_RECEIVER_H
|
2024-04-05 18:06:36 +02:00
|
|
|
#include "engine/shared/datablock.h"
|
2023-06-22 00:33:00 +02:00
|
|
|
|
|
|
|
class CClientState;
|
|
|
|
|
|
|
|
class ClientDataBlockReceiver : public NetDataBlockReceiver
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual void AcknowledgeTransmission() override;
|
|
|
|
|
2024-02-19 19:29:47 +01:00
|
|
|
bool ProcessDataBlock(const double startTime, const short transferId, const int transferSize,
|
|
|
|
const short counter, const short currentBlockId, const void* const blockBuffer, const int blockBufferBytes);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct ClientDataBlockHeader_s
|
|
|
|
{
|
|
|
|
char reserved[3]; // unused in retail
|
|
|
|
bool isCompressed;
|
2023-06-22 00:33:00 +02:00
|
|
|
};
|
|
|
|
|
2024-02-19 19:29:47 +01:00
|
|
|
// virtual methods
|
2024-01-02 15:21:36 +01:00
|
|
|
inline void*(*ClientDataBlockReceiver__AcknowledgeTransmission)(ClientDataBlockReceiver* thisptr);
|
2023-06-22 00:33:00 +02:00
|
|
|
|
2024-02-19 19:29:47 +01:00
|
|
|
// non-virtual methods
|
|
|
|
inline bool (*ClientDataBlockReceiver__ProcessDataBlock)(ClientDataBlockReceiver* thisptr, const double time,
|
|
|
|
const short transferId, const int transferSize, const short counter, const short currentBlockId,
|
|
|
|
const void* const blockBuffer, const int blockBufferBytes);
|
|
|
|
|
2023-06-22 00:33:00 +02:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class VClientDataBlockReceiver : public IDetour
|
|
|
|
{
|
|
|
|
virtual void GetAdr(void) const
|
|
|
|
{
|
2024-01-02 15:21:36 +01:00
|
|
|
LogFunAdr("ClientDataBlockReceiver::AcknowledgeTransmission", ClientDataBlockReceiver__AcknowledgeTransmission);
|
2024-02-19 19:29:47 +01:00
|
|
|
LogFunAdr("ClientDataBlockReceiver::ProcessDataBlock", ClientDataBlockReceiver__ProcessDataBlock);
|
2023-06-22 00:33:00 +02:00
|
|
|
}
|
|
|
|
virtual void GetFun(void) const
|
|
|
|
{
|
2024-01-02 15:21:36 +01:00
|
|
|
g_GameDll.FindPatternSIMD("40 53 48 81 EC ?? ?? ?? ?? 4C 8B 51 08").GetPtr(ClientDataBlockReceiver__AcknowledgeTransmission);
|
2024-02-19 19:29:47 +01:00
|
|
|
|
|
|
|
g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 48 89 7C 24 ?? 41 56 48 83 EC 30 0F B7 44 24 ??")
|
|
|
|
.GetPtr(ClientDataBlockReceiver__ProcessDataBlock);
|
2023-06-22 00:33:00 +02:00
|
|
|
}
|
|
|
|
virtual void GetVar(void) const { }
|
|
|
|
virtual void GetCon(void) const { }
|
2024-02-19 19:29:47 +01:00
|
|
|
virtual void Detour(const bool bAttach) const;
|
2023-06-22 00:33:00 +02:00
|
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#endif // DATABLOCK_RECEIVER_H
|