浏览代码

Merged the 092c-compat branch.

Michał W. Urbańczyk 12 年之前
父节点
当前提交
30a0237fb8
共有 3 个文件被更改,包括 13 次插入3 次删除
  1. 8 0
      AI/VCAI/VCAI.cpp
  2. 4 2
      lib/CCreatureSet.cpp
  3. 1 1
      lib/CObjectHandler.cpp

+ 8 - 0
AI/VCAI/VCAI.cpp

@@ -1020,6 +1020,14 @@ void VCAI::makeTurnInternal()
 		auto reservedHeroesCopy = reservedHeroesMap; //work on copy => the map may be changed while iterating (eg because hero died when attempting a goal)
 		for (auto hero : reservedHeroesCopy)
 		{
+			if(reservedHeroesMap.count(hero.first))
+				continue; //hero might have been removed while we were in this loop
+			if(!hero.first.validAndSet())
+			{
+				logAi->errorStream() << "Hero " << hero.first.name << " present on reserved map. Shouldn't be. ";
+				continue;
+			}
+
 			cb->setSelection(hero.first.get());
 			boost::sort (hero.second, isCloser);
 			for (auto obj : hero.second)

+ 4 - 2
lib/CCreatureSet.cpp

@@ -420,11 +420,13 @@ bool CCreatureSet::canBeMergedWith(const CCreatureSet &cs, bool allowMergingStac
 	else
 	{
 		CCreatureSet cres;
+		SlotID j;
 
 		//get types of creatures that need their own slot
 		for(auto & elem : cs.stacks)
-			cres.addToSlot(elem.first, elem.second->type->idNumber, 1, true);
-		SlotID j;
+			if ((j = cres.getSlotFor(elem.second->type)).validSlot())
+				cres.addToSlot(j, elem.second->type->idNumber, 1, true);  //merge if possible
+			//cres.addToSlot(elem.first, elem.second->type->idNumber, 1, true);
 		for(auto & elem : stacks)
 		{
 			if ((j = cres.getSlotFor(elem.second->type)).validSlot())

+ 1 - 1
lib/CObjectHandler.cpp

@@ -1167,7 +1167,7 @@ void CGHeroInstance::initObj()
 				hs->addNewBonus(bonus);
 				break;
 			case 11://starting skill with mastery (Adrienne)
-				cb->changeSecSkill(this, SecondarySkill(spec.val), spec.additionalinfo); //simply give it and forget
+				setSecSkillLevel(SecondarySkill(spec.val), spec.additionalinfo, true);
 				break;
 			case 12://army speed
 				bonus->type = Bonus::STACKS_SPEED;