From f3d23dc57e4d51be33b65f9a4c86b7fcec4a8aaf Mon Sep 17 00:00:00 2001 From: kuyondo Date: Tue, 22 Jul 2025 08:37:13 +0800 Subject: [PATCH] Restore forcegreet with disabled actors --- apps/openmw/mwscript/dialogueextensions.cpp | 2 +- apps/openmw/mwworld/refdata.cpp | 13 ++++++++++++- apps/openmw/mwworld/refdata.hpp | 3 +++ apps/openmw/mwworld/scene.cpp | 4 +++- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwscript/dialogueextensions.cpp b/apps/openmw/mwscript/dialogueextensions.cpp index 6c219a52a3..0088e23d78 100644 --- a/apps/openmw/mwscript/dialogueextensions.cpp +++ b/apps/openmw/mwscript/dialogueextensions.cpp @@ -165,7 +165,7 @@ namespace MWScript { MWWorld::Ptr ptr = R()(runtime); - if (!ptr.getRefData().isEnabled()) + if (!ptr.getRefData().isEnabled() && !ptr.getRefData().isResolved()) return; if (!ptr.getClass().isActor()) diff --git a/apps/openmw/mwworld/refdata.cpp b/apps/openmw/mwworld/refdata.cpp index dc49ff0a4e..0b8a3f85af 100644 --- a/apps/openmw/mwworld/refdata.cpp +++ b/apps/openmw/mwworld/refdata.cpp @@ -19,7 +19,8 @@ namespace Flag_SuppressActivate = 1, // If set, activation will be suppressed and redirected to the OnActivate flag, which // can then be handled by a script. Flag_OnActivate = 2, - Flag_ActivationBuffered = 4 + Flag_ActivationBuffered = 4, + Flag_Resolved = 8, }; } @@ -312,4 +313,14 @@ namespace MWWorld return mAnimationState; } + void RefData::flagAsResolved() + { + mFlags |= Flag_Resolved; + } + + bool RefData::isResolved() const + { + return mFlags & Flag_Resolved; + } + } diff --git a/apps/openmw/mwworld/refdata.hpp b/apps/openmw/mwworld/refdata.hpp index e0b62c94b6..b75c17bd4f 100644 --- a/apps/openmw/mwworld/refdata.hpp +++ b/apps/openmw/mwworld/refdata.hpp @@ -146,6 +146,9 @@ namespace MWWorld const ESM::AnimationState& getAnimationState() const; ESM::AnimationState& getAnimationState(); + + void flagAsResolved(); + bool isResolved() const; }; } diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index 0c9a13bc47..5099bf15ba 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -138,6 +138,8 @@ namespace if (!model.empty()) ptr.getClass().insertObject(ptr, model, rotation, physics); + ptr.getRefData().flagAsResolved(); + MWBase::Environment::get().getLuaManager()->objectAddedToScene(ptr); } @@ -1132,7 +1134,7 @@ namespace MWWorld { const VFS::Path::Normalized meshPath = useAnim ? Misc::ResourceHelpers::correctActorModelPath( - VFS::Path::toNormalized(mesh), mRendering.getResourceSystem()->getVFS()) + VFS::Path::toNormalized(mesh), mRendering.getResourceSystem()->getVFS()) : VFS::Path::toNormalized(mesh); if (mRendering.getResourceSystem()->getSceneManager()->checkLoaded(meshPath, mRendering.getReferenceTime()))