瀏覽代碼

Merge pull request #500 from godric3/rmgCrash

Fix crash when generating random map with random number of players
Alexander Shishkin 7 年之前
父節點
當前提交
e814aca29f
共有 2 個文件被更改,包括 13 次插入4 次删除
  1. 1 1
      client/Client.cpp
  2. 12 3
      lib/rmg/CMapGenOptions.cpp

+ 1 - 1
client/Client.cpp

@@ -321,7 +321,7 @@ void CClient::initMapHandler()
 
 void CClient::initPlayerInterfaces()
 {
-	for(auto & elem : CSH->si->playerInfos)
+	for(auto & elem : gs->scenarioOps->playerInfos)
 	{
 		PlayerColor color = elem.first;
 		if(!vstd::contains(CSH->getAllClientPlayers(CSH->c->connectionID), color))

+ 12 - 3
lib/rmg/CMapGenOptions.cpp

@@ -71,8 +71,13 @@ void CMapGenOptions::setPlayerCount(si8 value)
 	if (compOnlyPlayerCount > possibleCompPlayersCount)
 		setCompOnlyPlayerCount(possibleCompPlayersCount);
 
-	if (getPlayerCount() != RANDOM_SIZE && getCompOnlyPlayerCount() != RANDOM_SIZE)
-		humanPlayersCount = getPlayerCount() - getCompOnlyPlayerCount();
+	if (getPlayerCount() != RANDOM_SIZE)
+	{
+		if (getCompOnlyPlayerCount() != RANDOM_SIZE)
+			humanPlayersCount = getPlayerCount() - getCompOnlyPlayerCount();
+		else
+			humanPlayersCount = getPlayerCount();
+	}
 
 	resetPlayersMap();
 }
@@ -167,7 +172,11 @@ void CMapGenOptions::resetPlayersMap()
 		auto pc = PlayerColor(color);
 		player.setColor(pc);
 		auto playerType = EPlayerType::AI;
-		if ((getPlayerCount() != RANDOM_SIZE && color >= realPlayersCnt)
+		if (getPlayerCount() != RANDOM_SIZE && color < realPlayersCnt)
+		{
+			playerType = EPlayerType::HUMAN;
+		}
+		else if((getPlayerCount() != RANDOM_SIZE && color >= realPlayersCnt)
 		   || (compOnlyPlayerCount != RANDOM_SIZE && color >= (PlayerColor::PLAYER_LIMIT_I-compOnlyPlayerCount)))
 		{
 			playerType = EPlayerType::COMP_ONLY;