From 1fb136a41712d5be77f862193e333cc5d1d7aacc Mon Sep 17 00:00:00 2001 From: uramer Date: Fri, 13 May 2022 18:45:03 +0200 Subject: [PATCH] Correct icon and mesh paths in Lua records --- apps/openmw/mwbase/windowmanager.hpp | 1 + apps/openmw/mwgui/windowmanagerimp.cpp | 5 +++++ apps/openmw/mwgui/windowmanagerimp.hpp | 1 + apps/openmw/mwlua/types/creature.cpp | 6 +++++- apps/openmw/mwlua/types/door.cpp | 6 +++++- apps/openmw/mwlua/types/weapon.cpp | 11 +++++++++-- components/misc/resourcehelpers.cpp | 5 +++++ components/misc/resourcehelpers.hpp | 1 + 8 files changed, 32 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwbase/windowmanager.hpp b/apps/openmw/mwbase/windowmanager.hpp index c1c99436cb..470eaf3d26 100644 --- a/apps/openmw/mwbase/windowmanager.hpp +++ b/apps/openmw/mwbase/windowmanager.hpp @@ -341,6 +341,7 @@ namespace MWBase virtual std::string correctIconPath(const std::string& path) = 0; virtual std::string correctBookartPath(const std::string& path, int width, int height, bool* exists = nullptr) = 0; virtual std::string correctTexturePath(const std::string& path) = 0; + virtual std::string correctMeshPath(const std::string& path) = 0; virtual bool textureExists(const std::string& path) = 0; virtual void addCell(MWWorld::CellStore* cell) = 0; diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 1d964f09ec..872ac1980c 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -2140,6 +2140,11 @@ namespace MWGui return Misc::ResourceHelpers::correctTexturePath(path, mResourceSystem->getVFS()); } + std::string WindowManager::correctMeshPath(const std::string& path) + { + return Misc::ResourceHelpers::correctMeshPath(path, mResourceSystem->getVFS()); + } + bool WindowManager::textureExists(const std::string &path) { std::string corrected = Misc::ResourceHelpers::correctTexturePath(path, mResourceSystem->getVFS()); diff --git a/apps/openmw/mwgui/windowmanagerimp.hpp b/apps/openmw/mwgui/windowmanagerimp.hpp index 58400ec76b..483c7e5c32 100644 --- a/apps/openmw/mwgui/windowmanagerimp.hpp +++ b/apps/openmw/mwgui/windowmanagerimp.hpp @@ -381,6 +381,7 @@ namespace MWGui std::string correctIconPath(const std::string& path) override; std::string correctBookartPath(const std::string& path, int width, int height, bool* exists = nullptr) override; std::string correctTexturePath(const std::string& path) override; + std::string correctMeshPath(const std::string& path) override; bool textureExists(const std::string& path) override; void addCell(MWWorld::CellStore* cell) override; diff --git a/apps/openmw/mwlua/types/creature.cpp b/apps/openmw/mwlua/types/creature.cpp index 87be291493..2358c3f41d 100644 --- a/apps/openmw/mwlua/types/creature.cpp +++ b/apps/openmw/mwlua/types/creature.cpp @@ -3,6 +3,7 @@ #include #include +#include #include "../stats.hpp" #include "../luabindings.hpp" @@ -24,7 +25,10 @@ namespace MWLua sol::usertype record = context.mLua->sol().new_usertype("ESM3_Creature"); record[sol::meta_function::to_string] = [](const ESM::Creature& rec) { return "ESM3_Creature[" + rec.mId + "]"; }; record["name"] = sol::readonly_property([](const ESM::Creature& rec) -> std::string { return rec.mName; }); - record["model"] = sol::readonly_property([](const ESM::Creature& rec) -> std::string { return rec.mModel; }); + record["model"] = sol::readonly_property([](const ESM::Creature& rec) -> std::string + { + return MWBase::Environment::get().getWindowManager()->correctMeshPath(rec.mModel); + }); record["mwscript"] = sol::readonly_property([](const ESM::Creature& rec) -> std::string { return rec.mScript; }); record["baseCreature"] = sol::readonly_property([](const ESM::Creature& rec) -> std::string { return rec.mOriginal; }); } diff --git a/apps/openmw/mwlua/types/door.cpp b/apps/openmw/mwlua/types/door.cpp index 3b5e9a29cc..a6d2a7bc0d 100644 --- a/apps/openmw/mwlua/types/door.cpp +++ b/apps/openmw/mwlua/types/door.cpp @@ -3,6 +3,7 @@ #include #include +#include #include "../luabindings.hpp" @@ -48,7 +49,10 @@ namespace MWLua record[sol::meta_function::to_string] = [](const ESM::Door& rec) -> std::string { return "ESM3_Door[" + rec.mId + "]"; }; record["id"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mId; }); record["name"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mName; }); - record["model"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mModel; }); + record["model"] = sol::readonly_property([](const ESM::Door& rec) -> std::string + { + return MWBase::Environment::get().getWindowManager()->correctMeshPath(rec.mModel); + }); record["mwscript"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mScript; }); record["openSound"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mOpenSound; }); record["closeSound"] = sol::readonly_property([](const ESM::Door& rec) -> std::string { return rec.mCloseSound; }); diff --git a/apps/openmw/mwlua/types/weapon.cpp b/apps/openmw/mwlua/types/weapon.cpp index 594e447f00..beca109216 100644 --- a/apps/openmw/mwlua/types/weapon.cpp +++ b/apps/openmw/mwlua/types/weapon.cpp @@ -3,6 +3,7 @@ #include #include +#include #include "../luabindings.hpp" @@ -41,8 +42,14 @@ namespace MWLua record[sol::meta_function::to_string] = [](const ESM::Weapon& rec) -> std::string { return "ESM3_Weapon[" + rec.mId + "]"; }; record["id"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string { return rec.mId; }); record["name"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string { return rec.mName; }); - record["model"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string { return rec.mModel; }); - record["icon"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string { return rec.mIcon; }); + record["model"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string + { + return MWBase::Environment::get().getWindowManager()->correctMeshPath(rec.mModel); + }); + record["icon"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string + { + return MWBase::Environment::get().getWindowManager()->correctIconPath(rec.mIcon); + }); record["enchant"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string { return rec.mEnchant; }); record["mwscript"] = sol::readonly_property([](const ESM::Weapon& rec) -> std::string { return rec.mScript; }); record["isMagical"] = sol::readonly_property( diff --git a/components/misc/resourcehelpers.cpp b/components/misc/resourcehelpers.cpp index 0095568653..73a1d961e7 100644 --- a/components/misc/resourcehelpers.cpp +++ b/components/misc/resourcehelpers.cpp @@ -145,6 +145,11 @@ std::string Misc::ResourceHelpers::correctActorModelPath(const std::string &resP return mdlname; } +std::string Misc::ResourceHelpers::correctMeshPath(const std::string &resPath, const VFS::Manager* vfs) +{ + return "meshes\\" + resPath; +} + std::string Misc::ResourceHelpers::correctSoundPath(const std::string& resPath, const VFS::Manager* vfs) { std::string sound = resPath; diff --git a/components/misc/resourcehelpers.hpp b/components/misc/resourcehelpers.hpp index 4ea5f5e121..0be1076d7d 100644 --- a/components/misc/resourcehelpers.hpp +++ b/components/misc/resourcehelpers.hpp @@ -24,6 +24,7 @@ namespace Misc std::string correctBookartPath(const std::string &resPath, int width, int height, const VFS::Manager* vfs); /// Use "xfoo.nif" instead of "foo.nif" if available std::string correctActorModelPath(const std::string &resPath, const VFS::Manager* vfs); + std::string correctMeshPath(const std::string &resPath, const VFS::Manager* vfs); std::string correctSoundPath(const std::string& resPath, const VFS::Manager* vfs);