Full reverse engineering of the SAMPCAC v0.10.0 server plugin for open.mp, compatible with the original client.
- CMake 3.19+
- C++20 compiler
- Git
cmake -S . -B build -A Win32
cmake --build build --config Releasecmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
cmake --build buildcmake -S . -B build -G "MinGW Makefiles" -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++ -DCMAKE_BUILD_TYPE=Release
cmake --build buildInstall the 32-bit toolchain if needed:
sudo apt update
sudo apt install -y build-essential cmake git gcc-multilib g++-multilibInstall the 32-bit MinGW toolchain for Windows cross-compilation if needed:
sudo apt update
sudo apt install -y cmake make git mingw-w64 g++-mingw-w64-i686 gcc-mingw-w64-i686cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)cmake -S . -B build -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++ -DCMAKE_BUILD_TYPE=Release
cmake --build buildnative CAC_GetStatus(player_id);
native CAC_GetClientVersion(player_id, &major, &minor, &patch);
native CAC_GetServerVersion(&major, &minor, &patch);
native CAC_GetHardwareID(player_id, buffer[], size = sizeof(buffer));
native CAC_ReadMemory(player_id, address, size);
native CAC_ReadSampMemory(player_id, offset, size);
native CAC_SetGlitchStatus(glitch_id, status);
native CAC_GetGlitchStatus(glitch_id);
native CAC_PlayerSetGlitchSettings(player_id, glitch_id, status);
native CAC_SetGameOptionStatus(option_id, status);
native CAC_GetGameOptionStatus(option_id);
native CAC_PlayerSetGameOption(player_id, option_id, status);
native CAC_SetGameResourceReportStatus(model_type_flags, status);
native CAC_GetGameResourceReportStatus(model_type_flags);
native CAC_SetGameResourceReportType(type);
native CAC_GetGameResourceReportType();
native CAC_PlayerSetGameResource(player_id, model_type_flags, type);forward CAC_OnCheatDetect(player_id, cheat_id, opt1, opt2);
forward CAC_OnPlayerKick(player_id, reason_id);
forward CAC_OnMemoryRead(player_id, address, size, const content[]);
forward CAC_OnSampMemoryRead(player_id, offset, size, const content[]);
forward CAC_OnGameResourceMismatch(player_id, model_id, component_type, checksum);
forward CAC_OnScreenshotTaken(player_id);
forward CAC_OnClientIntegrityFail(player_id);