3#include <CS2Kit/Core/Paths.hpp>
4#include <CS2Kit/Sdk/GameData.hpp>
5#include <CS2Kit/Utils/Log.hpp>
8#include <nlohmann/json.hpp>
14bool GameData::Load(
const std::string& path)
19 std::ifstream file(fullPath);
22 Log::Warn(
"GameData file not found: {}", path);
26 auto json = nlohmann::json::parse(file,
30 constexpr const char* platform =
"windows";
32 constexpr const char* platform =
"linux";
35 if (json.contains(
"offsets"))
37 for (
auto& [name, entry] : json[
"offsets"].items())
39 if (entry.contains(platform))
40 _offsets[name] = entry[platform].get<
int>();
44 if (json.contains(
"signatures"))
46 for (
auto& [name, entry] : json[
"signatures"].items())
48 if (!entry.contains(platform))
51 auto& platEntry = entry[platform];
53 sig.Library = entry.value(
"library",
"server");
54 sig.Pattern = platEntry.value(
"pattern",
"");
55 sig.Offset = platEntry.value(
"offset", 0);
56 _signatures[name] = std::move(sig);
60 Log::Info(
"GameData loaded: {} offsets, {} signatures.", _offsets.size(), _signatures.size());
63 catch (
const std::exception& e)
65 Log::Warn(
"Failed to parse GameData: {}", e.what());
70int GameData::GetOffset(
const std::string& name)
const
72 auto it = _offsets.find(name);
73 return it != _offsets.end() ? it->second : -1;
76void* GameData::FindSignature(
const std::string& name)
const
78 auto it = _signatures.find(name);
79 if (it == _signatures.end())
82 auto& sig = it->second;
86void* GameData::ResolveSignature(
const std::string& name)
const
88 auto it = _signatures.find(name);
89 if (it == _signatures.end())
92 auto& sig = it->second;
100 auto addr =
reinterpret_cast<uintptr_t
>(match) + sig.Offset;
104 return reinterpret_cast<void*
>(addr);
std::filesystem::path ResolvePath(const std::string &relativePath)
void * FindPattern(const char *moduleName, const std::string &pattern)
uintptr_t ResolveRelativeAddress(uintptr_t addr, int ripOffset, int ripSize)