diff --git a/src/client/component/demonware.cpp b/src/client/component/demonware.cpp index dd868173..dc42f578 100644 --- a/src/client/component/demonware.cpp +++ b/src/client/component/demonware.cpp @@ -11,6 +11,8 @@ #include "game/demonware/servers/umbrella_server.hpp" #include "game/demonware/server_registry.hpp" +#include "localized_strings.hpp" + #define TCP_BLOCKING true #define UDP_BLOCKING false @@ -497,6 +499,8 @@ namespace demonware utils::hook::set(0x141F03130_g, 0xC300000001B8); // Kill LPC_DeleteStale utils::hook::set(0x141E0AA1B_g, 0xEB); // Release un-handled reportReward spamming loop + + localized_strings::override("MENU_CONNECTING_DW", "Emulating Online Service"); } void pre_destroy() override diff --git a/src/client/component/localized_strings.cpp b/src/client/component/localized_strings.cpp new file mode 100644 index 00000000..05d3242e --- /dev/null +++ b/src/client/component/localized_strings.cpp @@ -0,0 +1,52 @@ +#include +#include "loader/component_loader.hpp" +#include "localized_strings.hpp" +#include +#include +#include +#include "game/game.hpp" + +namespace localized_strings +{ + namespace + { + utils::hook::detour seh_string_ed_get_string_hook; + + using localized_map = std::unordered_map; + utils::concurrency::container localized_overrides; + + const char* seh_string_ed_get_string(const char* reference) + { + return localized_overrides.access([&](const localized_map& map) + { + const auto entry = map.find(reference); + if (entry != map.end()) + { + return utils::string::va("%s", entry->second.data()); + } + + return seh_string_ed_get_string_hook.invoke(reference); + }); + } + } + + void override(const std::string& key, const std::string& value) + { + localized_overrides.access([&](localized_map& map) + { + map[key] = value; + }); + } + + class component final : public client_component + { + public: + void post_unpack() override + { + // Change some localized strings + seh_string_ed_get_string_hook.create(0x1422796E0_g, &seh_string_ed_get_string); + } + }; +} + +REGISTER_COMPONENT(localized_strings::component) diff --git a/src/client/component/localized_strings.hpp b/src/client/component/localized_strings.hpp new file mode 100644 index 00000000..47c43894 --- /dev/null +++ b/src/client/component/localized_strings.hpp @@ -0,0 +1,6 @@ +#pragma once + +namespace localized_strings +{ + void override(const std::string& key, const std::string& value); +}