Fix crashes when quitting
This commit is contained in:
parent
5f17804280
commit
7b8e9c9bf1
@ -154,7 +154,7 @@ namespace command
|
||||
{
|
||||
utils::hook::jump(0x5A74F0_b, dvar_command_stub, true);
|
||||
|
||||
add("quit", game::Com_Quit_f);
|
||||
add("quit", game::Quit);
|
||||
|
||||
add("startmap", [](const params& params)
|
||||
{
|
||||
|
@ -15,6 +15,7 @@ namespace console
|
||||
namespace
|
||||
{
|
||||
std::thread console_thread;
|
||||
bool kill = false;
|
||||
}
|
||||
|
||||
class component final : public component_interface
|
||||
@ -27,14 +28,25 @@ namespace console
|
||||
|
||||
console_thread = utils::thread::create_named_thread("Console", []()
|
||||
{
|
||||
std::string cmd;
|
||||
while (true)
|
||||
while (!kill)
|
||||
{
|
||||
std::getline(std::cin, cmd);
|
||||
game_console::add(cmd.data(), false);
|
||||
// to do: get input and shit without blocking the thread
|
||||
std::this_thread::sleep_for(1s);
|
||||
}
|
||||
|
||||
std::this_thread::yield();
|
||||
});
|
||||
}
|
||||
|
||||
void pre_destroy() override
|
||||
{
|
||||
kill = true;
|
||||
|
||||
if (console_thread.joinable())
|
||||
{
|
||||
console_thread.join();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -268,7 +268,6 @@ namespace gui
|
||||
|
||||
void pre_destroy() override
|
||||
{
|
||||
ImGui_ImplDX11_Shutdown();
|
||||
ImGui_ImplWin32_Shutdown();
|
||||
ImGui::DestroyContext();
|
||||
}
|
||||
|
@ -20,12 +20,17 @@ namespace patches
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t off_11C52460;
|
||||
void* sub_46148()
|
||||
{
|
||||
off_11C52460 = 0xAD0C58_b;
|
||||
static uint64_t off_11C52460 = 0xAD0C58_b;
|
||||
return &off_11C52460;
|
||||
}
|
||||
|
||||
DECLSPEC_NORETURN void quit_stub(const int code)
|
||||
{
|
||||
component_loader::pre_destroy();
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
class component final : public component_interface
|
||||
@ -38,6 +43,8 @@ namespace patches
|
||||
utils::hook::set(0x272F70_b, 0xC301B0);
|
||||
utils::hook::jump(0x46148_b, sub_46148, true);
|
||||
|
||||
utils::hook::jump(0x64EF10_b, quit_stub, true);
|
||||
|
||||
// Unlock fps in main menu
|
||||
utils::hook::set<BYTE>(0x3D8E1B_b, 0xEB);
|
||||
|
||||
|
@ -26,6 +26,7 @@ namespace game
|
||||
|
||||
WEAK symbol<void(errorParm code, const char* message, ...)> Com_Error{0x5A2D80};
|
||||
WEAK symbol<void()> Com_Quit_f{0x5A50D0};
|
||||
WEAK symbol<void()> Quit{0x5A52A0};
|
||||
|
||||
WEAK symbol<void(XAssetType type, void(__cdecl* func)(game::XAssetHeader, void*), const void* inData, bool includeOverride)>
|
||||
DB_EnumXAssets_Internal{0x4129F0};
|
||||
|
Loading…
Reference in New Issue
Block a user