#include #include "loader/component_loader.hpp" #include "game/game.hpp" #include "console.hpp" #include namespace logger { namespace { game::dvar_t* logger_dev = nullptr; void print_warning(const char* msg, ...) { char buffer[2048]{}; va_list ap; va_start(ap, msg); vsnprintf(buffer, sizeof(buffer), msg, ap); va_end(ap); console::warn("%s", buffer); } void print(const char* msg, ...) { char buffer[2048]{}; va_list ap; va_start(ap, msg); vsnprintf(buffer, sizeof(buffer), msg, ap); va_end(ap); console::info("%s", buffer); } void print_dev(const char* msg, ...) { if (!logger_dev->current.enabled) { return; } char buffer[2048]{}; va_list ap; va_start(ap, msg); vsnprintf(buffer, sizeof(buffer), msg, ap); va_end(ap); console::info("%s", buffer); } // nullsub_56 void nullsub_56() { utils::hook::call(0x1400D2572, print_warning); utils::hook::call(0x1400D257E, print_warning); utils::hook::call(0x1400D2586, print_warning); utils::hook::call(0x1400D2592, print_warning); utils::hook::call(0x1400D2B7D, print_warning); utils::hook::call(0x1400D2B89, print_warning); utils::hook::call(0x1400D2B91, print_warning); utils::hook::call(0x1400D2B9D, print_warning); utils::hook::call(0x1400D78ED, print_warning); utils::hook::call(0x1400D78F9, print_warning); utils::hook::call(0x1400D7901, print_warning); utils::hook::call(0x1400D790D, print_warning); utils::hook::call(0x1400D84F8, print_warning); utils::hook::call(0x1400D850C, print_warning); utils::hook::call(0x1400D8C08, print_warning); utils::hook::call(0x1400D8C28, print_warning); utils::hook::call(0x1400D8C34, print_warning); utils::hook::call(0x1400D8CD8, print_warning); utils::hook::call(0x1400D8CF8, print_warning); utils::hook::call(0x1400D8D04, print_warning); utils::hook::call(0x1400D8D1D, print_warning); utils::hook::call(0x1400DAE67, print_warning); utils::hook::call(0x1400DB019, print_warning); } // sub_1400E7420 void sub_1400E7420() { utils::hook::call(0x1400CEC1C, print_warning); utils::hook::call(0x1400D218E, print_warning); utils::hook::call(0x1400D2319, print_warning); utils::hook::call(0x1400D65BC, print_dev); utils::hook::call(0x1400D7C94, print_dev); utils::hook::call(0x1400DAB6A, print_dev); utils::hook::call(0x1400DB9BC, print_dev); } } class component final : public component_interface { public: void post_unpack() override { if (game::environment::is_mp()) { nullsub_56(); sub_1400E7420(); // Make havok script's print function actually print utils::hook::jump(0x140701A1C, print); } logger_dev = game::Dvar_RegisterBool("logger_dev", false, game::DVAR_FLAG_SAVED); } }; } REGISTER_COMPONENT(logger::component)