summaryrefslogtreecommitdiff
path: root/src/game-server
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-08-01 00:19:52 +0200
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-08-10 22:04:58 +0200
commit150e1a9a59aaabe7f72e24889616d301e9d804f8 (patch)
treee35feed20310ac414fb5e05f6093cd5cb40d9ec7 /src/game-server
parentaf59c9d650bc254683618e7b334795e5a75886b2 (diff)
downloadmanaserv-150e1a9a59aaabe7f72e24889616d301e9d804f8.tar.gz
manaserv-150e1a9a59aaabe7f72e24889616d301e9d804f8.tar.bz2
manaserv-150e1a9a59aaabe7f72e24889616d301e9d804f8.tar.xz
manaserv-150e1a9a59aaabe7f72e24889616d301e9d804f8.zip
Fixed issues with removing attribute modifiers
* AttributeModifiersEffect::remove was not calling updateMod with the 'value' parameter, causing it to have no effect at all for Stackable modifiers. * The cached value of the changed modifier effect was not being recalculated when removing modifiers, because it started one layer too high (there's an inconsistency here: AttributeModifiersEffect::add updates this cached value while AttributeModifiersEffect::remove doesn't). Reviewed-by: Erik Schilling
Diffstat (limited to 'src/game-server')
-rw-r--r--src/game-server/attribute.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/game-server/attribute.cpp b/src/game-server/attribute.cpp
index 82419e43..31d743f4 100644
--- a/src/game-server/attribute.cpp
+++ b/src/game-server/attribute.cpp
@@ -157,7 +157,7 @@ bool AttributeModifiersEffect::remove(double value, unsigned int id,
/* If this is stackable, we need to update for every modifier affected */
if (mStackableType == Stackable)
- updateMod();
+ updateMod(value);
ret = true;
if (!id)
@@ -283,9 +283,10 @@ bool Attribute::remove(double value, unsigned int layer,
assert(mMods.size() > layer);
if (mMods.at(layer)->remove(value, lvl, fullcheck))
{
- while (++layer < mMods.size())
- if (!mMods.at(layer)->recalculateModifiedValue(
- mMods.at(layer - 1)->getCachedModifiedValue()))
+ for (; layer < mMods.size(); ++layer)
+ if (!mMods.at(layer)->recalculateModifiedValue(
+ layer ? mMods.at(layer - 1)->getCachedModifiedValue()
+ : mBase))
return false;
return true;
}