1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-02 09:15:33 +00:00

Merge remote-tracking branch 'scrawl/openmw-0.28' into openmw-28

This commit is contained in:
Marc Zinnschlag 2014-01-02 21:27:08 +01:00
commit 3b75f6676c
3 changed files with 14 additions and 6 deletions

View file

@ -169,9 +169,17 @@ namespace MWMechanics
} }
} }
void ActiveSpells::purgeAll() void ActiveSpells::purgeAll(float chance)
{ {
mSpells.clear(); for (TContainer::iterator it = mSpells.begin(); it != mSpells.end(); )
{
int roll = std::rand()/ (static_cast<double> (RAND_MAX) + 1) * 100; // [0, 99]
if (roll < chance)
mSpells.erase(it++);
else
++it;
}
mSpellsChanged = true;
} }
void ActiveSpells::purgeEffect(short effectId) void ActiveSpells::purgeEffect(short effectId)
@ -187,6 +195,6 @@ namespace MWMechanics
effectIt++; effectIt++;
} }
} }
mSpellsChanged = true;
} }
} }

View file

@ -82,8 +82,8 @@ namespace MWMechanics
/// Remove all active effects with this id /// Remove all active effects with this id
void purgeEffect (short effectId); void purgeEffect (short effectId);
/// Remove all active effects /// Remove all active effects, if roll succeeds (for each effect)
void purgeAll (); void purgeAll (float chance);
bool isSpellActive (std::string id) const; bool isSpellActive (std::string id) const;
///< case insensitive ///< case insensitive

View file

@ -236,7 +236,7 @@ namespace MWMechanics
else if (effectId == ESM::MagicEffect::CureCorprusDisease) else if (effectId == ESM::MagicEffect::CureCorprusDisease)
target.getClass().getCreatureStats(target).getSpells().purgeCorprusDisease(); target.getClass().getCreatureStats(target).getSpells().purgeCorprusDisease();
else if (effectId == ESM::MagicEffect::Dispel) else if (effectId == ESM::MagicEffect::Dispel)
target.getClass().getCreatureStats(target).getActiveSpells().purgeAll(); target.getClass().getCreatureStats(target).getActiveSpells().purgeAll(magnitude);
else if (effectId == ESM::MagicEffect::RemoveCurse) else if (effectId == ESM::MagicEffect::RemoveCurse)
target.getClass().getCreatureStats(target).getSpells().purgeCurses(); target.getClass().getCreatureStats(target).getSpells().purgeCurses();