mirror of
https://github.com/OpenMW/openmw.git
synced 2026-02-05 14:28:27 +00:00
- Added save game version
- Serialized magic effect as RefId in activespells, creaturestats, and magiceffects
This commit is contained in:
parent
6226836c39
commit
e97a293d05
4 changed files with 45 additions and 20 deletions
|
|
@ -86,7 +86,7 @@ namespace ESM
|
|||
|
||||
for (auto& effect : params.mEffects)
|
||||
{
|
||||
esm.writeHNT("MGEF", ESM::MagicEffect::refIdToIndex(effect.mEffectId));
|
||||
esm.writeHNRefId("MGEF", effect.mEffectId);
|
||||
if (const ESM::RefId* id = std::get_if<ESM::RefId>(&effect.mArg))
|
||||
{
|
||||
if (!id->empty())
|
||||
|
|
@ -171,10 +171,15 @@ namespace ESM
|
|||
|
||||
while (esm.isNextSub("MGEF"))
|
||||
{
|
||||
int32_t effectId;
|
||||
ActiveEffect effect;
|
||||
esm.getHT(effectId);
|
||||
effect.mEffectId = ESM::MagicEffect::indexToRefId(effectId);
|
||||
if (format <= MaxSerializeEffectRefIdFormatVersion)
|
||||
{
|
||||
int32_t effectId;
|
||||
esm.getHT(effectId);
|
||||
effect.mEffectId = ESM::MagicEffect::indexToRefId(effectId);
|
||||
}
|
||||
else
|
||||
effect.mEffectId = esm.getRefId();
|
||||
if (format <= MaxActorIdSaveGameFormatVersion)
|
||||
{
|
||||
int32_t arg = -1;
|
||||
|
|
|
|||
|
|
@ -129,14 +129,23 @@ namespace ESM
|
|||
{
|
||||
while (esm.isNextSub("SUMM"))
|
||||
{
|
||||
int32_t magicEffect;
|
||||
esm.getHT(magicEffect);
|
||||
RefNum actor;
|
||||
if (esm.getFormatVersion() <= MaxActorIdSaveGameFormatVersion)
|
||||
esm.getHNT(actor.mIndex, "ACID");
|
||||
if (esm.getFormatVersion() <= MaxSerializeEffectRefIdFormatVersion)
|
||||
{
|
||||
int32_t magicEffect;
|
||||
esm.getHT(magicEffect);
|
||||
RefNum actor;
|
||||
if (esm.getFormatVersion() <= MaxActorIdSaveGameFormatVersion)
|
||||
esm.getHNT(actor.mIndex, "ACID");
|
||||
else
|
||||
actor = esm.getFormId(true, "ACID");
|
||||
mSummonedCreatures.emplace(ESM::MagicEffect::indexToRefId(magicEffect), actor);
|
||||
}
|
||||
else
|
||||
actor = esm.getFormId(true, "ACID");
|
||||
mSummonedCreatures.emplace(ESM::MagicEffect::indexToRefId(magicEffect), actor);
|
||||
{
|
||||
RefId effectId = esm.getRefId();
|
||||
RefNum actor = esm.getFormId(true, "ACID");
|
||||
mSummonedCreatures.emplace(effectId, actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -251,7 +260,7 @@ namespace ESM
|
|||
|
||||
for (const auto& [effectId, actor] : mSummonedCreatures)
|
||||
{
|
||||
esm.writeHNT("SUMM", ESM::MagicEffect::refIdToIndex(effectId));
|
||||
esm.writeHNRefId("SUMM", effectId);
|
||||
esm.writeFormId(actor, true, "ACID");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,8 @@ namespace ESM
|
|||
inline constexpr FormatVersion MaxActiveSpellTypeVersion = 31;
|
||||
inline constexpr FormatVersion MaxPlayerBeforeCellDataFormatVersion = 32;
|
||||
inline constexpr FormatVersion MaxActorIdSaveGameFormatVersion = 34;
|
||||
inline constexpr FormatVersion CurrentSaveGameFormatVersion = 35;
|
||||
inline constexpr FormatVersion MaxSerializeEffectRefIdFormatVersion = 35;
|
||||
inline constexpr FormatVersion CurrentSaveGameFormatVersion = 36;
|
||||
|
||||
inline constexpr FormatVersion MinSupportedSaveGameFormatVersion = 5;
|
||||
inline constexpr FormatVersion OpenMW0_49MinSaveGameFormatVersion = 5;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace ESM
|
|||
{
|
||||
for (const auto& [key, params] : mEffects)
|
||||
{
|
||||
esm.writeHNT("EFID", ESM::MagicEffect::refIdToIndex(key));
|
||||
esm.writeHNRefId("EFID", key);
|
||||
esm.writeHNT("BASE", params.first);
|
||||
esm.writeHNT("MODI", params.second);
|
||||
}
|
||||
|
|
@ -22,15 +22,25 @@ namespace ESM
|
|||
{
|
||||
while (esm.isNextSub("EFID"))
|
||||
{
|
||||
int32_t id;
|
||||
std::pair<int32_t, float> params;
|
||||
esm.getHT(id);
|
||||
esm.getHNT(params.first, "BASE");
|
||||
if (esm.getFormatVersion() <= MaxClearModifiersFormatVersion)
|
||||
params.second = 0.f;
|
||||
if (esm.getFormatVersion() <= MaxSerializeEffectRefIdFormatVersion)
|
||||
{
|
||||
int32_t id;
|
||||
esm.getHT(id);
|
||||
esm.getHNT(params.first, "BASE");
|
||||
if (esm.getFormatVersion() <= MaxClearModifiersFormatVersion)
|
||||
params.second = 0.f;
|
||||
else
|
||||
esm.getHNT(params.second, "MODI");
|
||||
mEffects.emplace(ESM::MagicEffect::indexToRefId(id), params);
|
||||
}
|
||||
else
|
||||
{
|
||||
RefId effectId = esm.getRefId();
|
||||
esm.getHNT(params.first, "BASE");
|
||||
esm.getHNT(params.second, "MODI");
|
||||
mEffects.emplace(ESM::MagicEffect::indexToRefId(id), params);
|
||||
mEffects.emplace(effectId, params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue