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