diff --git a/garrysmod/html/js/menu/control.Servers.js b/garrysmod/html/js/menu/control.Servers.js index a731ca4034..44df64866f 100644 --- a/garrysmod/html/js/menu/control.Servers.js +++ b/garrysmod/html/js/menu/control.Servers.js @@ -339,20 +339,20 @@ function FormatVersion( ver ) // Calculates the default server ranking function CalculateRank( server ) { - var recommended = server.ping; + // Add some fuzzines/discoverability to the server list + var recommended = server.fuzziness; + + // Give more popular servers a higher ranking, starting at more than 2 players + recommended -= Math.max(Math.log2(Math.min(server.players, 96) + 1) - 2, 0) * 10; + + // Penalise very high pings, anything below 60 ping makes little difference + recommended += Math.max(server.ping, 60) / 2; if ( server.players == 0 ) recommended += 75; // Server is empty if ( server.players >= server.maxplayers ) recommended += 100; // Server is full, can't join it if ( server.pass ) recommended += 300; // Password protected, can't join it if ( server.isAnon ) recommended += 1000; // Anonymous server - // The first few bunches of players reduce the impact of the server's ping on the ranking a little - if ( server.players >= 4 ) recommended -= 10; - if ( server.players >= 8 ) recommended -= 15; - if ( server.players >= 16 ) recommended -= 15; - if ( server.players >= 32 ) recommended -= 10; - if ( server.players >= 64 ) recommended -= 10; - return recommended; } @@ -423,6 +423,7 @@ function AddServer( type, id, ping, name, desc, map, players, maxplayers, botpla botplayers: parseInt( botplayers ), pass: pass == "1", lastplayed: parseInt( lastplayed ), + fuzziness: Math.random() * 15, address: address, flag: loc.toLowerCase(), category: gmcat || "",