Skip to content

Commit c31b4ef

Browse files
committed
Merge branch 'globaltargetnumberone' into 'master'
Improve support for global script targets Closes #2316, #7830, and #2311 See merge request OpenMW/openmw!4812
2 parents a00ede3 + cc6145b commit c31b4ef

File tree

5 files changed

+17
-17
lines changed

5 files changed

+17
-17
lines changed

apps/essimporter/convertscpt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace ESSImport
1111
{
1212
out.mId = ESM::RefId::stringRefId(scpt.mSCHD.mName.toString());
1313
out.mRunning = scpt.mRunning;
14-
out.mTargetRef = ESM::RefNum{}; // TODO: convert target reference of global script
14+
out.mTargetRef = scpt.mRefNum;
1515
convertSCRI(scpt.mSCRI, out.mLocals);
1616
}
1717

apps/essimporter/importscpt.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ namespace ESSImport
1212

1313
mSCRI.load(esm);
1414

15-
mRefNum = -1;
1615
if (esm.isNextSub("RNAM"))
1716
{
1817
mRunning = true;
19-
esm.getHT(mRefNum);
18+
ESM::FormId32 refNum;
19+
esm.getHT(refNum);
20+
mRefNum = ESM::RefNum::fromUint32(refNum);
21+
mRefNum.mContentFile--;
2022
}
2123
else
2224
mRunning = false;

apps/essimporter/importscpt.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <components/esm/esmcommon.hpp>
99
#include <components/esm3/loadscpt.hpp>
10+
#include <components/esm3/refnum.hpp>
1011

1112
namespace ESM
1213
{
@@ -35,7 +36,7 @@ namespace ESSImport
3536
SCRI mSCRI;
3637

3738
bool mRunning;
38-
int32_t mRefNum; // Targeted reference, -1: no reference
39+
ESM::RefNum mRefNum; // Targeted reference
3940

4041
void load(ESM::ESMReader& esm);
4142
};

apps/openmw/mwscript/globalscripts.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ namespace
2626
script.mRunning = false;
2727
if (!ptr.isEmpty())
2828
{
29-
if (ptr.getCellRef().hasContentFile())
29+
if (MWBase::Environment::get().getWorld()->getPlayerPtr() == ptr)
30+
script.mTargetId = ptr.getCellRef().getRefId();
31+
else if (ptr.getCellRef().getRefNum().isSet())
3032
{
3133
script.mTargetId = ptr.getCellRef().getRefId();
3234
script.mTargetRef = ptr.getCellRef().getRefNum();
3335
}
34-
else if (MWBase::Environment::get().getWorld()->getPlayerPtr() == ptr)
35-
script.mTargetId = ptr.getCellRef().getRefId();
3636
}
3737
return script;
3838
}
@@ -60,10 +60,10 @@ namespace
6060

6161
MWWorld::Ptr operator()(const std::pair<ESM::RefNum, ESM::RefId>& pair) const
6262
{
63-
if (pair.second.empty())
64-
return MWWorld::Ptr();
65-
else if (pair.first.hasContentFile())
63+
if (pair.first.isSet())
6664
return MWBase::Environment::get().getWorldModel()->getPtr(pair.first);
65+
else if (pair.second.empty())
66+
return MWWorld::Ptr();
6767
return MWBase::Environment::get().getWorld()->searchPtr(pair.second, false);
6868
}
6969
};
@@ -256,7 +256,7 @@ namespace MWScript
256256
try
257257
{
258258
auto desc = std::make_shared<GlobalScriptDesc>();
259-
if (!script.mTargetId.empty())
259+
if (!script.mTargetId.empty() || script.mTargetRef.isSet())
260260
{
261261
desc->mTarget = std::make_pair(script.mTargetRef, script.mTargetId);
262262
}

components/esm3/globalscript.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,9 @@ namespace ESM
3838
if (mRunning)
3939
esm.writeHNT("RUN_", int32_t{ 1 });
4040

41-
if (!mTargetId.empty())
42-
{
43-
esm.writeHNORefId("TARG", mTargetId);
44-
if (mTargetRef.isSet())
45-
esm.writeFormId(mTargetRef, true, "FRMR");
46-
}
41+
esm.writeHNORefId("TARG", mTargetId);
42+
if (mTargetRef.isSet())
43+
esm.writeFormId(mTargetRef, true, "FRMR");
4744
}
4845

4946
}

0 commit comments

Comments
 (0)