2#include <unordered_set>
4#include "../Dota2Patcher.h"
5#include "../Utils/Memory.h"
9 uintptr_t
base()
const {
14 optional<string>
name()
const {
19 optional<Interface*>
next()
const {
34 if (!CreateInterfaceFn) {
35 LOG::CRITICAL(
"Can't find [{}] CreateInterface pattern!", module_name);
39 LOG::INFO(
"{} CreateInterface -> [{}]", module_name, TO_VOID(CreateInterfaceFn.value()));
42 if (!first_interface_base)
54 std::unordered_set<std::string> seen_interfaces;
58 if (!
name || seen_interfaces.contains(
name.value())) {
59 iface = iface->
next().value_or(
nullptr);
65 iface = iface->
next().value_or(
nullptr);
69 seen_interfaces.insert(
name.value());
73 LOG::INFO(
"[{}] -> [{}]",
name.value(), TO_VOID(
base));
76 LOG::INFO(
"Interface [{}] -> [{}]",
name.value(), TO_VOID(
base));
78 LOG::ERR(
"VMT has changed! [{}] -> [{}]", module.
known_vfuncs, vfuncs);
79 module.interface_handlers.at(name.value())(base);
82 iface = iface->
next().value_or(
nullptr);
Definition CreateInterface.h:24
static optional< Interface * > get_first_interface(const string &module_name)
Definition CreateInterface.h:32
static void load_interfaces(const ModuleInterfaces &module, bool iterate_all=false)
Definition CreateInterface.h:48
Definition CreateInterface.h:7
uintptr_t base() const
Definition CreateInterface.h:9
optional< Interface * > next() const
Definition CreateInterface.h:19
optional< string > name() const
Definition CreateInterface.h:14
static optional< T > read_memory(const N &address)
Definition Memory.h:78
static optional< string > read_string(const T &address, const size_t max_length=64)
Definition Memory.h:125
static optional< uintptr_t > pattern_scan(const string &target_module, const string &target_pattern)
Definition Memory.cpp:25
static int count_vms(const T &vmt)
Definition Memory.h:150
Definition CreateInterface.h:26
string module_name
Definition CreateInterface.h:27
std::unordered_map< string, std::function< void(uintptr_t)> > interface_handlers
Definition CreateInterface.h:28
int known_vfuncs
Definition CreateInterface.h:29
static const string create_interface
Definition Dota2Patcher.h:20