diff --git a/lib/BattleState.cpp b/lib/BattleState.cpp index 38a12584a..835c536d3 100644 --- a/lib/BattleState.cpp +++ b/lib/BattleState.cpp @@ -1242,6 +1242,7 @@ void BattleInfo::localInit() BOOST_FOREACH(CStack *s, stacks) { + s->exportBonuses(); if(s->base) //stack originating from "real" stack in garrison -> attach to it { s->attachTo(const_cast(s->base)); @@ -1255,6 +1256,8 @@ void BattleInfo::localInit() } s->postInit(); } + + exportBonuses(); } namespace CGH diff --git a/lib/HeroBonus.cpp b/lib/HeroBonus.cpp index b2c58edc3..32c762a5e 100644 --- a/lib/HeroBonus.cpp +++ b/lib/HeroBonus.cpp @@ -517,8 +517,8 @@ std::string CBonusSystemNode::nodeName() const void CBonusSystemNode::deserializationFix() { - BOOST_FOREACH(Bonus *b, exportedBonuses) - exportBonus(b); + exportBonuses(); + } void CBonusSystemNode::getRedParents(TNodes &out) @@ -615,6 +615,12 @@ void CBonusSystemNode::exportBonus(Bonus * b) bonuses.push_back(b); } +void CBonusSystemNode::exportBonuses() +{ + BOOST_FOREACH(Bonus *b, exportedBonuses) + exportBonus(b); +} + int NBonus::valOf(const CBonusSystemNode *obj, Bonus::BonusType type, int subtype /*= -1*/) { if(obj) diff --git a/lib/HeroBonus.h b/lib/HeroBonus.h index 160794ff3..08e284210 100644 --- a/lib/HeroBonus.h +++ b/lib/HeroBonus.h @@ -450,17 +450,19 @@ public: void removeBonus(Bonus *b); void newRedDescendant(CBonusSystemNode *descendant); //propagation needed void removedRedDescendant(CBonusSystemNode *descendant); //de-propagation needed + void battleTurnPassed(); //updates count of remaining turns and removed outdated bonuses bool isIndependentNode() const; //node is independent when it has no parents nor children bool actsAsBonusSourceOnly() const; bool isLimitedOnUs(Bonus *b) const; //if bonus should be removed from list acquired from this node - void battleTurnPassed(); //updates count of remaining turns and removed outdated bonuses void popBonuses(const CSelector &s); virtual std::string bonusToString(Bonus *bonus, bool description) const {return "";}; //description or bonus name virtual std::string nodeName() const; + void deserializationFix(); void exportBonus(Bonus * b); + void exportBonuses(); template void serialize(Handler &h, const int version) {