1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-20 09:23:52 +00:00

Merge pull request #2611 from Capostrophic/effect

[Regression] Make sure instant FX abilities get detected when they're supposed to
This commit is contained in:
Andrei Kortunov 2019-11-28 08:20:39 +04:00 committed by GitHub
commit 407a737fe4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -465,16 +465,6 @@ namespace MWScript
{ {
// Apply looping particles immediately for constant effects // Apply looping particles immediately for constant effects
MWBase::Environment::get().getWorld()->applyLoopingParticles(ptr); MWBase::Environment::get().getWorld()->applyLoopingParticles(ptr);
// The spell may have an instant effect which must be handled immediately.
for (const auto& effect : creatureStats.getSpells().getMagicEffects())
{
if (effect.second.getMagnitude() <= 0)
continue;
MWMechanics::CastSpell cast(ptr, ptr);
if (cast.applyInstantEffect(ptr, ptr, effect.first, effect.second.getMagnitude()))
creatureStats.getSpells().purgeEffect(effect.first.mId);
}
} }
} }
}; };
@ -491,7 +481,18 @@ namespace MWScript
std::string id = runtime.getStringLiteral (runtime[0].mInteger); std::string id = runtime.getStringLiteral (runtime[0].mInteger);
runtime.pop(); runtime.pop();
ptr.getClass().getCreatureStats (ptr).getSpells().remove (id); MWMechanics::CreatureStats& creatureStats = ptr.getClass().getCreatureStats(ptr);
// The spell may have an instant effect which must be handled before the spell's removal.
for (const auto& effect : creatureStats.getSpells().getMagicEffects())
{
if (effect.second.getMagnitude() <= 0)
continue;
MWMechanics::CastSpell cast(ptr, ptr);
if (cast.applyInstantEffect(ptr, ptr, effect.first, effect.second.getMagnitude()))
creatureStats.getSpells().purgeEffect(effect.first.mId);
}
creatureStats.getSpells().remove (id);
MWBase::WindowManager *wm = MWBase::Environment::get().getWindowManager(); MWBase::WindowManager *wm = MWBase::Environment::get().getWindowManager();