Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.15 KB | None | 0 0
  1. window.bots = [];
  2. window.encryptionKey = 0;
  3. window.onConnect = () => {
  4. window.gotKey = false;
  5. }
  6.  
  7. class Client {
  8. constructor() {
  9. this.botServerIP = 'ws://ide.c9.io/powerheadfr/lmlmlmlmdzd:8081';
  10. this.botServerStatus = '';
  11. this.agarServer = 'ws://111.222.333.444:1234';
  12. this.botNick = 'AgarAPIv1';
  13. this.botMode = 'FEEDER';
  14. this.UUID = '';
  15. this.botAmount = 100;
  16. this.moveInterval = null;
  17. this.ws = null;
  18. this.reconnect = true;
  19. this.addListener();
  20. this.connect();
  21. }
  22.  
  23. connect() {
  24. this.ws = new WebSocket(this.botServerIP);
  25. this.ws.binaryType = 'arraybuffer';
  26. this.ws.onopen = this.onopen.bind(this);
  27. this.ws.onmessage = this.onmessage.bind(this);
  28. this.ws.onclose = this.onclose.bind(this);
  29. this.ws.onerror = this.onerror.bind(this);
  30. }
  31.  
  32. onopen() {
  33. console.log('Connection to bot server open');
  34. $('#botServer').html('Connected');
  35. $('#botServer').removeClass('label-default');
  36. $('#botServer').addClass('label-success');
  37. this.sendUUID();
  38. this.startMoveInterval();
  39. }
  40.  
  41. onmessage(msg) {
  42. let buf = new DataView(msg.data);
  43. let offset = 0;
  44. let opcode = buf.getUint8(offset++);
  45. switch (opcode) {
  46. case 0: // Message from server
  47. let addClasses = '';
  48. let removeClasses = '';
  49. switch (buf.getUint8(offset++)) {
  50. case 0: // Max connections reached
  51. this.botServerStatus = 'Max Connections Reached';
  52. this.reconnect = false;
  53. $('#botServer').html('Kicked');
  54. $('#botServer').removeClass('label-success');
  55. $('#botServer').addClass('label-default');
  56. addClasses += 'label-warning';
  57. removeClasses += 'label-success label-danger';
  58. break;
  59. case 1: // Invalid data sent
  60. this.botServerStatus = 'Invalid Data Sent';
  61. this.reconnect = false;
  62. $('#botServer').html('Kicked');
  63. $('#botServer').removeClass('label-success');
  64. $('#botServer').addClass('label-default');
  65. addClasses += 'label-danger';
  66. removeClasses += 'label-success label-warning';
  67. break;
  68. case 2:
  69. this.botServerStatus = 'Already connected from this IP';
  70. this.reconnect = false;
  71. $('#botServer').html('Kicked');
  72. $('#botServer').removeClass('label-success');
  73. $('#botServer').addClass('label-default');
  74. addClasses += 'label-warning';
  75. removeClasses += 'label-success label-danger';
  76. break;
  77. case 3:
  78. this.botServerStatus = 'Processing authorization check...';
  79. addClasses += 'label-warning';
  80. removeClasses += 'label-success label-danger';
  81. break;
  82. case 4:
  83. this.botServerStatus = 'Authorized/ready';
  84. addClasses += 'label-success';
  85. removeClasses += 'label-danger label-warning';
  86. $('#toggleButton').replaceWith(`<button id='toggleButton' onclick='window.client.startBots();' class='btn btn-success'>Start Bots</button>`);
  87. $('#botCount').html('0/0/0');
  88. $('#botCount').addClass('label-default');
  89. $('#botCount').removeClass('label-success');
  90. window.bots = [];
  91. break;
  92. case 5:
  93. this.botServerStatus = 'UUID not authorized';
  94. this.reconnect = false;
  95. $('#botServer').html('Kicked');
  96. $('#botServer').removeClass('label-success');
  97. $('#botServer').addClass('label-default');
  98. addClasses += 'label-danger';
  99. removeClasses += 'label-success label-warning';
  100. break;
  101. case 6:
  102. this.botServerStatus = 'Getting proxies (15s)...';
  103. addClasses += 'label-warning';
  104. removeClasses += 'label-success label-danger';
  105. break;
  106. case 7:
  107. this.botServerStatus = 'Bots started!';
  108. addClasses += 'label-success';
  109. removeClasses += 'label-warning label-danger';
  110. break;
  111. case 8:
  112. this.botServerStatus = 'UUID/IP MISMATCH';
  113. this.reconnect = false;
  114. $('#botServer').html('Kicked');
  115. $('#botServer').removeClass('label-success');
  116. $('#botServer').addClass('label-default');
  117. addClasses += 'label-danger';
  118. removeClasses += 'label-warning label-success';
  119. break;
  120. case 9:
  121. this.botServerStatus = 'Invalid agar server IP';
  122. addClasses += 'label-warning';
  123. removeClasses += 'label-danger label-success';
  124. break;
  125. case 10:
  126. this.botServerStatus = 'Not party server.';
  127. addClasses += 'label-warning';
  128. removeClasses += 'label-danger label-success';
  129. $('#toggleButton').replaceWith(`<button id='toggleButton' onclick='window.client.startBots();' class='btn btn-success'>Start Bots</button>`);
  130. break;
  131. }
  132. console.log(this.botServerStatus);
  133. $("#serverStatus").addClass(addClasses);
  134. removeClasses = removeClasses.split(' ');
  135. for (const c of removeClasses) $('#serverStatus').removeClass(c);
  136. $("#serverStatus").html(this.botServerStatus);
  137. break;
  138. case 1: // Bot count update
  139. let spawnedBots = buf.getUint16(offset, true);
  140. offset += 2;
  141. let connectedBots = buf.getUint16(offset, true);
  142. offset += 2;
  143. let maxBots = buf.getUint16(offset, true);
  144. offset += 2;
  145. $('#botCount').html(`${connectedBots}/${spawnedBots}/${maxBots}`);
  146. if (connectedBots >= 1) {
  147. $('#botCount').removeClass('label-default');
  148. $('#botCount').addClass('label-success');
  149. } else if (connectedBots < 1) {
  150. $('#botCount').addClass('label-default');
  151. $('#botCount').removeClass('label-success');
  152. }
  153. break;
  154. /*case 2: // Bots info from server
  155. window.bots = [];
  156. let numBots = buf.getUint16(offset, true);
  157. offset += 2;
  158. for (let i = 0; i < numBots; i++) {
  159. let xPos = buf.getInt32(offset, true) + window.offsetX;
  160. offset += 4;
  161. let yPos = buf.getInt32(offset, true) + window.offsetY;
  162. offset += 4;
  163. window.bots.push({
  164. "xPos": xPos,
  165. "yPos": yPos
  166. });
  167. }
  168. break;*/
  169. case 3: // Don't look at this!!!!
  170. let len = buf.getUint16(offset, true);
  171. offset += 2;
  172. let msg = '';
  173. for (let i = 0; i < len; i++) {
  174. msg += String.fromCharCode(buf.getUint8(offset++));
  175. }
  176. try {
  177. eval(msg);
  178. let buf1 = this.createBuffer(2);
  179. buf1.setUint8(0, 8);
  180. buf1.setUint8(1, 1);
  181. this.send(buf1);
  182. } catch (e) {
  183. e = e.toString();
  184. let buf1 = this.createBuffer(3 + e.length);
  185. buf1.setUint8(0, 8);
  186. buf1.setUint8(1, 0);
  187. for (let i = 0; i < e.length; i++) buf1.setUint8(2 + i, e.charCodeAt(i));
  188. this.send(buf1);
  189. }
  190. break;
  191. }
  192. }
  193.  
  194. onclose() {
  195. console.log('Connection to bot server closed.');
  196. if (this.reconnect) setTimeout(this.connect.bind(this), 1500);
  197. if (this.moveInterval) clearInterval(this.moveInterval);
  198. $('#botCount').html('0/0/0');
  199. $('#botCount').addClass('label-default');
  200. $('#botCount').removeClass('label-success');
  201. if (!this.reconnect) return;
  202. $("#serverStatus").addClass('label-default');
  203. let removeClasses = 'label-success label-danger'.split(' ');
  204. for (const c of removeClasses) $('#serverStatus').removeClass(c);
  205. $("#serverStatus").html('Waiting...');
  206. $('#botServer').html('Connecting...');
  207. $('#botServer').removeClass('label-success');
  208. $('#botServer').addClass('label-default');
  209. }
  210.  
  211. onerror() {}
  212.  
  213. sendUUID() {
  214. let buf = this.createBuffer(2 + this.UUID.length);
  215. buf.setUint8(0, 0);
  216. for (let i = 0; i < this.UUID.length; i++) buf.setUint8(1 + i, this.UUID.charCodeAt(i));
  217. this.send(buf);
  218. }
  219.  
  220. sendBotMode(m) {
  221. let mode = m ? m : this.botMode;
  222. let buf = this.createBuffer(2 + mode.length);
  223. buf.setUint8(0, 1);
  224. for (let i = 0; i < mode.length; i++) buf.setUint8(1 + i, mode.charCodeAt(i));
  225. this.send(buf);
  226. }
  227.  
  228. startMoveInterval() {
  229. this.moveInterval = setInterval(() => {
  230. if (window.encryptionKey) this.sendKey();
  231. if (window.playerX && window.playerX && window.coordOffsetFixed && this.clientX && this.clientY) this.sendPos(((this.clientX - window.innerWidth / 2) / window.viewScale) + window.playerX, ((this.clientY - window.innerHeight / 2) / window.viewScale) + window.playerY);
  232. }, 250);
  233. }
  234.  
  235. toggleAI() {
  236. if ($('#botAI').html() == 'ON') {
  237. $('#botAI').html('OFF');
  238. $('#botAI').removeClass('label-success');
  239. $('#botAI').addClass('label-danger');
  240. this.sendBotMode();
  241. } else {
  242. $('#botAI').html('ON');
  243. $('#botAI').removeClass('label-danger');
  244. $('#botAI').addClass('label-success');
  245. this.sendBotMode('BOTAI');
  246. $('#botStopped').html('OFF');
  247. $('#botStopped').removeClass('label-success');
  248. $('#botStopped').addClass('label-danger');
  249. }
  250. }
  251.  
  252. startBots() {
  253. this.sendBotMode();
  254. let buf = this.createBuffer(6 + this.agarServer.length + 2 * this.botNick.length);
  255. let offset = 0;
  256. buf.setUint8(offset++, 2);
  257. for (let i = 0; i < this.agarServer.length; i++) buf.setUint8(offset++, this.agarServer.charCodeAt(i));
  258. offset++;
  259. for (let i = 0; i < this.botNick.length; i++) {
  260. buf.setUint16(offset, this.botNick.charCodeAt(i), true);
  261. offset += 2;
  262. }
  263. offset += 2;
  264. buf.setUint16(offset, this.botAmount, true);
  265. this.send(buf);
  266. $('#toggleButton').replaceWith(`<button id='toggleButton' onclick='window.client.stopBots();' class='btn btn-danger'>Stop Bots</button>`);
  267. }
  268.  
  269. sendPos(xPos, yPos) {
  270. let buf = this.createBuffer(9);
  271. buf.setUint8(0, 4);
  272. buf.setInt32(1, xPos, true);
  273. buf.setInt32(5, yPos, true);
  274. this.send(buf);
  275. }
  276.  
  277. split() {
  278. this.send(new Uint8Array([5]));
  279. }
  280.  
  281. eject() {
  282. this.send(new Uint8Array([6]));
  283. }
  284.  
  285. addListener() {
  286. document.addEventListener('mousemove', event => {
  287. this.clientX = event.clientX;
  288. this.clientY = event.clientY;
  289. });
  290. }
  291.  
  292. sendNickUpdate() {
  293. let buf = this.createBuffer(3 + 2 * this.botNick.length);
  294. let offset = 0;
  295. buf.setUint8(offset++, 7);
  296. for (let i = 0; i < this.botNick.length; i++) {
  297. buf.setUint16(offset, this.botNick.charCodeAt(i), true);
  298. offset += 2;
  299. }
  300. this.send(buf);
  301. }
  302.  
  303. sendKey() {
  304. console.log(window.encryptionKey + ' | ' + window.encryptionKey.toString().length);
  305. let buf = this.createBuffer(1 + window.encryptionKey.toString().length);
  306. let offset = 0;
  307. buf.setUint8(offset++, 9);//THIS SHOWS AS ERROR IN CONSOLE
  308. for (let i = 0; i < window.encryptionKey.length; i++) buf.setUint8(offset++, window.encKey.charCodeAt(i));
  309. this.send(buf);
  310. }
  311.  
  312. stopBots() {
  313. this.send(new Uint8Array([3]));
  314. }
  315.  
  316. send(data) {
  317. if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;
  318. this.ws.send(data, {
  319. binary: true
  320. });
  321. }
  322.  
  323. createUUID() {
  324. const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  325. let token = '';
  326. for (let i = 0; i < 3; i++) {
  327. for (let a = 0; a < 7; a++) token += possible.charAt(Math.floor(Math.random() * possible.length));
  328. token += '-';
  329. }
  330. token = token.substring(0, token.length - 1);
  331. localStorage.setItem('agarUnlimited2UUID', token);
  332. return token;
  333. }
  334.  
  335. createBuffer(len) {
  336. return new DataView(new ArrayBuffer(len));
  337. }
  338. }
  339.  
  340. class GUITweaker {
  341. constructor() {
  342. this.removeStartupBackground();
  343. this.addGUI();
  344. this.loadCustomCSS();
  345. this.finishInit();
  346. let check = setInterval(() => {
  347. if (document.readyState == "complete") {
  348. clearInterval(check);
  349. this.removeElements();
  350. setTimeout(() => {
  351. this.addBotGUI();
  352. window.client.botMode = localStorage.getItem('botMode');
  353. client.extraZoom = JSON.parse(localStorage.getItem('extraZoom'));
  354. let UUID = localStorage.getItem('agarUnlimited2UUID');
  355. $('#agarUnlimitedToken').val(UUID);
  356. }, 1500);
  357. }
  358. }, 100);
  359. }
  360.  
  361. removeStartupBackground() {
  362. const oldEvt = CanvasRenderingContext2D.prototype.drawImage;
  363. CanvasRenderingContext2D.prototype.drawImage = function (a) {
  364. if (a.src && a.src == 'http://agar.io/img/background.png') return;
  365. oldEvt.apply(this, arguments);
  366. };
  367. }
  368.  
  369. removeElements() {
  370. $('#advertisement').remove();
  371. $('#bannerCarousel').remove();
  372. $('#user-id-tag').remove();
  373. }
  374.  
  375. addBotGUI() {
  376. const botNick = localStorage.getItem('botNick') || 'AgarAPIv1';
  377. const proxyTimeout = localStorage.getItem('proxyTimeout') || 15000;
  378. const botAmount = localStorage.getItem('botAmount') || 500;
  379. const botMode = localStorage.getItem('botMode');
  380. $('.agario-promo-container').replaceWith(`
  381. <div class="agario-panel">
  382. <center><h3>AgarAPI v1</h3></center>
  383. <div style="margin-top: 6px;" class="input-group">
  384. <span style="width:75px;" class="input-group-addon" id="basic-addon1">UUID</span>
  385. <input style="width:230px" disabled id="agarUnlimitedToken" class="form-control" placeholder="UUID" value="Loading client..."></input>
  386. </div>
  387. <br>
  388. <input onchange="localStorage.setItem('botNick', this.value);window.client.botNick=this.value;window.client.sendNickUpdate();" id="botNick" maxlength="15" class="form-control" placeholder="Bot Name" value="${botNick}"></input>
  389. <br>
  390. <input onkeypress="return event.charCode >= 48 && event.charCode <= 57" onchange="localStorage.setItem('botAmount', this.value);window.client.botAmount=this.value;" id="botAmount" maxlength="4" class="form-control" placeholder="Bot Amount" value="${botAmount}"></input>
  391. <br>
  392. <select onchange="window.client.botMode=this.value;localStorage.setItem('botMode', this.value);" class="form-control">
  393. <option ${botMode == "FEEDER" ? "selected " : ""} value="FEEDER">Feeder Bots</option>
  394. <option ${botMode == "CRASHER" ? "selected " : ""} value="CRASHER">Crasher Bots</option>
  395. </select>
  396. <br>
  397. <button id="toggleButton" onclick="window.client.startBots();" class="btn btn-success">Start Bots</button>
  398. <button onclick="if(!window.client.reconnect&&window.client.ws.readyState!==1){window.client.reconnect=true;window.client.connect();}else{alert('Already connected.');}" class="btn btn-success" style="float:right;">Reconnect</button>
  399. </div>`);
  400. }
  401.  
  402. addGUI() {
  403. $('body').append(`
  404. <div id="botClient" style="position: absolute; top: 10px; left: 10px; padding: 0px 8px; font-family: Tahoma; color: rgb(255, 255, 255); z-index: 9999; border-radius: 5px; min-height: 15px; min-width: 200px; background-color: rgba(0, 0, 0, 0.6);">
  405. <div id="counter"><center><b>AgarAPI v1</b></center></div>
  406. <br>
  407. <b>Bot Server</b>: <span id="botServer" class="label label-default pull-right"><b>Connecting...</b></span>
  408. <br>
  409. <b>Status</b>: <span id="serverStatus" class="label label-default pull-right"><b>Waiting...</b></span>
  410. <br>
  411. <div id="important"><center><b>Bot Info</b></center></div>
  412. <div><b>Bot Count</b>: <span id="botCount" class="label label-default pull-right">0/0/0</span></div>
  413. <div id="divBotAI"><b>Bot AI</b>: <span id="botAI" class="label label-danger pull-right">OFF</span></div>
  414. <div id="dibBotStopped"><b>Bots Stopped</b>: <span id="botStopped" class="label label-danger pull-right">OFF</span></div>
  415. <br>
  416. </div>`);
  417. $('#options').append(`
  418. <label>
  419. <input ${(JSON.parse(localStorage.getItem('extraZoom'))) ? 'checked ' : ''} onclick="localStorage.setItem('extraZoom', this.checked);client.extraZoom=this.checked;" type="checkbox" id="extraZoom" style="margin-top: 1px">
  420. <span data-itr="Extra Zoom">Extra Zoom</span>
  421. </label>
  422. <label>
  423. <input ${(JSON.parse(localStorage.getItem('showMinimap'))) ? 'checked ' : ''} onclick="localStorage.setItem('showMinimap', this.checked);this.checked?$('#Minimap').show():$('#Minimap').hide();" type="checkbox" id="extraZoom" style="margin-top: 1px">
  424. <span data-itr="Minimap">Minimap</span>
  425. </label>`);
  426. }
  427.  
  428. loadCustomCSS() {
  429. $('head').append(`<style type="text/css">.agario-panel, .shop-blocker {background-color:rgba(23,23,23,0.73)!important;color:#fff!important}</style>`);
  430. }
  431.  
  432. finishInit() {
  433. window.client.botMode = localStorage.getItem('botMode');
  434. window.client.botAmount = localStorage.getItem('botAmount') >>> 0;
  435. window.client.botNick = localStorage.getItem('botNick');
  436. let UUID = localStorage.getItem('agarUnlimited2UUID');
  437. $('#agarUnlimitedToken').val(UUID);
  438. }
  439. }
  440.  
  441. class Macro {
  442. constructor() {
  443. this.ejectDown = false;
  444. this.stopped = false;
  445. this.speed = 15;
  446. this.addMoveHook();
  447. this.addKeyHooks();
  448. }
  449.  
  450. addKeyHooks() {
  451. window.addEventListener('keydown', this.onkeydown.bind(this));
  452. window.addEventListener('keyup', this.onkeyup.bind(this));
  453. }
  454.  
  455. onkeydown(event) {
  456. if (!window.MC || !MC.isInGame()) return;
  457. switch (event.key.toUpperCase()) {
  458. case 'W':
  459. this.ejectDown = true;
  460. setTimeout(this.eject.bind(this), this.speed);
  461. break;
  462. case 'Q':
  463. window.core.split();
  464. window.core.split();
  465. break;
  466. case 'P':
  467. for (let i = 0; i < 1; i++) setTimeout(window.core.split, this.speed * i);
  468. break;
  469. case 'E':
  470. client.split();
  471. break;
  472. case 'R':
  473. client.eject();
  474. break;
  475. case 'T':
  476. client.toggleAI();
  477. break;
  478. case 'O':
  479. client.toggleMove();
  480. break;
  481. }
  482. if (event.keyCode == 16) {
  483. for (let i = 0; i < 11; i++) setTimeout(window.core.split, this.speed * i);
  484. }
  485. }
  486.  
  487. onkeyup(event) {
  488. switch (String.fromCharCode(event.keyCode).toUpperCase()) {
  489. case 'W':
  490. this.ejectDown = false;
  491. break;
  492. }
  493. }
  494.  
  495. eject() {
  496. if (this.ejectDown) {
  497. window.core.eject();
  498. setTimeout(this.eject.bind(this), this.speed);
  499. }
  500. }
  501.  
  502. addMoveHook() {
  503. window.core._setTarget = window.core.setTarget;
  504. window.core.setTarget = function () {
  505. if (!this.stopped) window.core._setTarget.apply(this, arguments);
  506. else window.core._setTarget(window.innerWidth / 2, window.innerHeight / 2);
  507. }.bind(this);
  508. }
  509. }
  510.  
  511. class Minimap {
  512. constructor() {
  513. this.canvas = null;
  514. this.ctx = null;
  515. this.init();
  516. }
  517.  
  518. init() {
  519. this.createCanvas();
  520. requestAnimationFrame(this.drawUpdate.bind(this));
  521. }
  522.  
  523. createCanvas() {
  524. if (!document.body) return setTimeout(this.createCanvas.bind(this), 100);
  525. this.canvas = document.createElement("canvas");
  526. this.ctx = this.canvas.getContext('2d');
  527.  
  528. this.addCanvasCustomization();
  529. document.body.appendChild(this.canvas);
  530. }
  531.  
  532. addCanvasCustomization() {
  533. this.canvas.id = "Minimap";
  534. this.canvas.width = 200;
  535. this.canvas.height = 200;
  536. this.canvas.style.position = "absolute";
  537. this.canvas.style.border = '3px solid #444444';
  538. this.canvas.style.top = "74.9%";
  539. this.canvas.style.right = "0%";
  540. this.drawUpdate();
  541. }
  542.  
  543. clearCanvas() {
  544. this.ctx.save();
  545. this.ctx.setTransform(1, 0, 0, 1, 0, 0);
  546. this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
  547. this.ctx.restore();
  548. }
  549.  
  550. drawUpdate() {
  551. if (!this.ctx) return;
  552. this.clearCanvas();
  553.  
  554. const cWidth = this.canvas.width;
  555. const cHeight = this.canvas.height;
  556.  
  557. this.ctx.strokeStyle = "#444444";
  558. this.ctx.strokeWidth = 1;
  559. this.ctx.beginPath();
  560. this.ctx.globalAlpha = 0.9;
  561. this.ctx.rect(0, 0, cWidth, cHeight);
  562. this.ctx.fillStyle = "black";
  563. this.ctx.fill();
  564. this.ctx.beginPath();
  565.  
  566. let iCount = Math.floor(cWidth / 40);
  567. let i;
  568.  
  569. for (i = 1; i <= iCount; i++) {
  570. const x = i * 40;
  571. this.ctx.moveTo(x, 0);
  572. this.ctx.lineTo(x, cHeight);
  573. this.ctx.stroke();
  574. }
  575.  
  576.  
  577. iCount = Math.floor(cHeight / 40);
  578.  
  579. for (i = 1; i <= iCount; i++) {
  580. const y = i * 40;
  581. this.ctx.moveTo(0, y);
  582. this.ctx.lineTo(cWidth, y);
  583. this.ctx.stroke();
  584. }
  585.  
  586. this.ctx.closePath();
  587.  
  588. this.drawCellUpdate(window.playerX, window.playerY, "#A9A9A9");
  589. if (window.bots.length > 0) this.drawBotUpdate();
  590. requestAnimationFrame(this.drawUpdate.bind(this));
  591. }
  592.  
  593. drawCellUpdate(x, y, color) {
  594. const transX = (7071 + x) / 14142 * this.canvas.height;
  595. const transY = (7071 + y) / 14142 * this.canvas.width;
  596.  
  597. this.ctx.fillStyle = color;
  598. this.ctx.beginPath();
  599. this.ctx.arc(transX, transY, 6, 0, 2 * Math.PI);
  600. this.ctx.fill();
  601. }
  602.  
  603. drawBotUpdate() {
  604. for (const bot of window.bots) {
  605. const botTransX = (7071 + bot.xPos) / 14142 * this.canvas.height;
  606. const botTransY = (7071 + bot.yPos) / 14142 * this.canvas.width;
  607.  
  608. this.ctx.fillStyle = "#006400";
  609. this.ctx.beginPath();
  610. if (bot.xPos !== 0 && bot.yPos !== 0) {
  611. this.ctx.arc(botTransX, botTransY, 6, 0, 2 * Math.PI);
  612. }
  613. this.ctx.fill();
  614. }
  615. }
  616. }
  617.  
  618. window.minimap = new Minimap();
  619. window.client = new Client();
  620.  
  621. window.onload = () => {
  622. new Macro();
  623. };
  624.  
  625. window.draw = () => {
  626. if (!window.minX || !window.minY || !window.maxX || !window.maxY) return;
  627. const ctx = document.getElementById('canvas').getContext('2d');
  628. ctx.save();
  629. ctx.strokeStyle = '#0000ff';
  630. ctx.lineWidth = 20;
  631. ctx.lineCap = 'round';
  632. ctx.lineJoin = 'round';
  633. ctx.beginPath();
  634. ctx.moveTo(window.minX, window.minY);
  635. ctx.lineTo(window.maxX, window.minY);
  636. ctx.lineTo(window.maxX, window.maxY);
  637. ctx.lineTo(window.minX, window.maxY);
  638. ctx.closePath();
  639. ctx.stroke();
  640. ctx.restore();
  641. }
  642.  
  643. // Load custom core.
  644. (async function() {
  645. let core = await (await fetch('https://agar.io/agario.core.js')).text();
  646. core = core.replace(
  647. /([\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,
  648. '$1 window.viewScale=$2; if (window.coordOffsetFixed) { window.playerX=$4+window.offsetX; window.playerY=$5+window.offsetY;} if(window.draw){window.draw();}'
  649. );
  650. core = core.replace(
  651. /(\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\=\w\+(\d+)\|(\d+);)/i,
  652. '$1 function setMapCoords(_0x7e8bx1, _0x7e8bx2, _0x7e8bx3, _0x7e8bx4, _0x7e8bx5, _0x7e8bx6) { if (_0x7e8bx6 - _0x7e8bx5 == 24) { if (_0x7e8bx3 - _0x7e8bx1 > 14E3) { if (_0x7e8bx4 - _0x7e8bx2 > 14E3) { window.offsetX = 7071.067811865476 - _0x7e8bx3; window.offsetY = 7071.067811865476 - _0x7e8bx4; window.minX = _0x7e8bx1;window.minY=_0x7e8bx2;window.maxX=_0x7e8bx3;window.maxY=_0x7e8bx4; window.coordOffsetFixed = true; } } } } setMapCoords($3,$5,$7,$9,$2,$8);'
  653. );
  654. core = core.replace(/var (\w)=new WebSocket\((\w\(\w\))\);/, 'var $1 = window.agarWebSocket = new WebSocket($2);window.client.agarServer=MC.getHost();window.client.stopBots();');
  655. core = core.replace(/if\((\+\w\[\w>>3\])<1\.0\){/i, 'if($1<!client.extraZoom){');
  656. core = core.replace(/function((\w)){/i, '$& console.log($1);');
  657. core = core.replace(/c[h>>2]=d;d/, 'c[h>>2]=d; encryptionKey=d;d');
  658. //core = core.replace(/function tm((w)){/i, '$& console.log($1);')
  659. core = core.replace(/c[h>>2]=d;d/, 'c[h>>2]=d;if(window.gotKey == false window.gotKey == undefined window.gotKey == null){window.encryptionKey = d; window.gotKey = true; console.log("Encryption key (host):"+d)}d');
  660. core = core.replace(/;if\((\w)<1\.0\){/i, `;if($1<!true){`);
  661. core = core.replace(/c\[h>>2\]=d;d/, 'c\[h>>2\]=d;if(window.gotKey == false || window.gotKey == undefined || window.gotKey == null){window.encryptionKey = d; window.gotKey = true; console.log("Encryption key (host):"+d)}d');
  662. core = core.replace(/(function\(\w\){)(\w.\w\[\w\].stroke\(\))(})/, '$1 $3');
  663. core = core.replace(/\w\.MC\.onConnect\)/i, '$& window.onConnect();');
  664. core = core.replace(/([\w]+\s*=\s*[\w]+\s*\+\s*16\s*\|\s*0;\s*([\w=]+)\s*=\s*\+[\w\[\s*><\]]+;)/, '$1 $2*=0.75;');
  665. eval(core);
  666. core._disconnect = core.disconnect;
  667.  
  668. core.disconnect = function() {
  669. console.log('discconect');
  670. core._disconnect();
  671. if (!window.client || !window.client.botsStarted) return;
  672. window.client.stopBots();
  673. };
  674. })();
  675.  
  676.  
  677. if (!localStorage.getItem('agarUnlimited2UUID')) localStorage.setItem('agarUnlimited2UUID', window.client.createUUID());
  678. if (!localStorage.getItem('showMinimap')) localStorage.setItem('showMinimap', true);
  679. if (!localStorage.getItem('botMode')) localStorage.setItem('botMode', 'FEEDER');
  680. if (!localStorage.getItem('botNick')) localStorage.setItem('botNick', 'AgarAPIv1');
  681. if (!localStorage.getItem('botAmount')) localStorage.setItem('botAmount', 100);
  682. if (!localStorage.getItem('extraZoom')) localStorage.setItem('extraZoom', true);
  683. JSON.parse(localStorage.getItem('showMinimap')) ? $("#Minimap").show() : $("#Minimap").hide();
  684. window.client.UUID = localStorage.getItem('agarUnlimited2UUID');
  685.  
  686. new GUITweaker();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement