From 0e056e68356df6169bcb9a5a19555047ae4ce05d Mon Sep 17 00:00:00 2001 From: fed <58637860+fedddddd@users.noreply.github.com> Date: Sun, 13 Nov 2022 19:16:48 +0100 Subject: [PATCH] Fix gsc crash --- src/client/component/gsc.cpp | 4 ++-- src/client/component/notifies.cpp | 2 +- src/client/component/scripting.cpp | 11 ++++++++--- src/client/component/scripting.hpp | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/client/component/gsc.cpp b/src/client/component/gsc.cpp index 8f6d9722..20c141d8 100644 --- a/src/client/component/gsc.cpp +++ b/src/client/component/gsc.cpp @@ -772,9 +772,9 @@ namespace gsc command::execute(cmd); }); - scripting::on_shutdown([](int free_scripts) + scripting::on_shutdown([](bool free_scripts, bool post_shutdown) { - if (free_scripts) + if (free_scripts && post_shutdown) { xsk::gsc::h2::resolver::cleanup(); clear(); diff --git a/src/client/component/notifies.cpp b/src/client/component/notifies.cpp index 40b5358c..c0415e8b 100644 --- a/src/client/component/notifies.cpp +++ b/src/client/component/notifies.cpp @@ -250,7 +250,7 @@ namespace notifies scr_entity_damage_hook.create(0x1404BD2E0, scr_entity_damage_stub); - scripting::on_shutdown([](bool free_scripts) + scripting::on_shutdown([](bool free_scripts, bool /*post_shutdown*/) { if (free_scripts) { diff --git a/src/client/component/scripting.cpp b/src/client/component/scripting.cpp index e47cfb37..9b8c8d62 100644 --- a/src/client/component/scripting.cpp +++ b/src/client/component/scripting.cpp @@ -52,7 +52,7 @@ namespace scripting std::string current_scriptfile; unsigned int current_file_id{}; - std::vector> shutdown_callbacks; + std::vector> shutdown_callbacks; std::unordered_map canonical_string_table; @@ -113,12 +113,17 @@ namespace scripting for (const auto& callback : shutdown_callbacks) { - callback(free_scripts); + callback(free_scripts, false); } clear_scheduled_notifies(); lua::engine::stop(); g_shutdown_game_hook.invoke(free_scripts); + + for (const auto& callback : shutdown_callbacks) + { + callback(free_scripts, true); + } } void scr_add_class_field_stub(unsigned int classnum, game::scr_string_t name, unsigned int canonicalString, unsigned int offset) @@ -298,7 +303,7 @@ namespace scripting return scripting::find_token_single(id); } - void on_shutdown(const std::function& callback) + void on_shutdown(const std::function& callback) { shutdown_callbacks.push_back(callback); } diff --git a/src/client/component/scripting.hpp b/src/client/component/scripting.hpp index bf6d90c7..3f0d5b64 100644 --- a/src/client/component/scripting.hpp +++ b/src/client/component/scripting.hpp @@ -14,7 +14,7 @@ namespace scripting extern std::string current_file; - void on_shutdown(const std::function& callback); + void on_shutdown(const std::function& callback); std::optional get_canonical_string(const unsigned int id); std::string get_token_single(unsigned int id); } \ No newline at end of file