From 8c6a1ae8c08831a1c35fea82eca3e21715d2f68b Mon Sep 17 00:00:00 2001 From: uramer Date: Sat, 3 Feb 2024 12:02:44 +0100 Subject: [PATCH] Allow menu scripts to send global events while a game is loaded --- apps/openmw/mwlua/corebindings.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwlua/corebindings.cpp b/apps/openmw/mwlua/corebindings.cpp index 8c881f9f75..8d8e97ed07 100644 --- a/apps/openmw/mwlua/corebindings.cpp +++ b/apps/openmw/mwlua/corebindings.cpp @@ -1,6 +1,7 @@ #include "corebindings.hpp" #include +#include #include #include @@ -133,7 +134,14 @@ namespace MWLua sol::table api(context.mLua->sol(), sol::create); for (auto& [k, v] : LuaUtil::getMutableFromReadOnly(initCorePackage(context))) api[k] = v; - api["sendGlobalEvent"] = sol::nil; + api["sendGlobalEvent"] = [context](std::string eventName, const sol::object& eventData) { + if (MWBase::Environment::get().getStateManager()->getState() == MWBase::StateManager::State_NoGame) + { + throw std::logic_error("Can't send global events when no game is loaded"); + } + context.mLuaEvents->addGlobalEvent( + { std::move(eventName), LuaUtil::serialize(eventData, context.mSerializer) }); + }; api["sound"] = sol::nil; api["vfx"] = sol::nil; return LuaUtil::makeReadOnly(api);