Index: binaries/data/mods/public/gui/lobby/lobby.js
===================================================================
--- binaries/data/mods/public/gui/lobby/lobby.js
+++ binaries/data/mods/public/gui/lobby/lobby.js
@@ -896,6 +896,8 @@
g_GameList = Engine.GetGameList().map(game => {
game.hasBuddies = 0;
+ game.teamPlayers = {};
+ game.teamPlayersOrg = {};
// Compute average rating of participating players
let playerRatings = [];
@@ -904,8 +906,23 @@
{
let [nick, rating] = splitRatingFromNick(player.Name);
- if (player.Team != "observer")
+ if (player.Team != undefined && player.Team != "observer")
+ {
playerRatings.push(rating || g_DefaultLobbyRating);
+ if (!game.teamPlayersOrg[player.Team])
+ game.teamPlayersOrg[player.Team] = 1;
+ else
+ game.teamPlayersOrg[player.Team]++;
+
+ if (!(player.State && player.State == "defeated"))
+ {
+ if (player.Team != undefined)
+ if (!game.teamPlayers[player.Team])
+ game.teamPlayers[player.Team] = 1;
+ else
+ game.teamPlayers[player.Team]++;
+ }
+ }
// Sort games with playing buddies above games with spectating buddies
if (game.hasBuddies < 2 && g_Buddies.indexOf(nick) != -1)
@@ -952,6 +969,7 @@
let list_buddy = [];
let list_name = [];
+ let list_state = [];
let list_mapName = [];
let list_mapSize = [];
let list_mapType = [];
@@ -972,6 +990,7 @@
list_buddy.push(game.hasBuddies ? '[color="' + g_GameColors[game.state] + '"]' + g_BuddySymbol + '[/color]' : "");
list_name.push('[color="' + g_GameColors[game.state] + '"]' + gameName);
+ list_state.push(getGameStateString(game));
list_mapName.push(translateMapTitle(game.niceMapName));
list_mapSize.push(translateMapSize(game.mapSize));
list_mapType.push(g_MapTypes.Title[mapTypeIdx] || "");
@@ -983,6 +1002,7 @@
gamesBox.list_buddy = list_buddy;
gamesBox.list_name = list_name;
+ gamesBox.list_state = list_state;
gamesBox.list_mapName = list_mapName;
gamesBox.list_mapSize = list_mapSize;
gamesBox.list_mapType = list_mapType;
@@ -997,6 +1017,52 @@
updateGameSelection();
}
+
+function getGameStateString(game)
+{
+ let state = "";
+ if (game.state == "init")
+ return translate("init");
+
+ if (Object.keys(game.teamPlayers).length > 0)
+ {
+ if ((Object.keys(game.teamPlayers).filter(players => game.teamPlayers[players] > 0).length <= 1 &&
+ !game.teamPlayers[-1]) || (game.teamPlayers[-1] && game.teamPlayers[-1] <= 1))
+ state += translate("done");
+ else
+ {
+ let teamPlayers = Object.keys(game.teamPlayers).filter(team => team != -1).map(team => game.teamPlayers[team]);
+
+ if (teamPlayers.length == 0)
+ state = translate("open");
+ else
+ {
+ state += teamPlayers.join("v");
+ if (game.teamPlayers[-1])
+ {
+ state += game.teamPlayers[-1] > 0 ? (teamPlayers.length > 0 ? "v1" : "1" ) : "";
+ for (let i = 1; i < game.teamPlayers[-1]; i++)
+ state += "v1";
+ }
+
+ let teamPlayersOrg = Object.keys(game.teamPlayersOrg).filter(team => team != -1).map(team => game.teamPlayersOrg[team]);
+ let stateOrg = teamPlayersOrg.join("v");
+
+ if (game.teamPlayersOrg[-1])
+ {
+ stateOrg += game.teamPlayersOrg[-1] > 0 ? (teamPlayersOrg.length > 0 ? "v1" : "1" ) : "";
+ for (let i = 1; i < game.teamPlayersOrg[-1]; i++)
+ stateOrg += "v1";
+ }
+
+ if (stateOrg != state)
+ state += '[color="128 128 128"] (' + stateOrg + ')[/color]';
+ }
+ }
+ }
+ return state;
+}
+
/**
* Populate the game info area with information on the current game selection.
*/
Index: binaries/data/mods/public/gui/lobby/lobby.xml
===================================================================
--- binaries/data/mods/public/gui/lobby/lobby.xml
+++ binaries/data/mods/public/gui/lobby/lobby.xml
@@ -204,6 +204,9 @@
Name
+
+ State
+
Map Name