1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2026-01-20 08:00:54 +00:00

Triune Tests of Strength, Block, and Breathing Water. The ending of the words is ALMSIVI.

This commit is contained in:
Telvanni 4Life 2025-12-17 18:25:41 -05:00
parent 2c76043cf5
commit 495207e2a5
4 changed files with 25 additions and 18 deletions

View file

@ -391,19 +391,22 @@ namespace
return MWMechanics::MagicApplicationResult::Type::APPLIED;
}
static const std::map<ESM::RefId, std::string> sBoundItemsMap{
{ ESM::MagicEffect::BoundBattleAxe, "sMagicBoundBattleAxeID" },
{ ESM::MagicEffect::BoundBoots, "sMagicBoundBootsID" },
{ ESM::MagicEffect::BoundCuirass, "sMagicBoundCuirassID" },
{ ESM::MagicEffect::BoundDagger, "sMagicBoundDaggerID" },
{ ESM::MagicEffect::BoundGloves, "sMagicBoundLeftGauntletID" },
{ ESM::MagicEffect::BoundHelm, "sMagicBoundHelmID" },
{ ESM::MagicEffect::BoundLongbow, "sMagicBoundLongbowID" },
{ ESM::MagicEffect::BoundLongsword, "sMagicBoundLongswordID" },
{ ESM::MagicEffect::BoundMace, "sMagicBoundMaceID" },
{ ESM::MagicEffect::BoundShield, "sMagicBoundShieldID" },
{ ESM::MagicEffect::BoundSpear, "sMagicBoundSpearID" },
};
const std::map<ESM::RefId, std::string>& getBoundItemsMap() {
static const std::map<ESM::RefId, std::string> sBoundItemsMap{
{ ESM::MagicEffect::BoundBattleAxe, "sMagicBoundBattleAxeID" },
{ ESM::MagicEffect::BoundBoots, "sMagicBoundBootsID" },
{ ESM::MagicEffect::BoundCuirass, "sMagicBoundCuirassID" },
{ ESM::MagicEffect::BoundDagger, "sMagicBoundDaggerID" },
{ ESM::MagicEffect::BoundGloves, "sMagicBoundLeftGauntletID" },
{ ESM::MagicEffect::BoundHelm, "sMagicBoundHelmID" },
{ ESM::MagicEffect::BoundLongbow, "sMagicBoundLongbowID" },
{ ESM::MagicEffect::BoundLongsword, "sMagicBoundLongswordID" },
{ ESM::MagicEffect::BoundMace, "sMagicBoundMaceID" },
{ ESM::MagicEffect::BoundShield, "sMagicBoundShieldID" },
{ ESM::MagicEffect::BoundSpear, "sMagicBoundSpearID" },
};
return sBoundItemsMap;
}
using SpellsPurge = void (MWMechanics::Spells::*)();
void purgePermanent(const MWWorld::Ptr& target, SpellsPurge method, ESM::Spell::SpellType type)
@ -668,7 +671,7 @@ namespace MWMechanics
{
if (!target.getClass().hasInventoryStore(target))
return ESM::ActiveEffect::Flag_Invalid;
const std::string& item = sBoundItemsMap.at(effect.mEffectId);
const std::string& item = getBoundItemsMap().at(effect.mEffectId);
const MWWorld::Store<ESM::GameSetting>& gmst = world->getStore().get<ESM::GameSetting>();
const ESM::RefId itemId = ESM::RefId::stringRefId(gmst.find(item)->mValue.getString());
if (!addBoundItem(itemId, target))
@ -1278,7 +1281,7 @@ namespace MWMechanics
effect.mEffectId == ESM::MagicEffect::BoundBoots ||
effect.mEffectId == ESM::MagicEffect::BoundShield)
{
const std::string& item = sBoundItemsMap.at(effect.mEffectId);
const std::string& item = getBoundItemsMap().at(effect.mEffectId);
removeBoundItem(
ESM::RefId::stringRefId(world->getStore().get<ESM::GameSetting>().find(item)->mValue.getString()),
target);

View file

@ -172,11 +172,13 @@ namespace MWMechanics
effect.mRange = ESM::RT_Self;
effect.mArea = 0;
if (effect.mEffectID < 0)
if (effect.mEffectID.empty())
return std::nullopt;
const MWWorld::ESMStore& store = *MWBase::Environment::get().getESMStore();
const auto magicEffect = store.get<ESM::MagicEffect>().find(effect.mEffectID);
const auto magicEffect = store.get<ESM::MagicEffect>().search(effect.mEffectID);
if (!magicEffect)
return std::nullopt;
const MWMechanics::CreatureStats& creatureStats = caster.getClass().getCreatureStats(caster);
float x = (caster.getClass().getSkill(caster, ESM::Skill::Alchemy)

View file

@ -447,6 +447,8 @@ namespace
refId = ESM::Attribute::Strength;
else if constexpr (std::is_same_v<RecordType, ESM::Skill>)
refId = ESM::Skill::Block;
else if constexpr (std::is_same_v<RecordType, ESM::MagicEffect>)
refId = ESM::MagicEffect::WaterBreathing;
else
refId = ESM::StringRefId(stringId);

View file

@ -250,7 +250,7 @@ namespace ESM
for (const auto& [effectId, actor] : mSummonedCreatures)
{
esm.writeHNT("SUMM", effectId);
esm.writeHNT("SUMM", ESM::MagicEffect::refIdToIndex(effectId));
esm.writeFormId(actor, true, "ACID");
}