فهرست منبع

PreGame: avoid crashing on random map options

Options is still broken, but at least we shouldn't crash there.
ArseniyShestakov 10 سال پیش
والد
کامیت
2276af70dc
3فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 4 4
      client/CPreGame.cpp
  2. 6 1
      lib/rmg/CMapGenOptions.cpp
  3. 2 0
      lib/rmg/CMapGenOptions.h

+ 4 - 4
client/CPreGame.cpp

@@ -1875,9 +1875,9 @@ void CRandomMapTab::updateMapInfo()
 
 	// Generate player information
 	mapInfo->mapHeader->players.clear();
-	int playersToGen = (mapGenOptions.getPlayerCount() == CMapGenOptions::RANDOM_SIZE
-		|| mapGenOptions.getCompOnlyPlayerCount() == CMapGenOptions::RANDOM_SIZE)
-			? 8 : mapGenOptions.getPlayerCount() + mapGenOptions.getCompOnlyPlayerCount();
+	int playersToGen = PlayerColor::PLAYER_LIMIT_I;
+	if(mapGenOptions.getPlayerCount() != CMapGenOptions::RANDOM_SIZE)
+		playersToGen = mapGenOptions.getPlayerCount();
 	mapInfo->mapHeader->howManyTeams = playersToGen;
 
 	for(int i = 0; i < playersToGen; ++i)
@@ -1885,7 +1885,7 @@ void CRandomMapTab::updateMapInfo()
 		PlayerInfo player;
 		player.isFactionRandom = true;
 		player.canComputerPlay = true;
-		if(i >= mapGenOptions.getPlayerCount() && mapGenOptions.getPlayerCount() != CMapGenOptions::RANDOM_SIZE)
+		if(i >= mapGenOptions.getHumanOnlyPlayerCount())
 		{
 			player.canHumanPlay = false;
 		}

+ 6 - 1
lib/rmg/CMapGenOptions.cpp

@@ -78,6 +78,11 @@ void CMapGenOptions::setPlayerCount(si8 value)
 	resetPlayersMap();
 }
 
+si8 CMapGenOptions::getHumanOnlyPlayerCount() const
+{
+	return humanPlayersCount;
+}
+
 si8 CMapGenOptions::getTeamCount() const
 {
 	return teamCount;
@@ -96,7 +101,7 @@ si8 CMapGenOptions::getCompOnlyPlayerCount() const
 
 void CMapGenOptions::setCompOnlyPlayerCount(si8 value)
 {
-	assert(value == RANDOM_SIZE || (value >= 0 && value <= getPlayerCount()));
+	assert(value == RANDOM_SIZE || (getPlayerCount() == RANDOM_SIZE || (value >= 0 && value <= getPlayerCount())));
 	compOnlyPlayerCount = value;
 
 	if (getPlayerCount() != RANDOM_SIZE && getCompOnlyPlayerCount() != RANDOM_SIZE)

+ 2 - 0
lib/rmg/CMapGenOptions.h

@@ -108,6 +108,8 @@ public:
 	si8 getPlayerCount() const;
 	void setPlayerCount(si8 value);
 
+	si8 getHumanOnlyPlayerCount() const;
+
 	/// The count of the teams ranging from 0 to <players count - 1> or RANDOM_SIZE for random.
 	si8 getTeamCount() const;
 	void setTeamCount(si8 value);