Index: lobby.js
===================================================================
--- lobby.js
+++ lobby.js
@@ -252,7 +252,7 @@
Engine.GetGUIObjectByName("mapSizeFilter").selected = 0;
Engine.GetGUIObjectByName("playersNumberFilter").selected = 0;
Engine.GetGUIObjectByName("mapTypeFilter").selected = g_MapTypes.Default;
- Engine.GetGUIObjectByName("showFullFilter").checked = false;
+ Engine.GetGUIObjectByName("showFullFilter").checked = true;
applyFilters();
}
@@ -321,8 +321,12 @@
function updatePlayerList()
{
let playersBox = Engine.GetGUIObjectByName("playersBox");
- let sortBy = playersBox.selected_column || "name";
+// let sortBy = playersBox.selected_column || "rating";
+ let sortBy = "rating";
let sortOrder = playersBox.selected_column_order || 1;
+// sortOrder = (sortOrder == -1) ? 1 : -1;
+ if (sortOrder == -1) sortOrder = 1; else sortOrder= -1;
+//warn(uneval(playersBox.selected_column_order));
if (playersBox.selected > -1)
g_SelectedPlayer = playersBox.list[playersBox.selected];
@@ -527,7 +531,45 @@
g_SelectedGamePort = g_GameList[gamesBox.selected].port;
}
- g_GameList = Engine.GetGameList().filter(game => !filterGame(game)).sort((a, b) => {
+ let g_GameList_pr = Engine.GetGameList();
+
+ for (let i in g_GameList_pr)
+ {
+ let game = g_GameList_pr[i];
+
+ var re = /^\S+\ \((\d+)\)$/g;
+ let pls = stringifiedTeamListToPlayerData(game.players);
+ let ratings = [];
+ let specRatings = [];
+ for (let j in pls) {
+ let name = pls[j].Name;
+ let team = pls[j].Team;
+ if (team != "observer") {
+ var result = re.exec(name); re.lastIndex = 0;
+ var rating = result ? +result[1] : 1200;
+ ratings.push(rating);
+ } else {
+ var result = re.exec(name); re.lastIndex = 0;
+ var rating = result ? +result[1] : 1200;
+ specRatings.push(rating);
+ }
+ }
+
+ var average = 1200;
+ if (ratings.length > 0) {
+ average = Math.round(ratings.reduce((sum, current) => sum + current) / ratings.length);
+ }
+
+ var specAverage = 1200;
+ if (specRatings.length > 0) {
+ specAverage = Math.round(specRatings.reduce((sum, current) => sum + current) / specRatings.length);
+ }
+
+ g_GameList_pr[i].nRank = average;
+ g_GameList_pr[i].nSpecRank = specAverage;
+ }
+
+ g_GameList = g_GameList_pr.filter(game => !filterGame(game)).sort((a, b) => {
let sortA, sortB;
switch (sortBy)
{
@@ -546,6 +588,14 @@
sortA = a.nbp * b.maxnbp;
sortB = b.nbp * a.maxnbp;
break;
+ case 'nRank':
+ sortA = a.nRank;
+ sortB = b.nRank;
+ break;
+ case 'nSpecRank':
+ sortA = a.nSpecRank;
+ sortB = b.nSpecRank;
+ break;
case 'status':
default:
sortA = g_GameStatusOrder.indexOf(a.state);
@@ -562,6 +612,8 @@
let list_mapSize = [];
let list_mapType = [];
let list_nPlayers = [];
+ let list_nRank = [];
+ let list_nSpecRank = [];
let list = [];
let list_data = [];
let selectedGameIndex = -1;
@@ -580,6 +632,8 @@
list_mapSize.push(translateMapSize(game.mapSize));
list_mapType.push(g_MapTypes.Title[mapTypeIdx] || "");
list_nPlayers.push(game.nbp + "/" + game.maxnbp);
+ list_nRank.push(game.nRank);
+ list_nSpecRank.push(game.nSpecRank);
list.push(gameName);
list_data.push(i);
}
@@ -589,6 +643,8 @@
gamesBox.list_mapSize = list_mapSize;
gamesBox.list_mapType = list_mapType;
gamesBox.list_nPlayers = list_nPlayers;
+ gamesBox.list_nRank = list_nRank;
+ gamesBox.list_nSpecRank = list_nSpecRank;
// Change these last, otherwise crash
gamesBox.list = list;
gamesBox.list_data = list_data;
Index: lobby.xml
===================================================================
--- lobby.xml
+++ lobby.xml
@@ -211,8 +211,14 @@
Type
-
- Players
+
+ Pl
+
+
+ Rank
+
+
+ SRank