diff --git a/src/client/component/patches.cpp b/src/client/component/patches.cpp new file mode 100644 index 00000000..abe3c552 --- /dev/null +++ b/src/client/component/patches.cpp @@ -0,0 +1,36 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include + +namespace patches +{ + namespace + { + void script_errors_stub(const char* file, int line, unsigned int code, const char* fmt, ...) + { + char buffer[0x1000]; + + { + va_list ap; + va_start(ap, fmt); + vsnprintf_s(buffer, sizeof(buffer), _TRUNCATE, fmt, ap); + va_end(ap); + } + + game::Com_Error(game::ERROR_SCRIPT_DROP, "%s", buffer); + } + } + + struct component final : generic_component + { + void post_unpack() override + { + // don't make script errors fatal error + utils::hook::call(game::select(0x1412CAC4D, 0x140158EB2), script_errors_stub); + } + }; +} + +REGISTER_COMPONENT(patches::component) diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index 4cc58b9e..473b7302 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -19,7 +19,7 @@ namespace game // Com WEAK symbol Com_Printf{0x1421499C0, 0x140505630}; - WEAK symbol Com_Error_{0x1420F8BD0}; + WEAK symbol Com_Error_{0x1420F8BD0, 0x140501470}; WEAK symbol Com_SessionMode_IsMode{0x1420F7DD0}; WEAK symbol Com_SessionMode_SetNetworkMode{0x1420F8010, 0x140500B80}; WEAK symbol Com_SessionMode_SetGameMode{0x1420F7FD0, 0x140500B40};