Pārlūkot izejas kodu

Fix AI freeze regression

nordsoft 2 gadi atpakaļ
vecāks
revīzija
596b98e1c1
1 mainītis faili ar 7 papildinājumiem un 9 dzēšanām
  1. 7 9
      server/CGameHandler.cpp

+ 7 - 9
server/CGameHandler.cpp

@@ -1268,16 +1268,14 @@ bool CGameHandler::moveHero(ObjectInstanceID hid, int3 dst, ui8 teleporting, boo
 			visitObjectOnTile(t, h);
 		}
 
-		if(!transit)
+		for(auto topQuery = queries->topQuery(h->tempOwner); true; topQuery = queries->topQuery(h->tempOwner))
 		{
-			for(auto topQuery = queries->topQuery(h->tempOwner); true; topQuery = queries->topQuery(h->tempOwner))
-			{
-				moveQuery = std::dynamic_pointer_cast<CHeroMovementQuery>(topQuery);
-				if(moveQuery)
-					queries->popIfTop(moveQuery);
-				else
-					break;
-			}
+			moveQuery = std::dynamic_pointer_cast<CHeroMovementQuery>(topQuery);
+			if(moveQuery
+			   && (!transit || result == TryMoveHero::FAILED || moveQuery->tmh.stopMovement()))
+				queries->popIfTop(moveQuery);
+			else
+				break;
 		}
 		logGlobal->trace("Hero %s ends movement", h->getNameTranslated());
 		return result != TryMoveHero::FAILED;