Просмотр исходного кода

Fix Issue 2214 (#437)

CGameInfoCallback::getAvailableHeroes: add checks for tavern
Henning Koehler 7 лет назад
Родитель
Сommit
2b64bf29ed
1 измененных файлов с 8 добавлено и 2 удалено
  1. 8 2
      lib/CGameInfoCallback.cpp

+ 8 - 2
lib/CGameInfoCallback.cpp

@@ -477,8 +477,14 @@ std::vector<const CGHeroInstance *> CGameInfoCallback::getAvailableHeroes(const
 	std::vector<const CGHeroInstance *> ret;
 	//ERROR_RET_VAL_IF(!isOwnedOrVisited(townOrTavern), "Town or tavern must be owned or visited!", ret);
 	//TODO: town needs to be owned, advmap tavern needs to be visited; to be reimplemented when visit tracking is done
-	range::copy(gs->players[*player].availableHeroes, std::back_inserter(ret));
-	vstd::erase_if(ret, [](const CGHeroInstance *h) { return h == nullptr; });
+	const CGTownInstance * town = getTown(townOrTavern->id);
+	if(townOrTavern->ID == Obj::TAVERN || (town && town->hasBuilt(BuildingID::TAVERN)))
+	{
+		range::copy(gs->players[*player].availableHeroes, std::back_inserter(ret));
+		vstd::erase_if(ret, [](const CGHeroInstance * h) {
+			return h == nullptr;
+		});
+	}
 	return ret;
 }