diff --git a/apps/essimporter/convertscpt.cpp b/apps/essimporter/convertscpt.cpp index dad3ed7b0b..f3f689f38a 100644 --- a/apps/essimporter/convertscpt.cpp +++ b/apps/essimporter/convertscpt.cpp @@ -11,7 +11,7 @@ namespace ESSImport { out.mId = ESM::RefId::stringRefId(scpt.mSCHD.mName.toString()); out.mRunning = scpt.mRunning; - out.mTargetRef = ESM::RefNum{}; // TODO: convert target reference of global script + out.mTargetRef = scpt.mRefNum; convertSCRI(scpt.mSCRI, out.mLocals); } diff --git a/apps/essimporter/importscpt.cpp b/apps/essimporter/importscpt.cpp index bb62c61103..b048fc6806 100644 --- a/apps/essimporter/importscpt.cpp +++ b/apps/essimporter/importscpt.cpp @@ -12,11 +12,13 @@ namespace ESSImport mSCRI.load(esm); - mRefNum = -1; if (esm.isNextSub("RNAM")) { mRunning = true; - esm.getHT(mRefNum); + ESM::FormId32 refNum; + esm.getHT(refNum); + mRefNum = ESM::RefNum::fromUint32(refNum); + mRefNum.mContentFile--; } else mRunning = false; diff --git a/apps/essimporter/importscpt.hpp b/apps/essimporter/importscpt.hpp index 7c728ee97e..fc7ccc2ef9 100644 --- a/apps/essimporter/importscpt.hpp +++ b/apps/essimporter/importscpt.hpp @@ -7,6 +7,7 @@ #include #include +#include namespace ESM { @@ -35,7 +36,7 @@ namespace ESSImport SCRI mSCRI; bool mRunning; - int32_t mRefNum; // Targeted reference, -1: no reference + ESM::RefNum mRefNum; // Targeted reference void load(ESM::ESMReader& esm); }; diff --git a/apps/openmw/mwscript/globalscripts.cpp b/apps/openmw/mwscript/globalscripts.cpp index c20e2fe255..69806870c0 100644 --- a/apps/openmw/mwscript/globalscripts.cpp +++ b/apps/openmw/mwscript/globalscripts.cpp @@ -26,13 +26,13 @@ namespace script.mRunning = false; if (!ptr.isEmpty()) { - if (ptr.getCellRef().hasContentFile()) + if (MWBase::Environment::get().getWorld()->getPlayerPtr() == ptr) + script.mTargetId = ptr.getCellRef().getRefId(); + else if (ptr.getCellRef().getRefNum().isSet()) { script.mTargetId = ptr.getCellRef().getRefId(); script.mTargetRef = ptr.getCellRef().getRefNum(); } - else if (MWBase::Environment::get().getWorld()->getPlayerPtr() == ptr) - script.mTargetId = ptr.getCellRef().getRefId(); } return script; } @@ -60,10 +60,10 @@ namespace MWWorld::Ptr operator()(const std::pair& pair) const { - if (pair.second.empty()) - return MWWorld::Ptr(); - else if (pair.first.hasContentFile()) + if (pair.first.isSet()) return MWBase::Environment::get().getWorldModel()->getPtr(pair.first); + else if (pair.second.empty()) + return MWWorld::Ptr(); return MWBase::Environment::get().getWorld()->searchPtr(pair.second, false); } }; @@ -256,7 +256,7 @@ namespace MWScript try { auto desc = std::make_shared(); - if (!script.mTargetId.empty()) + if (!script.mTargetId.empty() || script.mTargetRef.isSet()) { desc->mTarget = std::make_pair(script.mTargetRef, script.mTargetId); } diff --git a/components/esm3/globalscript.cpp b/components/esm3/globalscript.cpp index ca33428abd..a55e5623c4 100644 --- a/components/esm3/globalscript.cpp +++ b/components/esm3/globalscript.cpp @@ -38,12 +38,9 @@ namespace ESM if (mRunning) esm.writeHNT("RUN_", int32_t{ 1 }); - if (!mTargetId.empty()) - { - esm.writeHNORefId("TARG", mTargetId); - if (mTargetRef.isSet()) - esm.writeFormId(mTargetRef, true, "FRMR"); - } + esm.writeHNORefId("TARG", mTargetId); + if (mTargetRef.isSet()) + esm.writeFormId(mTargetRef, true, "FRMR"); } }