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 | }; |