From b5c3da685afdc0d23c22a0347ce4702f4c64b75b Mon Sep 17 00:00:00 2001 From: Telvanni 4Life Date: Thu, 22 Jan 2026 21:48:41 -0500 Subject: [PATCH] Refactored ESM::GameSettings searches for generic effect names to use mName parameter of MGEF. --- apps/openmw/mwgui/spellcreationdialog.cpp | 42 ++++++++--------------- apps/openmw/mwgui/spellicons.cpp | 2 +- apps/openmw/mwgui/tooltips.cpp | 3 +- apps/openmw/mwlua/magicbindings.cpp | 10 ++---- apps/openmw/mwmechanics/magiceffects.cpp | 5 +-- apps/openmw/mwworld/store.cpp | 8 ++--- components/esm3/loadmgef.hpp | 1 - 7 files changed, 22 insertions(+), 49 deletions(-) diff --git a/apps/openmw/mwgui/spellcreationdialog.cpp b/apps/openmw/mwgui/spellcreationdialog.cpp index 69ed7132bd..5795b87e83 100644 --- a/apps/openmw/mwgui/spellcreationdialog.cpp +++ b/apps/openmw/mwgui/spellcreationdialog.cpp @@ -35,13 +35,9 @@ namespace { - bool sortMagicEffects(ESM::RefId id1, ESM::RefId id2) + bool sortMagicEffects(const ESM::MagicEffect* effect1, const ESM::MagicEffect* effect2) { - const MWWorld::Store& gmst - = MWBase::Environment::get().getESMStore()->get(); - - return gmst.find(ESM::MagicEffect::refIdToGmstString(id1))->mValue.getString() - < gmst.find(ESM::MagicEffect::refIdToGmstString(id2))->mValue.getString(); + return effect1->mName < effect2->mName; } void init(ESM::ENAMstruct& effect) @@ -224,7 +220,7 @@ namespace MWGui mEffectImage->setImageTexture(Misc::ResourceHelpers::correctIconPath( VFS::Path::toNormalized(effect->mIcon), *MWBase::Environment::get().getResourceSystem()->getVFS())); - mEffectName->setCaptionWithReplacing(std::format("#{{{}}}", ESM::MagicEffect::refIdToGmstString(effect->mId))); + mEffectName->setCaption(effect->mName); mEffect.mEffectID = effect->mId; @@ -784,7 +780,7 @@ namespace MWGui MWMechanics::CreatureStats& stats = player.getClass().getCreatureStats(player); MWMechanics::Spells& spells = stats.getSpells(); - std::vector knownEffects; + std::vector knownEffects; for (const ESM::Spell* spell : spells) { @@ -794,9 +790,8 @@ namespace MWGui for (const ESM::IndexedENAMstruct& effectInfo : spell->mEffects.mList) { - ESM::RefId effectId = effectInfo.mData.mEffectID; - const ESM::MagicEffect* effect - = MWBase::Environment::get().getESMStore()->get().find(effectId); + const ESM::MagicEffect* effect = MWBase::Environment::get().getESMStore()->get().find( + effectInfo.mData.mEffectID); // skip effects that do not allow spellmaking/enchanting int requiredFlags @@ -804,8 +799,8 @@ namespace MWGui if (!(effect->mData.mFlags & requiredFlags)) continue; - if (std::find(knownEffects.begin(), knownEffects.end(), effectId) == knownEffects.end()) - knownEffects.push_back(effectId); + if (std::find(knownEffects.begin(), knownEffects.end(), effect) == knownEffects.end()) + knownEffects.push_back(effect); } } @@ -814,31 +809,22 @@ namespace MWGui mAvailableEffectsList->clear(); int i = 0; - for (const auto effectId : knownEffects) + for (const auto effect : knownEffects) { - mAvailableEffectsList->addItem(MWBase::Environment::get() - .getESMStore() - ->get() - .find(ESM::MagicEffect::refIdToGmstString(effectId)) - ->mValue.getString()); - mButtonMapping[i] = effectId; + mAvailableEffectsList->addItem(effect->mName); + mButtonMapping[i] = effect->mId; ++i; } mAvailableEffectsList->adjustSize(); mAvailableEffectsList->scrollToTop(); mAvailableButtons.clear(); - for (const auto effectId : knownEffects) + for (const auto effect : knownEffects) { - const std::string& name = MWBase::Environment::get() - .getESMStore() - ->get() - .find(ESM::MagicEffect::refIdToGmstString(effectId)) - ->mValue.getString(); - MyGUI::Button* w = mAvailableEffectsList->getItemWidget(name); + MyGUI::Button* w = mAvailableEffectsList->getItemWidget(effect->mName); mAvailableButtons.emplace_back(w); - ToolTips::createMagicEffectToolTip(w, effectId); + ToolTips::createMagicEffectToolTip(w, effect->mId); } mEffects.clear(); diff --git a/apps/openmw/mwgui/spellicons.cpp b/apps/openmw/mwgui/spellicons.cpp index 468d147994..f3e532346d 100644 --- a/apps/openmw/mwgui/spellicons.cpp +++ b/apps/openmw/mwgui/spellicons.cpp @@ -156,7 +156,7 @@ namespace MWGui *MWBase::Environment::get().getResourceSystem()->getVFS())); ToolTipInfo tooltipInfo; - tooltipInfo.caption = std::format("#{{{}}}", ESM::MagicEffect::refIdToGmstString(effectId)); + tooltipInfo.caption = effect->mName; tooltipInfo.icon = effect->mIcon; tooltipInfo.imageSize = 16; tooltipInfo.wordWrap = false; diff --git a/apps/openmw/mwgui/tooltips.cpp b/apps/openmw/mwgui/tooltips.cpp index 4922aefe4d..5ab408f533 100644 --- a/apps/openmw/mwgui/tooltips.cpp +++ b/apps/openmw/mwgui/tooltips.cpp @@ -966,8 +966,7 @@ namespace MWGui widget->setUserString("ToolTipType", "Layout"); widget->setUserString("ToolTipLayout", "MagicEffectToolTip"); - widget->setUserString( - "Caption_MagicEffectName", std::format("#{{{}}}", ESM::MagicEffect::refIdToGmstString(effectId))); + widget->setUserString("Caption_MagicEffectName", effect->mName); widget->setUserString("Caption_MagicEffectDescription", effect->mDescription); widget->setUserString("Caption_MagicEffectSchool", "#{sSchool}: " diff --git a/apps/openmw/mwlua/magicbindings.cpp b/apps/openmw/mwlua/magicbindings.cpp index add12b37ad..24fbdf4478 100644 --- a/apps/openmw/mwlua/magicbindings.cpp +++ b/apps/openmw/mwlua/magicbindings.cpp @@ -381,14 +381,8 @@ namespace MWLua [](const ESM::MagicEffect& rec) -> std::string { return rec.mCasting.serializeText(); }); magicEffectT["hitStatic"] = sol::readonly_property( [](const ESM::MagicEffect& rec) -> std::string { return rec.mHit.serializeText(); }); - magicEffectT["name"] = sol::readonly_property([](const ESM::MagicEffect& rec) -> std::string_view { - return MWBase::Environment::get() - .getWorld() - ->getStore() - .get() - .find(ESM::MagicEffect::refIdToGmstString(rec.mId)) - ->mValue.getString(); - }); + magicEffectT["name"] + = sol::readonly_property([](const ESM::MagicEffect& rec) -> std::string_view { return rec.mName; }); magicEffectT["school"] = sol::readonly_property( [](const ESM::MagicEffect& rec) -> std::string { return rec.mData.mSchool.serializeText(); }); magicEffectT["baseCost"] diff --git a/apps/openmw/mwmechanics/magiceffects.cpp b/apps/openmw/mwmechanics/magiceffects.cpp index f9a84cde17..05d50ced0f 100644 --- a/apps/openmw/mwmechanics/magiceffects.cpp +++ b/apps/openmw/mwmechanics/magiceffects.cpp @@ -201,10 +201,7 @@ namespace MWMechanics } if (spellLine.empty()) - { - auto effectIDStr = ESM::MagicEffect::refIdToGmstString(effect.mId); - spellLine = windowManager->getGameSettingString(effectIDStr, {}); - } + spellLine = effect.mName; if (targetsSkill) { diff --git a/apps/openmw/mwworld/store.cpp b/apps/openmw/mwworld/store.cpp index 059b498fa3..40fc60b098 100644 --- a/apps/openmw/mwworld/store.cpp +++ b/apps/openmw/mwworld/store.cpp @@ -1028,11 +1028,9 @@ namespace MWWorld { for (ESM::MagicEffect* mgef : mShared) { - int index = ESM::MagicEffect::refIdToIndex(mgef->mId); - if (index >= 0) - { - mgef->mName = getGMSTString(settings, ESM::MagicEffect::sGmstEffectIds[index]); - } + std::string_view gmst = ESM::MagicEffect::refIdToGmstString(mgef->mId); + if (!gmst.empty()) + mgef->mName = getGMSTString(settings, gmst); } } diff --git a/components/esm3/loadmgef.hpp b/components/esm3/loadmgef.hpp index 844e820cf7..b23e90b396 100644 --- a/components/esm3/loadmgef.hpp +++ b/components/esm3/loadmgef.hpp @@ -258,7 +258,6 @@ namespace ESM static const StringRefId SummonCreature05; static constexpr int Length = 143; - static constexpr std::array sGmstEffectIds; static std::string_view refIdToGmstString(RefId effectId); static RefId effectGmstIdToRefId(std::string_view gmstId);