Browse Source

Merge pull request #2664 from Nordsoft91/fix-ai-movement-freeze

Nordsoft91 2 năm trước cách đây
mục cha
commit
db542d2710
1 tập tin đã thay đổi với 7 bổ sung9 xóa
  1. 7 9
      server/CGameHandler.cpp

+ 7 - 9
server/CGameHandler.cpp

@@ -1262,16 +1262,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;