diff --git a/apps/openmw/mwlua/cellbindings.cpp b/apps/openmw/mwlua/cellbindings.cpp index 2f279e0c1a..1efcbb89e5 100644 --- a/apps/openmw/mwlua/cellbindings.cpp +++ b/apps/openmw/mwlua/cellbindings.cpp @@ -92,12 +92,11 @@ namespace MWLua const auto& storage = MWBase::Environment::get().getWindowManager()->getTranslationDataStorage(); return storage.translateCellName(c.mStore->getCell()->getNameId()); }); - cellT["id"] - = sol::readonly_property([](const CellT& c) { return c.mStore->getCell()->getId().serializeText(); }); - cellT["region"] = sol::readonly_property( - [](const CellT& c) -> std::string { return c.mStore->getCell()->getRegion().serializeText(); }); - cellT["worldSpaceId"] = sol::readonly_property( - [](const CellT& c) -> std::string { return c.mStore->getCell()->getWorldSpace().serializeText(); }); + cellT["id"] = sol::readonly_property([](const CellT& c) -> ESM::RefId { return c.mStore->getCell()->getId(); }); + cellT["region"] + = sol::readonly_property([](const CellT& c) -> ESM::RefId { return c.mStore->getCell()->getRegion(); }); + cellT["worldSpaceId"] + = sol::readonly_property([](const CellT& c) -> ESM::RefId { return c.mStore->getCell()->getWorldSpace(); }); cellT["gridX"] = sol::readonly_property([](const CellT& c) { return c.mStore->getCell()->getGridX(); }); cellT["gridY"] = sol::readonly_property([](const CellT& c) { return c.mStore->getCell()->getGridY(); }); cellT["hasWater"] = sol::readonly_property([](const CellT& c) { return c.mStore->getCell()->hasWater(); }); diff --git a/apps/openmw/mwlua/regionbindings.cpp b/apps/openmw/mwlua/regionbindings.cpp index 1f0e85a5e3..e9920a25cd 100644 --- a/apps/openmw/mwlua/regionbindings.cpp +++ b/apps/openmw/mwlua/regionbindings.cpp @@ -46,7 +46,7 @@ namespace MWLua regionT["mapColor"] = sol::readonly_property( [](const ESM::Region& rec) -> Misc::Color { return Misc::Color::fromRGB(rec.mMapColor); }); regionT["sleepList"] - = sol::readonly_property([](const ESM::Region& rec) { return LuaUtil::serializeRefId(rec.mSleepList); }); + = sol::readonly_property([](const ESM::Region& rec) -> ESM::RefId { return rec.mSleepList; }); regionT["weatherProbabilities"] = sol::readonly_property([lua = lua.lua_state()](const ESM::Region& rec) { sol::table res(lua, sol::create); diff --git a/apps/openmw/mwlua/types/activator.cpp b/apps/openmw/mwlua/types/activator.cpp index a366256899..1245dd7026 100644 --- a/apps/openmw/mwlua/types/activator.cpp +++ b/apps/openmw/mwlua/types/activator.cpp @@ -52,8 +52,7 @@ namespace MWLua = sol::readonly_property([](const ESM::Activator& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Activator& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Activator& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] + = sol::readonly_property([](const ESM::Activator& rec) -> ESM::RefId { return rec.mScript; }); } } diff --git a/apps/openmw/mwlua/types/apparatus.cpp b/apps/openmw/mwlua/types/apparatus.cpp index c9953d87ad..72dcbf4b30 100644 --- a/apps/openmw/mwlua/types/apparatus.cpp +++ b/apps/openmw/mwlua/types/apparatus.cpp @@ -42,9 +42,8 @@ namespace MWLua = sol::readonly_property([](const ESM::Apparatus& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Apparatus& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Apparatus& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] + = sol::readonly_property([](const ESM::Apparatus& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Apparatus& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); @@ -54,4 +53,4 @@ namespace MWLua record["quality"] = sol::readonly_property([](const ESM::Apparatus& rec) -> float { return rec.mData.mQuality; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/armor.cpp b/apps/openmw/mwlua/types/armor.cpp index 0acb517dbe..8668d0cc13 100644 --- a/apps/openmw/mwlua/types/armor.cpp +++ b/apps/openmw/mwlua/types/armor.cpp @@ -102,10 +102,8 @@ namespace MWLua record["icon"] = sol::readonly_property([vfs](const ESM::Armor& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); - record["enchant"] = sol::readonly_property( - [](const ESM::Armor& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mEnchant); }); - record["mwscript"] = sol::readonly_property( - [](const ESM::Armor& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["enchant"] = sol::readonly_property([](const ESM::Armor& rec) -> ESM::RefId { return rec.mEnchant; }); + record["mwscript"] = sol::readonly_property([](const ESM::Armor& rec) -> ESM::RefId { return rec.mScript; }); record["weight"] = sol::readonly_property([](const ESM::Armor& rec) -> float { return rec.mData.mWeight; }); record["value"] = sol::readonly_property([](const ESM::Armor& rec) -> int { return rec.mData.mValue; }); record["type"] = sol::readonly_property([](const ESM::Armor& rec) -> int { return rec.mData.mType; }); diff --git a/apps/openmw/mwlua/types/book.cpp b/apps/openmw/mwlua/types/book.cpp index 006fbd8092..ebcc7a06fd 100644 --- a/apps/openmw/mwlua/types/book.cpp +++ b/apps/openmw/mwlua/types/book.cpp @@ -106,21 +106,18 @@ namespace MWLua = sol::readonly_property([](const ESM::Book& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Book& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property( - [](const ESM::Book& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::Book& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Book& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); record["text"] = sol::readonly_property([](const ESM::Book& rec) -> std::string { return rec.mText; }); - record["enchant"] = sol::readonly_property( - [](const ESM::Book& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mEnchant); }); + record["enchant"] = sol::readonly_property([](const ESM::Book& rec) -> ESM::RefId { return rec.mEnchant; }); record["isScroll"] = sol::readonly_property([](const ESM::Book& rec) -> bool { return rec.mData.mIsScroll; }); record["value"] = sol::readonly_property([](const ESM::Book& rec) -> int { return rec.mData.mValue; }); record["weight"] = sol::readonly_property([](const ESM::Book& rec) -> float { return rec.mData.mWeight; }); record["enchantCapacity"] = sol::readonly_property([](const ESM::Book& rec) -> float { return rec.mData.mEnchant * 0.1f; }); - record["skill"] = sol::readonly_property([](const ESM::Book& rec) -> sol::optional { - return LuaUtil::serializeRefId(ESM::Skill::indexToRefId(rec.mData.mSkillId)); - }); + record["skill"] = sol::readonly_property( + [](const ESM::Book& rec) -> ESM::RefId { return ESM::Skill::indexToRefId(rec.mData.mSkillId); }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/clothing.cpp b/apps/openmw/mwlua/types/clothing.cpp index 0085f05198..40c2246825 100644 --- a/apps/openmw/mwlua/types/clothing.cpp +++ b/apps/openmw/mwlua/types/clothing.cpp @@ -97,12 +97,8 @@ namespace MWLua record["icon"] = sol::readonly_property([vfs](const ESM::Clothing& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); - record["enchant"] = sol::readonly_property([](const ESM::Clothing& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mEnchant); - }); - record["mwscript"] = sol::readonly_property([](const ESM::Clothing& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["enchant"] = sol::readonly_property([](const ESM::Clothing& rec) -> ESM::RefId { return rec.mEnchant; }); + record["mwscript"] = sol::readonly_property([](const ESM::Clothing& rec) -> ESM::RefId { return rec.mScript; }); record["weight"] = sol::readonly_property([](const ESM::Clothing& rec) -> float { return rec.mData.mWeight; }); record["value"] = sol::readonly_property([](const ESM::Clothing& rec) -> int { return rec.mData.mValue; }); record["type"] = sol::readonly_property([](const ESM::Clothing& rec) -> int { return rec.mData.mType; }); diff --git a/apps/openmw/mwlua/types/container.cpp b/apps/openmw/mwlua/types/container.cpp index 9d3821ca48..8e37ac275b 100644 --- a/apps/openmw/mwlua/types/container.cpp +++ b/apps/openmw/mwlua/types/container.cpp @@ -52,9 +52,8 @@ namespace MWLua = sol::readonly_property([](const ESM::Container& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Container& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Container& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] + = sol::readonly_property([](const ESM::Container& rec) -> ESM::RefId { return rec.mScript; }); record["weight"] = sol::readonly_property([](const ESM::Container& rec) -> float { return rec.mWeight; }); record["isOrganic"] = sol::readonly_property( [](const ESM::Container& rec) -> bool { return rec.mFlags & ESM::Container::Organic; }); diff --git a/apps/openmw/mwlua/types/creature.cpp b/apps/openmw/mwlua/types/creature.cpp index a9a1be9eee..81dfd612e4 100644 --- a/apps/openmw/mwlua/types/creature.cpp +++ b/apps/openmw/mwlua/types/creature.cpp @@ -40,9 +40,7 @@ namespace MWLua = sol::readonly_property([](const ESM::Creature& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Creature& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Creature& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] = sol::readonly_property([](const ESM::Creature& rec) -> ESM::RefId { return rec.mScript; }); record["baseCreature"] = sol::readonly_property( [](const ESM::Creature& rec) -> std::string { return rec.mOriginal.serializeText(); }); record["soulValue"] = sol::readonly_property([](const ESM::Creature& rec) -> int { return rec.mData.mSoul; }); @@ -78,4 +76,4 @@ namespace MWLua addActorServicesBindings(record, context); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/door.cpp b/apps/openmw/mwlua/types/door.cpp index 61dcc66a45..e1414fea37 100644 --- a/apps/openmw/mwlua/types/door.cpp +++ b/apps/openmw/mwlua/types/door.cpp @@ -30,7 +30,6 @@ namespace sol namespace MWLua { - static const MWWorld::Ptr& doorPtr(const Object& o) { return verifyType(ESM::REC_DOOR, o.ptr()); @@ -110,8 +109,7 @@ namespace MWLua = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property( - [](const ESM::Door& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::Door& rec) -> ESM::RefId { return rec.mScript; }); record["openSound"] = sol::readonly_property( [](const ESM::Door& rec) -> std::string { return rec.mOpenSound.serializeText(); }); record["closeSound"] = sol::readonly_property( @@ -154,4 +152,4 @@ namespace MWLua record["closeSound"] = sol::readonly_property( [](const ESM4::Door& rec) -> std::string { return ESM::RefId(rec.mCloseSound).serializeText(); }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/ingredient.cpp b/apps/openmw/mwlua/types/ingredient.cpp index 8e52a82b19..ed017da9d1 100644 --- a/apps/openmw/mwlua/types/ingredient.cpp +++ b/apps/openmw/mwlua/types/ingredient.cpp @@ -34,9 +34,8 @@ namespace MWLua = sol::readonly_property([](const ESM::Ingredient& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Ingredient& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Ingredient& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] + = sol::readonly_property([](const ESM::Ingredient& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Ingredient& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); @@ -64,4 +63,4 @@ namespace MWLua return res; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/light.cpp b/apps/openmw/mwlua/types/light.cpp index 171db177a4..0a9befd9eb 100644 --- a/apps/openmw/mwlua/types/light.cpp +++ b/apps/openmw/mwlua/types/light.cpp @@ -105,8 +105,7 @@ namespace MWLua }); record["sound"] = sol::readonly_property([](const ESM::Light& rec) -> std::string { return rec.mSound.serializeText(); }); - record["mwscript"] = sol::readonly_property( - [](const ESM::Light& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::Light& rec) -> ESM::RefId { return rec.mScript; }); record["weight"] = sol::readonly_property([](const ESM::Light& rec) -> float { return rec.mData.mWeight; }); record["value"] = sol::readonly_property([](const ESM::Light& rec) -> int { return rec.mData.mValue; }); record["duration"] = sol::readonly_property([](const ESM::Light& rec) -> int { return rec.mData.mTime; }); diff --git a/apps/openmw/mwlua/types/lockpick.cpp b/apps/openmw/mwlua/types/lockpick.cpp index 3f41c65df2..b8aab6c982 100644 --- a/apps/openmw/mwlua/types/lockpick.cpp +++ b/apps/openmw/mwlua/types/lockpick.cpp @@ -33,9 +33,7 @@ namespace MWLua = sol::readonly_property([](const ESM::Lockpick& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Lockpick& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Lockpick& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] = sol::readonly_property([](const ESM::Lockpick& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Lockpick& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); @@ -46,4 +44,4 @@ namespace MWLua record["quality"] = sol::readonly_property([](const ESM::Lockpick& rec) -> float { return rec.mData.mQuality; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/misc.cpp b/apps/openmw/mwlua/types/misc.cpp index ef89464a2c..c486b9c8ab 100644 --- a/apps/openmw/mwlua/types/misc.cpp +++ b/apps/openmw/mwlua/types/misc.cpp @@ -71,10 +71,8 @@ namespace MWLua object.ptr().getCellRef().setSoul(creature); }; - miscellaneous["getSoul"] = [](const Object& object) -> sol::optional { - ESM::RefId soul = object.ptr().getCellRef().getSoul(); - return LuaUtil::serializeRefId(soul); - }; + miscellaneous["getSoul"] + = [](const Object& object) -> ESM::RefId { return object.ptr().getCellRef().getSoul(); }; miscellaneous["soul"] = miscellaneous["getSoul"]; // for compatibility; should be removed later sol::usertype record = context.sol().new_usertype("ESM3_Miscellaneous"); @@ -84,9 +82,8 @@ namespace MWLua [](const ESM::Miscellaneous& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Miscellaneous& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property([](const ESM::Miscellaneous& rec) -> sol::optional { - return LuaUtil::serializeRefId(rec.mScript); - }); + record["mwscript"] + = sol::readonly_property([](const ESM::Miscellaneous& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Miscellaneous& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); @@ -96,4 +93,4 @@ namespace MWLua record["weight"] = sol::readonly_property([](const ESM::Miscellaneous& rec) -> float { return rec.mData.mWeight; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/npc.cpp b/apps/openmw/mwlua/types/npc.cpp index 15022b79c7..b71ad28fc0 100644 --- a/apps/openmw/mwlua/types/npc.cpp +++ b/apps/openmw/mwlua/types/npc.cpp @@ -208,16 +208,15 @@ namespace MWLua = sol::readonly_property([](const ESM::NPC& rec) -> std::string { return rec.mRace.serializeText(); }); record["class"] = sol::readonly_property([](const ESM::NPC& rec) -> std::string { return rec.mClass.serializeText(); }); - record["mwscript"] = sol::readonly_property( - [](const ESM::NPC& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::NPC& rec) -> ESM::RefId { return rec.mScript; }); record["hair"] = sol::readonly_property([](const ESM::NPC& rec) -> std::string { return rec.mHair.serializeText(); }); record["baseDisposition"] = sol::readonly_property([](const ESM::NPC& rec) -> int { return (int)rec.mNpdt.mDisposition; }); record["head"] = sol::readonly_property([](const ESM::NPC& rec) -> std::string { return rec.mHead.serializeText(); }); - record["primaryFaction"] = sol::readonly_property( - [](const ESM::NPC& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mFaction); }); + record["primaryFaction"] + = sol::readonly_property([](const ESM::NPC& rec) -> ESM::RefId { return rec.mFaction; }); record["primaryFactionRank"] = sol::readonly_property([](const ESM::NPC& rec, sol::this_state s) -> int { if (rec.mFaction.empty()) return 0; diff --git a/apps/openmw/mwlua/types/potion.cpp b/apps/openmw/mwlua/types/potion.cpp index 4d04c8bb13..435bce9c9b 100644 --- a/apps/openmw/mwlua/types/potion.cpp +++ b/apps/openmw/mwlua/types/potion.cpp @@ -82,8 +82,7 @@ namespace MWLua record["icon"] = sol::readonly_property([vfs](const ESM::Potion& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); - record["mwscript"] = sol::readonly_property( - [](const ESM::Potion& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::Potion& rec) -> ESM::RefId { return rec.mScript; }); record["weight"] = sol::readonly_property([](const ESM::Potion& rec) -> float { return rec.mData.mWeight; }); record["value"] = sol::readonly_property([](const ESM::Potion& rec) -> int { return rec.mData.mValue; }); record["effects"] = sol::readonly_property([lua = lua.lua_state()](const ESM::Potion& rec) -> sol::table { @@ -93,4 +92,4 @@ namespace MWLua return res; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/probe.cpp b/apps/openmw/mwlua/types/probe.cpp index 4467f6617a..d8f499acdc 100644 --- a/apps/openmw/mwlua/types/probe.cpp +++ b/apps/openmw/mwlua/types/probe.cpp @@ -33,8 +33,7 @@ namespace MWLua = sol::readonly_property([](const ESM::Probe& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Probe& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property( - [](const ESM::Probe& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::Probe& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Probe& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); @@ -43,4 +42,4 @@ namespace MWLua record["weight"] = sol::readonly_property([](const ESM::Probe& rec) -> float { return rec.mData.mWeight; }); record["quality"] = sol::readonly_property([](const ESM::Probe& rec) -> float { return rec.mData.mQuality; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/repair.cpp b/apps/openmw/mwlua/types/repair.cpp index af95d187a8..9ab6219663 100644 --- a/apps/openmw/mwlua/types/repair.cpp +++ b/apps/openmw/mwlua/types/repair.cpp @@ -33,8 +33,7 @@ namespace MWLua = sol::readonly_property([](const ESM::Repair& rec) -> std::string { return rec.mId.serializeText(); }); record["name"] = sol::readonly_property([](const ESM::Repair& rec) -> std::string { return rec.mName; }); addModelProperty(record); - record["mwscript"] = sol::readonly_property( - [](const ESM::Repair& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["mwscript"] = sol::readonly_property([](const ESM::Repair& rec) -> ESM::RefId { return rec.mScript; }); record["icon"] = sol::readonly_property([vfs](const ESM::Repair& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); @@ -43,4 +42,4 @@ namespace MWLua record["weight"] = sol::readonly_property([](const ESM::Repair& rec) -> float { return rec.mData.mWeight; }); record["quality"] = sol::readonly_property([](const ESM::Repair& rec) -> float { return rec.mData.mQuality; }); } -} +} \ No newline at end of file diff --git a/apps/openmw/mwlua/types/weapon.cpp b/apps/openmw/mwlua/types/weapon.cpp index 7fbfd5fb41..96477bc0bb 100644 --- a/apps/openmw/mwlua/types/weapon.cpp +++ b/apps/openmw/mwlua/types/weapon.cpp @@ -135,10 +135,8 @@ namespace MWLua record["icon"] = sol::readonly_property([vfs](const ESM::Weapon& rec) -> std::string { return Misc::ResourceHelpers::correctIconPath(rec.mIcon, vfs); }); - record["enchant"] = sol::readonly_property( - [](const ESM::Weapon& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mEnchant); }); - record["mwscript"] = sol::readonly_property( - [](const ESM::Weapon& rec) -> sol::optional { return LuaUtil::serializeRefId(rec.mScript); }); + record["enchant"] = sol::readonly_property([](const ESM::Weapon& rec) -> ESM::RefId { return rec.mEnchant; }); + record["mwscript"] = sol::readonly_property([](const ESM::Weapon& rec) -> ESM::RefId { return rec.mScript; }); record["isMagical"] = sol::readonly_property( [](const ESM::Weapon& rec) -> bool { return rec.mData.mFlags & ESM::Weapon::Magical; }); record["isSilver"] = sol::readonly_property( diff --git a/apps/openmw/mwlua/weatherbindings.cpp b/apps/openmw/mwlua/weatherbindings.cpp index ac81b9defa..e405d456c8 100644 --- a/apps/openmw/mwlua/weatherbindings.cpp +++ b/apps/openmw/mwlua/weatherbindings.cpp @@ -199,7 +199,7 @@ namespace MWLua weatherT["rainMinHeight"] = sol::property([](const MWWorld::Weather& w) { return w.mRainMinHeight; }, [](MWWorld::Weather& w, const FiniteFloat rainMinHeight) { w.mRainMinHeight = rainMinHeight; }); weatherT["rainLoopSoundID"] - = sol::property([](const MWWorld::Weather& w) { return LuaUtil::serializeRefId(w.mRainLoopSoundID); }, + = sol::property([](const MWWorld::Weather& w) -> ESM::RefId { return w.mRainLoopSoundID; }, [](MWWorld::Weather& w, sol::optional rainLoopSoundID) { w.mRainLoopSoundID = ESM::RefId::deserializeText(rainLoopSoundID.value_or("")); }); @@ -209,7 +209,7 @@ namespace MWLua w.mSunDiscSunsetColor = sunDiscSunsetColor.toVec(); }); weatherT["ambientLoopSoundID"] - = sol::property([](const MWWorld::Weather& w) { return LuaUtil::serializeRefId(w.mAmbientLoopSoundID); }, + = sol::property([](const MWWorld::Weather& w) -> ESM::RefId { return w.mAmbientLoopSoundID; }, [](MWWorld::Weather& w, sol::optional ambientLoopSoundId) { w.mAmbientLoopSoundID = ESM::RefId::deserializeText(ambientLoopSoundId.value_or("")); }); diff --git a/components/lua/util.hpp b/components/lua/util.hpp index 2b84d9d60c..e664dc1f34 100644 --- a/components/lua/util.hpp +++ b/components/lua/util.hpp @@ -20,13 +20,15 @@ namespace LuaUtil { return i + 1; } - - inline sol::optional serializeRefId(ESM::RefId id) - { - if (id.empty()) - return sol::nullopt; - return id.serializeText(); - } } -#endif +// ADL-based customization point for sol2 to automatically convert ESM::RefId +// Empty RefIds are converted to nil, non-empty ones are serialized to strings +inline int sol_lua_push(sol::types, lua_State* L, const ESM::RefId& id) +{ + if (id.empty()) + return sol::stack::push(L, sol::lua_nil); + return sol::stack::push(L, id.serializeText()); +} + +#endif \ No newline at end of file diff --git a/files/lua_api/openmw/core.lua b/files/lua_api/openmw/core.lua index 7909c1ce21..545cda634f 100644 --- a/files/lua_api/openmw/core.lua +++ b/files/lua_api/openmw/core.lua @@ -299,12 +299,12 @@ -- @field #string name Name of the cell (can be empty string). -- @field #string displayName Human-readable cell name (takes into account *.cel file localizations). Can be empty string. -- @field #string id Unique record ID of the cell, based on cell name for interiors and the worldspace for exteriors, or the formID of the cell for ESM4 cells. --- @field #string region Region of the cell. +-- @field #string region Region of the cell (can be nil). -- @field #boolean isExterior Whether the cell is an exterior cell. "Exterior" means grid of cells where the player can seamless walk from one cell to another without teleports. QuasiExterior (interior with sky) is not an exterior. -- @field #boolean isQuasiExterior (DEPRECATED, use `hasTag("QuasiExterior")`) Whether the cell is a quasi exterior (like interior but with the sky and the weather). -- @field #number gridX Index of the cell by X (only for exteriors). -- @field #number gridY Index of the cell by Y (only for exteriors). --- @field #string worldSpaceId Id of the world space. +-- @field #string worldSpaceId Id of the world space (can be nil). -- @field #boolean hasWater True if the cell contains water. -- @field #number waterLevel The water level of the cell. (nil if cell has no water). -- @field #boolean hasSky True if in this cell sky should be rendered.