Part one of a three part series where I try to catch cheaters using demo files, the other ones being metrics and anticheat. I will also try to make some documentation, since its quite sparse.
You will need to install the protobuf-compiler
and ofcourse make
and clang
.
Alternatively you can use the provided Docker container to run the program.
make
./democheck [OPTIONS] [FILE]
This will not do too much. you will need to provide a useful main to get some output.
--stdin
-> read from stdin instead of file--parsemsg
-> print all preparsed packages
of course this only applies to default main
#include <demo.hpp>
StartupParser startupParameters;
void printServerInfo(void *data)
{
ServerInfo *si = (ServerInfo *)data;
std::cout << si->DebugString() << std::endl;
}
int main(int argc, char **argv)
{
startupParameters = StartupParser(argc, argv);
FileReader f(startupParameters.last().first);
DemoFile demo;
demo.addEventHook(svc_ServerInfo, printServerInfo);
demo.start_parse(f);
}
Simple. you can hook a function pointer to each event / packet. You can do that by calling demo.addEventHook
. All events will return the corresponding Protobuf packet, with the exception being svc_UserMessage
which will return a string.
For PacketEntities
, the return value is almost useless. If you want the players for example, you should call getPlayers()
or getPlayer()
. More functions will be added, but feel free to help.
A complete list of the possible types can be found here.
Afaik this is the fastest parser available, and i will always keep performance in mind when adding features.
All the tests are run on WSL2: Ubuntu 18.04
, and the project is stored on an HDD
. That combo explains the slow read (i hope). CPU used is an Intel Core I7 4820k
.
Type | Time (No I/O) |
---|---|
Basic demo (≈82000 ticks) | 300ms |
Might need some more test cases. feel free!
- An CGI-like interface, with SQL-like commands
- Live demo parsing
- More getters, setters, and data!
- Support for use in other languages
Please use the tools GitHub provides to contact me. Pull requests and issues / requests are always welcome!