您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Pings available servers and lets you pick the one you want. This is a good plugin for playing with friends.
当前为
// ==UserScript== // @name Slither.io Server Picker // @namespace http://tampermonkey.net/ // @version 0.1.1 // @description Pings available servers and lets you pick the one you want. This is a good plugin for playing with friends. // @author SystemDisc // @match http://slither.io/ // @grant none // @run-at document-start // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== (function() { 'use strict'; let serverData = $.ajax({ type: 'GET', url: 'http://slither.io/i33628.txt', async: false }).responseText; let servers = loadSos(serverData); $(function() { let css = ` iframe[src="/social-box/"] { display: none; } #sidebar { padding: 15px; position: fixed; top: 0; left: 0; z-index: 10100; background-color: #000; height: 100vh; width: auto; overflow: auto; } #connectForm { margin-bottom: 15px; } #serverList > .server-listing { color: #fff; margin-bottom: 5px; cursor: pointer; } #serverList > .server-listing > .server-name, #serverList > .server-listing > .server-ping { display: inline-block; } #serverList > .server-listing > .server-ping { margin-left: 10px; color: green; } #serverList > .server-listing > .server-ping.bad { color: red; } `; let styleSheet = $('<style type="text/css">'); styleSheet.html(css); let sidebar = $('<div id="sidebar">'); let connectForm = $('<div id="connectForm">'); let serverInput = $('<input class="server-input" type="test" name="serverHostname" placeholder="ip:port">'); let serverConnect = $('<button class="connect-button" type="button">Connect</button>'); connectForm.append(serverInput); connectForm.append(serverConnect); let serverList = $('<div id="serverList">'); let promises = []; servers.forEach(function(server) { let serverElem = $('<div id="' + server.ip + '" class="server-listing">'); let serverNameElem = $('<div class="server-name">'); let serverPingElem = $('<div class="server-ping">'); serverNameElem.text(server.ip + ':' + server.po); serverElem.append(serverNameElem); serverElem.append(serverPingElem); serverList.append(serverElem); let promise = pingServer(server.ip).then(function(ping) { let pingElem = $('[id="' + server.ip + '"]').find('.server-ping'); pingElem.text(ping); if (ping > 75) { pingElem.addClass('bad'); } let serverList = $('#serverList'); let serverElems = serverList.children(); serverElems.sort(function(a, b) { let an = +$(a).find('.server-ping').text(); let bn = +$(b).find('.server-ping').text(); if (an === 0) { an = 1000; } if (bn === 0) { bn = 1000; } return an > bn? 1:(an < bn? -1:0); }); serverElems.detach().appendTo(serverList); $('.server-input').val(serverElems.first().find('.server-name').text()); }).catch(function(err) { $('[id="' + server.ip + '"]').remove(); return false; }); promises.push(promise); }); sidebar.append(connectForm); sidebar.append(serverList); $('body').append(sidebar); $('head').append(styleSheet); $(document).on('click', '#connectForm > .connect-button', function(e) { selectServer($('.server-input').val()); }); $(document).on('click', '#serverList > .server-listing', function(e) { selectServer($(e.currentTarget).find('.server-name').text()); }); setInterval(function() { if (!window.playing) { $('#sidebar').show(); } else { $('#sidebar').hide(); } window.want_quality = 0; window.ggbg = false; window.gla = false; }, 250); $(document).bind('DOMMouseScroll mousewheel', zoom); $(window).keydown(function(e) { console.log('keydown: ' + e.keyCode); if (e.keyCode === 27) { quit(); } }); }); console.log(servers); })(); function quit() { if (window.playing && window.resetGame) { window.want_close_socket = true; window.dead_mtm = 0; if (window.play_btn) { window.play_btn.setEnabled(true); } window.resetGame(); } } function zoom(e) { console.log(window.gsc, e); if (!window.gsc) { return; } window.gsc *= Math.pow(0.9, e.originalEvent.wheelDelta / -120 || e.originalEvent.detail / 2 || 0); } function selectServer(servername) { let ip; let port; [ip, port] = servername.split(':'); console.log(ip, +port); window.forceServer(ip, +port); let serverElem = $('[id="' + ip + '"]'); serverElem.addClass('selected'); serverElem.siblings().removeClass('selected'); $('.server-input').val(servername); } function loadSos(chars) { /** @type {Array} */ sos = []; /** @type {Array} */ clus = []; chars.charAt(0); /** @type {number} */ var i = 1; var d = {}; /** @type {number} */ var index = 0; /** @type {number} */ d = index = 0; var c; /** @type {number} */ var data = 0; /** @type {number} */ var handle = 0; /** @type {Array} */ var split = []; /** @type {Array} */ var m = []; /** @type {Array} */ var messages = []; /** @type {Array} */ var received = []; for (;i < chars.length;) { if (c = (chars.charCodeAt(i++) - 97 - handle) % 26, 0 > c && (c += 26), data *= 16, data += c, handle += 7, 1 == d) { if (0 == index) { split.push(data); if (4 == split.length) { index++; } } else { if (1 == index) { m.push(data); if (3 == m.length) { index++; } } else { if (2 == index) { messages.push(data); if (3 == messages.length) { index++; } } else { if (3 == index && (received.push(data), 1 == received.length)) { d = {}; /** @type {number} */ index = c = 0; for (;index < m.length;index++) { c *= 256; c += m[index]; } /** @type {number} */ index = m = 0; for (;index < messages.length;index++) { m *= 256; m += messages[index]; } /** @type {string} */ d.ip = split.join("."); d.po = c; d.ac = m; d.wg = m + 5; d.clu = received[0]; /** @type {Array} */ sos.push(d); /** @type {Array} */ split = []; /** @type {Array} */ m = []; /** @type {Array} */ messages = []; /** @type {Array} */ received = []; /** @type {number} */ index = 0; } } } } /** @type {number} */ d = data = 0; } else { d++; } } return sos; } function pingServer(ip) { return new Promise(function(resolve, reject) { let handle = null; let ping = Date.now(); try { handle = new WebSocket('ws://' + ip + ':80/ptc'); } catch (e) { handle = null; reject(e); } if (handle) { handle.binaryType = "arraybuffer"; handle.onerror = function(err) { reject(err); }; handle.onmessage = function(data) { let pong = Date.now(); if (testing) { console.log(ip, ping, pong, pong - ping, data); } resolve(pong - ping); }; handle.onopen = function(body) { console.log(body); ping = Date.now(); let data = new Uint8Array(1); data[0] = 112; this.send(data); }; } }); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址