Skip to content

Instantly share code, notes, and snippets.

@edolganov
Created May 10, 2015 17:19
Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save edolganov/bda5ba88512bbc6a1f2c to your computer and use it in GitHub Desktop.
Save edolganov/bda5ba88512bbc6a1f2c to your computer and use it in GitHub Desktop.
agar.io game client with bots
//replace http://agar.io/main_out.js by this file
//with Fiddler Web Debugger (AutoResponder tab)
//bots can be created in different rooms - so try restart the page if need
var totalBotCount = 0;
function game(h, r, bot, botUrl, botName) {
var window = h;
var canvas;
var botsUrl;
var botsCount = 15;
var botsCreated = false;
if(bot){
totalBotCount++;
botName = botName + "_b" + totalBotCount;
}
function init() {
if(bot){
console.log("bot - " + botName);
connectTo(botUrl);
setInterval(sendPosition, 100);
return;
}
//! bot
loadRegions();
setInterval(loadRegions, 18E4);
A = X = document.getElementById("canvas");
canvas = A;
d = canvas.getContext("2d");
canvas.onmousedown = function(a) {
if (fa) {
var b = a.clientX - (5 + k / 5 / 2), c = a.clientY - (5 + k / 5 / 2);
if (Math.sqrt(b * b + c * c) <= k / 5 / 2) {
sendPosition();
sendCommand(17);
return
}
}
O = a.clientX;
P = a.clientY;
Y();
sendPosition()
};
canvas.onmousemove = function(e) {
O = e.clientX;
P = e.clientY;
Y()
};
canvas.onmouseup = function() {};
var a = !1, b = !1, c = !1;
if(!bot) window.onkeydown = function(e) {
32 != e.keyCode || a || (sendPosition(), sendCommand(17), a = !0);
81 != e.keyCode || b || (sendCommand(18), b = !0);
87 != e.keyCode || c || (sendPosition(), sendCommand(21), c = !0);
27 == e.keyCode && r("#overlays").fadeIn(200)
};
if(!bot) window.onkeyup = function(e) {
32 == e.keyCode && (a = !1);
87 == e.keyCode && (c = !1);
81 == e.keyCode && b && (sendCommand(19), b = !1)
};
if(!bot) window.onblur = function() {
sendCommand(19);
c = b = a = !1
};
h.onresize = ga;
ga();
window.requestAnimationFrame ? window.requestAnimationFrame(ha) : setInterval(Z, 1E3 / 60);
setInterval(sendPosition, 100);
ia(r("#region").val())
}
function va() {
if (.5 > g)
G = null;
else {
for (var a = Number.POSITIVE_INFINITY, b = Number.POSITIVE_INFINITY, c = Number.NEGATIVE_INFINITY, e = Number.NEGATIVE_INFINITY, d = 0, f = 0; f < p.length; f++)
p[f].shouldRender() && (d = Math.max(p[f].size, d), a = Math.min(p[f].x, a), b = Math.min(p[f].y, b), c = Math.max(p[f].x, c), e = Math.max(p[f].y, e));
G = QUAD.init({minX: a - (d + 100),minY: b - (d + 100),maxX: c + (d + 100),maxY: e + (d + 100)});
for (f = 0; f < p.length; f++)
if (a = p[f], a.shouldRender())
for (b = 0; b < a.points.length; ++b)
G.insert(a.points[b])
}
}
function Y() {
Q = (O - k / 2) / g + s;
R = (P - q / 2) / g + t
}
function loadRegions() {
null == S && (S = {}, r("#region").children().each(function() {
var a = r(this), b = a.val();
b && (S[b] = a.text())
}));
r.get("http://m.agar.io/info", function(a) {
for (var b in a.regions)
r('#region option[value="' +
b + '"]').text(S[b] + " (" + a.regions[b].numPlayers + " players)")
}, "json")
}
function hideMenu() {
if(bot) return;
r("#adsBottom").hide();
r("#overlays").hide()
//autoRestart = true;
}
function ia(a) {
a && a != $ && ($ = a, ka())
}
function la() {
r.ajax("http://m.agar.io/",
{
error: function() {
setTimeout(la, 1E3)
},
success: function(a) {
a = a.split("\n");
connectTo("ws://" + a[0])
},
dataType: "text",
method: "POST",
cache: false,
crossDomain: !0,
data: $ || "?"})
}
function ka() {
if(!bot) r("#connecting").show();
la()
}
function connectTo(url) {
l && (l.onopen = null, l.onmessage = null, l.onclose = null, l.close(), l = null);
C = [];
m = [];
w = {};
p = [];
D = [];
u = [];
console.log("Connecting to " + url);
l = new WebSocket(url);
l.binaryType = "arraybuffer";
l.onopen = function(){
onConnected(url)
};
l.onmessage = xa;
l.onclose = ya;
l.onerror = function() {
console.log("socket error")
}
}
function onConnected(url) {
r("#connecting").hide();
console.log("socket open");
botsUrl = url;
var a = new ArrayBuffer(5);
var b = new DataView(a);
b.setUint8(0, 255);
b.setUint32(1, 1, !0);
l.send(a);
restartGame()
}
function ya(a) {
console.log("socket close");
setTimeout(ka, 500)
}
function xa(a) {
function b() {
for (var a = ""; ; ) {
var b = e.getUint16(c, !0);
c += 2;
if (0 == b)
break;
a += String.fromCharCode(b)
}
return a
}
var c = 1, e = new DataView(a.data);
switch (e.getUint8(0)) {
case 16:
za(e);
break;
case 17:
x = e.getFloat64(1, !0);
y = e.getFloat64(9, !0);
H = e.getFloat64(17, !0);
break;
case 20:
m = [];
C = [];
break;
case 32:
C.push(e.getUint32(1, !0));
break;
case 48:
for (u = []; c < e.byteLength; )
u.push({id: 0,name: b()});
oa();
break;
case 49:
a = e.getUint32(c, !0);
c += 4;
u = [];
for (var d = 0; d < a; ++d) {
var f = e.getUint32(c, !0), c = c + 4;
u.push({id: f,name: b()})
}
oa();
break;
case 64:
I = e.getFloat64(1, !0), J = e.getFloat64(9, !0), K = e.getFloat64(17, !0), L = e.getFloat64(25, !0), x = (K + I) / 2, y = (L + J) / 2, H = 1, 0 == m.length && (s = x, t = y, g = H)
}
}
function za(a) {
E = +new Date;
var b = Math.random(), c = 1;
aa = !1;
for (var e = a.getUint16(c, !0), c = c + 2, d = 0; d < e; ++d) {
var f = w[a.getUint32(c, !0)], g = w[a.getUint32(c + 4, !0)], c = c + 8;
f && g && (g.destroy(), g.ox = g.x, g.oy = g.y, g.oSize = g.size, g.nx = f.x, g.ny = f.y, g.nSize = g.size, g.updateTime = E)
}
for (; ; ) {
e = a.getUint32(c, !0);
c += 4;
if (0 == e)
break;
d = a.getFloat64(c, !0);
c += 8;
f = a.getFloat64(c, !0);
c += 8;
g = a.getFloat64(c, !0);
c += 8;
a.getUint8(c++);
for (var h = a.getUint8(c++), l = a.getUint8(c++), k =
a.getUint8(c++), h = (h << 16 | l << 8 | k).toString(16); 6 > h.length; )
h = "0" + h;
h = "#" + h;
k = a.getUint8(c++);
l = !!(k & 1);
k & 2 && (c += 4);
k & 4 && (c += 8);
k & 8 && (c += 16);
for (k = ""; ; ) {
var n = a.getUint16(c, !0), c = c + 2;
if (0 == n)
break;
k += String.fromCharCode(n)
}
n = null;
w.hasOwnProperty(e) ? (n = w[e], n.updatePos(), n.ox = n.x, n.oy = n.y, n.oSize = n.size, n.color = h) : (n = new pa(e, d, f, g, h, l, k), n.pX = d, n.pY = f);
n.nx = d;
n.ny = f;
n.nSize = g;
n.updateCode = b;
n.updateTime = E;
-1 != C.indexOf(e) && -1 == m.indexOf(n) && (document.getElementById("overlays").style.display = "none", m.push(n), 1 == m.length && (s = n.x, t = n.y))
}
a.getUint16(c, !0);
c += 2;
f = a.getUint32(c, !0);
c += 4;
for (d = 0; d < f; d++)
e = a.getUint32(c, !0), c += 4, w[e] && (w[e].updateCode = b);
for (d = 0; d < p.length; d++)
p[d].updateCode != b && p[d--].destroy();
aa && 0 == m.length
&& showOverlays()
}
function showOverlays(){
if(! bot)
r("#overlays").fadeIn(3E3);
else
restartGame();
}
function sendPosition() {
if (null != l && l.readyState == l.OPEN) {
var a = O - k / 2, b = P - q / 2;
64 > a * a + b * b || qa == Q && ra == R;
qa = Q;
ra = R;
var x = Q;
var y = R;
if(!bot){
clientX = x;
clientY = y;
} else {
x = clientX;
y = clientY;
}
a = new ArrayBuffer(21);
b = new DataView(a);
b.setUint8(0, 16);
b.setFloat64(1, x, !0);
b.setFloat64(9, y, !0);
b.setUint32(17, 0, !0);
//if(bot) console.log("X="+x+", Y="+y);
l.send(a);
}
}
function restartGame() {
if (null != l && l.readyState == l.OPEN && null != M) {
var a = new ArrayBuffer(1 + 2 * M.length), b = new DataView(a);
b.setUint8(0, 0);
for (var c = 0; c < M.length; ++c)
b.setUint16(1 + 2 * c, M.charCodeAt(c), !0);
l.send(a)
}
}
function sendCommand(a) {
if (null != l && l.readyState == l.OPEN) {
var b = new ArrayBuffer(1);
(new DataView(b)).setUint8(0, a);
l.send(b)
}
}
function ha() {
Z();
h.requestAnimationFrame(ha)
}
function ga() {
k = h.innerWidth;
q = h.innerHeight;
X.width = A.width = k;
X.height = A.height = q;
Z()
}
function Aa() {
if (0 != m.length) {
for (var a = 0, b = 0; b < m.length; b++)
a += m[b].size;
a = Math.pow(Math.min(64 / a, 1), .4) * Math.max(q / 1080, k / 1920);
g = (9 * g + a) / 10
}
}
function Z() {
if(bot) return;
var g = 0.5;
var a = +new Date;
++Ba;
E = +new Date;
if (0 < m.length) {
Aa();
for (var b = 0, c = 0, e = 0; e < m.length; e++)
m[e].updatePos(), b += m[e].x / m.length, c += m[e].y / m.length;
x = b;
y = c;
H = g;
s = (s + b) / 2;
t = (t + c) / 2
} else
x > K - (k / 2 - 100) / g && (x = K - (k / 2 - 100) / g), y > L - (q / 2 - 100) / g && (y = L - (q / 2 - 100) / g), x < I + (k / 2 - 100) / g && (x = (I + k / 2 - 100) / g), y < J + (q / 2 - 100) / g && (y = (J + q / 2 - 100) / g), s = (29 * s + x) / 30, t = (29 * t + y) / 30, g = (9 * g + H) / 10;
va();
Y();
d.clearRect(0, 0, k, q);
d.fillStyle = ba ? "#111111" : "#F2FBFF";
d.fillRect(0, 0, k, q);
d.save();
d.strokeStyle = ba ? "#AAAAAA" : "#000000";
d.globalAlpha = .2;
d.scale(g, g);
b = k / g;
c = q / g;
for (e = -.5 + (-s + b / 2) % 50; e < b; e += 50)
d.beginPath(), d.moveTo(e, 0), d.lineTo(e, c), d.stroke();
for (e = -.5 + (-t + c / 2) % 50; e < c; e += 50)
d.beginPath(), d.moveTo(0, e), d.lineTo(b, e), d.stroke();
d.restore();
p.sort(function(a, b) {
return a.size == b.size ? a.id - b.id : a.size - b.size
});
d.save();
d.translate(k / 2, q / 2);
d.scale(g, g);
d.translate(-s, -t);
for (e = 0; e < D.length; e++)
D[e].draw();
for (e = 0; e < p.length; e++)
p[e].draw();
d.restore();
z && 0 != u.length && d.drawImage(z, k - z.width - 10, 10);
N = Math.max(N, Ca());
0 != N && (null == T && (T = new U(24, "#FFFFFF")), T.setValue("Score: " + ~~(N / 100)), c = T.render(), b = c.width, d.globalAlpha = .2, d.fillStyle = "#000000", d.fillRect(10, q - 10 - 24 - 10, b + 10, 34), d.globalAlpha = 1, d.drawImage(c, 15, q - 10 - 24 - 5));
Da();
a = +new Date - a;
a > 1E3 / 60 ? v -= .01 : a < 1E3 / 65 && (v += .01);
.4 > v && (v = .4);
1 < v && (v = 1)
}
function Da() {
if (fa && ca.width) {
var a = k / 5;
d.drawImage(ca, 5, 5, a, a)
}
}
function Ca() {
for (var a = 0, b = 0; b < m.length; b++)
a += m[b].nSize * m[b].nSize;
return a
}
function oa() {
if(bot) return;
if (0 != u.length)
if (V) {
z = document.createElement("canvas");
var a = z.getContext("2d"), b = 60 + 24 * u.length, c = Math.min(200, .3 * k) / 200;
z.width = 200 * c;
z.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);
a.font = "20px Ubuntu";
for (b = 0; b < u.length; ++b)
c = u[b].name || "An unnamed cell", V || (c = "An unnamed cell"), -1 != C.indexOf(u[b].id) ? (m[0].name &&
(c = m[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
z = null
}
function pa(a, b, c, e, d, f, g) {
p.push(this);
w[a] = this;
this.id = a;
this.ox = this.x = b;
this.oy = this.y = c;
this.oSize = this.size = e;
this.color = d;
this.isVirus = f;
this.points = [];
this.pointsAcc = [];
this.createPoints();
this.setName(g)
}
function U(a, b, c, e) {
a && (this._size = a);
b && (this._color = b);
this._stroke = !!c;
e && (this._strokeColor = e)
}
var X, d, A, k, q, G = null, l = null, s = 0, t = 0, C = [], m = [], w = {}, p = [], D = [], u = [], O = 0, P = 0, Q = -1, R = -1, Ba = 0, E = 0, M = null, I = 0, J = 0, K = 1E4, L = 1E4, g = 1, $ = null, sa = !0, V = !0, da = !1, aa = !1, N = 0, ba = !1, ta = !1, x = 0, y = 0, H = 1, fa = "ontouchstart" in h && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), ca = new Image;
ca.src = "img/split.png";
var S = null;
if(!bot) h.setNick = function(a) {
hideMenu();
M = a;
restartGame();
N = 0
if( !bot && ! botsCreated){
console.log("create bots...");
botsCreated = true;
for (i = 0; i < botsCount; i++) {
//нужно делать паузу перед новым ботом,
//чтобы сервер не отклонил слишком частые соединения
setTimeout(function(){
game(window, r, true, botsUrl, M);
}, 500);
}
}
};
else {
M = botName;
}
if(!bot) h.setRegion = ia;
if(!bot) h.setSkins = function(a) {
sa = a
};
if(!bot) h.setNames = function(a) {
V = a
};
if(!bot) h.setDarkTheme = function(a) {
ba = a
};
if(!bot) h.setColors = function(a) {
da = a
};
if(!bot) h.setShowMass = function(a) {
ta = a
};
if(!bot) h.spectate = function() {
sendCommand(1);
hideMenu()
};
if(!bot) h.connect = loadRegions;
var qa = -1, ra = -1, z = null, v = 1, T = null, W = {}, Ea = "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;ussr;pewdiepie;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;nazi;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;isis;doge".split(";"), Fa = ["m'blob"];
pa.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,destroy: function() {
var a;
for (a = 0; a < p.length; a++)
if (p[a] == this) {
p.splice(a, 1);
break
}
delete w[this.id];
a = m.indexOf(this);
-1 != a && (aa = !0, m.splice(a, 1));
a = C.indexOf(this.id);
-1 != a && C.splice(a, 1);
this.destroyed = !0;
D.push(this)
},getNameSize: function() {
return Math.max(~~(.3 * this.size), 24)
},setName: function(a) {
if (this.name = a)
null == this.nameCache ? this.nameCache = new U(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);
return ~~Math.max(this.size * g * (this.isVirus ? Math.min(2 * v, 1) : v), a)
},movePoints: function() {
this.createPoints();
for (var a = this.points, b = this.pointsAcc, c = b.concat(), e = a.concat(), d = e.length, f = 0; f < d; ++f) {
var g = c[(f - 1 + d) % d], h = c[(f + 1) % d];
b[f] += Math.random() - .5;
b[f] *= .7;
10 < b[f] && (b[f] = 10);
-10 > b[f] && (b[f] = -10);
b[f] = (g + h + 8 * b[f]) / 10
}
for (var k = this, f = 0; f < d; ++f) {
c = e[f].v;
g = e[(f - 1 + d) % d].v;
h = e[(f + 1) % d].v;
if (15 < this.size && null != G) {
var l = !1, n = a[f].x, m = a[f].y;
G.retrieve2(n - 5, m - 5, 10, 10, function(a) {
a.c != k && 25 > (n - a.x) * (n - a.x) + (m - a.y) * (m - a.y) && (l = !0)
});
!l && (a[f].x < I || a[f].y < J || a[f].x > K || a[f].y > L) && (l = !0);
l && (0 < b[f] && (b[f] = 0), b[f] -= 1)
}
c += b[f];
0 > c && (c = 0);
c = (12 * c + this.size) / 13;
a[f].v = (g + h + 8 * c) / 10;
g = 2 * Math.PI / d;
h = this.points[f].v;
this.isVirus && 0 == f % 2 && (h += 5);
a[f].x = this.x + Math.cos(g * f) * h;
a[f].y = this.y + Math.sin(g * f) *
h
}
},updatePos: function() {
var a;
a = (E - this.updateTime) / 120;
a = 0 > a ? 0 : 1 < a ? 1 : a;
a = a * a * (3 - 2 * a);
this.getNameSize();
if (this.destroyed && 1 <= a) {
var b = D.indexOf(this);
-1 != b && D.splice(b, 1)
}
this.x = a * (this.nx - this.ox) + this.ox;
this.y = a * (this.ny - this.oy) + this.oy;
this.size = a * (this.nSize - this.oSize) + this.oSize;
return a
},shouldRender: function() {
return this.x + this.size + 40 < s - k / 2 / g || this.y + this.size + 40 < t - q / 2 / g || this.x - this.size - 40 > s + k / 2 / g || this.y - this.size - 40 > t + q / 2 / g ? !1 : !0
},draw: function() {
if (this.shouldRender()) {
var a = !this.isVirus &&
.5 > g;
d.save();
this.drawTime = E;
var b = this.updatePos();
this.destroyed && (d.globalAlpha *= 1 - b);
d.lineWidth = 10;
d.lineCap = "round";
d.lineJoin = this.isVirus ? "mitter" : "round";
da ? (d.fillStyle = "#FFFFFF", d.strokeStyle = "#AAAAAA") : (d.fillStyle = this.color, d.strokeStyle = this.color);
if (a)
d.beginPath(), d.arc(this.x, this.y, this.size, 0, 2 * Math.PI, !1);
else
for (this.movePoints(), d.beginPath(), a = this.getNumPoints(), d.moveTo(this.points[0].x, this.points[0].y), b = 1; b <= a; ++b) {
var c = b % a;
d.lineTo(this.points[c].x, this.points[c].y)
}
d.closePath();
a = this.name.toLowerCase();
sa ? -1 != Ea.indexOf(a) ? (W.hasOwnProperty(a) || (W[a] = new Image, W[a].src = "skins/" + a + ".png"), b = W[a]) : b = null : b = null;
a = b ? -1 != Fa.indexOf(a) : !1;
d.stroke();
d.fill();
null != b && 0 < b.width && !a && (d.save(), d.clip(), d.drawImage(b, this.x - this.size, this.y - this.size, 2 * this.size, 2 * this.size), d.restore());
if (da || 15 < this.size)
d.strokeStyle = "#000000", d.globalAlpha *= .1, d.stroke();
d.globalAlpha = 1;
null != b && 0 < b.width && a && d.drawImage(b, this.x - 2 * this.size, this.y - 2 * this.size, 4 * this.size, 4 * this.size);
b = -1 != m.indexOf(this);
a = ~~this.y;
if ((V || b) && this.name && this.nameCache) {
var e = this.nameCache;
e.setValue(this.name);
e.setSize(this.getNameSize());
c = Math.ceil(10 * g) / 10;
e.setScale(c);
var e = e.render(), h = ~~(e.width / c), c = ~~(e.height / c);
d.drawImage(e, ~~this.x - ~~(h / 2), a - ~~(c / 2), h, c);
a += e.height / 2 + 4
}
ta && b && (null == this.sizeCache && (this.sizeCache = new U(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 * g) / 10, b.setScale(c),
e = b.render(), h = ~~(e.width / c), c = ~~(e.height / c), d.drawImage(e, ~~this.x - ~~(h / 2), a - ~~(c / 2), h, c));
d.restore()
}
}};
U.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, g = this._size, f = g + "px Ubuntu";
b.font = f;
var h = b.measureText(c).width, k = ~~(.2 * g);
a.width = (h + 6) * d;
a.height = (g + k) * 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, g - k / 2);
b.fillText(c, 3, g - k / 2)
}
return this._canvas
}};
if(!bot) h.onload = init;
else init();
}
var playerX = 0;
var playerY = 0;
game(window, jQuery);
@Z1RkA
Copy link

Z1RkA commented Aug 23, 2015

как скачать и включить бота

@weakwizard
Copy link

agar.io doesnt call main_out.js anymore it's changed

@elah02
Copy link

elah02 commented Oct 9, 2015

бл как установить?

@Howtohelp
Copy link

Where do I put this script, and how do I get it to work????

@Enderbel
Copy link

edolganov Свяжись со мной в скайпе ytrioq бот можно переделать и зделать так чтобы работал
Будем этим заниматься в месте.
Есть небольшие разработки которые (слабенько) работают

@KingSuperior1YT
Copy link

Hoe do u download this?

@1111111yt
Copy link

How do the bots work?

@merlinmykitten
Copy link

hi

@YYYYYYYYYYYYYYY
Copy link

HI how can bots work

@ruslan2008
Copy link

почему не работает

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment