From 3558f9c48b3b7976b7c6f79c6046efa3871b3c95 Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Fri, 31 Oct 2025 16:48:35 +0100 Subject: [PATCH 1/3] Don't attempt to parse table-like objects as ignore lists --- apps/openmw/mwlua/nearbybindings.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwlua/nearbybindings.cpp b/apps/openmw/mwlua/nearbybindings.cpp index b31a934a54..c6cc44a538 100644 --- a/apps/openmw/mwlua/nearbybindings.cpp +++ b/apps/openmw/mwlua/nearbybindings.cpp @@ -30,7 +30,14 @@ namespace { ignore.push_back(ignoreObj->ptr()); } - else if (const auto& ignoreTable = options.get>("ignore")) + else if (const auto& ignoreList = options.get>("ignore")) + { + for (const MWLua::ObjectId& id : *ignoreList->mIds) + { + ignore.push_back(MWLua::LObject(id).ptr()); + } + } + else if (const auto& ignoreTable = options.get>("ignore")) { ignoreTable->for_each([&](const auto& _, const sol::object& value) { if (value.is()) From 492716ee6b5c17b09b6e2194923a24b0cfbbb787 Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Sun, 2 Nov 2025 10:30:55 +0100 Subject: [PATCH 2/3] Type check the ignore list --- apps/openmw/mwlua/nearbybindings.cpp | 32 +++++++++++++++------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/apps/openmw/mwlua/nearbybindings.cpp b/apps/openmw/mwlua/nearbybindings.cpp index c6cc44a538..2436dd887e 100644 --- a/apps/openmw/mwlua/nearbybindings.cpp +++ b/apps/openmw/mwlua/nearbybindings.cpp @@ -26,25 +26,27 @@ namespace { std::vector ignore; - if (const auto& ignoreObj = options.get>("ignore")) + if (const auto& ignoreObj = options.get>("ignore")) { - ignore.push_back(ignoreObj->ptr()); - } - else if (const auto& ignoreList = options.get>("ignore")) - { - for (const MWLua::ObjectId& id : *ignoreList->mIds) + if (ignoreObj->is()) + ignore.push_back(ignoreObj->as().ptr()); + else if (ignoreObj->is()) { - ignore.push_back(MWLua::LObject(id).ptr()); - } - } - else if (const auto& ignoreTable = options.get>("ignore")) - { - ignoreTable->for_each([&](const auto& _, const sol::object& value) { - if (value.is()) + for (const MWLua::ObjectId& id : *ignoreObj->as().mIds) { - ignore.push_back(value.as().ptr()); + ignore.push_back(MWLua::LObject(id).ptr()); } - }); + } + else + { + // ignoreObj->as throws if the type doesn't match, but an unchecked value.as crashes... + ignoreObj->as().for_each([&](sol::object _, sol::object value) { + if (value.is()) + ignore.push_back(value.as().ptr()); + else + throw std::runtime_error("Table value is not a GameObject"); + }); + } } return ignore; From 342a4415d0d19bfc28e5720c36204a7d16f631e0 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Mon, 3 Nov 2025 07:09:45 +0300 Subject: [PATCH 3/3] Increment Lua API revision --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 199c1d14fe..0bc9bfd106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ message(STATUS "Configuring OpenMW...") set(OPENMW_VERSION_MAJOR 0) set(OPENMW_VERSION_MINOR 51) set(OPENMW_VERSION_RELEASE 0) -set(OPENMW_LUA_API_REVISION 99) +set(OPENMW_LUA_API_REVISION 100) set(OPENMW_POSTPROCESSING_API_REVISION 3) set(OPENMW_VERSION_COMMITHASH "")