feat(GetLabelText): Added hook for getlabeltext
This commit is contained in:
parent
35c2e9f41d
commit
7d077dc9f7
35
BigBaseV2/src/features/custom_text.cpp
Normal file
35
BigBaseV2/src/features/custom_text.cpp
Normal file
@ -0,0 +1,35 @@
|
||||
#include "custom_text.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
custom_text::custom_text()
|
||||
{
|
||||
g_custom_text = this;
|
||||
}
|
||||
|
||||
custom_text::~custom_text()
|
||||
{
|
||||
g_custom_text = nullptr;
|
||||
}
|
||||
|
||||
void custom_text::add_text(Hash hash, const char* text)
|
||||
{
|
||||
auto size = strlen(text) + 1;
|
||||
auto buffer = std::make_unique<char[]>(size);
|
||||
std::copy_n(text, size, buffer.get());
|
||||
|
||||
this->m_text_map.emplace(hash, std::move(buffer));
|
||||
}
|
||||
|
||||
const char* custom_text::get_text(Hash hash)
|
||||
{
|
||||
if (auto it = this->m_text_map.find(hash); it != m_text_map.end())
|
||||
return it->second.get();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void custom_text::remove_text(Hash hash)
|
||||
{
|
||||
this->m_text_map.erase(hash);
|
||||
}
|
||||
}
|
20
BigBaseV2/src/features/custom_text.hpp
Normal file
20
BigBaseV2/src/features/custom_text.hpp
Normal file
@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
namespace big
|
||||
{
|
||||
class custom_text
|
||||
{
|
||||
public:
|
||||
explicit custom_text();
|
||||
~custom_text();
|
||||
|
||||
void add_text(Hash hash, const char* text);
|
||||
const char* get_text(Hash hash);
|
||||
void remove_text(Hash hash);
|
||||
|
||||
private:
|
||||
std::unordered_map<Hash, std::unique_ptr<char[]>> m_text_map;
|
||||
};
|
||||
|
||||
inline custom_text* g_custom_text{};
|
||||
}
|
@ -13,6 +13,7 @@ namespace big::functions
|
||||
using error_screen = void(char* entryHeader, char* entryLine1, int instructionalKey, char* entryLine2, BOOL p4, Any p5, Any* p6, Any* p7, BOOL background);
|
||||
using increment_stat_event = bool(uint64_t net_event_struct, int64_t sender, int64_t a3);
|
||||
using get_event_data = bool(int32_t eventGroup, int32_t eventIndex, int64_t* args, uint32_t argCount);
|
||||
using get_label_text = const char*(void* unk, const char* label);
|
||||
using get_player_name = char*(Player player);
|
||||
using get_net_player = int(Player player);
|
||||
using script_event_handler = bool(void* events, CNetGamePlayer* sourcePlayer, CNetGamePlayer* targetPlayer);
|
||||
|
@ -40,6 +40,7 @@ namespace big
|
||||
m_convert_thread_to_fiber_hook("ConvertThreadToFiber", memory::module("kernel32.dll").get_export("ConvertThreadToFiber").as<void*>(), &hooks::convert_thread_to_fiber),
|
||||
|
||||
m_get_event_data("Get Event Data", g_pointers->m_get_event_data, &hooks::get_event_data),
|
||||
m_get_label_text("Get Label Text", g_pointers->m_get_label_text, &hooks::get_label_text),
|
||||
m_error_screen_hook("Disable Warning/Error Screen", g_pointers->m_error_screen, &hooks::error_screen),
|
||||
m_increment_stat_hook("Increment Stat Event", g_pointers->m_increment_stat_event, &hooks::increment_stat_event),
|
||||
m_script_event_hook("Script Event Handler", g_pointers->m_script_event_handler, &hooks::script_event_handler),
|
||||
@ -70,6 +71,7 @@ namespace big
|
||||
|
||||
// New hooks enable
|
||||
m_get_event_data.enable();
|
||||
m_get_label_text.enable();
|
||||
m_error_screen_hook.enable();
|
||||
m_increment_stat_hook.enable();
|
||||
m_script_event_hook.enable();
|
||||
@ -91,6 +93,7 @@ namespace big
|
||||
|
||||
// New hooks disable
|
||||
m_get_event_data.disable();
|
||||
m_get_label_text.disable();
|
||||
m_error_screen_hook.disable();
|
||||
m_increment_stat_hook.disable();
|
||||
m_script_event_hook.disable();
|
||||
|
@ -23,6 +23,7 @@ namespace big
|
||||
|
||||
// New Hook Definitions
|
||||
static bool get_event_data(int32_t eventGroup, int32_t eventIndex, int64_t* args, uint32_t argCount);
|
||||
static const char* get_label_text(void* unk, const char* label);
|
||||
static void error_screen(char* entryHeader, char* entryLine1, int instructionalKey, char* entryLine2, BOOL p4, Any p5, Any* p6, Any* p7, BOOL background);
|
||||
static bool increment_stat_event(uint64_t net_event_struct, CNetGamePlayer* sender, int64_t a3);
|
||||
static bool script_event_handler(std::int64_t NetEventStruct, CNetGamePlayer* net_game_player);
|
||||
@ -58,6 +59,7 @@ namespace big
|
||||
|
||||
// New Detour Hook Definitions
|
||||
detour_hook m_get_event_data;
|
||||
detour_hook m_get_label_text;
|
||||
detour_hook m_error_screen_hook;
|
||||
detour_hook m_increment_stat_hook;
|
||||
detour_hook m_script_event_hook;
|
||||
|
15
BigBaseV2/src/hooks/get_label_text.cpp
Normal file
15
BigBaseV2/src/hooks/get_label_text.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
#include "features/custom_text.hpp"
|
||||
#include "hooking.hpp"
|
||||
#include "natives.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
const char* hooks::get_label_text(void* unk, const char* label)
|
||||
{
|
||||
if (g_running)
|
||||
if (auto text = g_custom_text->get_text(rage::joaat(label)))
|
||||
return text;
|
||||
|
||||
return g_hooking->m_get_label_text.get_original<decltype(&get_label_text)>()(unk, label);
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
#include "common.hpp"
|
||||
#include "features.hpp"
|
||||
#include "features/custom_text.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
#include "gui.hpp"
|
||||
#include "logger.hpp"
|
||||
@ -45,6 +46,9 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID)
|
||||
auto hooking_instance = std::make_unique<hooking>();
|
||||
LOG(INFO) << "Hooking initialized.";
|
||||
|
||||
auto custom_text_instance = std::make_unique<custom_text>();
|
||||
LOG(INFO) << "Custom Text Initialized.";
|
||||
|
||||
g_settings.load();
|
||||
LOG(INFO) << "Settings Loaded.";
|
||||
|
||||
|
@ -133,10 +133,15 @@ namespace big
|
||||
m_ptr_to_handle = ptr.as<decltype(m_ptr_to_handle)>();
|
||||
});
|
||||
|
||||
main_batch.add("Send Info To Lobby", "44 8D 47 78 48 8D 54 24 ? 48 8B CB E8", [this](memory::handle ptr)
|
||||
main_batch.add("Send Net Info To Lobby", "44 8D 47 78 48 8D 54 24 ? 48 8B CB E8", [this](memory::handle ptr)
|
||||
{
|
||||
m_send_net_info_to_lobby = ptr.add(13).rip().as<PVOID>();
|
||||
});
|
||||
|
||||
main_batch.add("Get Label Text", "75 ? E8 ? ? ? ? 8B 0D ? ? ? ? 65 48 8B 04 25 ? ? ? ? BA ? ? ? ? 48 8B 04 C8 8B 0C 02 D1 E9", [this](memory::handle ptr)
|
||||
{
|
||||
m_get_label_text = ptr.sub(19).as<decltype(m_get_label_text)>();
|
||||
});
|
||||
|
||||
main_batch.run(memory::module(nullptr));
|
||||
|
||||
|
@ -40,6 +40,7 @@ namespace big
|
||||
|
||||
functions::error_screen* m_error_screen{};
|
||||
functions::get_event_data* m_get_event_data{};
|
||||
functions::get_label_text* m_get_label_text{};
|
||||
functions::get_player_name* m_get_player_name{};
|
||||
functions::get_net_player* m_get_net_game_player{};
|
||||
functions::increment_stat_event* m_increment_stat_event{};
|
||||
|
Reference in New Issue
Block a user