Bladeren bron

CGameHandler: fix hero removal code on player loss. Fix issue 2347

ArseniyShestakov 10 jaren geleden
bovenliggende
commit
d900e9bec2
1 gewijzigde bestanden met toevoegingen van 7 en 3 verwijderingen
  1. 7 3
      server/CGameHandler.cpp

+ 7 - 3
server/CGameHandler.cpp

@@ -4827,11 +4827,15 @@ void CGameHandler::checkVictoryLossConditionsForPlayer(PlayerColor player)
 		}
 		else
 		{
-			//player lost -> all his objects become unflagged (neutral)
-			for (auto h : p->heroes) //eliminate heroes
-				if (h.get())
+			//copy heroes vector to avoid iterator invalidation as removal change PlayerState
+			auto hlp = p->heroes;
+			for(auto h : hlp) //eliminate heroes
+			{
+				if(h.get())
 					removeObject(h);
+			}
 
+			//player lost -> all his objects become unflagged (neutral)
 			for (auto obj : gs->map->objects) //unflag objs
 			{
 				if(obj.get() && obj->tempOwner == player)