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 "") diff --git a/apps/openmw/mwlua/nearbybindings.cpp b/apps/openmw/mwlua/nearbybindings.cpp index b31a934a54..2436dd887e 100644 --- a/apps/openmw/mwlua/nearbybindings.cpp +++ b/apps/openmw/mwlua/nearbybindings.cpp @@ -26,18 +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& ignoreTable = options.get>("ignore")) - { - ignoreTable->for_each([&](const auto& _, const sol::object& value) { - if (value.is()) + if (ignoreObj->is()) + ignore.push_back(ignoreObj->as().ptr()); + else if (ignoreObj->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;