SHOW:
|
|
- or go back to the newest paste.
1 | function escapeHtml(a) { | |
2 | return String(a).replace(/[&<>"'\/]/g, function(a) { | |
3 | return entityMap[a]; | |
4 | }); | |
5 | } | |
6 | ||
7 | function updateBotCount(a, b) { | |
8 | BotMega.localBotsAlive[a] = b; | |
9 | var c = BotMega.serverBots; | |
10 | var d = 350 + BotMega.serverBots; | |
11 | var e = 3500; | |
12 | for (;e < 350;e++) { | |
13 | if (BotMega.localBotsAlive[e]) { | |
14 | c++; | |
15 | } | |
16 | } | |
17 | if (0 == c) { | |
18 | $("#botCount").html('<font color="red">0 / ' + d + "</font>"); | |
19 | } else { | |
20 | $("#botCount").html('<font color="#7FFF00">' + c + " / " + d + "</font>"); | |
21 | } | |
22 | } | |
23 | function startLocalBots() { | |
24 | - | var a$$0 = 0; |
24 | + | var a$$0 = 50; |
25 | - | for (;a$$0 < BotMega.startBotAmount;a$$0++) { |
25 | + | for (;a$$0 < BotMega.startBotAmount;a$$50++) { |
26 | - | BotMega.localBotsAlive[a$$0] = false; |
26 | + | BotMega.localBotsAlive[a$$50] = false; |
27 | BotMega.localBots[a$$0] = new Worker(URL.createObjectURL(new Blob(["(" + generateBotFunction() + ")()"], { | |
28 | type : "text/javascript" | |
29 | }))); | |
30 | - | BotMega.localBots[a$$0].onmessage = function(a) { |
30 | + | BotMega.localBots[a$$50].onmessage = function(a) { |
31 | var b = a.data; | |
32 | switch(b.name) { | |
33 | case "add": | |
34 | updateBotCount(b.botID, true); | |
35 | addBallToMinimap(true, "bot" + b.botID, b.botName, b.x, b.y, "#FF00FF", true); | |
36 | break; | |
37 | case "remove": | |
38 | updateBotCount(b.botID, false); | |
39 | removeBallFromMinimap("bot" + b.botID); | |
40 | break; | |
41 | case "position": | |
42 | moveBallOnMinimap("bot" + b.botID, b.x, b.y); | |
43 | break; | |
44 | default: | |
45 | console.log("Unknown command received from bot"); | |
46 | } | |
47 | }; | |
48 | BotMega.localBots[a$$0].postMessage({ | |
49 | name : "botID", | |
50 | botID : a$$0 | |
51 | }); | |
52 | } | |
53 | updateBotNames(); | |
54 | } | |
55 | function startRemoteBots() { | |
56 | var a = 0; | |
57 | for (;a < 3;a++) { | |
58 | BotMega.remoteBots[a] = new Worker(URL.createObjectURL(new Blob(["(" + generateBotFunction() + ")()"], { | |
59 | type : "text/javascript" | |
60 | }))); | |
61 | } | |
62 | } | |
63 | function sendLocalBotsMessage(a) { | |
64 | for (i in BotMega.localBots) { | |
65 | BotMega.localBots[i].postMessage(a); | |
66 | } | |
67 | } | |
68 | function sendRemoteBotsMessage(a) { | |
69 | for (i in BotMega.remoteBots) { | |
70 | BotMega.remoteBots[i].postMessage(a); | |
71 | } | |
72 | } | |
73 | function insertCore() { | |
74 | var f = new XMLHttpRequest; | |
75 | f.open("GET", "/agario.core.js", true); | |
76 | f.onload = function() { | |
77 | var script = f.responseText; | |
78 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerSpawn)", "BotMega.playerSpawned();if(h.MC&&h.MC.onPlayerSpawn)"); | |
79 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerDeath)", "BotMega.playerDied();if(h.MC&&h.MC.onPlayerDeath)"); | |
80 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onAgarioCoreLoaded)", "BotMega.onAgarioCoreLoaded();if(h.MC&&h.MC.onAgarioCoreLoaded)"); | |
81 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onDisconnect)", "BotMega.playerDisconnected();if(h.MC&&h.MC.onDisconnect)"); | |
82 | script = replaceNormalFile(script, "connect:function(a){", "connect:function(a){BotMega.playerConnected(a);"); | |
83 | script = replaceNormalFile(script, "sendSpectate:function(){", "sendSpectate:function(){BotMega.playerSpectated();"); | |
84 | script = replaceNormalFile(script, "sendNick:function(a){", "sendNick:function(a){BotMega.updateNickname(a);"); | |
85 | script = replaceNormalFile(script, "setTarget:function(a,b){", "setTarget:function(a,b){if(BotMega.stopMovement){a = $('#canvas').width() / 2; b = $('#canvas').height() / 2;}"); | |
86 | script = replaceRegexFile(script, /(\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);)/i, "$1 if(BotMega.setMapCoords){BotMega.setMapCoords($3,$5,$7,$9,$2,$8);}"); | |
87 | script = replaceRegexFile(script, /([\w$]+\(\d+,\w\[\w>>2\]\|0,(\+\w),(\+\w)\)\|0;[\w$]+\(\d+,\w\[\w>>2\]\|0,\+-(\+\w\[\w\+\d+>>3\]),\+-(\+\w\[\w\+\d+>>3\])\)\|0;)/i, "$1 BotMega.playerX=$4; BotMega.playerY=$5;"); | |
88 | script = replaceRegexFile(script, /if\((\+\w\[\w>>3\])<1\.0\){/i, "if($1 < BotMega.zoomResetValue){"); | |
89 | script = replaceRegexFile(script, /(if\(\w<=)(20\.0)(\){\w=\w;return})(if\(!\w\){if\(\(\w\[\d+\]\|0\)!=\(\w\[\d+\]\|0\)\){\w=\w;return}if\(\(\w\[\w\+\d+>>0\]\|0\)!=0\?\(\w\[\w>>0\]\|0\)==0:0\){\w=\w;return}})/i, "$140.0$3"); | |
90 | script = replaceRegexFile(script, /(\w)(=\+\w\[\w>>3\]\*\+\w\()(.\d)(,\+\w\);)/i, "$1$2 (BotMega.zoomSpeedValue||0.9) $4 BotMega.zoomValue=$1;"); | |
91 | script = replaceRegexFile(script, /(\w=\w\[\w>>2\]\|0;)((\w\[\w>>3\])=(\w);)(\w\[\w>>0\]=a\[\w>>0\];)/i, "$1 if(!BotMega.autoZoom){$3 = BotMega.zoomValue;}else{$2}$5"); | |
92 | script = replaceRegexFile(script, /((\w)=(\+\(\(\w\[\w\+\d+>>\d.*;)(\w)=(\+\(\(\w\[.*\/2\|\d\)\|0\)\/\w\+\s\+\w\[\w\+\d+>>3\];).*\4=\4<\w\?\w:\w;)/, "BotMega.mouseX = $3 BotMega.mouseY = $5 $1"); | |
93 | eval(script); | |
94 | }; | |
95 | f.send(); | |
96 | } | |
97 | function MinimapBall(a, b, c, d, e, f) { | |
98 | this.isDefault = a; | |
99 | this.name = b; | |
100 | this.x = c; | |
101 | this.y = d; | |
102 | this.lastX = c; | |
103 | this.lastY = d; | |
104 | this.color = e; | |
105 | this.visible = f; | |
106 | } | |
107 | function drawMinimap() { | |
108 | if (null != miniMap ? minimapCtx.clearRect(0, 0, 200, 200) : (miniMap = document.getElementById("minimap"), minimapCtx = miniMap.getContext("2d"), miniMap.width = 400, miniMap.height = 400, miniMap.style.width = "200px", miniMap.style.height = "200px", minimapCtx.scale(2, 2)), BotMega.mapOffsetFixed && BotMega.drawMinimap) { | |
109 | minimapCtx.globalAlpha = 0.4; | |
110 | minimapCtx.fillStyle = "#000000"; | |
111 | minimapCtx.fillRect(0, 0, miniMap.width, miniMap.height); | |
112 | var a = 200 / BotMega.mapSize; | |
113 | var b = 200 / BotMega.mapSize; | |
114 | minimapCtx.globalAlpha = 1; | |
115 | for (ball in minimapBalls) { | |
116 | minimapBalls[ball].draw(minimapCtx, a, b); | |
117 | } | |
118 | } | |
119 | } | |
120 | function resetMinimap() { | |
121 | for (ball in minimapBalls) { | |
122 | if (!minimapBalls[ball].isDefault) { | |
123 | delete minimapBalls[ball]; | |
124 | } | |
125 | } | |
126 | } | |
127 | function addBallToMinimap(a, b, c, d, e, f, g) { | |
128 | minimapBalls[b] = new MinimapBall(a, c, d, e, f, g); | |
129 | } | |
130 | function removeBallFromMinimap(a) { | |
131 | if (minimapBalls[a]) { | |
132 | delete minimapBalls[a]; | |
133 | } | |
134 | } | |
135 | function moveBallOnMinimap(a, b, c) { | |
136 | if (minimapBalls[a]) { | |
137 | minimapBalls[a].x = b; | |
138 | minimapBalls[a].y = c; | |
139 | } | |
140 | } | |
141 | function setBallVisible(a, b) { | |
142 | if (minimapBalls[a]) { | |
143 | minimapBalls[a].visible = b; | |
144 | } | |
145 | } | |
146 | function changeNicknameOnBall(a, b) { | |
147 | if (minimapBalls[a]) { | |
148 | minimapBalls[a].name = b; | |
149 | } | |
150 | } | |
151 | function replaceRegexFile(a, b, c) { | |
152 | var d = new RegExp(b); | |
153 | return d.test(a) ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a; | |
154 | } | |
155 | function replaceNormalFile(a, b, c) { | |
156 | return a.indexOf(b) != -1 ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a; | |
157 | } | |
158 | function sendCommand(a) { | |
159 | if (null != socket) { | |
160 | if (socket.connected) { | |
161 | socket.emit("command", a); | |
162 | } | |
163 | } | |
164 | } | |
165 | function connectToBotMegaServer() { | |
166 | socket = io.connect("ws://158.69.212.39:8003", { | |
167 | reconnection : true, | |
168 | query : "key=" + client_uuid | |
169 | }); | |
170 | ||
171 | socket.on("message", function(msg) { | |
172 | alert(msg); | |
173 | }); | |
174 | ||
175 | socket.on("force-uuid", function(data) { | |
176 | socket.emit("uuid", client_uuid) | |
177 | }); | |
178 | ||
179 | socket.on("command", function(a) { | |
180 | if (void 0 === a.name) { | |
181 | return void console.log("Recieved a command with no name."); | |
182 | } | |
183 | switch(a.name) { | |
184 | case "force-update": | |
185 | resetMinimap(); | |
186 | transmit_current_server(true); | |
187 | if (BotMega.isAlive) { | |
188 | sendCommand({ | |
189 | name : "alive", | |
190 | playerName : BotMega.playerName | |
191 | }); | |
192 | } | |
193 | break; | |
194 | case "add": | |
195 | addBallToMinimap(false, a.socketID, a.playerName, a.x, a.y, "#FFFFFF", true); | |
196 | break; | |
197 | case "remove": | |
198 | removeBallFromMinimap(a.socketID); | |
199 | break; | |
200 | case "position": | |
201 | moveBallOnMinimap(a.socketID, a.x, a.y); | |
202 | break; | |
203 | case "count": | |
204 | BotMega.serverBots = a.count; | |
205 | break; | |
206 | case "auth": | |
207 | BotMega.isAuthorized = true; | |
208 | console.log("Your client is authorized for use of more bots."); | |
209 | break; | |
210 | default: | |
211 | return void console.log("Received a command with an unknown name: " + a.name); | |
212 | } | |
213 | }); | |
214 | socket.on("bots", function(a) { | |
215 | if ("server" == a.name) { | |
216 | ||
217 | BotMega.remoteBotsServer = a.server; | |
218 | } | |
219 | sendRemoteBotsMessage(a); | |
220 | }); | |
221 | socket.on("disconnect", function() { | |
222 | resetMinimap(); | |
223 | sendRemoteBotsMessage({ | |
224 | name : "disconnect" | |
225 | }); | |
226 | }); | |
227 | } | |
228 | function updateBotNames() { | |
229 | sendLocalBotsMessage({ | |
230 | name : "names", | |
231 | botNames : BotMega.botNames | |
232 | }); | |
233 | if (BotMega.isAuthorized) { | |
234 | sendCommand({ | |
235 | name : "names", | |
236 | botNames : BotMega.botNames | |
237 | }); | |
238 | } | |
239 | } | |
240 | function validateNames(a) { | |
241 | if (void 0 === a) { | |
242 | return null; | |
243 | } | |
244 | if (a.indexOf(",") > -1) { | |
245 | var b = a.split(","); | |
246 | for (name in b) { | |
247 | if (b[name].length <= 0 || b[name].length > 15) { | |
248 | return null; | |
249 | } | |
250 | } | |
251 | return b; | |
252 | } | |
253 | return a.length > 0 && a.length <= 15 ? [a] : null; | |
254 | } | |
255 | function emitSplit() { | |
256 | if (BotMega.isAuthorized) { | |
257 | sendCommand({ | |
258 | name : "split" | |
259 | }); | |
260 | } | |
261 | sendLocalBotsMessage({ | |
262 | name : "split" | |
263 | }); | |
264 | } | |
265 | function emitMassEject() { | |
266 | if (BotMega.isAuthorized) { | |
267 | sendCommand({ | |
268 | name : "eject" | |
269 | }); | |
270 | } | |
271 | sendLocalBotsMessage({ | |
272 | name : "eject" | |
273 | }); | |
274 | } | |
275 | function sendToken() { | |
276 | sendLocalBotsMessage({ | |
277 | name : "useToken", | |
278 | token : "EAAJoMBwWJiMBAFo6hCUiqlIsn3uLS2cOnGLNOBWD6NmaIzBByZCvCWkw7pBsyLnDpTRoKeNlcWwf4MSPUKZA7ES4Q2aC7tx1rZC7vNCHJWJHLcI7kk5HlyRRPfiS9yc1zO4bHDVYDJSOPNPZANKyfmZCVHixiBTTrN5vcZBImdSQZDZD" | |
279 | }); | |
280 | } | |
281 | function emitLocalPosition() { | |
282 | var a = BotMega.mouseX; | |
283 | var b = BotMega.mouseY; | |
284 | if (!BotMega.moveToMouse) { | |
285 | a = BotMega.playerX; | |
286 | b = BotMega.playerY; | |
287 | } | |
288 | sendLocalBotsMessage({ | |
289 | name : "position", | |
290 | x : a + BotMega.mapOffsetX, | |
291 | y : b + BotMega.mapOffsetY | |
292 | }); | |
293 | } | |
294 | function emitPosition() { | |
295 | var a = BotMega.mouseX; | |
296 | var b = BotMega.mouseY; | |
297 | if (!BotMega.moveToMouse) { | |
298 | a = BotMega.playerX; | |
299 | b = BotMega.playerY; | |
300 | } | |
301 | sendCommand({ | |
302 | name : "position", | |
303 | x : BotMega.realPlayerX, | |
304 | y : BotMega.realPlayerY, | |
305 | botX : a + BotMega.mapOffsetX, | |
306 | botY : b + BotMega.mapOffsetY | |
307 | }); | |
308 | } | |
309 | function transmit_current_server(a) { | |
310 | if (a || last_transmited_game_server != BotMega.server) { | |
311 | last_transmited_game_server = BotMega.server; | |
312 | sendCommand({ | |
313 | name : "servers", | |
314 | server : last_transmited_game_server | |
315 | }); | |
316 | } | |
317 | } | |
318 | function generateBotFunction() { | |
319 | return function() { | |
320 | function replaceRegexFile(a, b, c) { | |
321 | var d = new RegExp(b); | |
322 | return d.test(a) ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a; | |
323 | } | |
324 | function replaceNormalFile(a, b, c) { | |
325 | return a.indexOf(b) != -1 ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a; | |
326 | } | |
327 | function getRandomInt(a, b) { | |
328 | return Math.floor(Math.random() * (b - a + 1)) + a; | |
329 | } | |
330 | function getBotCore() { | |
331 | var e = new XMLHttpRequest; | |
332 | e.open("GET", "http://agar.io/agario.core.js", true); | |
333 | e.onload = function() { | |
334 | var script = e.responseText; | |
335 | script = replaceRegexFile(script, /\w+\.location\.hostname/g, '"agar.io"'); | |
336 | script = replaceNormalFile(script, "window", "self"); | |
337 | script = replaceNormalFile(script, "c.setStatus=function(a){console.log(a)};", "c.setStatus=function(a){};"); | |
338 | script = replaceNormalFile(script, 'console.log("postRun");', ""); | |
339 | script = replaceRegexFile(script, /(\w)=\+\(\(\w\[\w\+\d+>>\d.*;(\w)=\+\(\(\w\[.*\/2\|\d\)\|0\)\/\w\+\s\+\w\[\w\+\d+>>3\];/, "$1 = BotMega.newX; $2 = BotMega.newY;"); | |
340 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerSpawn)", "BotMega.playerSpawned();if(h.MC&&h.MC.onPlayerSpawn)"); | |
341 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerDeath)", "BotMega.playerDied();if(h.MC&&h.MC.onPlayerDeath)"); | |
342 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onAgarioCoreLoaded)", "BotMega.onAgarioCoreLoaded();if(h.MC&&h.MC.onAgarioCoreLoaded)"); | |
343 | script = replaceNormalFile(script, "if(h.MC&&h.MC.onDisconnect)", "BotMega.playerDisconnected();if(h.MC&&h.MC.onDisconnect)"); | |
344 | script = replaceNormalFile(script, "h.MC&&h.MC.corePendingReload", "BotMega.reloadCore();h.MC&&h.MC.corePendingReload"); | |
345 | script = replaceRegexFile(script, /(\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);)/i, "$1 if(BotMega.setMapCoords){BotMega.setMapCoords($3,$5,$7,$9,$2,$8);}"); | |
346 | script = replaceRegexFile(script, /([\w$]+\(\d+,\w\[\w>>2\]\|0,(\+\w),(\+\w)\)\|0;[\w$]+\(\d+,\w\[\w>>2\]\|0,\+-(\+\w\[\w\+\d+>>3\]),\+-(\+\w\[\w\+\d+>>3\])\)\|0;)/i, "$1 BotMega.playerX=$4; BotMega.playerY=$5; BotMega.setPath();"); | |
347 | script = replaceRegexFile(script, /(do\sif\(\w\){)((\w)=!\(\+\w\[\w>>2]<=20.0\);)(.+,\w\[\w>>2\]\|0,(\+\(\+\w\[\w>>2\]\)),(\+\(\+\w\[\w>>2\]\)),\+\((\+\w\[\w>>2\]))/, "$1var cellSize=$7;$2if(!$3){BotMega.recordPellet($5,$6,cellSize);}$4"); | |
348 | eval(script); | |
349 | }; | |
350 | e.send(null); | |
351 | } | |
352 | self.innerWidth = 1; | |
353 | self.innerHeight = 1; | |
354 | const window = {}; | |
355 | elementMock = { | |
356 | getContext : function() { | |
357 | return{ | |
358 | canvas : { | |
359 | width : 1, | |
360 | height : 1 | |
361 | }, | |
362 | clearRect : function() { | |
363 | }, | |
364 | save : function() { | |
365 | }, | |
366 | translate : function() { | |
367 | }, | |
368 | scale : function() { | |
369 | }, | |
370 | stroke : function() { | |
371 | }, | |
372 | arc : function() { | |
373 | }, | |
374 | fill : function() { | |
375 | }, | |
376 | moveTo : function() { | |
377 | }, | |
378 | lineTo : function() { | |
379 | }, | |
380 | closePath : function() { | |
381 | }, | |
382 | beginPath : function() { | |
383 | }, | |
384 | restore : function() { | |
385 | }, | |
386 | fillRect : function() { | |
387 | }, | |
388 | measureText : function() { | |
389 | return{}; | |
390 | }, | |
391 | strokeText : function() { | |
392 | }, | |
393 | fillText : function() { | |
394 | }, | |
395 | drawImage : function() { | |
396 | } | |
397 | }; | |
398 | }, | |
399 | innerText : "", | |
400 | div : { | |
401 | appendChild : function() { | |
402 | } | |
403 | }, | |
404 | appendChild : function() { | |
405 | }, | |
406 | style : {} | |
407 | }; | |
408 | document = { | |
409 | getElementById : function() { | |
410 | return elementMock; | |
411 | }, | |
412 | createElement : function(a) { | |
413 | return elementMock; | |
414 | }, | |
415 | body : { | |
416 | firstChild : {}, | |
417 | insertBefore : function() { | |
418 | } | |
419 | } | |
420 | }; | |
421 | Image = function() { | |
422 | }; | |
423 | self.BotMega = { | |
424 | server : null, | |
425 | botID : 0, | |
426 | botName : "BotMe.ga", | |
427 | playerX : 0, | |
428 | playerY : 0, | |
429 | newX : 0, | |
430 | newY : 0, | |
431 | realPlayerX : null, | |
432 | realPlayerY : null, | |
433 | mapOffset : 7071, | |
434 | mapOffsetX : 0, | |
435 | mapOffsetY : 0, | |
436 | mapOffsetFixed : false, | |
437 | collectPellets : false, | |
438 | pelletTargetX : 99999, | |
439 | pelletTargetY : 99999, | |
440 | pellets : [], | |
441 | recordPellet : function(a, b, c) { | |
442 | this.pellets.push({ | |
443 | x : a, | |
444 | y : b, | |
445 | size : c | |
446 | }); | |
447 | }, | |
448 | setMapCoords : function(a, b, c, d, e, f) { | |
449 | if (f - e == 24) { | |
450 | if (c - a > 14E3) { | |
451 | if (d - b > 14E3) { | |
452 | this.mapOffsetX = this.mapOffset - c; | |
453 | this.mapOffsetY = this.mapOffset - d; | |
454 | this.mapOffsetFixed = true; | |
455 | } | |
456 | } | |
457 | } | |
458 | }, | |
459 | playerDied : function() { | |
460 | postMessage({ | |
461 | name : "remove", | |
462 | botID : BotMega.botID | |
463 | }); | |
464 | }, | |
465 | playerSpawned : function() { | |
466 | postMessage({ | |
467 | name : "add", | |
468 | botID : BotMega.botID, | |
469 | botName : BotMega.botName, | |
470 | x : BotMega.realPlayerX, | |
471 | y : BotMega.realPlayerY | |
472 | }); | |
473 | }, | |
474 | playerDisconnected : function() { | |
475 | postMessage({ | |
476 | name : "remove", | |
477 | botID : BotMega.botID | |
478 | }); | |
479 | if (self.core) { | |
480 | if (null != BotMega.server) { | |
481 | core.connect(BotMega.server); | |
482 | } | |
483 | } | |
484 | }, | |
485 | reloadCore : function() { | |
486 | if (self.core) { | |
487 | self.core.destroy(); | |
488 | } | |
489 | getBotCore(); | |
490 | }, | |
491 | onAgarioCoreLoaded : function() { | |
492 | if (self.core) { | |
493 | if (null != BotMega.server) { | |
494 | core.connect(BotMega.server); | |
495 | } | |
496 | } | |
497 | }, | |
498 | setPath : function() { | |
499 | var a = -1; | |
500 | var b = 0; | |
501 | var c = 0; | |
502 | for (;c < this.pellets.length;c++) { | |
503 | var d = this.getDistanceBetweenPositions(this.pellets[c].x, this.pellets[c].y, this.playerX, this.playerY); | |
504 | if (!(a != -1 && d > b)) { | |
505 | a = c; | |
506 | b = d; | |
507 | } | |
508 | } | |
509 | if (a == -1) { | |
510 | this.pelletTargetX = 99999; | |
511 | this.pelletTargetY = 99999; | |
512 | } else { | |
513 | this.pelletTargetX = this.pellets[a].x; | |
514 | this.pelletTargetY = this.pellets[a].y; | |
515 | } | |
516 | this.pellets = []; | |
517 | }, | |
518 | getDistanceBetweenPositions : function(a, b, c, d) { | |
519 | return Math.sqrt(Math.pow(c - a, 2) + Math.pow(b - d, 2)); | |
520 | } | |
521 | }; | |
522 | onmessage = function(a) { | |
523 | var b = a.data; | |
524 | switch(b.name) { | |
525 | case "botID": | |
526 | BotMega.botID = b.botID; | |
527 | break; | |
528 | case "server": | |
529 | BotMega.server = b.server; | |
530 | if (self.core) { | |
531 | if (null != b.server) { | |
532 | core.connect(b.server); | |
533 | } | |
534 | } | |
535 | break; | |
536 | case "position": | |
537 | if (BotMega.collectPellets && (99999 != BotMega.pelletTargetX && 99999 != BotMega.pelletTargetY)) { | |
538 | BotMega.newX = BotMega.pelletTargetX; | |
539 | BotMega.newY = BotMega.pelletTargetY; | |
540 | } else { | |
541 | BotMega.newX = b.x - BotMega.mapOffsetX; | |
542 | BotMega.newY = b.y - BotMega.mapOffsetY; | |
543 | } | |
544 | break; | |
545 | case "split": | |
546 | if (self.core) { | |
547 | core.split(); | |
548 | } | |
549 | break; | |
550 | case "eject": | |
551 | if (self.core) { | |
552 | core.eject(); | |
553 | } | |
554 | break; | |
555 | case "names": | |
556 | if (null == b.botNames) { | |
557 | BotMega.botName = "BotMe.ga"; | |
558 | break; | |
559 | } | |
560 | BotMega.botName = b.botNames[getRandomInt(0, b.botNames.length - 1)]; | |
561 | break; | |
562 | case "disconnect": | |
563 | BotMega.server = null; | |
564 | if (self.core) { | |
565 | core.disconnect(); | |
566 | } | |
567 | break; | |
568 | case "collectPellets": | |
569 | BotMega.collectPellets = b.collectPellets; | |
570 | break; | |
571 | case "useToken": | |
572 | var bytes = [8, 1, 18, b.token.length + 25, 1, 8, 10, 82, b.token.length + 20, 1, 8, 2, 18, 13, 8, 5, 18, 5, 50, 46, 50, 46, 49, 24, 0, 32, 0, 26, b.token.length, 1]; | |
573 | console.log(bytes); | |
574 | for (var i = 0; i < b.token.length; i++) bytes.push(b.token.charCodeAt(i)); | |
575 | setTimeout(function() { | |
576 | core.proxyMobileData(new Uint8Array(bytes)); | |
577 | - | }, 1000); |
577 | + | }, 90000); |
578 | ||
579 | default: | |
580 | console.log("Unknown message received." + b); | |
581 | } | |
582 | }; | |
583 | setInterval(function() { | |
584 | BotMega.realPlayerX = BotMega.mapOffsetX + BotMega.playerX; | |
585 | BotMega.realPlayerY = BotMega.mapOffsetY + BotMega.playerY; | |
586 | postMessage({ | |
587 | botID : BotMega.botID, | |
588 | name : "position", | |
589 | x : BotMega.realPlayerX, | |
590 | y : BotMega.realPlayerY | |
591 | }); | |
592 | if (self.core) { | |
593 | core.sendNick(BotMega.botName); | |
594 | } | |
595 | }, 100); | |
596 | getBotCore(); | |
597 | }.toString(); | |
598 | } | |
599 | window.history.replaceState("", "", "/" + location.hash), window.getTextWidth = function(a, b) { | |
600 | var c = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas")); | |
601 | var d = c.getContext("2d"); | |
602 | d.font = b; | |
603 | var e = d.measureText(a); | |
604 | return e.width; | |
605 | }; | |
606 | var entityMap = { | |
607 | "&" : "&", | |
608 | "<" : "<", | |
609 | ">" : ">", | |
610 | '"' : """, | |
611 | "'" : "'", | |
612 | "/" : "/" | |
613 | }; | |
614 | var client_uuid = escapeHtml(localStorage.getItem("BotMega_uuid")); | |
615 | if (null === client_uuid || 15 != client_uuid.length) { | |
616 | client_uuid = ""; | |
617 | var ranStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | |
618 | var ii = 0; | |
619 | for (;ii < 15;ii++) { | |
620 | client_uuid += ranStr.charAt(Math.floor(Math.random() * ranStr.length)); | |
621 | } | |
622 | localStorage.setItem("BotMega_uuid", client_uuid); | |
623 | } | |
624 | window.BotMega = { | |
625 | server : null, | |
626 | playerName : "", | |
627 | startBotAmount: 1, | |
628 | playerX : 0, | |
629 | playerY : 0, | |
630 | mouseX : 0, | |
631 | mouseY : 0, | |
632 | realPlayerX : null, | |
633 | realPlayerY : null, | |
634 | mapSize : 14142, | |
635 | mapOffset : 7071, | |
636 | mapOffsetX : 0, | |
637 | mapOffsetY : 0, | |
638 | mapOffsetFixed : false, | |
639 | zoomValue : 1, | |
640 | zoomResetValue : 0, | |
641 | zoomSpeedValue : 0.9, | |
642 | autoZoom : true, | |
643 | stopMovement : false, | |
644 | isAlive : true, | |
645 | moveToMouse : true, | |
646 | localBots : {}, | |
647 | localBotsAlive : {}, | |
648 | remoteBotsServer : null, | |
649 | remoteBots : {}, | |
650 | remoteBotsAlive : {}, | |
651 | leaderboardData : "", | |
652 | serverBots : 350, | |
653 | isAuthorized : !1, | |
654 | drawMinimap : true, | |
655 | setMapCoords : function(a, b, c, d, e, f) { | |
656 | if (f - e == 24) { | |
657 | if (c - a > 14E3) { | |
658 | if (d - b > 14E3) { | |
659 | this.mapOffsetX = this.mapOffset - c; | |
660 | this.mapOffsetY = this.mapOffset - d; | |
661 | this.mapOffsetFixed = true; | |
662 | } | |
663 | } | |
664 | } | |
665 | }, | |
666 | playerDied : function() { | |
667 | BotMega.isAlive = false; | |
668 | moveBallOnMinimap("player_death", this.realPlayerX, this.realPlayerY); | |
669 | setBallVisible("player_pointer", false); | |
670 | setBallVisible("player_death", true); | |
671 | sendCommand({ | |
672 | name : "dead" | |
673 | }); | |
674 | }, | |
675 | playerSpawned : function() { | |
676 | BotMega.isAlive = true; | |
677 | changeNicknameOnBall("player_pointer", BotMega.playerName); | |
678 | setBallVisible("player_spectate", false); | |
679 | setBallVisible("player_pointer", true); | |
680 | sendCommand({ | |
681 | name : "alive", | |
682 | playerName : BotMega.playerName | |
683 | }); | |
684 | }, | |
685 | playerConnected : function(a) { | |
686 | resetMinimap(); | |
687 | if (null != this.remoteBotsServer) { | |
688 | if (this.remoteBotsServer == a) { | |
689 | sendRemoteBotsMessage({ | |
690 | name : "disconnect" | |
691 | }); | |
692 | } | |
693 | } | |
694 | BotMega.server = a; | |
695 | console.log("Connecting to: " + a); | |
696 | setBallVisible("player_pointer", false); | |
697 | setBallVisible("player_death", false); | |
698 | setBallVisible("player_spectate", false); | |
699 | sendLocalBotsMessage({ | |
700 | name : "server", | |
701 | server : a | |
702 | }); | |
703 | }, | |
704 | playerDisconnected : function() { | |
705 | resetMinimap(); | |
706 | sendCommand({ | |
707 | name : "dead" | |
708 | }); | |
709 | setBallVisible("player_pointer", false); | |
710 | setBallVisible("player_death", false); | |
711 | setBallVisible("player_spectate", false); | |
712 | BotMega.server = null; | |
713 | BotMega.isAlive = false; | |
714 | }, | |
715 | playerSpectated : function() { | |
716 | setBallVisible("player_pointer", false); | |
717 | setBallVisible("player_spectate", true); | |
718 | sendCommand({ | |
719 | name : "dead" | |
720 | }); | |
721 | }, | |
722 | updateNickname : function(a) { | |
723 | this.playerName = a; | |
724 | }, | |
725 | loadCore : function() { | |
726 | setTimeout(function() { | |
727 | startLocalBots(); | |
728 | startRemoteBots(); | |
729 | }, 2E3); | |
730 | console.log("Loading core."); | |
731 | var b$$0 = (document.getElementById("canvas"), localStorage.getItem("botnames")); | |
732 | if (null !== b$$0) { | |
733 | BotMega.botNames = validateNames(b$$0); | |
734 | if (null !== BotMega.botNames) { | |
735 | $("#botnames").val(b$$0); | |
736 | } | |
737 | updateBotNames(); | |
738 | } | |
739 | $("#botnames").on("input", function() { | |
740 | var a = $("#botnames").val(); | |
741 | var b = validateNames(a); | |
742 | BotMega.botNames = b; | |
743 | updateBotNames(); | |
744 | if (null !== b) { | |
745 | localStorage.setItem("botnames", a); | |
746 | } | |
747 | }); | |
748 | $("#leaderboardcopy").click(function(a) { | |
749 | var b = $("#leaderboard")[0]; | |
750 | b.setSelectionRange(0, b.value.length); | |
751 | b.select(); | |
752 | try { | |
753 | document.execCommand("copy"); | |
754 | } catch (a$$0) { | |
755 | console.log("Failed to copy leaderboard."); | |
756 | } | |
757 | }); | |
758 | $("#uuidcopy").click(function(a) { | |
759 | var b = $("#uuid")[0]; | |
760 | b.setSelectionRange(0, b.value.length); | |
761 | b.select(); | |
762 | try { | |
763 | document.execCommand("copy"); | |
764 | } catch (a$$0) { | |
765 | console.log("Failed to copy uuid."); | |
766 | } | |
767 | }); | |
768 | var c; | |
769 | var d = false; | |
770 | var f$$0 = false; | |
771 | $(document).keydown(function(a) { | |
772 | switch(a.which) { | |
773 | case 65: | |
774 | BotMega.moveToMouse = !BotMega.moveToMouse; | |
775 | if (BotMega.moveToMouse) { | |
776 | $("#ismoveToMouse").html("<font color='#7FFF00'>On</font>"); | |
777 | } else { | |
778 | $("#ismoveToMouse").html("<font color='red'>Off</font>"); | |
779 | } | |
780 | break; | |
781 | case 68: | |
782 | BotMega.stopMovement = !BotMega.stopMovement; | |
783 | if (BotMega.stopMovement) { | |
784 | $("#isStopMove").html("<font color='#7FFF00'>On</font>"); | |
785 | } else { | |
786 | $("#isStopMove").html("<font color='red'>Off</font>"); | |
787 | } | |
788 | break; | |
789 | case 69: | |
790 | emitSplit(); | |
791 | break; | |
792 | case 82: | |
793 | emitMassEject(); | |
794 | break; | |
795 | case 77: | |
796 | BotMega.drawMinimap = !BotMega.drawMinimap; | |
797 | if (BotMega.drawMinimap) { | |
798 | $("#botcanvas").show(); | |
799 | } else { | |
800 | $("#botcanvas").hide(); | |
801 | } | |
802 | break; | |
803 | case 80: | |
804 | f$$0 = !f$$0; | |
805 | if (f$$0) { | |
806 | $("#collectPellets").html("<font color='#7FFF00'>On</font>"); | |
807 | } else { | |
808 | $("#collectPellets").html("<font color='red'>Off</font>"); | |
809 | } | |
810 | sendLocalBotsMessage({ | |
811 | name : "collectPellets", | |
812 | collectPellets : f$$0 | |
813 | }); | |
814 | if (BotMega.isAuthorized) { | |
815 | sendCommand({ | |
816 | name : "collectPellets", | |
817 | collectPellets : f$$0 | |
818 | }); | |
819 | } | |
820 | break; | |
821 | case 87: | |
822 | if (d) { | |
823 | return; | |
824 | } | |
825 | d = true; | |
826 | c = setInterval(function() { | |
827 | core.eject(); | |
828 | }, 50); | |
829 | } | |
830 | }); | |
831 | $(document).keyup(function(a) { | |
832 | switch(a.which) { | |
833 | case 87: | |
834 | d = false; | |
835 | clearInterval(c); | |
836 | break; | |
837 | case 84: | |
838 | var b = 0; | |
839 | var e = setInterval(function() { | |
840 | return b > 7 ? void clearInterval(e) : (b++, void core.split()); | |
841 | }, 50); | |
842 | break; | |
843 | case 81: | |
844 | var f = 0; | |
845 | var g = setInterval(function() { | |
846 | return f > 1 ? void clearInterval(g) : (f++, void core.split()); | |
847 | }, 50); | |
848 | } | |
849 | }); | |
850 | addBallToMinimap(true, "player_pointer", BotMega.playerName, BotMega.realPlayerX, BotMega.realPlayerY, "#00FF00", false); | |
851 | addBallToMinimap(true, "player_death", "Last Death", BotMega.realPlayerX, BotMega.realPlayerY, "#FF2400", false); | |
852 | addBallToMinimap(true, "player_spectate", "Spectate", BotMega.realPlayerX, BotMega.realPlayerY, "#0000FF", false); | |
853 | connectToBotMegaServer(); | |
854 | insertCore(); | |
855 | setInterval(function() { | |
856 | MC.BotMegaFreeCoins(); | |
857 | }, 5E3); | |
858 | setInterval(function() { | |
859 | drawMinimap(); | |
860 | }, 33); | |
861 | }, | |
862 | reloadCore : function() { | |
863 | console.log("Reloading Core."); | |
864 | insertCore(); | |
865 | }, | |
866 | onAgarioCoreLoaded : function() { | |
867 | window.skinHack = new skinHack(); | |
868 | console.log("Loading settings into agario core."); | |
869 | core.setSkins(!$("#noSkins").is(":checked")); | |
870 | core.setNames(!$("#noNames").is(":checked")); | |
871 | core.setColors(!$("#noColors").is(":checked")); | |
872 | core.setShowMass($("#showMass").is(":checked")); | |
873 | core.setDarkTheme($("#darkTheme").is(":checked")); | |
874 | } | |
875 | }; | |
876 | var tempLeaderBoard = ""; | |
877 | var tempLeaderBoardIndex = 1; | |
878 | CanvasRenderingContext2D.prototype._fillText = CanvasRenderingContext2D.prototype.fillText, CanvasRenderingContext2D.prototype.fillText = function() { | |
879 | this._fillText.apply(this, arguments); | |
880 | if ("Leaderboard" === arguments[0]) { | |
881 | if ("" != tempLeaderBoard) { | |
882 | BotMega.leaderboardData = tempLeaderBoard; | |
883 | $("#leaderboard").val(BotMega.leaderboardData); | |
884 | } | |
885 | tempLeaderBoardIndex = 1; | |
886 | tempLeaderBoard = ""; | |
887 | } else { | |
888 | if (":teams" != $("#gamemode").val() && (0 == arguments[0].indexOf(tempLeaderBoardIndex + ".") && tempLeaderBoardIndex < 11)) { | |
889 | tempLeaderBoard += arguments[0] + (tempLeaderBoardIndex <= 9 ? ", " : ""); | |
890 | tempLeaderBoardIndex++; | |
891 | } else { | |
892 | this._fillText.apply(this, arguments); | |
893 | } | |
894 | } | |
895 | }, CanvasRenderingContext2D.prototype._drawImage = CanvasRenderingContext2D.prototype.drawImage, CanvasRenderingContext2D.prototype.drawImage = function() { | |
896 | if (arguments[0].src) { | |
897 | if ("http://agar.io/img/background.png" == arguments[0].src) { | |
898 | arguments[0].src = ""; | |
899 | } | |
900 | } | |
901 | this._drawImage.apply(this, arguments); | |
902 | }; | |
903 | var miniMap = null; | |
904 | var minimapCtx = null; | |
905 | minimapBalls = {}, MinimapBall.prototype = { | |
906 | draw : function(a, b, c) { | |
907 | if (this.visible) { | |
908 | this.lastX = (29 * this.lastX + this.x) / 30; | |
909 | this.lastY = (29 * this.lastY + this.y) / 30; | |
910 | var d = ((this.isDefault ? this.x : this.lastX) + BotMega.mapOffset) * b; | |
911 | var e = ((this.isDefault ? this.y : this.lastY) + BotMega.mapOffset) * c; | |
912 | a.fillStyle = this.color; | |
913 | a.font = "10px Ubuntu"; | |
914 | a.textAlign = "center"; | |
915 | a.fillText("" == this.name ? "An unnamed cell" : this.name, d, e - 10); | |
916 | a.beginPath(); | |
917 | a.arc(d, e, 4.5, 0, 2 * Math.PI, false); | |
918 | a.closePath(); | |
919 | a.fillStyle = this.color; | |
920 | a.fill(); | |
921 | } | |
922 | } | |
923 | }; | |
924 | var b = new XMLHttpRequest; | |
925 | b.open("GET", "/mc/agario.js", true), b.onload = function() { | |
926 | var script = b.responseText; | |
927 | script = replaceNormalFile(script, 'if(js.keyCode==32&&i1!="nick"){js.preventDefault()}', ""); | |
928 | script = replaceNormalFile(script, "showAds:function(i){if", "showAds:function(i){},showFuck:function(i){if"); | |
929 | script = replaceNormalFile(script, "showPromoBadge:function(", "showPromoBadge:function(i){},fuckbacks: function("); | |
930 | script = replaceRegexFile(script, /(return\s\w+.tab.toUpperCase\(\)).indexOf\(\w+.toUpperCase\(\)\)!=-1/, "$1 != 'VETERAN'"); | |
931 | script = replaceRegexFile(script, /if\(\w+.shouldSkipConfigEntry\(\w+.productIdToQuantify.*visibility\)\)\{continue\}/, ""); | |
932 | script = replaceNormalFile(script, "if(this.getSkinsByCategory(i1.tabDescription).length>0", 'if (this.getSkinsByCategory(i1.tabDescription).length > 0 && (i1.tabDescription.toUpperCase() == "PREMIUM" || i1.tabDescription.toUpperCase() == "VETERAN" || i1.tabDescription.toUpperCase() == "OWNED")'); | |
933 | script = replaceRegexFile(script, /var\si2=window.document.createElement..script..+head.appendChild.i2../i, "BotMega.reloadCore();"); | |
934 | script = replaceRegexFile(script, /(showFreeCoins:function\(\)\{var.*showContainer\(\);if\(([a-zA-Z0-9]+[a-zA-Z0-9]+.user.userInfo==null).*false\);([a-zA-Z0-9]+[a-zA-Z0-9]+.triggerFreeCoins\(\)).*this.onShopClose\)\)\}},)/, "$1 BotMegaFreeCoins: function(){if($2){return;}$3;},"); | |
935 | script = replaceNormalFile(script, "onPlayerBanned:function(i)", "onPlayerBanned: function(i){},shitfacefuck:function(i)"); | |
936 | script = replaceNormalFile(script, "setPopupActiveState:function(i){", "setPopupActiveState:function(i){console.log('stopped annoying ad');return;"); | |
937 | eval(script); | |
938 | var e = new XMLHttpRequest; | |
939 | e.open("GET", "/", true); | |
940 | e.onload = function() { | |
941 | var a = e.responseText; | |
942 | a = replaceNormalFile(a, "UCC6hurPo_LxL7C0YFYgYnIw", "UC_8Z8vnGJz_9jiTZXIs6izQ"); | |
943 | a = replaceRegexFile(a, /<footer[\S\s]*\/footer>/i, ""); | |
944 | a = replaceNormalFile(a, '<script src="agario.core.js" async>\x3c/script>', "<div id='botcanvas' style='background:rgba(0,0,0,0.4); width: 200px; top: 5px; left: 9px; display: block; position: absolute; text-align: center; font-size: 15px; color: #ffffff; padding: 5px; font-family: Ubuntu;'> <font color='#7FFF00'>BotMe.ga</font><br>Bots: <a id='botCount'><font color='red'>0 / 5</font></a><br><font color='#FFFFFF'>A</font> - Move To Mouse: <a id='ismoveToMouse'><font color='#7FFF00'>On</font></a><br><font color='#FFFFFF'>P</font> - Collect Pellets: <a id='collectPellets'><font color='red'>Off</font></a><br><font color='#FFFFFF'>D</font> - Stop Movement: <a id='isStopMove'><font color='red'>Off</font></a></div>"); | |
945 | a = replaceNormalFile(a, "<body>", '<body onload="BotMega.loadCore()">'); | |
946 | a = replaceRegexFile(a, /<script type="text\/javascript" src="mc\/agario\.js.*"><\/script>/i, ""); | |
947 | a = replaceRegexFile(a, /<div id="adsBottom".*display:block;">/i, '<div id="adsBottom" style="display:none">'); | |
948 | a = replaceNormalFile(a, '<div class="diep-cross" style="', '<div class="diep-cross" style="display:none;'); | |
949 | a = replaceNormalFile(a, '<div id="promo-badge-container">', '<div id="promo-badge-container" style="display:none;">'); | |
950 | a = replaceNormalFile(a, '<span data-itr="page_instructions_w"></span><br/>', '<span data-itr="page_instructions_w"></span><br/><span>Press <b>Q</b> to double split</span><br><span>Hold <b>W</b> to rapid fire mass</span><br><span>Press <b>M</b> to hide/show the minimap</span><br><span>Press <b>E</b> to split bots</span><br><span>Press <b>R</b> to eject some bots mass</span><br><span>Press <b>P</b> to make bots collect pellets</span>'); | |
951 | a = replaceNormalFile(a, '<div id="tags-container">', '<div id="leaders" class="input-group" style="margin-top: 6px;"><span class="input-group-addon" style="width:75px"id="basic-addon1">BOARD</span><input id="leaderboard" type="text" value="" style="width:185px" readonly class="form-control"><button id="leaderboardcopy" class="btn btn-primary" style="float: right; width: 60px; border-radius: 0px 4px 4px 0px;" data-original-title="" title="">Copy</button></div><div class="input-group" style="margin-top: 6px;"><span class="input-group-addon" style="width:75px"id="basic-addon1">UUID</span><input id="uuid" type="text" value="' + | |
952 | client_uuid + '" style="width:185px" readonly class="form-control"><button id="uuidcopy" class="btn btn-primary" style="float: right; width: 60px; border-radius: 0px 4px 4px 0px;" data-original-title="" title="">Copy</button></div><div class="input-group" style="margin-top: 6px;"><span class="input-group-addon" style="width:75px" id="basic-addon1">NAMES</span><input id="botnames" class="form-control" style="width:245px" placeholder="Separate bot names using commas" autofocus=""></div><div id="tags-container">'); | |
953 | a = replaceNormalFile(a, "</body>", '<div style="display:block;position:absolute;z-index:100;pointer-events:none;right:9px;bottom:9px;"><canvas id="minimap"></div></body>'); | |
954 | document.open(); | |
955 | document.write(a); | |
956 | document.close(); | |
957 | }; | |
958 | e.send(); | |
959 | }, b.send(), setInterval(function() { | |
960 | BotMega.realPlayerX = BotMega.mapOffsetX + BotMega.playerX; | |
961 | BotMega.realPlayerY = BotMega.mapOffsetY + BotMega.playerY; | |
962 | moveBallOnMinimap("player_pointer", BotMega.realPlayerX, BotMega.realPlayerY); | |
963 | moveBallOnMinimap("player_spectate", BotMega.realPlayerX, BotMega.realPlayerY); | |
964 | }, 50); | |
965 | var last_transmited_game_server = null; | |
966 | var socket = null; | |
967 | setInterval(function() { | |
968 | if (!BotMega.isAuthorized) { | |
969 | emitPosition(); | |
970 | } | |
971 | }, 10), setInterval(function() { | |
972 | if (BotMega.isAuthorized) { | |
973 | emitPosition(); | |
974 | } | |
975 | emitLocalPosition(); | |
976 | transmit_current_server(false); | |
977 | }, 10); | |
978 | window.interval = setInterval(function() { | |
979 | if (MC.coreWasLoaded == true && $("#nick")[0]) { | |
980 | clearInterval(interval); | |
981 | $("#agarTwitter").remove(); | |
982 | $("h2").replaceWith("<h2>BotMega</h2>"); | |
983 | } | |
984 | }, 100); | |
985 | ||
986 | ||
987 | ||
988 | function skinHack() { | |
989 | this.currentSkin = ""; | |
990 | this.configUrlBase = window.EnvConfig.config_url + '/' + localStorage.getItem('last_config_id') + '/'; | |
991 | this.configUrl = this.configUrlBase + 'GameConfiguration.json'; | |
992 | this.skinObj = {}; | |
993 | this.rotateInterval = 1000; | |
994 | this.playerName = ''; | |
995 | this.canUseScript = false; | |
996 | this.downloadConfig(); | |
997 | } | |
998 | skinHack.prototype = { | |
999 | downloadConfig: function() { | |
1000 | var onDownload = this.onDownload.bind(this); | |
1001 | $.ajax({ | |
1002 | type: "GET", | |
1003 | url: this.configUrl, | |
1004 | success: function(data) { | |
1005 | onDownload(data); | |
1006 | }, | |
1007 | error: function(jqXHR, textStatus, errorThrown) {} | |
1008 | }); | |
1009 | }, | |
1010 | onDownload: function(data) { | |
1011 | this.handleSkinData(data); | |
1012 | this.injectHtml(); | |
1013 | this.overrideSetNick(); | |
1014 | this.initSkinRotation(); | |
1015 | this.updateSkin(); | |
1016 | }, | |
1017 | handleSkinData: function(data) { | |
1018 | var shopSkins = data.gameConfig['Shop - Skins']; | |
1019 | var equippableSkins = data.gameConfig['Gameplay - Equippable Skins']; | |
1020 | for (var i = 0; i < equippableSkins.length; i++) { | |
1021 | var skin = equippableSkins[i]; | |
1022 | this.skinObj[skin.productId] = { | |
1023 | image: skin.image, | |
1024 | color: skin.cellColor | |
1025 | }; | |
1026 | } | |
1027 | for (var i = 0; i < shopSkins.length; i++) { | |
1028 | var skin = shopSkins[i]; | |
1029 | this.skinObj[skin.productIdToQuantify].title = skin.title; | |
1030 | } | |
1031 | }, | |
1032 | injectHtml: function() { | |
1033 | $('#advertisement').hide(); | |
1034 | $('.agario-promo').remove(); | |
1035 | $('.diep-cross').remove(); | |
1036 | $('#agario-web-incentive').remove(); | |
1037 | //$('<select id="skinsList" class="form-control" onchange="window.skinHack.updateSkin()" required=""></select><input type="checkbox" id="rotateSkinCheckBox">Rotate Skins</input>').insertBefore('#locationUnknown'); | |
1038 | // NOT STEALING FROM RAZOR... 90% OF THIS IS FROM SINGA/A. INFINITY ALREADY... | |
1039 | //$('<div class="agario-panel agario-side-panel"><img id="skinPreview" class="circle bordered"src=""width="96"height="96"style="height: 96px; border: 3px solid rgb(0, 44, 108);margin: 0 auto;"><br><select id="skinsList"class="form-control"onchange="window.skinHack.updateSkin()"required=""></select><br><div id="skinRotator"style="margin: auto"><label>Skin Rotator: </label><div style="left: 13px" class="btn-group btn-toggle"><button class="btn btn-sm active btn-default">ON</button><button class="btn btn-sm active btn-primary">OFF</button></div></div></div>').insertAfter('.agario-party'); | |
1040 | ||
1041 | this.addSkinOption({ | |
1042 | image: '', | |
1043 | color: '0x00000000', | |
1044 | title: 'Default Skin' | |
1045 | }); | |
1046 | for (var idStr in this.skinObj) { | |
1047 | if (this.skinObj.hasOwnProperty(idStr) && this.skinObj[idStr].title) { | |
1048 | this.addSkinOption(this.skinObj[idStr]); | |
1049 | } | |
1050 | } | |
1051 | ||
1052 | $('.btn-toggle').click(function() { | |
1053 | $(this).find('.btn').toggleClass('active'); | |
1054 | ||
1055 | if ($(this).find('.btn-primary').size() > 0) { | |
1056 | $(this).find('.btn').toggleClass('btn-primary'); | |
1057 | } | |
1058 | if ($(this).find('.btn-info').size() > 0) { | |
1059 | $(this).find('.btn').toggleClass('btn-info'); | |
1060 | } | |
1061 | ||
1062 | $(this).find('.btn').toggleClass('btn-default'); | |
1063 | }); | |
1064 | this.preLoadSkins(); | |
1065 | $('#openfl-content').click(this.updateSkin.bind(this)); | |
1066 | }, | |
1067 | preLoadSkins: function() { | |
1068 | for (var key in this.skinObj) { | |
1069 | if (this.skinObj.hasOwnProperty(key)) { | |
1070 | (new Image()).src = this.configUrlBase + this.skinObj[key].image; | |
1071 | } | |
1072 | } | |
1073 | }, | |
1074 | addSkinOption: function(skin) { | |
1075 | skin.title = skin.title.split("product_name_skin_")[1]; | |
1076 | $('#skinsList').append('<option value="' + skin.image + ':' + skin.color + '">' + skin.title + '</option>'); | |
1077 | }, | |
1078 | overrideSetNick: function() { | |
1079 | window.MC._setNick = window.MC.setNick; | |
1080 | window.MC.setNick = function() { | |
1081 | var name = arguments[0]; | |
1082 | if(name === "") { | |
1083 | this.playerName = "BotMe.ga" | |
1084 | name = "BotMe.ga"; | |
1085 | console.log('Overriding'); | |
1086 | } else { | |
1087 | this.playerName = name; | |
1088 | } | |
1089 | window.MC._setNick(name); | |
1090 | ||
1091 | this.updateSkin(); | |
1092 | }.bind(this); | |
1093 | }, | |
1094 | checkSubscription: function() { | |
1095 | try { | |
1096 | if (localStorage.getItem('canUseScript')) { | |
1097 | this.canUseScript = JSON.parse(localStorage.getItem('canUseScript').toLowerCase()); | |
1098 | } else { | |
1099 | localStorage.setItem('canUseScript', 'false'); | |
1100 | return this.promptSubscription(); | |
1101 | } | |
1102 | if (!this.canUseScript) { | |
1103 | return this.promptSubscription(); | |
1104 | } | |
1105 | return this.canUseScript; | |
1106 | } catch (err) { | |
1107 | console.log(err); | |
1108 | } | |
1109 | }, | |
1110 | promptSubscription: function() { | |
1111 | var ask = window.confirm("You must subscribe to Dosk to Use The Script"); | |
1112 | if (ask) { | |
1113 | var win = window.open('https://www.youtube.com/channel/UCo8dhNSfZhKnhGx_awfMutw?sub_confirmation=1', '_blank'); | |
1114 | if (win) { | |
1115 | localStorage.setItem('canUseScript', 'true'); | |
1116 | this.canUseScript = true; | |
1117 | this.updateSkin(); | |
1118 | } else { | |
1119 | alert('Please allow popups and refresh the page first!'); | |
1120 | } | |
1121 | } | |
1122 | return this.canUseScript(); | |
1123 | }, | |
1124 | updateSkin: function() { | |
1125 | ||
1126 | var skinArg = $('#skinsList').val().split(':'); | |
1127 | var usingHackSkin = skinArg[0].length > 0; | |
1128 | var image = usingHackSkin ? this.configUrlBase + skinArg[0] : document.getElementsByClassName('circle bordered')[0].src; | |
1129 | var color = usingHackSkin ? | |
1130 | parseInt(skinArg[1].slice(0, skinArg[1].length - 2)) : | |
1131 | parseInt(this.rgbToHex(document.getElementsByClassName('circle bordered')[0].style.borderColor).slice(1, 7), 16); | |
1132 | var name = this.playerName; | |
1133 | window.core.registerSkin(name, null, image, image ? 2 : 0, image ? color : null); | |
1134 | $('#skinPreview').attr('src', image) | |
1135 | var arr = ['top', 'right', 'bottom', 'left']; | |
1136 | for (var i = 0; i < array.length; i++) { | |
1137 | $('#skinPreview').css('border-' + array[i] + '-color', '#' + color.toString(16)); | |
1138 | } | |
1139 | ||
1140 | }, | |
1141 | rgbToHex: function(color) { | |
1142 | if (color.substr(0, 1) === '#') { | |
1143 | return color; | |
1144 | } | |
1145 | var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color); | |
1146 | ||
1147 | var red = parseInt(digits[2]); | |
1148 | var green = parseInt(digits[3]); | |
1149 | var blue = parseInt(digits[4]); | |
1150 | ||
1151 | var rgb = blue | (green << 8) | (red << 16); | |
1152 | return digits[1] + '#' + rgb.toString(16); | |
1153 | }, | |
1154 | initSkinRotation: function() { | |
1155 | setInterval(function() { | |
1156 | if ($('.btn-toggle').find('.btn-primary').html() === "ON") { | |
1157 | $('#skinsList')[0].selectedIndex = ($('#skinsList')[0].selectedIndex + 1) % $('#skinsList')[0].length; | |
1158 | this.updateSkin(); | |
1159 | } | |
1160 | }.bind(this), this.rotateInterval); | |
1161 | } | |
1162 | }; |