Procházet zdrojové kódy

Merge pull request #4580 from IvanSavenko/crashfixes

Fixes for crashes caused by town building changes
Ivan Savenko před 1 rokem
rodič
revize
1e74216040
1 změnil soubory, kde provedl 9 přidání a 7 odebrání
  1. 9 7
      server/CGameHandler.cpp

+ 9 - 7
server/CGameHandler.cpp

@@ -973,12 +973,11 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, EMovementMode moveme
 		doMove(TryMoveHero::TELEPORTATION, guardsCheck, DONT_VISIT_DEST, LEAVING_TILE);
 
 		// visit town for town portal \ castle gates
-		// do not use generic visitObjectOnTile to avoid double-teleporting
-		// if this moveHero call was triggered by teleporter
+		// do not visit any other objects, e.g. monoliths to avoid double-teleporting
 		if (objectToVisit)
 		{
 			if (CGTownInstance * town = dynamic_cast<CGTownInstance *>(objectToVisit))
-				town->onHeroVisit(h);
+				objectVisited(town, h);
 		}
 
 		return true;
@@ -2143,10 +2142,13 @@ bool CGameHandler::buildStructure(ObjectInstanceID tid, BuildingID requestedID,
 	// now when everything is built - reveal tiles for lookout tower
 	changeFogOfWar(t->getSightCenter(), t->getSightRadius(), t->getOwner(), ETileVisibility::REVEALED);
 
-	if(t->garrisonHero) //garrison hero first - consistent with original H3 Mana Vortex and Battle Scholar Academy levelup windows order
-		objectVisited(t, t->garrisonHero);
-	if(t->visitingHero)
-		objectVisited(t, t->visitingHero);
+	if (!force)
+	{
+		if(t->garrisonHero) //garrison hero first - consistent with original H3 Mana Vortex and Battle Scholar Academy levelup windows order
+			objectVisited(t, t->garrisonHero);
+		if(t->visitingHero)
+			objectVisited(t, t->visitingHero);
+	}
 
 	checkVictoryLossConditionsForPlayer(t->tempOwner);
 	return true;