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);
@andrew89898
Copy link

Hi, I am also getting a white screen. When we use your script do we have to add/change anything?
I have been trying to add variables botUrl etc but I am also getting DataView errors.
Thanks for your work.

@dmi3coder
Copy link

i think agar.io's programmers already sow'n'fixed it

@wiifit4
Copy link

wiifit4 commented Jun 1, 2015

Hi, could you plz tell me this stuff about this "hack"?:
it makes a lot of bots come directly at you so you eat them or it controls your blob so it eats and evades players
if its with bots that come directly at you could you tell how are they called?
thx

@wiifit4
Copy link

wiifit4 commented Jun 1, 2015

ok. i just got it to work, i dont get white but i get the grid, but nothing more, i noted that in fiddler when i use the "hack" when the bunch of requests get to main_out.js it does replace it n all but then it doesnt continue with all the other requests

@SumJest
Copy link

SumJest commented Jul 8, 2015

Есть видео гайд. Если честно, нечего не понял.

@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