Explorar o código

Fix duplicated hero in Song for the Father campaign

Ivan Savenko hai 1 ano
pai
achega
c3012105e2
Modificáronse 1 ficheiros con 9 adicións e 5 borrados
  1. 9 5
      lib/gameState/CGameStateCampaign.cpp

+ 9 - 5
lib/gameState/CGameStateCampaign.cpp

@@ -210,17 +210,21 @@ void CGameStateCampaign::placeCampaignHeroes()
 	// with the same hero type id
 	// with the same hero type id
 	std::vector<CGHeroInstance *> removedHeroes;
 	std::vector<CGHeroInstance *> removedHeroes;
 
 
-	std::set<HeroTypeID> heroesToRemove = campaignState->getReservedHeroes();
+	std::set<HeroTypeID> reservedHeroes = campaignState->getReservedHeroes();
+	std::set<HeroTypeID> heroesToRemove;
+
+	for (auto const & heroID : reservedHeroes )
+	{
+		// Do not replace reserved heroes initially, e.g. in 1st campaign scenario in which they appear
+		if (!campaignState->getHeroByType(heroID).isNull())
+			heroesToRemove.insert(heroID);
+	}
 
 
 	for(auto & campaignHeroReplacement : campaignHeroReplacements)
 	for(auto & campaignHeroReplacement : campaignHeroReplacements)
 		heroesToRemove.insert(campaignHeroReplacement.hero->getHeroType());
 		heroesToRemove.insert(campaignHeroReplacement.hero->getHeroType());
 
 
 	for(auto & heroID : heroesToRemove)
 	for(auto & heroID : heroesToRemove)
 	{
 	{
-		// Do not replace reserved heroes initially, e.g. in 1st campaign scenario in which they appear
-		if (campaignState->getHeroByType(heroID).isNull())
-			continue;
-
 		auto * hero = gameState->getUsedHero(heroID);
 		auto * hero = gameState->getUsedHero(heroID);
 		if(hero)
 		if(hero)
 		{
 		{