Michał W. Urbańczyk 11 年之前
父節點
當前提交
a6f68d6870
共有 2 個文件被更改,包括 4 次插入3 次删除
  1. 2 1
      client/GUIClasses.cpp
  2. 2 2
      lib/IGameCallback.cpp

+ 2 - 1
client/GUIClasses.cpp

@@ -3699,7 +3699,8 @@ CTavernWindow::CTavernWindow(const CGObjectInstance *TavernObj):
 {
 	OBJ_CONSTRUCTION_CAPTURING_ALL;
 	std::vector<const CGHeroInstance*> h = LOCPLINT->cb->getAvailableHeroes(TavernObj);
-	assert(h.size() == 2);
+	if(h.size() < 2)
+		h.resize(2, nullptr);
 
 	h1 = new HeroPortrait(selected,0,72,299,h[0]);
 	h2 = new HeroPortrait(selected,1,162,299,h[1]);

+ 2 - 2
lib/IGameCallback.cpp

@@ -554,8 +554,8 @@ 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
-	ret.resize(gs->players[*player].availableHeroes.size());
-	std::copy(gs->players[*player].availableHeroes.begin(),gs->players[*player].availableHeroes.end(),ret.begin());
+	range::copy(gs->players[*player].availableHeroes, std::back_inserter(ret));
+	vstd::erase_if(ret, [](const CGHeroInstance *h) { return h == nullptr; });
 	return ret;
 }