Browse Source

* Fixed #1096
* serializing icon index, otherwise creature portraits are gone after loading a game
* VCAI: fixed crash on attempting revisiting a boat (that is no longer present because it was boarded)
* Fixed strange crash with "neutral hero" (there should be no such thing... but somehow it appears, needs further investigation)

Michał W. Urbańczyk 13 years ago
parent
commit
2ba0427432
4 changed files with 14 additions and 3 deletions
  1. 4 0
      AI/VCAI/VCAI.cpp
  2. 6 0
      client/mapHandler.cpp
  3. 3 2
      lib/CCreatureHandler.h
  4. 1 1
      lib/NetPacksLib.cpp

+ 4 - 0
AI/VCAI/VCAI.cpp

@@ -3539,6 +3539,10 @@ bool shouldVisit(HeroPtr h, const CGObjectInstance * obj)
 		case Obj::MAGIC_WELL:
 			return h->mana < h->manaLimit();
 			break;
+
+		case Obj::BOAT:
+			return false;
+			//Boats are handled by pathfinder
 	}
 
 	if (obj->wasVisited(*h)) //it must pointer to hero instance, heroPtr calls function wasVisited(ui8 player);

+ 6 - 0
client/mapHandler.cpp

@@ -568,6 +568,12 @@ void CMapHandler::terrainRect( int3 top_tile, ui8 anim, const std::vector< std::
 
 					if(themp) //hero
 					{
+						if(themp->tempOwner >= GameConstants::PLAYER_LIMIT) //Neutral hero?
+						{
+							tlog1 << "A neutral hero (" << themp->name << ") at " << themp->pos << ". Should not happen!\n";
+							continue;
+						}
+
 						dir = themp->moveDir;
 
 						//pick graphics of hero (or boat if hero is sailing)

+ 3 - 2
lib/CCreatureHandler.h

@@ -105,9 +105,10 @@ public:
 			& cost & upgradeNames & upgrades 
 			& fightValue & AIValue & growth & hordeGrowth
 			& ammMin & ammMax & level
-			& abilityText & abilityRefs & animDefName & advMapDef
-			& idNumber & faction
+			& abilityText & abilityRefs & animDefName & advMapDef;
+		h & iconIndex;
 
+		h & idNumber & faction
 			& timeBetweenFidgets & walkAnimationTime & attackAnimationTime & flightAnimationDistance
 			& upperRightMissleOffsetX & rightMissleOffsetX & lowerRightMissleOffsetX & upperRightMissleOffsetY & rightMissleOffsetY & lowerRightMissleOffsetY
 			& missleFrameAngles & troopCountLocationOffset & attackClimaxFrame;

+ 1 - 1
lib/NetPacksLib.cpp

@@ -815,7 +815,7 @@ DLL_LINKAGE void AssembledArtifact::applyGs( CGameState *gs )
 		CArtifactInstance *constituentInstance = artSet->getArt(pos);
 
 		//move constituent from hero to be part of new, combined artifact
-		constituentInstance->removeFrom(al);
+		constituentInstance->removeFrom(ArtifactLocation(al.artHolder, pos));
 		combinedArt->addAsConstituent(constituentInstance, pos);
 		if(!vstd::contains(combinedArt->artType->possibleSlots[artSet->bearerType()], al.slot) && vstd::contains(combinedArt->artType->possibleSlots[artSet->bearerType()], pos))
 			al.slot = pos;