diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp index 5f77a26b..9d61d4e3 100644 --- a/src/client/component/network.cpp +++ b/src/client/component/network.cpp @@ -131,6 +131,20 @@ namespace network closesocket(sock); return 0; } + + utils::hook::detour clear_client_state_hook; + void clear_client_state_stub(int a1) + { + // Kinda shit but it works + // does a bunch of memset on bad pointers if called while connecting + __try + { + clear_client_state_hook.invoke(a1); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + } + } } void on(const std::string& command, const callback& callback) @@ -313,6 +327,9 @@ namespace network // Use our own socket since the game's socket doesn't work with non localhost addresses // why? no idea utils::hook::jump(0x5BD210_b, create_socket, true); + + // Prevent client from crashing if disconnected while connecting + clear_client_state_hook.create(0x12D950_b, clear_client_state_stub); } } };