diff --git a/apps/essimporter/converter.hpp b/apps/essimporter/converter.hpp index 93b4e2c810..095e36c7ee 100644 --- a/apps/essimporter/converter.hpp +++ b/apps/essimporter/converter.hpp @@ -252,7 +252,7 @@ namespace ESSImport for (size_t i = 0; i < invState.mItems.size(); ++i) { // FIXME: in case of conflict (multiple items with this refID) use the already equipped one? - if (invState.mItems[i].mRef.mRefID == ESM::RefId::stringRefId(refr.mActorData.mSelectedEnchantItem)) + if (invState.mItems[i].mRef.mRefID == refr.mActorData.mSelectedEnchantItem) invState.mSelectedEnchantItem = i; } } @@ -260,12 +260,12 @@ namespace ESSImport void write(ESM::ESMWriter& esm) override { esm.startRecord(ESM::REC_ASPL); - esm.writeHNString("ID__", mSelectedSpell); + esm.writeHNRefId("ID__", mSelectedSpell); esm.endRecord(ESM::REC_ASPL); } private: - std::string mSelectedSpell; + ESM::RefId mSelectedSpell; }; class ConvertPCDT : public Converter @@ -374,16 +374,16 @@ namespace ESSImport void write(ESM::ESMWriter& esm) override { esm.startRecord(ESM::REC_DCOU); - for (auto it = mKillCounter.begin(); it != mKillCounter.end(); ++it) + for (const auto& [id, count] : mKillCounter) { - esm.writeHNString("ID__", it->first); - esm.writeHNT("COUN", it->second); + esm.writeHNRefId("ID__", id); + esm.writeHNT("COUN", count); } esm.endRecord(ESM::REC_DCOU); } private: - std::map mKillCounter; + std::map mKillCounter; }; class ConvertFACT : public Converter diff --git a/apps/essimporter/importacdt.hpp b/apps/essimporter/importacdt.hpp index 65519c6a6c..e961725e75 100644 --- a/apps/essimporter/importacdt.hpp +++ b/apps/essimporter/importacdt.hpp @@ -75,8 +75,8 @@ namespace ESSImport // to change them ingame int mCombatStats[3][2]; - std::string mSelectedSpell; - std::string mSelectedEnchantItem; + ESM::RefId mSelectedSpell; + ESM::RefId mSelectedEnchantItem; SCRI mSCRI; diff --git a/apps/essimporter/importcellref.cpp b/apps/essimporter/importcellref.cpp index 9e8e9a6948..c49c876e37 100644 --- a/apps/essimporter/importcellref.cpp +++ b/apps/essimporter/importcellref.cpp @@ -107,12 +107,12 @@ namespace ESSImport if (esm.isNextSub("WNAM")) { - std::string id = esm.getHString(); + ESM::RefId spellRefId = esm.getRefId(); if (esm.isNextSub("XNAM")) - mActorData.mSelectedEnchantItem = esm.getHString(); + mActorData.mSelectedEnchantItem = esm.getRefId(); else - mActorData.mSelectedSpell = std::move(id); + mActorData.mSelectedSpell = std::move(spellRefId); if (esm.isNextSub("YNAM")) esm.skipHSub(); // 4 byte, 0 diff --git a/apps/essimporter/importinfo.cpp b/apps/essimporter/importinfo.cpp index 66902f6ff4..d902ff1823 100644 --- a/apps/essimporter/importinfo.cpp +++ b/apps/essimporter/importinfo.cpp @@ -7,7 +7,19 @@ namespace ESSImport void INFO::load(ESM::ESMReader& esm) { - mInfo = esm.getHNString("INAM"); + if (esm.peekNextSub("XNAM")) + { + // TODO: Support older saves by turning XNAM into a RefId. + // XNAM is probably the number of the topic response within the topic record's linked list. + // Resolving this value will likely require loading Morrowind.esm. + + esm.getSubName(); + esm.skipHSub(); + mInfo = ESM::RefId(); + } + else + mInfo = esm.getHNRefId("INAM"); + mActorRefId = esm.getHNString("ACDT"); } diff --git a/apps/essimporter/importinfo.hpp b/apps/essimporter/importinfo.hpp index f4d616786f..e0d1de4e92 100644 --- a/apps/essimporter/importinfo.hpp +++ b/apps/essimporter/importinfo.hpp @@ -3,6 +3,8 @@ #include +#include + namespace ESM { class ESMReader; @@ -13,7 +15,7 @@ namespace ESSImport struct INFO { - std::string mInfo; + ESM::RefId mInfo; std::string mActorRefId; void load(ESM::ESMReader& esm); diff --git a/apps/essimporter/importklst.cpp b/apps/essimporter/importklst.cpp index 2d5e09e913..12721f81bd 100644 --- a/apps/essimporter/importklst.cpp +++ b/apps/essimporter/importklst.cpp @@ -9,7 +9,7 @@ namespace ESSImport { while (esm.isNextSub("KNAM")) { - std::string refId = esm.getHString(); + ESM::RefId refId = esm.getRefId(); int32_t count; esm.getHNT(count, "CNAM"); mKillCounter[refId] = count; diff --git a/apps/essimporter/importklst.hpp b/apps/essimporter/importklst.hpp index 9cdb2d701b..57c271c95a 100644 --- a/apps/essimporter/importklst.hpp +++ b/apps/essimporter/importklst.hpp @@ -3,7 +3,8 @@ #include #include -#include + +#include namespace ESM { @@ -18,8 +19,7 @@ namespace ESSImport { void load(ESM::ESMReader& esm); - /// RefId, kill count - std::map mKillCounter; + std::map mKillCounter; int32_t mWerewolfKills; };