From df836ac77c9f71383c45739ad1e86fbe9f249f01 Mon Sep 17 00:00:00 2001 From: Sebastian Fieber Date: Wed, 15 Jan 2025 00:24:38 +0100 Subject: [PATCH 1/3] add mwscript bindings to core --- apps/openmw/CMakeLists.txt | 2 +- apps/openmw/mwlua/corebindings.cpp | 4 +++ apps/openmw/mwlua/coremwscriptbindings.cpp | 30 ++++++++++++++++++++++ apps/openmw/mwlua/coremwscriptbindings.hpp | 13 ++++++++++ files/lua_api/openmw/core.lua | 15 +++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 apps/openmw/mwlua/coremwscriptbindings.cpp create mode 100644 apps/openmw/mwlua/coremwscriptbindings.hpp diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 37de0abeab..2de32a09a5 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -60,7 +60,7 @@ add_openmw_dir (mwscript add_openmw_dir (mwlua luamanagerimp object objectlists userdataserializer luaevents engineevents objectvariant - context menuscripts globalscripts localscripts playerscripts luabindings objectbindings cellbindings + context menuscripts globalscripts localscripts playerscripts luabindings objectbindings cellbindings coremwscriptbindings mwscriptbindings camerabindings vfsbindings uibindings soundbindings inputbindings nearbybindings dialoguebindings postprocessingbindings stats recordstore debugbindings corebindings worldbindings worker magicbindings factionbindings classbindings itemdata inputprocessor animationbindings birthsignbindings racebindings markupbindings diff --git a/apps/openmw/mwlua/corebindings.cpp b/apps/openmw/mwlua/corebindings.cpp index 445bcdd617..356752f6f2 100644 --- a/apps/openmw/mwlua/corebindings.cpp +++ b/apps/openmw/mwlua/corebindings.cpp @@ -19,6 +19,7 @@ #include "../mwworld/datetimemanager.hpp" #include "../mwworld/esmstore.hpp" +#include "coremwscriptbindings.hpp" #include "dialoguebindings.hpp" #include "factionbindings.hpp" #include "luaevents.hpp" @@ -97,6 +98,9 @@ namespace MWLua api["stats"] = context.cachePackage("openmw_core_stats", [context]() { return initCoreStatsBindings(context); }); + api["mwscripts"] + = context.cachePackage("openmw_core_mwscripts", [context]() { return initCoreMwScriptBindings(context); }); + api["factions"] = context.cachePackage("openmw_core_factions", [context]() { return initCoreFactionBindings(context); }); api["dialogue"] diff --git a/apps/openmw/mwlua/coremwscriptbindings.cpp b/apps/openmw/mwlua/coremwscriptbindings.cpp new file mode 100644 index 0000000000..91066e6c9f --- /dev/null +++ b/apps/openmw/mwlua/coremwscriptbindings.cpp @@ -0,0 +1,30 @@ +#include "coremwscriptbindings.hpp" + +#include "context.hpp" + +#include "apps/openmw/mwworld/esmstore.hpp" + +#include +#include + +namespace MWLua +{ + sol::table initCoreMwScriptBindings(const Context& context) + { + sol::state_view lua = context.sol(); + sol::table api(lua, sol::create); + + auto recordBindingsClass = lua.new_usertype("ESM3_Script"); + recordBindingsClass[sol::meta_function::to_string] + = [](const ESM::Script& rec) { return "ESM3_Script[" + rec.mId.toDebugString() + "]"; }; + recordBindingsClass["id"] + = sol::readonly_property([](const ESM::Script& rec) { return rec.mId.serializeText(); }); + recordBindingsClass["text"] = sol::readonly_property([](const ESM::Script& rec) { return rec.mScriptText; }); + + // TODO add more members + + addRecordFunctionBinding(api, context); + + return LuaUtil::makeReadOnly(api); + } +} diff --git a/apps/openmw/mwlua/coremwscriptbindings.hpp b/apps/openmw/mwlua/coremwscriptbindings.hpp new file mode 100644 index 0000000000..0f69b7dcb7 --- /dev/null +++ b/apps/openmw/mwlua/coremwscriptbindings.hpp @@ -0,0 +1,13 @@ +#ifndef MWLUA_COREMWSCRIPTBINDINGS_H +#define MWLUA_COREMWSCRIPTBINDINGS_H + +#include + +namespace MWLua +{ + struct Context; + + sol::table initCoreMwScriptBindings(const Context& context); +} + +#endif // MWLUA_COREMWSCRIPTBINDINGS_H diff --git a/files/lua_api/openmw/core.lua b/files/lua_api/openmw/core.lua index 8a78a52441..dc689e71c3 100644 --- a/files/lua_api/openmw/core.lua +++ b/files/lua_api/openmw/core.lua @@ -1143,4 +1143,19 @@ -- @field #number favouredSkillValue Secondary skill value required to get this rank. -- @field #number factionReaction Reaction of faction members if player is in this faction. +--- @{#MWScripts}: MWScripts +-- @field [parent=#core] #MWScript mwscripts + +--- +-- A read-only list of all @{#MWScriptRecord}s in the world database. +-- @field [parent=#MWScripts] #list<#MWScriptRecord> records +-- @usage local record = core.mwscripts.records['example_recordid'] +-- @usage local record = core.mwscripts.records[1] + +--- +-- MWScript data record +-- @type MWScriptRecord +-- @field #string id MWScript id +-- @field #string text MWScript content + return nil From eb5149ee0e343330ceff1a16ca7bfb86d7eb2140 Mon Sep 17 00:00:00 2001 From: Sebastian Fieber Date: Sun, 19 Jan 2025 21:45:01 +0100 Subject: [PATCH 2/3] remove comment --- apps/openmw/mwlua/coremwscriptbindings.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/openmw/mwlua/coremwscriptbindings.cpp b/apps/openmw/mwlua/coremwscriptbindings.cpp index 91066e6c9f..9e314dc07b 100644 --- a/apps/openmw/mwlua/coremwscriptbindings.cpp +++ b/apps/openmw/mwlua/coremwscriptbindings.cpp @@ -21,8 +21,6 @@ namespace MWLua = sol::readonly_property([](const ESM::Script& rec) { return rec.mId.serializeText(); }); recordBindingsClass["text"] = sol::readonly_property([](const ESM::Script& rec) { return rec.mScriptText; }); - // TODO add more members - addRecordFunctionBinding(api, context); return LuaUtil::makeReadOnly(api); From 22e758a8df7fd7814070daf6a2a4cf17250f2784 Mon Sep 17 00:00:00 2001 From: Sebastian Fieber Date: Thu, 23 Jan 2025 21:03:04 +0100 Subject: [PATCH 3/3] fix order of includes + changelog --- CHANGELOG.md | 5 +++++ apps/openmw/mwlua/coremwscriptbindings.cpp | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 512315ade0..5558174b99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +0.50.0 +------ + + Feature #8320: Add access mwscript source text to lua api + 0.49.0 ------ diff --git a/apps/openmw/mwlua/coremwscriptbindings.cpp b/apps/openmw/mwlua/coremwscriptbindings.cpp index 9e314dc07b..6bf01a4b3d 100644 --- a/apps/openmw/mwlua/coremwscriptbindings.cpp +++ b/apps/openmw/mwlua/coremwscriptbindings.cpp @@ -1,12 +1,12 @@ #include "coremwscriptbindings.hpp" -#include "context.hpp" - -#include "apps/openmw/mwworld/esmstore.hpp" - -#include #include +#include "../mwworld/esmstore.hpp" + +#include "context.hpp" +#include "recordstore.hpp" + namespace MWLua { sol::table initCoreMwScriptBindings(const Context& context)