112 lines
2.4 KiB
C++
112 lines
2.4 KiB
C++
|
|
#pragma once
|
|
|
|
#include "stringtables.h"
|
|
#include "game/gameevents.h"
|
|
#include "demofile/demotypes.h"
|
|
#include <cstdint>
|
|
|
|
namespace NetMsg
|
|
{
|
|
struct SVC_GameEventList;
|
|
}
|
|
struct Logic;
|
|
class VoiceDataWriter;
|
|
|
|
struct CommandPacket
|
|
{
|
|
unsigned char cmd;
|
|
int32_t tick;
|
|
|
|
void* data;
|
|
};
|
|
|
|
struct NetPacket
|
|
{
|
|
int32_t type;
|
|
void* data;
|
|
};
|
|
|
|
struct PacketTrailingBits
|
|
{
|
|
uint32_t numTrailingBits;
|
|
uint32_t value;
|
|
};
|
|
|
|
#define MAX_PLAYERS 65
|
|
#define MAX_PLAYER_NAME_LENGTH 32
|
|
#define SIGNED_GUID_LEN 32
|
|
#define MAX_CUSTOM_FILES 4
|
|
|
|
// Engine player info, no game related infos here
|
|
// If you change this, change the two byteswap defintions:
|
|
// cdll_client_int.cpp and cdll_engine_int.cpp
|
|
typedef struct player_info_s
|
|
{
|
|
// scoreboard information
|
|
char name[MAX_PLAYER_NAME_LENGTH];
|
|
// local server user ID, unique while server is running
|
|
int userID;
|
|
// global unique player identifer
|
|
char guid[SIGNED_GUID_LEN + 1];
|
|
// friends identification number
|
|
uint32_t friendsID;
|
|
// friends name
|
|
char friendsName[MAX_PLAYER_NAME_LENGTH];
|
|
// true, if player is a bot controlled by game.dll
|
|
bool fakeplayer;
|
|
// true if player is the HLTV proxy
|
|
bool ishltv;
|
|
#if defined( REPLAY_ENABLED )
|
|
// true if player is the Replay proxy
|
|
bool isreplay;
|
|
#endif
|
|
// custom files CRC for this player
|
|
uint32_t customFiles[MAX_CUSTOM_FILES];
|
|
// this counter increases each time the server downloaded a new file
|
|
unsigned char filesDownloaded;
|
|
} player_info_t;
|
|
|
|
struct SourceGameContext
|
|
{
|
|
SourceGameContext(std::string outputDir, std::string outputDirVoice);
|
|
~SourceGameContext();
|
|
bool init();
|
|
|
|
void Start();
|
|
void Finish(bool dirty);
|
|
|
|
void StartCommandPacket(const CommandPacket& packet);
|
|
void EndCommandPacket(const PacketTrailingBits& trailingBits);
|
|
bool IgnoreNetPacketType(int32_t type);
|
|
|
|
void OnNetPacket(NetPacket& packet);
|
|
void OnGameEvent(const char *name, GameEvents::EventDataMap &data);
|
|
void OnStringtable(StringTable* table);
|
|
void UserInfoChanged(int tableIdx, int entryIdx);
|
|
|
|
std::string outputDir;
|
|
std::string outputDirVoice;
|
|
|
|
FILE* outputFp;
|
|
Logic* logic;
|
|
|
|
demoheader_t header;
|
|
int16_t protocol;
|
|
NetMsg::SVC_GameEventList* gameEventList = nullptr;
|
|
StringTableContainer* stringTables = nullptr;
|
|
VoiceDataWriter* voiceWriter = nullptr;
|
|
|
|
int32_t curTick = -1;
|
|
int32_t curFrame = -1;
|
|
|
|
float fTickInterval = -1.f;
|
|
float fTickRate = -1.f;
|
|
|
|
struct
|
|
{
|
|
bool connected;
|
|
player_info_t info;
|
|
} players[MAX_PLAYERS];
|
|
};
|