diff --git a/apps/openmw/mwlua/itemdata.cpp b/apps/openmw/mwlua/itemdata.cpp index 38415ea25e..1b809383db 100644 --- a/apps/openmw/mwlua/itemdata.cpp +++ b/apps/openmw/mwlua/itemdata.cpp @@ -71,7 +71,8 @@ namespace MWLua { SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &ItemData::setValue, std::monostate{}, prop }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &ItemData::setValue, std::monostate{}, prop }] + = sol::main_object(value); } else throw std::runtime_error("Only global or self scripts can set the value"); diff --git a/apps/openmw/mwlua/localscripts.hpp b/apps/openmw/mwlua/localscripts.hpp index b32d8bba9e..adbf20292d 100644 --- a/apps/openmw/mwlua/localscripts.hpp +++ b/apps/openmw/mwlua/localscripts.hpp @@ -54,7 +54,7 @@ namespace MWLua { } MWBase::LuaManager::ActorControls mControls; - std::map mStatsCache; + std::map mStatsCache; bool mIsActive; }; diff --git a/apps/openmw/mwlua/stats.cpp b/apps/openmw/mwlua/stats.cpp index 317ffbd406..637ae0b002 100644 --- a/apps/openmw/mwlua/stats.cpp +++ b/apps/openmw/mwlua/stats.cpp @@ -123,7 +123,8 @@ namespace MWLua SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &setNpcValue, attributeId, "skillIncreasesForAttribute" }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &setNpcValue, attributeId, "skillIncreasesForAttribute" }] + = sol::main_object(value); } }; @@ -159,7 +160,7 @@ namespace MWLua SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); obj->mStatsCache[SelfObject::CachedStat{ &setNpcValue, specialization, "skillIncreasesForSpecialization" }] - = value; + = sol::main_object(value); } }; @@ -183,7 +184,8 @@ namespace MWLua { SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &setCreatureValue, std::monostate{}, "current" }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &setCreatureValue, std::monostate{}, "current" }] + = sol::main_object(value); } sol::object getProgress(const Context& context) const @@ -204,7 +206,8 @@ namespace MWLua SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &setNpcValue, std::monostate{}, "progress" }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &setNpcValue, std::monostate{}, "progress" }] + = sol::main_object(value); } SkillIncreasesForAttributeStats getSkillIncreasesForAttributeStats() const @@ -258,7 +261,7 @@ namespace MWLua { SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &DynamicStat::setValue, mIndex, prop }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &DynamicStat::setValue, mIndex, prop }] = sol::main_object(value); } static void setValue(Index i, std::string_view prop, const MWWorld::Ptr& ptr, const sol::object& value) @@ -318,7 +321,7 @@ namespace MWLua { SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &AttributeStat::setValue, mId, prop }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &AttributeStat::setValue, mId, prop }] = sol::main_object(value); } static void setValue(Index i, std::string_view prop, const MWWorld::Ptr& ptr, const sol::object& value) @@ -402,7 +405,7 @@ namespace MWLua { SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &SkillStat::setValue, mId, prop }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &SkillStat::setValue, mId, prop }] = sol::main_object(value); } static void setValue(Index index, std::string_view prop, const MWWorld::Ptr& ptr, const sol::object& value) @@ -465,7 +468,8 @@ namespace MWLua { SelfObject* obj = mObject.asSelfObject(); addStatUpdateAction(context.mLuaManager, *obj); - obj->mStatsCache[SelfObject::CachedStat{ &AIStat::setValue, static_cast(mIndex), prop }] = value; + obj->mStatsCache[SelfObject::CachedStat{ &AIStat::setValue, static_cast(mIndex), prop }] + = sol::main_object(value); } static void setValue(Index i, std::string_view prop, const MWWorld::Ptr& ptr, const sol::object& value) diff --git a/apps/openmw/mwlua/uibindings.cpp b/apps/openmw/mwlua/uibindings.cpp index 069258fd8e..76bba0c082 100644 --- a/apps/openmw/mwlua/uibindings.cpp +++ b/apps/openmw/mwlua/uibindings.cpp @@ -310,7 +310,7 @@ namespace MWLua return res.str(); }; element["layout"] = sol::property([](const LuaUi::Element& element) { return element.mLayout; }, - [](LuaUi::Element& element, const sol::table& layout) { element.mLayout = layout; }); + [](LuaUi::Element& element, const sol::main_table& layout) { element.mLayout = layout; }); element["update"] = [luaManager = context.mLuaManager](const std::shared_ptr& element) { if (element->mState != LuaUi::Element::Created) return; diff --git a/components/lua/luastate.cpp b/components/lua/luastate.cpp index 2f5800c521..de876f2c5c 100644 --- a/components/lua/luastate.cpp +++ b/components/lua/luastate.cpp @@ -343,7 +343,8 @@ namespace LuaUtil } sol::protected_function_result LuaState::runInNewSandbox(const VFS::Path::Normalized& path, - const std::string& envName, const std::map& packages, const sol::object& hiddenData) + const std::string& envName, const std::map& packages, + const sol::main_object& hiddenData) { // TODO sol::protected_function script = loadScriptAndCache(path); diff --git a/components/lua/luastate.hpp b/components/lua/luastate.hpp index 32c3151c88..cf8e62690a 100644 --- a/components/lua/luastate.hpp +++ b/components/lua/luastate.hpp @@ -148,8 +148,8 @@ namespace LuaUtil // should be either a sol::table or a sol::function. If it is a function, it will be evaluated // (once per sandbox) with the argument 'hiddenData' the first time when requested. sol::protected_function_result runInNewSandbox(const VFS::Path::Normalized& path, - const std::string& envName = "unnamed", const std::map& packages = {}, - const sol::object& hiddenData = sol::nil); + const std::string& envName = "unnamed", const std::map& packages = {}, + const sol::main_object& hiddenData = sol::nil); void dropScriptCache() { mCompiledScripts.clear(); } diff --git a/components/lua/scriptscontainer.cpp b/components/lua/scriptscontainer.cpp index 88f4b9c33c..5eff211894 100644 --- a/components/lua/scriptscontainer.cpp +++ b/components/lua/scriptscontainer.cpp @@ -52,7 +52,7 @@ namespace LuaUtil Log(Debug::Error) << mNamePrefix << "[" << scriptPath(scriptId) << "] " << msg << ": " << e.what(); } - void ScriptsContainer::addPackage(std::string packageName, sol::object package) + void ScriptsContainer::addPackage(std::string packageName, sol::main_object package) { if (!package.is()) throw std::logic_error("Expected package to be read-only: " + packageName); @@ -312,7 +312,7 @@ namespace LuaUtil { if (next->mOnOverride) { - sol::object prevInterface = sol::nil; + sol::main_object prevInterface = sol::nil; if (prev) prevInterface = *prev->mInterface; try diff --git a/components/lua/scriptscontainer.hpp b/components/lua/scriptscontainer.hpp index 2059983c1f..956b4d4317 100644 --- a/components/lua/scriptscontainer.hpp +++ b/components/lua/scriptscontainer.hpp @@ -90,7 +90,7 @@ namespace LuaUtil // Adds package that will be available (via `require`) for all scripts in the container. // Automatically applies LuaUtil::makeReadOnly to the package. - void addPackage(std::string packageName, sol::object package); + void addPackage(std::string packageName, sol::main_object package); // Gets script with given id from ScriptsConfiguration, finds the source in the virtual file system, starts as a // new script, adds it to the container, and calls onInit for this script. Returns `true` if the script was @@ -168,7 +168,7 @@ namespace LuaUtil struct Handler { int mScriptId; - sol::function mFn; + sol::main_function mFn; }; struct EngineHandlerList @@ -212,11 +212,11 @@ namespace LuaUtil private: struct Script { - std::optional mOnSave; - std::optional mOnOverride; - std::optional mInterface; + std::optional mOnSave; + std::optional mOnOverride; + std::optional mInterface; std::string mInterfaceName; - sol::table mHiddenData; + sol::main_table mHiddenData; std::map mRegisteredCallbacks; std::map mTemporaryCallbacks; VFS::Path::Normalized mPath; @@ -268,11 +268,11 @@ namespace LuaUtil const UserdataSerializer* mSerializer = nullptr; const UserdataSerializer* mSavedDataDeserializer = nullptr; - std::map mAPI; + std::map mAPI; struct LoadedData { std::map mScripts; - sol::table mPublicInterfaces; + sol::main_table mPublicInterfaces; std::map> mEventHandlers; diff --git a/components/lua/storage.cpp b/components/lua/storage.cpp index 9f3a159b3a..9d3d233fb7 100644 --- a/components/lua/storage.cpp +++ b/components/lua/storage.cpp @@ -37,7 +37,7 @@ namespace LuaUtil sol::object LuaStorage::Value::getReadOnly(lua_State* L) const { if (mReadOnlyValue == sol::nil && !mSerializedValue.empty()) - mReadOnlyValue = deserialize(L, mSerializedValue, nullptr, true); + mReadOnlyValue = sol::main_object(deserialize(L, mSerializedValue, nullptr, true)); return mReadOnlyValue; } diff --git a/components/lua/storage.hpp b/components/lua/storage.hpp index 5ca151c30d..f86feddb2d 100644 --- a/components/lua/storage.hpp +++ b/components/lua/storage.hpp @@ -74,7 +74,7 @@ namespace LuaUtil private: std::string mSerializedValue; - mutable sol::object mReadOnlyValue = sol::nil; + mutable sol::main_object mReadOnlyValue = sol::nil; }; struct Section diff --git a/components/lua_ui/content.hpp b/components/lua_ui/content.hpp index 1a0379b817..aff38fca57 100644 --- a/components/lua_ui/content.hpp +++ b/components/lua_ui/content.hpp @@ -18,7 +18,7 @@ namespace LuaUi { public: // accepts only Lua tables returned by ui.content - explicit ContentView(sol::table table) + explicit ContentView(sol::main_table table) : mTable(std::move(table)) { if (!isValidContent(mTable)) @@ -94,7 +94,7 @@ namespace LuaUi sol::table getMetatable() const { return mTable[sol::metatable_key].get(); } private: - sol::table mTable; + sol::main_table mTable; template sol::object callMethod(std::string_view name, Arg&&... arg) const diff --git a/components/lua_ui/element.cpp b/components/lua_ui/element.cpp index 2d8462e273..ce6d57e154 100644 --- a/components/lua_ui/element.cpp +++ b/components/lua_ui/element.cpp @@ -324,7 +324,7 @@ namespace LuaUi destroyRoot(mRoot); mRoot = nullptr; } - mLayout = sol::make_object(mLayout.lua_state(), sol::nil); + mLayout.reset(); } mState = Destroyed; } diff --git a/components/lua_ui/element.hpp b/components/lua_ui/element.hpp index 39a1fdd769..ffd15ac950 100644 --- a/components/lua_ui/element.hpp +++ b/components/lua_ui/element.hpp @@ -19,7 +19,7 @@ namespace LuaUi } WidgetExtension* mRoot; - sol::object mLayout; + sol::main_object mLayout; std::string mLayer; enum State diff --git a/components/lua_ui/widget.cpp b/components/lua_ui/widget.cpp index 71416be8c8..acbdbcd03a 100644 --- a/components/lua_ui/widget.cpp +++ b/components/lua_ui/widget.cpp @@ -281,7 +281,7 @@ namespace LuaUi updateChildrenCoord(); } - void WidgetExtension::setProperties(const sol::object& props) + void WidgetExtension::setProperties(const sol::main_object& props) { mProperties = props; updateProperties(); diff --git a/components/lua_ui/widget.hpp b/components/lua_ui/widget.hpp index 0ec688d3bb..5fcf86d110 100644 --- a/components/lua_ui/widget.hpp +++ b/components/lua_ui/widget.hpp @@ -50,10 +50,10 @@ namespace LuaUi void setCallback(const std::string&, const LuaUtil::Callback&); void clearCallbacks(); - void setProperties(const sol::object& props); - void setTemplateProperties(const sol::object& props) { mTemplateProperties = props; } + void setProperties(const sol::main_object& props); + void setTemplateProperties(const sol::main_object& props) { mTemplateProperties = props; } - void setExternal(const sol::object& external) { mExternal = external; } + void setExternal(const sol::main_object& external) { mExternal = external; } MyGUI::IntCoord forcedCoord(); void forceCoord(const MyGUI::IntCoord& offset); @@ -63,7 +63,7 @@ namespace LuaUi virtual void updateCoord(); - const sol::table& getLayout() { return mLayout; } + const sol::main_table& getLayout() { return mLayout; } void setLayout(const sol::table& layout) { mLayout = layout; } template @@ -150,10 +150,10 @@ namespace LuaUi std::vector mTemplateChildren; WidgetExtension* mSlot; std::map> mCallbacks; - sol::table mLayout; - sol::object mProperties; - sol::object mTemplateProperties; - sol::object mExternal; + sol::main_table mLayout; + sol::main_object mProperties; + sol::main_object mTemplateProperties; + sol::main_object mExternal; WidgetExtension* mParent; bool mTemplateChild; bool mElementRoot;