View difference between Paste ID: dBcZrYeS and 6VfchAvi
SHOW: | | - or go back to the newest paste.
1
// ==UserScript==
2
// @name         Agar Server Selector
3
// @namespace    
4
// @version      1.102
5
// @description  Modifies the agar.io server select page to be useful.
6
// @author       Ununoctium118
7
// @match        http://agar.io
8
// @grant        none
9
// ==/UserScript==
10
 
11
// Clear the dialog box
12
var selector = $('#region');
13
 
14
// Load the server list
15
var selected;
16
17
var regionTable = {
18
    'US-Atlanta': 'US East',
19
    'US-Fremont': 'US West',
20
    'EU-London': 'Europe',
21
    'JP-Tokyo': 'East Asia',
22
    'SG-Singapore': 'Oceania',
23
    'RU-Russia': 'Russia',
24
    'CN-China': 'China',
25
    'BR-Brazil': 'South America',
26
};
27
28
$.getJSON('http://m.agar.io/fullInfo', function(serverList) {
29
    var output = [];
30
    serverList.servers.sort(function (a, b) {
31
        var x = regionTable[a.region], y = regionTable[b.region];
32
        return ((x < y) ? - 1 : ((x > y) ? 1 : 0));
33
    });
34
    $.each(serverList.servers, function(index, server) {
35
        output.push('<option value="' + server.ip + '">' + regionTable[server.region] + ' (' + server.ip + ') (' + server.numPlayers + ' players)</option>');
36
    });
37
    selector.html(output.join(''));
38
});
39
 
40
 
41
// Add our extra onchangelistener
42
selector.on('change', function() {
43
    selected = selector.val() + ':443';
44
});
45
 
46
 
47
// Intercept requests for m.agar.io and instead return our data.
48
var realAjax = $.ajax;
49
$.ajax = function() {
50
    if(arguments[0] == 'http://m.agar.io/') {
51
        var callback = arguments[1].success;
52
        // The selector callback probably hasn't run yet.
53
        // Really should use a promise or something here.
54
        var doReturn = function() {
55
            if(!selected) {
56
                setTimeout(doReturn, 50);
57
                return;
58
            }
59
            callback(selected);
60
        }
61
        doReturn();
62
    } else {
63
        // Use irl ajax
64
        return realAjax.apply(this, arguments);
65
    }
66
};