1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2026-02-01 05:48:27 +00:00

Refactored ESM::GameSettings searches for generic effect names to use mName parameter of MGEF.

This commit is contained in:
Telvanni 4Life 2026-01-22 21:48:41 -05:00
parent e873273a48
commit b5c3da685a
7 changed files with 22 additions and 49 deletions

View file

@ -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<ESM::GameSetting>& gmst
= MWBase::Environment::get().getESMStore()->get<ESM::GameSetting>();
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<ESM::RefId> knownEffects;
std::vector<const ESM::MagicEffect*> 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<ESM::MagicEffect>().find(effectId);
const ESM::MagicEffect* effect = MWBase::Environment::get().getESMStore()->get<ESM::MagicEffect>().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<ESM::GameSetting>()
.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<ESM::GameSetting>()
.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();

View file

@ -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;

View file

@ -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}: "

View file

@ -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<ESM::GameSetting>()
.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"]

View file

@ -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)
{

View file

@ -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);
}
}

View file

@ -258,7 +258,6 @@ namespace ESM
static const StringRefId SummonCreature05;
static constexpr int Length = 143;
static constexpr std::array<std::string_view, MagicEffect::Length> sGmstEffectIds;
static std::string_view refIdToGmstString(RefId effectId);
static RefId effectGmstIdToRefId(std::string_view gmstId);