您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Highly experimental version of Agar Extended. This script connects to the spectate feed to display a larger area
// ==UserScript== // @name Agar Unfair // @namespace http://your.homepage/ // @version 0.1 // @description Highly experimental version of Agar Extended. This script connects to the spectate feed to display a larger area // @author agar_cheats // @require https://code.jquery.com/jquery-latest.js // @match http://agar.io/ // @grant none // ==/UserScript== var show_targeting_colors = true; var allow_zoom = true; var show_borders = true; var show_opponent_size = true; var show_minimap = true; var map = null; var last = {'x':0, 'y':0, 'color':'#000000', 'size':200}; function CenterOfMass(cells, prop){ var n = 0; var d = 0; for (var i in cells){ n += cells[i].size*cells[i].size * cells[i][prop]; d += cells[i].size*cells[i].size; } return n/d; } function DrawMinimap(oc, cells) { var client_width = window.innerWidth, client_height = window.innerHeight; var board_size = 11180; map && oc.drawImage(map, client_width-map.width-10, client_height-map.height-10); map || (map = document.createElement("canvas")); var c = Math.min(150, .3 * client_height, .3 * client_width) / board_size; map.width = board_size * c; map.height = board_size * c; mc = map.getContext("2d"); mc.scale(c, c); mc.globalAlpha = .2; mc.fillStyle = "#000000"; mc.fillRect(0, 0, board_size, board_size); mc.globalAlpha = .4; mc.lineWidth = 200; mc.strokeStyle = "#000000"; mc.strokeRect(0, 0, board_size, board_size); if (cells && cells[0]){ last.x = CenterOfMass(cells,'x'); last.y = CenterOfMass(cells,'y'); last.size = 200; last.color = cells[0].color; } mc.beginPath(); mc.arc(last.x, last.y, last.size, 0, 2 * Math.PI, false); mc.globalAlpha = .8; mc.fillStyle = last.color; mc.fill(); mc.lineWidth = 70; mc.stroke(); } (function(f, g) { function Pa() { ja = !0; xa(); setInterval(xa, 18E4); A = ka = document.getElementById("canvas"); e = A.getContext("2d"); A.onmousedown = function(a) { if (ya) { var b = a.clientX - (5 + p / 5 / 2), c = a.clientY - (5 + p / 5 / 2); if (Math.sqrt(b * b + c * c) <= p / 5 / 2) { K(); B(17); return } } S = a.clientX; T = a.clientY; la(); K() }; A.onmousemove = function(a) { S = a.clientX; T = a.clientY; la() }; A.onmouseup = function(a) {}; /firefox/i.test(navigator.userAgent) ? document.addEventListener("DOMMouseScroll", za, !1) : document.body.onmousewheel = za; var a = !1, b = !1, c = !1; f.onkeydown = function(d) { 32 != d.keyCode || a || (K(), B(17), a = !0); 81 != d.keyCode || b || (B(18), b = !0); 87 != d.keyCode || c || (K(), B(21), c = !0); 27 == d.keyCode && Aa(!0) }; f.onkeyup = function(d) { 32 == d.keyCode && (a = !1); 87 == d.keyCode && (c = !1); 81 == d.keyCode && b && (B(19), b = !1) }; f.onblur = function() { B(19); c = b = a = !1 }; f.onresize = Ba; Ba(); f.requestAnimationFrame ? f.requestAnimationFrame(Ca) : setInterval(ma, 1E3 / 60); setInterval(K, 40); u && g("#region").val(u); Da(); U(g("#region").val()); null == m && u && V(); g("#overlays").show() } function za(a) { C *= Math.pow(.9, a.wheelDelta / -120 || a.detail || 0); 1 > C && (C = 1); C > 4 / h && (C = 4 / h) } function Qa() { if (.35 > h) L = null; else { for (var a = Number.POSITIVE_INFINITY, b = Number.POSITIVE_INFINITY, c = Number.NEGATIVE_INFINITY, d = Number.NEGATIVE_INFINITY, e = 0, q = 0; q < n.length; q++) n[q].shouldRender() && (e = Math.max(n[q].size, e), a = Math.min(n[q].x, a), b = Math.min(n[q].y, b), c = Math.max(n[q].x, c), d = Math.max(n[q].y, d)); L = QUAD.init({ minX: a - (e + 100), minY: b - (e + 100), maxX: c + (e + 100), maxY: d + (e + 100) }); for (q = 0; q < n.length; q++) if (a = n[q], a.shouldRender()) for (b = 0; b < a.points.length; ++b) L.insert(a.points[b]) } } function la() { W = (S - p / 2) / h + s; X = (T - r / 2) / h + t } function xa() { null == Y && (Y = {}, g("#region").children().each(function() { var a = g(this), b = a.val(); b && (Y[b] = a.text()) })); g.get(F + "//m.agar.io/info", function(a) { var b = {}, c; for (c in a.regions) { var d = c.split(":")[0]; b[d] = b[d] || 0; b[d] += a.regions[c].numPlayers } for (c in b) g('#region option[value="' + c + '"]').text(Y[c] + " (" + b[c] + " players)") }, "json") } function Ea() { g("#adsBottom").hide(); g("#overlays").hide(); Da() } function U(a) { a && a != u && (g("#region").val() != a && g("#region").val(a), u = f.localStorage.location = a, g(".region-message").hide(), g(".region-message." + a).show(), g(".btn-needs-server").prop("disabled", !1), ja && V()) } function Aa(a) { D = null; g("#overlays").fadeIn(a ? 200 : 3E3); a || g("#adsBottom").fadeIn(3E3) } function Da() { g("#region").val() ? f.localStorage.location = g("#region").val() : f.localStorage.location && g("#region").val(f.localStorage.location); g("#region").val() ? g("#locationKnown").append(g("#region")) : g("#locationUnknown").append(g("#region")) } function na() { console.log("Find " + u + M); g.ajax(F + "//m.agar.io/", { error: function() { setTimeout(na, 1E3) }, success: function(a) { a = a.split("\n"); "45.79.222.79:443" == a[0] ? na() : Fa("ws://" + a[0]) }, dataType: "text", method: "POST", cache: !1, crossDomain: !0, data: u + M || "?" }) } function V() { ja && u && (g("#connecting").show(), na()) } var web_socket_2 = null; var server = null; var primary = null; var retries = 0; var matched = false; var failed = false; function closeSocket() { if (web_socket_2) { web_socket_2.onopen = null; web_socket_2.onmessage = null; web_socket_2.onclose = null; try { web_socket_2.close() } catch (b) {} web_socket_2 = null; } } function SecondaryConnect() { closeSocket(); if (retries > 5) { failed = true; return; } retries++; web_socket_2 = new WebSocket(server, Ga ? ["binary", "base64"] : []); web_socket_2.binaryType = "arraybuffer"; web_socket_2.onopen = OnSocketOpen2; web_socket_2.onmessage = Sa2; //web_socket_2.onclose = OnSocketClose2; web_socket_2.onerror = function() { console.log("socket error") } } function Fa(a) { if (m) { m.onopen = null; m.onmessage = null; m.onclose = null; try { m.close() } catch (b) {} m = null } primary = null; retries = 0; matched = false; failed = false; var c = f.location.search.slice(1); /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+$/.test(c) && (a = "ws://" + c); Ga && (a = a.split(":"), a = a[0] + "s://ip-" + a[1].replace(/\./g, "-").replace(/\//g, "") + ".tech.agar.io:" + (+a[2] + 2E3)); E = []; l = []; y = {}; n = []; G = []; z = []; v = w = null; H = 0; console.log("Connecting to " + a); server = a; m = new WebSocket(a, Ga ? ["binary", "base64"] : []); m.binaryType = "arraybuffer"; m.onopen = Ra; m.onmessage = Sa; m.onclose = Ta; m.onerror = function() { console.log("socket error") } SecondaryConnect(); } function OnSocketOpen2(a) { Z = 500; g("#connecting").hide(); console.log("socket open"); a = new ArrayBuffer(5); var b = new DataView(a); b.setUint8(0, 254); b.setUint32(1, 4, !0); web_socket_2.send(a); a = new ArrayBuffer(5); b = new DataView(a); b.setUint8(0, 255); b.setUint32(1, 673720360, !0); web_socket_2.send(a); Ha() b = new ArrayBuffer(1); (new DataView(b)).setUint8(0, 1); web_socket_2.send(b) } function Ra(a) { Z = 500; g("#connecting").hide(); console.log("socket open"); a = new ArrayBuffer(5); var b = new DataView(a); b.setUint8(0, 254); b.setUint32(1, 4, !0); m.send(a); a = new ArrayBuffer(5); b = new DataView(a); b.setUint8(0, 255); b.setUint32(1, 673720360, !0); m.send(a); Ha(); //b = new ArrayBuffer(1); //(new DataView(b)).setUint8(0, 1); //m.send(b) } function Ta(a) { console.log("socket close"); setTimeout(V, Z); Z *= 1.5 } function Sa2(a) { function b() { for (var a = "";;) { var b = d.getUint16(c, !0); c += 2; if (0 == b) break; a += String.fromCharCode(b) } return a } var c = 0, d = new DataView(a.data); 240 == d.getUint8(c) && (c += 5); switch (d.getUint8(c++)) { case 16: matched && Ua2(d, c); break; /* case 17: N = d.getFloat32(c, !0); c += 4; O = d.getFloat32(c, !0); c += 4; P = d.getFloat32(c, !0); c += 4; break; case 20: l = []; E = []; break; case 21: oa = d.getInt16(c, !0); c += 2; pa = d.getInt16(c, !0); c += 2; qa || (qa = !0, $ = oa, aa = pa); break; case 32: E.push(d.getUint32(c, !0)); c += 4; break;*/ case 49: if (null != w) break; a = d.getUint32(c, !0); c += 4; z = []; for (var e = 0; e < a; ++e) { var q = d.getUint32(c, !0), c = c + 4; z.push({ id: q, name: b() }) } if (!matched){ var secondary = z.map(function(e){return e.name;}).join(); if (primary){ if (secondary === primary){ matched = true; console.log('matched'); } else{ console.log('retry for match'); SecondaryConnect(); } } } //Ia(); break; case 50: w = []; a = d.getUint32(c, !0); c += 4; for (e = 0; e < a; ++e) w.push(d.getFloat32(c, !0)), c += 4; if (!matched){ var secondary = w.map(function(e){return ~~(e*100);}).join(); if (primary){ if (secondary === primary){ matched = true; console.log('matched:teams'); } else{ console.log('retry for match:teams'); SecondaryConnect(); } } } //Ia(); break; /*case 64: ba = d.getFloat64(c, !0), c += 8, ca = d.getFloat64(c, !0), c += 8, da = d.getFloat64(c, !0), c += 8, ea = d.getFloat64(c, !0), c += 8, N = (da + ba) / 2, O = (ea + ca) / 2, P = 1, 0 == l.length && (s = N, t = O, h = P)*/ } } function Sa(a) { function b() { for (var a = "";;) { var b = d.getUint16(c, !0); c += 2; if (0 == b) break; a += String.fromCharCode(b) } return a } var c = 0, d = new DataView(a.data); 240 == d.getUint8(c) && (c += 5); switch (d.getUint8(c++)) { case 16: Ua(d, c); break; case 17: N = d.getFloat32(c, !0); c += 4; O = d.getFloat32(c, !0); c += 4; P = d.getFloat32(c, !0); c += 4; break; case 20: l = []; E = []; break; case 21: oa = d.getInt16(c, !0); c += 2; pa = d.getInt16(c, !0); c += 2; qa || (qa = !0, $ = oa, aa = pa); break; case 32: E.push(d.getUint32(c, !0)); c += 4; break; case 49: if (null != w) break; a = d.getUint32(c, !0); c += 4; z = []; for (var e = 0; e < a; ++e) { var q = d.getUint32(c, !0), c = c + 4; z.push({ id: q, name: b() }) } if (!matched && !failed){ primary = z.map(function(e){return e.name;}).join(); } Ia(); break; case 50: w = []; a = d.getUint32(c, !0); c += 4; for (e = 0; e < a; ++e) w.push(d.getFloat32(c, !0)), c += 4; if (!matched && !failed){ primary = w.map(function(e){return ~~(e*100);}).join(); } Ia(); break; case 64: ba = d.getFloat64(c, !0), c += 8, ca = d.getFloat64(c, !0), c += 8, da = d.getFloat64(c, !0), c += 8, ea = d.getFloat64(c, !0), c += 8, N = (da + ba) / 2, O = (ea + ca) / 2, P = 1, 0 == l.length && (s = N, t = O, h = P) } } function Ua(a, b) { I = +new Date; var c = Math.random(); ra = !1; var d = a.getUint16(b, !0); b += 2; for (var e = 0; e < d; ++e) { var q = y[a.getUint32(b, !0)], f = y[a.getUint32(b + 4, !0)]; b += 8; q && f && (f.destroy(), f.ox = f.x, f.oy = f.y, f.oSize = f.size, f.nx = q.x, f.ny = q.y, f.nSize = f.size, f.updateTime = I) } for (e = 0;;) { d = a.getUint32(b, !0); b += 4; if (0 == d) break; ++e; var g, q = a.getInt16(b, !0); b += 2; f = a.getInt16(b, !0); b += 2; g = a.getInt16(b, !0); b += 2; for (var h = a.getUint8(b++), m = a.getUint8(b++), p = a.getUint8(b++), h = (h << 16 | m << 8 | p).toString(16); 6 > h.length;) h = "0" + h; var h = "#" + h, k = a.getUint8(b++), m = !! (k & 1), p = !! (k & 16); k & 2 && (b += 4); k & 4 && (b += 8); k & 8 && (b += 16); for (var n, k = "";;) { n = a.getUint16(b, !0); b += 2; if (0 == n) break; k += String.fromCharCode(n) } n = k; k = null; y.hasOwnProperty(d) ? (k = y[d], k.updatePos(), k.ox = k.x, k.oy = k.y, k.oSize = k.size, k.color = h) : (k = new Ja(d, q, f, g, h, n), k.pX = q, k.pY = f); k.isVirus = m; k.isAgitated = p; k.nx = q; k.ny = f; k.nSize = g; k.updateCode = c; k.updateTime = I; n && k.setName(n); - 1 != E.indexOf(d) && -1 == l.indexOf(k) && (document.getElementById("overlays").style.display = "none", l.push(k), 1 == l.length && (s = k.x, t = k.y)) } c = a.getUint32(b, !0); b += 4; for (e = 0; e < c; e++) d = a.getUint32(b, !0), b += 4, k = y[d], null != k && k.destroy(); ra && 0 == l.length && Aa(!1) } function Ua2(a, b) { I = +new Date; var c = Math.random(); ra = !1; var d = a.getUint16(b, !0); b += 2; for (var e = 0; e < d; ++e) { var q = y[a.getUint32(b, !0)], f = y[a.getUint32(b + 4, !0)]; b += 8; q && f && -1 == l.indexOf(f) && (f.destroy(), f.ox = f.x, f.oy = f.y, f.oSize = f.size, f.nx = q.x, f.ny = q.y, f.nSize = f.size, f.updateTime = I) } for (e = 0;;) { d = a.getUint32(b, !0); b += 4; if (0 == d) break; ++e; var g, q = a.getInt16(b, !0); b += 2; f = a.getInt16(b, !0); b += 2; g = a.getInt16(b, !0); b += 2; for (var h = a.getUint8(b++), m = a.getUint8(b++), p = a.getUint8(b++), h = (h << 16 | m << 8 | p).toString(16); 6 > h.length;) h = "0" + h; var h = "#" + h, k = a.getUint8(b++), m = !! (k & 1), p = !! (k & 16); k & 2 && (b += 4); k & 4 && (b += 8); k & 8 && (b += 16); for (var n, k = "";;) { n = a.getUint16(b, !0); b += 2; if (0 == n) break; k += String.fromCharCode(n) } n = k; k = null; y.hasOwnProperty(d) ? (k = y[d], k.updatePos(), k.ox = k.x, k.oy = k.y, k.oSize = k.size, k.color = h) : (k = new Ja(d, q, f, g, h, n), k.pX = q, k.pY = f); k.isVirus = m; k.isAgitated = p; k.nx = q; k.ny = f; k.nSize = g; k.updateCode = c; k.updateTime = I; n && k.setName(n); - 1 != E.indexOf(d) && -1 == l.indexOf(k) && (document.getElementById("overlays").style.display = "none", l.push(k), 1 == l.length && (s = k.x, t = k.y)) } c = a.getUint32(b, !0); b += 4; for (e = 0; e < c; e++) d = a.getUint32(b, !0), b += 4, k = y[d], null != k && -1 == l.indexOf(k) && k.destroy(); ra && 0 == l.length && Aa(!1) } function K() { if (sa()) { var a = S - p / 2, b = T - r / 2; 64 > a * a + b * b || Ka == W && La == X || (Ka = W, La = X, a = new ArrayBuffer(21), b = new DataView(a), b.setUint8(0, 16), b.setFloat64(1, W, !0), b.setFloat64(9, X, !0), b.setUint32(17, 0, !0), m.send(a)) } } function Ha() { if (sa() && null != D) { var a = new ArrayBuffer(1 + 2 * D.length), b = new DataView(a); b.setUint8(0, 0); for (var c = 0; c < D.length; ++c) b.setUint16(1 + 2 * c, D.charCodeAt(c), !0); m.send(a) } } function sa() { return null != m && m.readyState == m.OPEN } function B(a) { if (sa()) { var b = new ArrayBuffer(1); (new DataView(b)).setUint8(0, a); m.send(b) } } function Ca() { ma(); f.requestAnimationFrame(Ca) } function Ba() { p = f.innerWidth; r = f.innerHeight; ka.width = A.width = p; ka.height = A.height = r; ma() } function Ma() { var a; a = 1 * Math.max(r / 1080, p / 1920); return a *= C } function Va() { if (0 != l.length) { for (var a = 0, b = 0; b < l.length; b++) a += l[b].size; a = Math.pow(Math.min(64 / a, 1), .4) * Ma(); var z = (9 * h + a) / 10; allow_zoom ? (h=Math.min(h,z)):(h=z); } } function Zoom(e) { allow_zoom && (h *= 1 + e.wheelDelta / 1e3); } "onwheel" in document ? document.addEventListener("wheel", Zoom) : "onmousewheel" in document ? document.addEventListener("mousewheel", Zoom) : document.addEventListener("MozMousePixelScroll", Zoom); function ma() { var a, b, c = +new Date; ++Wa; I = +new Date; if (0 < l.length) { Va(); for (var d = a = b = 0; d < l.length; d++) l[d].updatePos(), b += l[d].x / l.length, a += l[d].y / l.length; N = b; O = a; P = h; s = (s + b) / 2; t = (t + a) / 2 } else s = (29 * s + N) / 30, t = (29 * t + O) / 30, h = (9 * h + P * Ma()) / 10; Qa(); la(); ta || e.clearRect(0, 0, p, r); if (ta) e.fillStyle = fa ? "#111111" : "#F2FBFF", e.globalAlpha = .05, e.fillRect(0, 0, p, r), e.globalAlpha = 1; else { e.fillStyle = fa ? "#111111" : "#F2FBFF"; e.fillRect(0, 0, p, r); e.save(); e.strokeStyle = fa ? "#AAAAAA" : "#000000"; e.globalAlpha = .2; e.scale(h, h); b = p / h; a = r / h; for (d = -.5 + (-s + b / 2) % 50; d < b; d += 50) e.beginPath(), e.moveTo(d, 0), e.lineTo(d, a), e.stroke(); for (d = -.5 + (-t + a / 2) % 50; d < a; d += 50) e.beginPath(), e.moveTo(0, d), e.lineTo(b, d), e.stroke(); e.restore() } n.sort(function(a, b) { return a.size == b.size ? a.id - b.id : a.size - b.size }); e.save(); e.translate(p / 2, r / 2); e.scale(h, h); e.translate(-s, -t); if (show_borders){ e.strokeStyle = fa ? "#FFFFFF" : "#000000"; e.beginPath(); e.moveTo(0, 0), e.lineTo(11180, 0), e.lineTo(11180, 11180), e.lineTo(0, 11180), e.lineTo(0, 0); e.stroke(); } for (d = 0; d < G.length; d++) G[d].draw(); for (d = 0; d < n.length; d++) n[d].draw(); if (qa) { $ = (3 * $ + oa) / 4; aa = (3 * aa + pa) / 4; e.save(); e.strokeStyle = "#FFAAAA"; e.lineWidth = 10; e.lineCap = "round"; e.lineJoin = "round"; e.globalAlpha = .5; e.beginPath(); for (d = 0; d < l.length; d++) e.moveTo(l[d].x, l[d].y), e.lineTo($, aa); e.stroke(); e.restore() } e.restore(); v && v.width && e.drawImage(v, p - v.width - 10, 10); DrawMinimap(e, l); H = Math.max(H, Xa()); 0 != H && (null == ga && (ga = new ha(24, "#FFFFFF")), ga.setValue("Score: " + ~~(H / 100)), a = ga.render(), b = a.width, e.globalAlpha = .2, e.fillStyle = "#000000", e.fillRect(10, r - 10 - 24 - 10, b + 10, 34), e.globalAlpha = 1, e.drawImage(a, 15, r - 10 - 24 - 5)); Ya(); c = +new Date - c; c > 1E3 / 60 ? x -= .01 : c < 1E3 / 65 && (x += .01);.4 > x && (x = .4); 1 < x && (x = 1) } function Ya() { if (ya && ua.width) { var a = p / 5; e.drawImage(ua, 5, 5, a, a) } } function Xa() { for (var a = 0, b = 0; b < l.length; b++) a += l[b].nSize * l[b].nSize; return a } function Ia() { v = null; if (null != w || 0 != z.length) if (null != w || ia) { v = document.createElement("canvas"); var a = v.getContext("2d"), b = 60, b = null == w ? b + 24 * z.length : b + 180, c = Math.min(200, .3 * p) / 200; v.width = 200 * c; v.height = b * c; a.scale(c, c); a.globalAlpha = .4; a.fillStyle = "#000000"; a.fillRect(0, 0, 200, b); a.globalAlpha = 1; a.fillStyle = "#FFFFFF"; c = null; c = "Leaderboard"; a.font = "30px Ubuntu"; a.fillText(c, 100 - a.measureText(c).width / 2, 40); if (null == w) for (a.font = "20px Ubuntu", b = 0; b < z.length; ++b) c = z[b].name || "An unnamed cell", ia || (c = "An unnamed cell"), -1 != E.indexOf(z[b].id) ? (l[0].name && (c = l[0].name), a.fillStyle = "#FFAAAA") : a.fillStyle = "#FFFFFF", c = b + 1 + ". " + c, a.fillText(c, 100 - a.measureText(c).width / 2, 70 + 24 * b); else for (b = c = 0; b < w.length; ++b) angEnd = c + w[b] * Math.PI * 2, a.fillStyle = Za[b + 1], a.beginPath(), a.moveTo(100, 140), a.arc(100, 140, 80, c, angEnd, !1), a.fill(), c = angEnd } } function Ja(a, b, c, d, e, f) { n.push(this); y[a] = this; this.id = a; this.ox = this.x = b; this.oy = this.y = c; this.oSize = this.size = d; this.color = e; this.points = []; this.pointsAcc = []; this.createPoints(); this.setName(f) } function ha(a, b, c, d) { a && (this._size = a); b && (this._color = b); this._stroke = !!c; d && (this._strokeColor = d) } var F = f.location.protocol, Ga = "https:" == F; if ("agar.io" != f.location.hostname && "localhost" != f.location.hostname && "10.10.2.13" != f.location.hostname) f.location = F + "//agar.io/"; else if (f.top != f) f.top.location = F + "//agar.io/"; else { var ka, e, A, p, r, L = null, m = null, s = 0, t = 0, E = [], l = [], y = {}, n = [], G = [], z = [], S = 0, T = 0, W = -1, X = -1, Wa = 0, I = 0, D = null, ba = 0, ca = 0, da = 1E4, ea = 1E4, h = 1, u = null, Na = !0, ia = !0, va = !1, ra = !1, H = 0, fa = !1, Oa = !0, N = s = ~~((ba + da) / 2), O = t = ~~((ca + ea) / 2), P = 1, M = "", w = null, ja = !1, qa = !1, oa = 0, pa = 0, $ = 0, aa = 0, Q = 0, Za = ["#333333", "#FF3333", "#33FF33", "#3333FF"], ta = !1, C = 1, ya = "ontouchstart" in f && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), ua = new Image; ua.src = "img/split.png"; Q = document.createElement("canvas"); if ("undefined" == typeof console || "undefined" == typeof DataView || "undefined" == typeof WebSocket || null == Q || null == Q.getContext || null == f.localStorage) alert("You browser does not support this game, we recommend you to use Firefox to play this"); else { var Y = null; f.setNick = function(a) { Ea(); D = a; Ha(); H = 0 }; f.setRegion = U; f.setSkins = function(a) { Na = a }; f.setNames = function(a) { ia = a }; f.setDarkTheme = function(a) { fa = a }; f.setColors = function(a) { va = a }; f.setShowMass = function(a) { Oa = a }; f.spectate = function() { D = null; B(1); Ea() }; f.setGameMode = function(a) { a != M && (M = a, V()) }; f.setAcid = function(a) { ta = a }; null != f.localStorage && (null == f.localStorage.AB8 && (f.localStorage.AB8 = 0 + ~~(100 * Math.random())), Q = +f.localStorage.AB8, f.ABGroup = Q); g.get(F + "//gc.agar.io", function(a) { var b = a.split(" "); a = b[0]; b = b[1] || ""; - 1 == "DE IL PL HU BR AT UA".split(" ").indexOf(a) && wa.push("nazi"); - 1 == ["UA"].indexOf(a) && wa.push("ussr"); R.hasOwnProperty(a) && ("string" == typeof R[a] ? u || U(R[a]) : R[a].hasOwnProperty(b) && (u || U(R[a][b]))) }, "text"); setTimeout(function() {}, 3E5); var R = { AF: "JP-Tokyo", AX: "EU-London", AL: "EU-London", DZ: "EU-London", AS: "SG-Singapore", AD: "EU-London", AO: "EU-London", AI: "US-Atlanta", AG: "US-Atlanta", AR: "BR-Brazil", AM: "JP-Tokyo", AW: "US-Atlanta", AU: "SG-Singapore", AT: "EU-London", AZ: "JP-Tokyo", BS: "US-Atlanta", BH: "JP-Tokyo", BD: "JP-Tokyo", BB: "US-Atlanta", BY: "EU-London", BE: "EU-London", BZ: "US-Atlanta", BJ: "EU-London", BM: "US-Atlanta", BT: "JP-Tokyo", BO: "BR-Brazil", BQ: "US-Atlanta", BA: "EU-London", BW: "EU-London", BR: "BR-Brazil", IO: "JP-Tokyo", VG: "US-Atlanta", BN: "JP-Tokyo", BG: "EU-London", BF: "EU-London", BI: "EU-London", KH: "JP-Tokyo", CM: "EU-London", CA: "US-Atlanta", CV: "EU-London", KY: "US-Atlanta", CF: "EU-London", TD: "EU-London", CL: "BR-Brazil", CN: "CN-China", CX: "JP-Tokyo", CC: "JP-Tokyo", CO: "BR-Brazil", KM: "EU-London", CD: "EU-London", CG: "EU-London", CK: "SG-Singapore", CR: "US-Atlanta", CI: "EU-London", HR: "EU-London", CU: "US-Atlanta", CW: "US-Atlanta", CY: "JP-Tokyo", CZ: "EU-London", DK: "EU-London", DJ: "EU-London", DM: "US-Atlanta", DO: "US-Atlanta", EC: "BR-Brazil", EG: "EU-London", SV: "US-Atlanta", GQ: "EU-London", ER: "EU-London", EE: "EU-London", ET: "EU-London", FO: "EU-London", FK: "BR-Brazil", FJ: "SG-Singapore", FI: "EU-London", FR: "EU-London", GF: "BR-Brazil", PF: "SG-Singapore", GA: "EU-London", GM: "EU-London", GE: "JP-Tokyo", DE: "EU-London", GH: "EU-London", GI: "EU-London", GR: "EU-London", GL: "US-Atlanta", GD: "US-Atlanta", GP: "US-Atlanta", GU: "SG-Singapore", GT: "US-Atlanta", GG: "EU-London", GN: "EU-London", GW: "EU-London", GY: "BR-Brazil", HT: "US-Atlanta", VA: "EU-London", HN: "US-Atlanta", HK: "JP-Tokyo", HU: "EU-London", IS: "EU-London", IN: "JP-Tokyo", ID: "JP-Tokyo", IR: "JP-Tokyo", IQ: "JP-Tokyo", IE: "EU-London", IM: "EU-London", IL: "JP-Tokyo", IT: "EU-London", JM: "US-Atlanta", JP: "JP-Tokyo", JE: "EU-London", JO: "JP-Tokyo", KZ: "JP-Tokyo", KE: "EU-London", KI: "SG-Singapore", KP: "JP-Tokyo", KR: "JP-Tokyo", KW: "JP-Tokyo", KG: "JP-Tokyo", LA: "JP-Tokyo", LV: "EU-London", LB: "JP-Tokyo", LS: "EU-London", LR: "EU-London", LY: "EU-London", LI: "EU-London", LT: "EU-London", LU: "EU-London", MO: "JP-Tokyo", MK: "EU-London", MG: "EU-London", MW: "EU-London", MY: "JP-Tokyo", MV: "JP-Tokyo", ML: "EU-London", MT: "EU-London", MH: "SG-Singapore", MQ: "US-Atlanta", MR: "EU-London", MU: "EU-London", YT: "EU-London", MX: "US-Atlanta", FM: "SG-Singapore", MD: "EU-London", MC: "EU-London", MN: "JP-Tokyo", ME: "EU-London", MS: "US-Atlanta", MA: "EU-London", MZ: "EU-London", MM: "JP-Tokyo", NA: "EU-London", NR: "SG-Singapore", NP: "JP-Tokyo", NL: "EU-London", NC: "SG-Singapore", NZ: "SG-Singapore", NI: "US-Atlanta", NE: "EU-London", NG: "EU-London", NU: "SG-Singapore", NF: "SG-Singapore", MP: "SG-Singapore", NO: "EU-London", OM: "JP-Tokyo", PK: "JP-Tokyo", PW: "SG-Singapore", PS: "JP-Tokyo", PA: "US-Atlanta", PG: "SG-Singapore", PY: "BR-Brazil", PE: "BR-Brazil", PH: "JP-Tokyo", PN: "SG-Singapore", PL: "EU-London", PT: "EU-London", PR: "US-Atlanta", QA: "JP-Tokyo", RE: "EU-London", RO: "EU-London", RU: "RU-Russia", RW: "EU-London", BL: "US-Atlanta", SH: "EU-London", KN: "US-Atlanta", LC: "US-Atlanta", MF: "US-Atlanta", PM: "US-Atlanta", VC: "US-Atlanta", WS: "SG-Singapore", SM: "EU-London", ST: "EU-London", SA: "EU-London", SN: "EU-London", RS: "EU-London", SC: "EU-London", SL: "EU-London", SG: "JP-Tokyo", SX: "US-Atlanta", SK: "EU-London", SI: "EU-London", SB: "SG-Singapore", SO: "EU-London", ZA: "EU-London", SS: "EU-London", ES: "EU-London", LK: "JP-Tokyo", SD: "EU-London", SR: "BR-Brazil", SJ: "EU-London", SZ: "EU-London", SE: "EU-London", CH: "EU-London", SY: "EU-London", TW: "JP-Tokyo", TJ: "JP-Tokyo", TZ: "EU-London", TH: "JP-Tokyo", TL: "JP-Tokyo", TG: "EU-London", TK: "SG-Singapore", TO: "SG-Singapore", TT: "US-Atlanta", TN: "EU-London", TR: "TK-Turkey", TM: "JP-Tokyo", TC: "US-Atlanta", TV: "SG-Singapore", UG: "EU-London", UA: "EU-London", AE: "EU-London", GB: "EU-London", US: { AL: "US-Atlanta", AK: "US-Fremont", AZ: "US-Fremont", AR: "US-Atlanta", CA: "US-Fremont", CO: "US-Fremont", CT: "US-Atlanta", DE: "US-Atlanta", FL: "US-Atlanta", GA: "US-Atlanta", HI: "US-Fremont", ID: "US-Fremont", IL: "US-Atlanta", IN: "US-Atlanta", IA: "US-Atlanta", KS: "US-Atlanta", KY: "US-Atlanta", LA: "US-Atlanta", ME: "US-Atlanta", MD: "US-Atlanta", MA: "US-Atlanta", MI: "US-Atlanta", MN: "US-Fremont", MS: "US-Atlanta", MO: "US-Atlanta", MT: "US-Fremont", NE: "US-Fremont", NV: "US-Fremont", NH: "US-Atlanta", NJ: "US-Atlanta", NM: "US-Fremont", NY: "US-Atlanta", NC: "US-Atlanta", ND: "US-Fremont", OH: "US-Atlanta", OK: "US-Atlanta", OR: "US-Fremont", PA: "US-Atlanta", RI: "US-Atlanta", SC: "US-Atlanta", SD: "US-Fremont", TN: "US-Atlanta", TX: "US-Atlanta", UT: "US-Fremont", VT: "US-Atlanta", VA: "US-Atlanta", WA: "US-Fremont", WV: "US-Atlanta", WI: "US-Atlanta", WY: "US-Fremont", DC: "US-Atlanta", AS: "US-Atlanta", GU: "US-Atlanta", MP: "US-Atlanta", PR: "US-Atlanta", UM: "US-Atlanta", VI: "US-Atlanta" }, UM: "SG-Singapore", VI: "US-Atlanta", UY: "BR-Brazil", UZ: "JP-Tokyo", VU: "SG-Singapore", VE: "BR-Brazil", VN: "JP-Tokyo", WF: "SG-Singapore", EH: "EU-London", YE: "JP-Tokyo", ZM: "EU-London", ZW: "EU-London" }; f.connect = Fa; var Z = 500, Ka = -1, La = -1, v = null, x = 1, ga = null, J = {}, wa = "poland;usa;china;russia;canada;australia;spain;brazil;germany;ukraine;france;sweden;hitler;north korea;south korea;japan;united kingdom;earth;greece;latvia;lithuania;estonia;finland;norway;cia;maldivas;austria;nigeria;reddit;yaranaika;confederate;9gag;indiana;4chan;italy;bulgaria;tumblr;2ch.hk;hong kong;portugal;jamaica;german empire;mexico;sanik;switzerland;croatia;chile;indonesia;bangladesh;thailand;iran;iraq;peru;moon;botswana;bosnia;netherlands;european union;taiwan;pakistan;hungary;satanist;qing dynasty;matriarchy;patriarchy;feminism;ireland;texas;facepunch;prodota;cambodia;steam;piccolo;ea;india;kc;denmark;quebec;ayy lmao;sealand;bait;tsarist russia;origin;vinesauce;stalin;belgium;luxembourg;stussy;prussia;8ch;argentina;scotland;sir;romania;belarus;wojak;doge;nasa;byzantium;imperial japan;french kingdom;somalia;turkey;mars;pokerface;8;irs;receita federal".split(";"), $a = ["8", "nasa"], ab = ["m'blob"]; Ja.prototype = { id: 0, points: null, pointsAcc: null, name: null, nameCache: null, sizeCache: null, x: 0, y: 0, size: 0, ox: 0, oy: 0, oSize: 0, nx: 0, ny: 0, nSize: 0, updateTime: 0, updateCode: 0, drawTime: 0, destroyed: !1, isVirus: !1, isAgitated: !1, wasSimpleDrawing: !0, destroy: function() { var a; for (a = 0; a < n.length; a++) if (n[a] == this) { n.splice(a, 1); break } delete y[this.id]; a = l.indexOf(this); - 1 != a && (ra = !0, l.splice(a, 1)); a = E.indexOf(this.id); - 1 != a && E.splice(a, 1); this.destroyed = !0; G.push(this) }, getNameSize: function() { return Math.max(~~(.3 * this.size), 24) }, setName: function(a) { if (this.name = a) null == this.nameCache ? this.nameCache = new ha(this.getNameSize(), "#FFFFFF", !0, "#000000") : this.nameCache.setSize(this.getNameSize()), this.nameCache.setValue(this.name) }, createPoints: function() { for (var a = this.getNumPoints(); this.points.length > a;) { var b = ~~(Math.random() * this.points.length); this.points.splice(b, 1); this.pointsAcc.splice(b, 1) } 0 == this.points.length && 0 < a && (this.points.push({ c: this, v: this.size, x: this.x, y: this.y }), this.pointsAcc.push(Math.random() - .5)); for (; this.points.length < a;) { var b = ~~(Math.random() * this.points.length), c = this.points[b]; this.points.splice(b, 0, { c: this, v: c.v, x: c.x, y: c.y }); this.pointsAcc.splice(b, 0, this.pointsAcc[b]) } }, getNumPoints: function() { var a = 10; 20 > this.size && (a = 5); this.isVirus && (a = 30); var b = this.size; this.isVirus || (b *= h); b *= x; return ~~Math.max(b, a) }, movePoints: function() { this.createPoints(); for (var a = this.points, b = this.pointsAcc, c = a.length, d = 0; d < c; ++d) { var e = b[(d - 1 + c) % c], f = b[(d + 1) % c]; b[d] += (Math.random() - .5) * (this.isAgitated ? 3 : 1); b[d] *= .7; 10 < b[d] && (b[d] = 10); - 10 > b[d] && (b[d] = -10); b[d] = (e + f + 8 * b[d]) / 10 } for (var h = this, d = 0; d < c; ++d) { var g = a[d].v, e = a[(d - 1 + c) % c].v, f = a[(d + 1) % c].v; if (15 < this.size && null != L) { var l = !1, m = a[d].x, n = a[d].y; L.retrieve2(m - 5, n - 5, 10, 10, function(a) { a.c != h && 25 > (m - a.x) * (m - a.x) + (n - a.y) * (n - a.y) && (l = !0) }); !l && (a[d].x < ba || a[d].y < ca || a[d].x > da || a[d].y > ea) && (l = !0); l && (0 < b[d] && (b[d] = 0), b[d] -= 1) } g += b[d]; 0 > g && (g = 0); g = this.isAgitated ? (19 * g + this.size) / 20 : (12 * g + this.size) / 13; a[d].v = (e + f + 8 * g) / 10; e = 2 * Math.PI / c; f = this.points[d].v; this.isVirus && 0 == d % 2 && (f += 5); a[d].x = this.x + Math.cos(e * d) * f; a[d].y = this.y + Math.sin(e * d) * f } }, updatePos: function() { var a; a = (I - this.updateTime) / 120; a = 0 > a ? 0 : 1 < a ? 1 : a; var b = 0 > a ? 0 : 1 < a ? 1 : a; this.getNameSize(); if (this.destroyed && 1 <= b) { var c = G.indexOf(this); - 1 != c && G.splice(c, 1) } this.x = a * (this.nx - this.ox) + this.ox; this.y = a * (this.ny - this.oy) + this.oy; this.size = b * (this.nSize - this.oSize) + this.oSize; return b }, shouldRender: function() { return this.x + this.size + 40 < s - p / 2 / h || this.y + this.size + 40 < t - r / 2 / h || this.x - this.size - 40 > s + p / 2 / h || this.y - this.size - 40 > t + r / 2 / h ? !1 : !0 }, isTeamColor: function(cells) { for (var e = cells[0].color, t = 0; 3 > t; ++t) { var n = e.substring(2 * t + 1, 2 * t + 3).toLowerCase(); if ("ff" === n) { var i = this.color.substring(2 * t + 1, 2 * t + 3).toLowerCase(); return i === n ? true : false } } return false }, getTargetColor: function(cells, game_mode){ var color = {'fill':this.color, 'stroke':this.color}; var mass = this.size * this.size; if (show_targeting_colors && mass > 400) { var is_teams = (":teams" == game_mode); var smallest = Math.min.apply(null, cells.map(function(e) { return e.size*e.size; })); if (this.isVirus || 0 === cells.length){ color.fill = color.stroke = "#666666"; } else if(~cells.indexOf(this) || is_teams && this.isTeamColor(cells)){ color.fill = "#3371FF"; if (!is_teams) color.stroke = "#3371FF"; } else if(mass > 2.5 * smallest){ color.fill = "#FF3C3C"; if (!is_teams) color.stroke = "#FF3C3C"; } else if(.74 * mass > smallest){ color.fill = "#FFBF3D"; if (!is_teams) color.stroke = "#FFBF3D"; } else if(mass > .74 * smallest){ color.fill = "#FFFF00"; if (!is_teams) color.stroke = "#FFFF00"; } else if(mass > .4 * smallest){ color.fill = "#00AA00"; if (!is_teams) color.stroke = "#00AA00"; } else{ color.fill = "#44F720"; if (!is_teams) color.stroke = "#44F720"; } } return color; }, draw: function() { var color = this.getTargetColor(l, M); if (this.shouldRender()) { var a = !this.isVirus && !this.isAgitated && .35 > h; if (this.wasSimpleDrawing && !a) for (var b = 0; b < this.points.length; b++) this.points[b].v = this.size; this.wasSimpleDrawing = a; e.save(); this.drawTime = I; b = this.updatePos(); this.destroyed && (e.globalAlpha *= 1 - b); e.lineWidth = 10; e.lineCap = "round"; e.lineJoin = this.isVirus ? "mitter" : "round"; va ? (e.fillStyle = "#FFFFFF", e.strokeStyle = "#AAAAAA") : (e.fillStyle = color.fill, e.strokeStyle = color.stroke); if (a) e.beginPath(), e.arc(this.x, this.y, this.size, 0, 2 * Math.PI, !1); else { this.movePoints(); e.beginPath(); var c = this.getNumPoints(); e.moveTo(this.points[0].x, this.points[0].y); for (b = 1; b <= c; ++b) { var d = b % c; e.lineTo(this.points[d].x, this.points[d].y) } } e.closePath(); c = this.name.toLowerCase(); !this.isAgitated && Na && "" == M ? -1 != wa.indexOf(c) ? (J.hasOwnProperty(c) || (J[c] = new Image, J[c].src = "skins/" + c + ".png"), b = 0 != J[c].width && J[c].complete ? J[c] : null) : b = null : b = null; b = (d = b) ? -1 != ab.indexOf(c) : !1; a || e.stroke(); e.fill(); null == d || b || (e.save(), e.clip(), e.drawImage(d, this.x - this.size, this.y - this.size, 2 * this.size, 2 * this.size), e.restore()); (va || 15 < this.size) && !a && (e.strokeStyle = "#000000", e.globalAlpha *= .1, e.stroke()); e.globalAlpha = 1; null != d && b && e.drawImage(d, this.x - 2 * this.size, this.y - 2 * this.size, 4 * this.size, 4 * this.size); b = -1 != l.indexOf(this); a = ~~this.y; if ((ia || b) && this.name && this.nameCache && (null == d || -1 == $a.indexOf(c))) { d = this.nameCache; d.setValue(this.name); d.setSize(this.getNameSize()); c = Math.ceil(10 * h) / 10; d.setScale(c); var d = d.render(), f = ~~(d.width / c), g = ~~(d.height / c); e.drawImage(d, ~~this.x - ~~(f / 2), a - ~~(g / 2), f, g); a += d.height / 2 / c + 4 } Oa && (b || (0 == l.length || show_opponent_size) && 20 < this.size) && (null == this.sizeCache && (this.sizeCache = new ha(this.getNameSize() / 2, "#FFFFFF", !0, "#000000")), b = this.sizeCache, b.setSize(this.getNameSize() / 2), b.setValue(~~(this.size * this.size / 100)), c = Math.ceil(10 * h) / 10, b.setScale(c), d = b.render(), f = ~~(d.width / c), g = ~~(d.height / c), e.drawImage(d, ~~this.x - ~~(f / 2), a - ~~(g / 2), f, g)); e.restore() } } }; ha.prototype = { _value: "", _color: "#000000", _stroke: !1, _strokeColor: "#000000", _size: 16, _canvas: null, _ctx: null, _dirty: !1, _scale: 1, setSize: function(a) { this._size != a && (this._size = a, this._dirty = !0) }, setScale: function(a) { this._scale != a && (this._scale = a, this._dirty = !0) }, setColor: function(a) { this._color != a && (this._color = a, this._dirty = !0) }, setStroke: function(a) { this._stroke != a && (this._stroke = a, this._dirty = !0) }, setStrokeColor: function(a) { this._strokeColor != a && (this._strokeColor = a, this._dirty = !0) }, setValue: function(a) { a != this._value && (this._value = a, this._dirty = !0) }, render: function() { null == this._canvas && (this._canvas = document.createElement("canvas"), this._ctx = this._canvas.getContext("2d")); if (this._dirty) { this._dirty = !1; var a = this._canvas, b = this._ctx, c = this._value, d = this._scale, e = this._size, f = e + "px Ubuntu"; b.font = f; var g = b.measureText(c).width, h = ~~(.2 * e); a.width = (g + 6) * d; a.height = (e + h) * d; b.font = f; b.scale(d, d); b.globalAlpha = 1; b.lineWidth = 3; b.strokeStyle = this._strokeColor; b.fillStyle = this._color; this._stroke && b.strokeText(c, 3, e - h / 2); b.fillText(c, 3, e - h / 2) } return this._canvas } }; f.onload = Pa } } })(window, jQuery);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址