Răsfoiți Sursa

PreGame: avoid crashing on random map options

Options is still broken, but at least we shouldn't crash there.
ArseniyShestakov 10 ani în urmă
părinte
comite
2276af70dc
3 a modificat fișierele cu 12 adăugiri și 5 ștergeri
  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);