Michał W. Urbańczyk 14 年之前
父节点
当前提交
c5930893fd
共有 3 个文件被更改,包括 14 次插入3 次删除
  1. 3 0
      lib/BattleState.cpp
  2. 8 2
      lib/HeroBonus.cpp
  3. 3 1
      lib/HeroBonus.h

+ 3 - 0
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<CStackInstance*>(s->base));
@@ -1255,6 +1256,8 @@ void BattleInfo::localInit()
 		}
 		s->postInit();
 	}
+
+	exportBonuses();
 }
 
 namespace CGH

+ 8 - 2
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)

+ 3 - 1
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 <typename Handler> void serialize(Handler &h, const int version)
 	{