mirror of
https://github.com/JezuzLizard/T4SP-Server-Plugin.git
synced 2025-04-19 21:22:54 +00:00
Added caching for sigs
This commit is contained in:
parent
fe55a14edc
commit
7c9477d2d1
@ -1,9 +1,75 @@
|
|||||||
#include <stdinc.hpp>
|
#include <stdinc.hpp>
|
||||||
#include "signatures.hpp"
|
#include "signatures.hpp"
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
|
#include <utils/io.hpp>
|
||||||
|
#include <utils/string.hpp>
|
||||||
|
#include <json.hpp>
|
||||||
|
|
||||||
namespace signatures
|
namespace signatures
|
||||||
{
|
{
|
||||||
|
std::string read_sigs_file()
|
||||||
|
{
|
||||||
|
return utils::io::read_file("t4sp-server-plugin/sigs.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool write_sigs_file(const std::string& f)
|
||||||
|
{
|
||||||
|
return utils::io::write_file("t4sp-server-plugin/sigs.json", f);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* get_current_version()
|
||||||
|
{
|
||||||
|
return *reinterpret_cast<const char**>(0x4FF72D + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unordered_map<std::string, std::string> get_cache_info_for_our_version()
|
||||||
|
{
|
||||||
|
std::unordered_map<std::string, std::string> answer;
|
||||||
|
|
||||||
|
auto* version = get_current_version();
|
||||||
|
|
||||||
|
nlohmann::json cache_json = nlohmann::json::parse(read_sigs_file(), nullptr, false, true);
|
||||||
|
if (!cache_json.is_discarded() && cache_json.is_object())
|
||||||
|
{
|
||||||
|
for (const auto& [key, value] : cache_json.items())
|
||||||
|
{
|
||||||
|
if (key != version)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!value.is_object())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
answer = value.get<std::unordered_map<std::string, std::string>>();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return answer;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool save_cache_info_for_our_version(const std::unordered_map<std::string, std::string>& cache_info)
|
||||||
|
{
|
||||||
|
auto* version = get_current_version();
|
||||||
|
|
||||||
|
nlohmann::json cache_json = nlohmann::json::parse(read_sigs_file(), nullptr, false, true);
|
||||||
|
if (cache_json.is_discarded() || !cache_json.is_object())
|
||||||
|
{
|
||||||
|
cache_json = nlohmann::json::parse("{}", nullptr, false, true);
|
||||||
|
|
||||||
|
if (cache_json.is_discarded() || !cache_json.is_object())
|
||||||
|
{
|
||||||
|
return false; // can't happen?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cache_json[version] = cache_info;
|
||||||
|
return write_sigs_file(cache_json.dump());
|
||||||
|
}
|
||||||
|
|
||||||
size_t load_image_size()
|
size_t load_image_size()
|
||||||
{
|
{
|
||||||
MODULEINFO info{};
|
MODULEINFO info{};
|
||||||
@ -53,6 +119,14 @@ namespace signatures
|
|||||||
|
|
||||||
bool process_printf()
|
bool process_printf()
|
||||||
{
|
{
|
||||||
|
auto cache_info = get_cache_info_for_our_version();
|
||||||
|
|
||||||
|
if (cache_info.contains("printf"))
|
||||||
|
{
|
||||||
|
game::plutonium::printf.set(std::atoi(cache_info.at("printf").c_str()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
const auto string_ref = find_string_ref("A critical exception occured!\n");
|
const auto string_ref = find_string_ref("A critical exception occured!\n");
|
||||||
if (!string_ref)
|
if (!string_ref)
|
||||||
{
|
{
|
||||||
@ -62,6 +136,9 @@ namespace signatures
|
|||||||
const auto offset = *reinterpret_cast<size_t*>(string_ref + 5);
|
const auto offset = *reinterpret_cast<size_t*>(string_ref + 5);
|
||||||
game::plutonium::printf.set(string_ref + 4 + 5 + offset);
|
game::plutonium::printf.set(string_ref + 4 + 5 + offset);
|
||||||
|
|
||||||
|
cache_info.insert_or_assign("printf", std::to_string(string_ref + 4 + 5 + offset));
|
||||||
|
save_cache_info_for_our_version(cache_info);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#pragma warning(disable: 28182)
|
#pragma warning(disable: 28182)
|
||||||
|
|
||||||
#pragma warning(disable: 4324)
|
#pragma warning(disable: 4324)
|
||||||
|
#pragma warning(disable: 4459)
|
||||||
|
|
||||||
#define DLL_EXPORT extern "C" __declspec(dllexport)
|
#define DLL_EXPORT extern "C" __declspec(dllexport)
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
Loading…
x
Reference in New Issue
Block a user