diff --git a/apps/opencs/model/world/nestedcoladapterimp.hpp b/apps/opencs/model/world/nestedcoladapterimp.hpp index 596341e029..0361187846 100644 --- a/apps/opencs/model/world/nestedcoladapterimp.hpp +++ b/apps/opencs/model/world/nestedcoladapterimp.hpp @@ -319,9 +319,7 @@ namespace CSMWorld switch (subColIndex) { case 0: - if (effect.mEffectID.empty()) - return QVariant(); - return QString::fromStdString(effect.mEffectID.getRefIdString()); + return ESM::MagicEffect::refIdToIndex(effect.mEffectID); case 1: { if (effect.mEffectID == ESM::MagicEffect::DrainSkill @@ -373,7 +371,7 @@ namespace CSMWorld { case 0: { - effect.mEffectID = ESM::RefId::deserializeText(value.toString().toStdString()); + effect.mEffectID = ESM::MagicEffect::indexToRefId(value.toInt()); if (effect.mEffectID == ESM::MagicEffect::DrainSkill || effect.mEffectID == ESM::MagicEffect::DamageSkill || effect.mEffectID == ESM::MagicEffect::RestoreSkill diff --git a/apps/opencs/model/world/refidadapterimp.cpp b/apps/opencs/model/world/refidadapterimp.cpp index 4d4ca1ab6a..87093934b3 100644 --- a/apps/opencs/model/world/refidadapterimp.cpp +++ b/apps/opencs/model/world/refidadapterimp.cpp @@ -149,7 +149,7 @@ QVariant CSMWorld::IngredEffectRefIdAdapter::getNestedData( switch (subColIndex) { case 0: - return effectId.empty() ? QVariant() : QString::fromStdString(effectId.getRefIdString()); + return ESM::MagicEffect::refIdToIndex(effectId); case 1: { if (effectId == ESM::MagicEffect::DrainSkill || effectId == ESM::MagicEffect::DamageSkill @@ -183,8 +183,7 @@ void CSMWorld::IngredEffectRefIdAdapter::setNestedData( if (subRowIndex < 0 || subRowIndex >= 4) throw std::runtime_error("index out of range"); - ESM::RefId effectId - = value.toString().isEmpty() ? ESM::RefId() : ESM::RefId::deserializeText(value.toString().toStdString()); + ESM::RefId effectId = ESM::MagicEffect::indexToRefId(value.toInt()); switch (subColIndex) { diff --git a/apps/openmw/mwmechanics/summoning.hpp b/apps/openmw/mwmechanics/summoning.hpp index 7818230fc4..88ab6d0e42 100644 --- a/apps/openmw/mwmechanics/summoning.hpp +++ b/apps/openmw/mwmechanics/summoning.hpp @@ -9,7 +9,6 @@ namespace ESM { class RefId; - class StringRefId; } namespace MWWorld { diff --git a/components/esm3/activespells.cpp b/components/esm3/activespells.cpp index 2ddbc4265c..657808e60b 100644 --- a/components/esm3/activespells.cpp +++ b/components/esm3/activespells.cpp @@ -62,12 +62,8 @@ namespace ESM MagicEffect::FortifySkill, MagicEffect::AbsorbSkill, }; - if (effectId.empty()) - return false; - for (size_t i = 0; i < affectsSkillEffects.size(); ++i) - if (affectsSkillEffects[i] == effectId) - return true; - return false; + return std::find(affectsSkillEffects.begin(), affectsSkillEffects.end(), effectId) + != affectsSkillEffects.end(); } void saveImpl(ESMWriter& esm, const std::vector& spells, NAME tag) @@ -90,7 +86,7 @@ namespace ESM for (auto& effect : params.mEffects) { - esm.writeHNT("MGEF", effect.mEffectId); + esm.writeHNT("MGEF", ESM::MagicEffect::refIdToIndex(effect.mEffectId)); if (const ESM::RefId* id = std::get_if(&effect.mArg)) { if (!id->empty()) @@ -175,8 +171,10 @@ namespace ESM while (esm.isNextSub("MGEF")) { + int32_t effectId; ActiveEffect effect; - esm.getHT(effect.mEffectId); + esm.getHT(effectId); + effect.mEffectId = ESM::MagicEffect::indexToRefId(effectId); if (format <= MaxActorIdSaveGameFormatVersion) { int32_t arg = -1; diff --git a/components/esm3/creaturestats.cpp b/components/esm3/creaturestats.cpp index 5d30fbd07a..c034a6a0d1 100644 --- a/components/esm3/creaturestats.cpp +++ b/components/esm3/creaturestats.cpp @@ -121,8 +121,8 @@ namespace ESM esm.getHNT(actorId, "ACID"); mSummonedCreatureMap[SummonKey(ESM::MagicEffect::indexToRefId(magicEffect), source, effectIndex)] = actorId; - mSummonedCreatures.emplace(ESM::MagicEffect::indexToRefId( - magicEffect), RefNum{ .mIndex = static_cast(actorId), .mContentFile = -1 }); + mSummonedCreatures.emplace(ESM::MagicEffect::indexToRefId(magicEffect), + RefNum{ .mIndex = static_cast(actorId), .mContentFile = -1 }); } } else