Advertisement
hossem147

Untitled

May 4th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.98 KB | None | 0 0
  1. window.onload = function() {
  2. var ctx = document.getElementById("canvas").getContext("2d");
  3. window.agar.simpleCellDraw = false;
  4. //CSS Override, removing this will make the extension unuseable.
  5. $("h2").replaceWith('<h2>ⓡⓞⓩⓘⓑⓞⓣⓢ.ⓣⓚ ⓥ③</h2>'); //TITLE <----
  6. $(".agario-panel").css({'background-color': '#60FF5A'}); //MAIN PANEL COLOR <--
  7. $(".agario-panel").css({'color': '#000000'});
  8. $("#user-id-tag, #version-tag").css({'color': '#FF0000'});
  9. $("#user-id-tag, #version-tag").css({'height': '0px'});
  10. $("#user-id-tag, #version-tag").css({'width': '0px'});
  11. $(".text-muted").css({'color': '#F00000'});
  12. $(".text-muted").css({'height': '0px'});
  13. $(".text-muted").css({'width': '0px'});
  14. $(".form-control").css({'background-color': '#74FF74'});
  15. $(".form-control").css({'color': 'black'});
  16. //zoom
  17. window.agar.minScale = -30;
  18.  
  19.  
  20. //draws grid, true = yes, and false = no
  21.  
  22.  
  23. window.agar.drawGrid = false;
  24. //sets dark theme to true on extension load
  25. setDarkTheme(true);
  26. //sets show mass to true on extension load
  27. setShowMass(true);
  28.  
  29.  
  30. //You can just delete the return 50 if you dont like the size
  31. window.agar.hooks.cellMassTextScale = function(cell, old_scale) {
  32. return 10; //number here
  33. };
  34.  
  35. //Boat Is a Fudging hoe xD
  36. setTimeout(function() {
  37. var f = -7071;
  38. var g = -7071;
  39. var h = 7071;
  40. var j = 7071;
  41. var k = {
  42. minx: 0,
  43. miny: 0,
  44. maxx: 0,
  45. maxy: 0
  46. };
  47.  
  48. function isMe(a) {
  49. for (var i = 0; i < window.agar.myCells.length; i++) {
  50. if (window.agar.myCells[i] == a.id) {
  51. return true;
  52. }
  53. }
  54. return false;
  55. }
  56.  
  57. function getCell() {
  58. var a = [];
  59. for (var b in window.agar.allCells) {
  60. var c = window.agar.allCells[b];
  61. if (isMe(c)) {
  62. a.push(c);
  63. }
  64. }
  65. return a[0];
  66. }
  67. var r = 0;
  68.  
  69. function toggleMovement() {
  70. m = !m;
  71. switch (m) {
  72. case true:
  73. p.onmousemove = o[0];
  74. o[0] = null;
  75. p.onmousedown = o[1];
  76. o[1] = null;
  77. break;
  78. case false:
  79. p.onmousemove({
  80. clientX: innerWidth / 2,
  81. clientY: innerHeight / 2
  82. });
  83. o[0] = p.onmousemove;
  84. p.onmousemove = null;
  85. o[1] = p.onmousedown;
  86. p.onmousedown = null;
  87. break;
  88. }
  89. }
  90. interval_id = setInterval(function() {
  91. emitPosition();
  92. }, 1);
  93. interval_id2 = setInterval(function() {
  94. transmit_game_server_if_changed();
  95. }, 1);
  96. document.addEventListener('keydown', function(e) {
  97. var a = e.keyCode || e.which;
  98. switch (a) {
  99. case 68:
  100. toggleMovement();
  101. break;
  102. }
  103. });
  104.  
  105. function transmit_game_server_if_changed() {
  106. if (last_transmited_game_server != window.agar.ws) {
  107. transmit_game_server();
  108. }
  109. }
  110.  
  111. function transmit_game_server() {
  112. last_transmited_game_server = window.agar.ws;
  113. l.emit("cmd", {
  114. "name": "connect_server",
  115. "ip": last_transmited_game_server
  116. });
  117. }
  118. var s = 0;
  119. var t = 0;
  120. $("body").mousemove(function(a) {
  121. s = a.clientX;
  122. t = a.clientY;
  123. });
  124. window.agar.minScale = -30;
  125. }, 200);
  126. };
  127. (function() {var css = [
  128. "/* Agar.io Mod by dotbrett [http://j.mp/dotbrett] */",
  129. " ",
  130. "#mainPanel > center, #adsBottom, .agario-promo, .agario-panel > #s300x250 {",
  131. " display:none!important;",
  132. "}"
  133. ].join("\n");
  134. if (typeof GM_addStyle != "undefined") {
  135. GM_addStyle(css);
  136. } else if (typeof PRO_addStyle != "undefined") {
  137. PRO_addStyle(css);
  138. } else if (typeof addStyle != "undefined") {
  139. addStyle(css);
  140. } else {
  141. var node = document.createElement("style");
  142. node.type = "text/css";
  143. node.appendChild(document.createTextNode(css));
  144. var heads = document.getElementsByTagName("head");
  145. if (heads.length > 0) {
  146. heads[0].appendChild(node);
  147. } else {
  148. // no head yet, stick it whereever
  149. document.documentElement.appendChild(node);
  150. }
  151. }
  152. })();
  153.  
  154. setTimeout(function() {
  155. eval(function(m,c,h){function z(i){return(i< 62?'':z(parseInt(i/62)))+((i=i%62)>35?String.fromCharCode(i+29):i.toString(36))}for(var i=0;i< m.length;i++)h[z(i)]=m[i];function d(w){return h[w]?h[w]:w;};return c.replace(/\b\w+\b/g,d);}('|var|real_minx|7071|real_miny|real_maxx|real_maxy|lastsent|minx|miny|maxx|maxy|function|valcompare|return|01|window|agar|hooks|dimensionsUpdated|if|else|14142|135623730952|offset_x|offset_y'.split('|'),'1 2=-3;1 4=-3;1 5=3;1 6=3;1 7={8:0,9:0,a:0,b:0};c d(A,B){e 0.f>A-B&&-0.f<A-B}g.h.i.j=c(A,B,C,D){k(d(C-A,D-B)){2=A;4=B;5=C;6=D}l {k(d(A,7.8)){k(0.f<C-7.a||-0.f>C-7.a){2=A;5=A+m.n}}k(0.f<A-7.8||-0.f>A-7.8){k(d(C,7.a)){5=C;2=C-m.n}}k(0.f<B-7.9||-0.f>B-7.9){k(d(D,7.b)){6=D;4=D-m.n}}k(d(B,7.9)){k(0.f<D-7.b||-0.f>D-7.b){4=B;6=B+m.n}}k(A<2){2=A;5=A+m.n}k(C>5){5=C;2=C-m.n}k(B<4){4=B;6=B+m.n}k(D>6){6=D;4=D-m.n}7.8=A;7.9=B;7.b=D;7.a=C}o=2||-3;p=4||-3};',{}))
  156. var socket = io.connect('ws://' + botServerIP);
  157. var canMove = true;
  158. var movetoMouse = true;
  159. var moveEvent = new Array(2);
  160. var canvas = document.getElementById("canvas");
  161. last_transmited_game_server = null;
  162. socket.on('force-login', function(data) {
  163. socket.emit("login", {
  164. "uuid": client_uuid,
  165. "type": "client" }); transmit_game_server() });
  166. var canvas = document.getElementById("canvas");
  167. socket.on('spawn-count', function (data) {
  168. document.getElementById('minionCount').innerHTML = '<div style="position: absolute; top: 260px; left: 117px;"><span id="botlayer-bots" class="label label-info pull-right">' + data + '</span></a></div>';
  169. counter = data
  170. });
  171. var client_uuid = localStorage.getItem('client_uuid');
  172. if(client_uuid == null){
  173. console.log("generating a uuid for this user");
  174. client_uuid = Math.floor((5 + Math.random()) * 0x100110 * Math.random() * 152.22158531 / Math.random() * 15.1 / 553.1 - 515/2*51 / 999999*9999999 -99).toString(16).substring(3);
  175. localStorage.setItem('client_uuid', client_uuid);
  176. //console.log(client_uuid);
  177. }
  178.  
  179.  
  180. //console.log(client_uuid);
  181. socket.emit("login", client_uuid);;
  182.  
  183. var iDiv = document.createElement('div');
  184. iDiv.id = 'block';
  185. document.getElementsByTagName('body')[0].appendChild(iDiv);
  186. iDiv.innerHTML = '<div style="position: absolute; top: 10px; left: 10px; padding: 0px 8px; font-family: Helvetica; color: rgb(240,244,242); z-index: 9999; border-radius: 9px; min-width: 200px; background-color: rgba(0, 0, 0, 0.2);"><br><center><div><span style="color:#ff0000;">R</span><span style="color:#ff4000;">O</span><span style="color:#ff7f00;">Z</span><span style="color:#ffbf00;">I</span><span style="color:#ffff00;">B</span><span style="color:#80ff00;">O</span><span style="color:#00ff00;">T</span><span style="color:#00ff80;">S</span><span style="color:#00ffff;">.</span><span style="color:#0080ff;">T</span><span style="color:#0000ff;">K</span></div><span class="label label-success pull-right"></span></center><hr> Bot Split <span class="label label-info pull-right">E</span> <br>Bot Eject Mass <span class="label label-info pull-right">R</span><br>Bots 16 Split <span class="label label-info pull-right">Z</span> <br> User 16 Split <span class="label label-info pull-right">Shift</span><hr> User Stop(D): <a id="move"><span class="label label-danger pull-right">OFF</span></a> <br>Mouse Control(A):<a id = "follow"><span class="label label-danger pull-right">OFF</span></a> <br>Bot Mode(P):<a id = "changeMode"><span class="label label-danger pull-right">Collect mass</span></a><hr> <br><div style="position: absolute; top: 260px;">Bots Online :</div> <a id="minionCount"><div style="position: absolute; top: 260px; left: 117px;><span id="botlayer-bots" class="label label-warning pull-right"> Waiting Status</span></div></a><br><div id="tLeft">Time Left : <span class="label label-none pull-right"</span>Unlimited</div></b><br><div style="position: absolute; top: 294px;">Your ID : </div><div style="position: absolute; top: 296px; left: 95px;><span id="botlayer-bots" class="label label-info pull-right">' + client_uuid + '</span></div>';
  187. var timer = null;
  188. var botsUsed = false;
  189. socket.on('spawn-count', function (data) {
  190. if(data.count != null){
  191. document.getElementById('counter').innerHTML = '<b>Online Bots <span class="label label-success pull-right">' + data.count + '</span>';
  192. document.getElementById('bName').innerHTML = '<div id="bName">Bots Name <span class="label pull-right">' + data.nick + '</span></div>';
  193. var t = data.timer;
  194. var seconds = Math.floor( (t/1000) % 60 );
  195. var minutes = Math.floor( (t/1000/60) % 60 );
  196. var hours = Math.floor( (t/(1000*60*60)) % 24 );
  197. var days = Math.floor( t/(1000*60*60*24) );
  198. if(days){
  199. document.getElementById('tLeft').innerHTML = '<div id="tLeft">Time Left <span class="label label-default pull-right">' + days.toFixed() + ' day ' + hours.toFixed() + 'hr</span></div>';
  200. }else
  201. if(hours){
  202. document.getElementById('tLeft').innerHTML = '<div id="tLeft">Time Left <span class="label label-default pull-right">' + hours.toFixed() + ' hr ' + minutes.toFixed() + ' min</span></div>';
  203. }else{
  204. document.getElementById('tLeft').innerHTML = '<div id="tLeft">Time Left <span class="label label-default pull-right">' + minutes.toFixed() + ' min ' + seconds.toFixed() + ' seconds</span></div>';
  205. }
  206. return {
  207. 'total': t,
  208. 'days': days,
  209. 'hours': hours,
  210. 'minutes': minutes,
  211. 'seconds': seconds
  212. };
  213. }else{
  214. document.getElementById('counter').innerHTML = '<div id="counter"><center><b>Your Bots Expired!</b></center></div>';
  215. document.getElementById('bName').innerHTML = '<b><div id="bName">Bots Name <span class="label pull-right">-</span></div>';
  216. document.getElementById('tLeft').innerHTML = '<div>Buy More <a target="_blank" href="http://www.bestbots.co.uk/#" class="btn label label-success pull-right">Click!</a></div>';
  217. }
  218. });
  219.  
  220. function isMe(cell) {
  221. for (var i = 0; i < window.agar.myCells.length; i++) {
  222. if (window.agar.myCells[i] == cell.id) {
  223. return true
  224. }
  225. }
  226. return false
  227. }
  228.  
  229. function getCell() {
  230. var me = [];
  231. for (var key in window.agar.allCells) {
  232. var cell = window.agar.allCells[key];
  233. if (isMe(cell)) {
  234. me.push(cell)
  235. }
  236. }
  237. return me[0]
  238. }
  239. var skin_var = 0;
  240.  
  241. function emitPosition() {
  242. for (i = 0; i < agar.myCells.length; i++) {}
  243. x = (mouseX - window.innerWidth / 2) / window.agar.drawScale + window.agar.rawViewport.x;
  244. y = (mouseY - window.innerHeight / 2) / window.agar.drawScale + window.agar.rawViewport.y;
  245. if (!movetoMouse) {
  246. x = getCell().x;
  247. y = getCell().y;
  248. }
  249. socket.emit("pos", {
  250. "x": x - (real_minx + 7071),
  251. "y": y - (real_miny + 7071),
  252. "dimensions": [-7071, -7071, 7071, 7071],
  253. "suicide_targets": [-7071, -7071, 7071, 7071],
  254. });
  255. }
  256.  
  257.  
  258. function emitSplit(){
  259. socket.emit("cmd", {"name":"split"} );
  260. }
  261. function StopBots(){
  262. socket.emit("Stop")
  263. }
  264. function collectMass(){
  265. socket.emit("collectMass")
  266. }
  267. function stopcollectMass(){
  268. socket.emit("stopcollectMass")
  269. }
  270.  
  271. function emitMassEject() {
  272. socket.emit("cmd", {
  273. "name": "eject"
  274. })
  275. }
  276.  
  277. function toggleMovement() {
  278. canMove = !canMove;
  279. switch (canMove) {
  280. case true:
  281. canvas.onmousemove = moveEvent[0];
  282. moveEvent[0] = null;
  283. canvas.onmousedown = moveEvent[1];
  284. moveEvent[1] = null;
  285. break;
  286. case false:
  287. canvas.onmousemove({
  288. clientX: innerWidth / 2,
  289. clientY: innerHeight / 2
  290. });
  291. moveEvent[0] = canvas.onmousemove;
  292. canvas.onmousemove = null;
  293. moveEvent[1] = canvas.onmousedown;
  294. canvas.onmousedown = null;
  295. break;
  296. }
  297. }
  298. interval_id = setInterval(function() {
  299. emitPosition();
  300. }, 100);
  301. interval_id2 = setInterval(function() {
  302. transmit_game_server_if_changed();
  303. }, 5000);
  304. var check = true;
  305. var check2 = true;
  306.  
  307. document.addEventListener('keydown', function(e) {
  308. var key = e.keyCode || e.which;
  309. switch (key) {
  310. case 65:
  311. movetoMouse = !movetoMouse;
  312. if(check2 == true)
  313. {
  314. document.getElementById('follow').innerHTML = '<span class="label label-danger pull-right">OFF</span>';
  315. check2 = false;
  316. }
  317. else
  318. {
  319. document.getElementById('follow').innerHTML = '<span class="label label-success pull-right">ON</span>';
  320. check2 = true;
  321. }
  322. break;
  323. case 68:
  324. toggleMovement();
  325. if(check == true)
  326. {
  327. document.getElementById('move').innerHTML = '<span class="label label-success pull-right">ON</span>';
  328. check = false;
  329. }
  330. else
  331. {
  332. document.getElementById('move').innerHTML = '<span class="label label-danger pull-right">OFF</span>';
  333. check = true;
  334. }
  335. break;
  336. case 69:
  337. emitSplit();
  338. break;
  339. case 87: // mass W
  340. if(switchy != undefined && switchy){
  341. return;
  342. }
  343. switchy = true;
  344. interval = setInterval(function() {
  345. $("body").trigger($.Event("keydown", { keyCode: 87}));
  346. $("body").trigger($.Event("keyup", { keyCode: 87}));
  347. }, 1);//increase this number to make it fire them out slower
  348. break;
  349. case 82:
  350. emitMassEject();
  351. break;
  352. case 80:
  353. changeMode();
  354. if(check == true)
  355. {
  356. document.getElementById('changeMode').innerHTML = '<span class="label label-success pull-right">Collect Mass</span>';
  357. check = false;
  358. }
  359. else
  360. {
  361. document.getElementById('changeMode').innerHTML = '<span class="label label-danger pull-right">Come To Me</span>';
  362. check = true;
  363. }
  364. break;
  365. case 83:
  366. StopBots();
  367. break;
  368. case 90:
  369. emitSplit();
  370. emitSplit();
  371. emitSplit();
  372. emitSplit();
  373. break;
  374. case 16:
  375. var amount = 6;
  376. var duration = 100; //ms
  377. for (var i = 0; i < amount-1; i++) {
  378. setTimeout(function() {
  379. $("body").trigger($.Event("keydown", { keyCode: 32}));
  380. $("body").trigger($.Event("keyup", { keyCode: 32}));
  381. }, i * duration);
  382. }
  383. break;
  384. }
  385. });
  386.  
  387. function transmit_game_server_if_changed() {
  388. if (last_transmited_game_server != window.agar.ws) {
  389. last_transmited_game_server = window.agar.ws;
  390. socket.emit("cmd", {
  391. "name": "reconnect_server",
  392. "ip": last_transmited_game_server
  393. })
  394. }
  395. }
  396. document.addEventListener('keyup', function(e) {
  397. var key = e.keyCode || e.which;
  398. switch (key) {
  399.  
  400. case 87: // mass W
  401. switchy = false;
  402. clearInterval(interval);
  403. break;
  404. }
  405. });
  406. function changeMode() {
  407. socket.emit("cmd", {
  408. "name": "change_mode",
  409. })
  410. }
  411.  
  412. function transmit_game_server_if_changed() {
  413. if (last_transmited_game_server != window.agar.ws) {
  414. last_transmited_game_server = window.agar.ws;
  415. socket.emit("cmd", {
  416. "name": "reconnect_server",
  417. "ip": last_transmited_game_server
  418. });
  419. }
  420. }
  421.  
  422. function transmit_game_server() {
  423. last_transmited_game_server = window.agar.ws;
  424. socket.emit("cmd", {
  425. "name": "connect_server",
  426. "ip": last_transmited_game_server
  427. })
  428. }
  429. var mouseX = 0;
  430. var mouseY = 0;
  431. $("body").mousemove(function(event) {
  432. mouseX = event.clientX;
  433. mouseY = event.clientY
  434. });
  435. window.agar.minScale = -30
  436. }, 5000);
  437.  
  438. (function() {
  439. var amount = 6;
  440. var duration = 50; //ms
  441.  
  442. var overwriting = function(evt) {
  443. if (evt.keyCode === 88) { // When X key is pushed
  444. for (var i = 0; i < amount; ++i) {
  445. setTimeout(function() {
  446. window.onkeydown({keyCode: 87}); // Simulates W key being pushed
  447. window.onkeyup({keyCode: 87});
  448. }, i * duration);
  449. }
  450. }
  451. };
  452.  
  453. window.addEventListener('keydown', overwriting);
  454. })();
  455. var allRules = [
  456. { hostname: ["agar.io"],
  457. scriptUriRe: /^http:\/\/agar\.io\/main_out\.js/,
  458. replace: function (m) {
  459. m.removeNewlines()
  460.  
  461. m.replace("var:allCells",
  462. /(=null;)(\w+)(.hasOwnProperty\(\w+\)?)/,
  463. "$1" + "$v=$2;" + "$2$3",
  464. "$v = {}")
  465.  
  466. m.replace("var:myCells",
  467. /(case 32:)(\w+)(\.push)/,
  468. "$1" + "$v=$2;" + "$2$3",
  469. "$v = []")
  470.  
  471. m.replace("var:top",
  472. /case 49:[^:]+?(\w+)=\[];/,
  473. "$&" + "$v=$1;",
  474. "$v = []")
  475.  
  476. m.replace("var:topTeams",
  477. /case 50:(\w+)=\[];/,
  478. "$&" + "$v=$1;",
  479. "$v = []")
  480.  
  481. var dr = "(\\w+)=\\w+\\.getFloat64\\(\\w+,!0\\);\\w+\\+=8;\\n?"
  482. var dd = 7071.067811865476
  483. m.replace("var:dimensions hook:dimensionsUpdated",
  484. RegExp("case 64:"+dr+dr+dr+dr),
  485. "$&" + "$v = [$1,$2,$3,$4],$H($1,$2,$3,$4),",
  486. "$v = " + JSON.stringify([-dd,-dd,dd,dd]))
  487.  
  488. var vr = "(\\w+)=\\w+\\.getFloat32\\(\\w+,!0\\);\\w+\\+=4;"
  489. m.save() &&
  490. m.replace("var:rawViewport:x,y var:disableRendering:1",
  491. /else \w+=\(5\*\w+\+(\w+)\)\/6,\w+=\(5\*\w+\+(\w+)\)\/6,.*?;/,
  492. "$&" + "$v0.x=$1; $v0.y=$2; if($v1)return;") &&
  493. m.replace("var:disableRendering:2 hook:skipCellDraw",
  494. /(\w+:function\(\w+\){)(if\(this\.\w+\(\)\){\+\+this\.[\w$]+;)/,
  495. "$1" + "if($v || $H(this))return;" + "$2") &&
  496. m.replace("var:rawViewport:scale",
  497. /Math\.pow\(Math\.min\(64\/\w+,1\),\.4\)/,
  498. "($v.scale=$&)") &&
  499. m.replace("var:rawViewport:x,y,scale",
  500. RegExp("case 17:"+vr+vr+vr),
  501. "$&" + "$v.x=$1; $v.y=$2; $v.scale=$3;") &&
  502. m.reset_("window.agar.rawViewport = {x:0,y:0,scale:1};" +
  503. "window.agar.disableRendering = false;") ||
  504. m.restore()
  505.  
  506. m.replace("reset hook:connect var:ws var:webSocket",
  507. /new WebSocket\((\w+)\);/,
  508. "$v1 = $&; $v0=$1;" + m.reset + "$H();",
  509. "$v0 = ''; $v1 = null;")
  510.  
  511. m.replace("property:scale",
  512. /function \w+\(\w+\){\w+\.preventDefault\(\);[^;]+;1>(\w+)&&\(\1=1\)/,
  513. `;${makeProperty("scale", "$1")};$&`)
  514.  
  515. m.replace("var:minScale",
  516. /;1>(\w+)&&\(\1=1\)/,
  517. ";$v>$1 && ($1=$v)",
  518. "$v = 1")
  519.  
  520. m.replace("var:region",
  521. /console\.log\("Find "\+(\w+\+\w+)\);/,
  522. "$&" + "$v=$1;",
  523. "$v = ''")
  524.  
  525. m.replace("cellProperty:isVirus",
  526. /((\w+)=!!\(\w+&1\)[\s\S]{0,400})((\w+).(\w+)=\2;)/,
  527. "$1$4.isVirus=$3")
  528.  
  529. m.replace("var:dommousescroll",
  530. /("DOMMouseScroll",)(\w+),/,
  531. "$1($v=$2),")
  532.  
  533. m.replace("var:skinF hook:cellSkin",
  534. /(\w+.fill\(\))(;null!=(\w+))/,
  535. "$1;" +
  536. "if($v)$3 = $v(this,$3);" +
  537. "if($h)$3 = $h(this,$3);" +
  538. "$2");
  539.  
  540. m.replace("hook:afterCellStroke",
  541. /\((\w+)\.strokeStyle="#000000",\1\.globalAlpha\*=\.1,\1\.stroke\(\)\);\1\.globalAlpha=1;/,
  542. "$&" + "$H(this);")
  543.  
  544. m.replace("var:showStartupBg",
  545. /\w+\?\(\w\.globalAlpha=\w+,/,
  546. "$v && $&",
  547. "$v = true")
  548.  
  549. var vAlive = /\((\w+)\[(\w+)\]==this\){\1\.splice\(\2,1\);/.exec(m.text)
  550. var vEaten = /0<this\.[$\w]+&&(\w+)\.push\(this\)}/.exec(m.text)
  551. !vAlive && console.error("Expose: can't find vAlive")
  552. !vEaten && console.error("Expose: can't find vEaten")
  553. if (vAlive && vEaten)
  554. m.replace("var:aliveCellsList var:eatenCellsList",
  555. RegExp(vAlive[1] + "=\\[\\];" + vEaten[1] + "=\\[\\];"),
  556. "$v0=" + vAlive[1] + "=[];" + "$v1=" + vEaten[1] + "=[];",
  557. "$v0 = []; $v1 = []")
  558.  
  559. m.replace("hook:drawScore",
  560. /(;(\w+)=Math\.max\(\2,(\w+\(\))\);)0!=\2&&/,
  561. "$1($H($3))||0!=$2&&")
  562.  
  563. m.replace("hook:beforeTransform hook:beforeDraw var:drawScale",
  564. /(\w+)\.save\(\);\1\.translate\((\w+\/2,\w+\/2)\);\1\.scale\((\w+),\3\);\1\.translate\((-\w+,-\w+)\);/,
  565. "$v = $3;$H0($1,$2,$3,$4);" + "$&" + "$H1($1,$2,$3,$4);",
  566. "$v = 1")
  567.  
  568. m.replace("hook:afterDraw",
  569. /(\w+)\.restore\(\);(\w+)&&\2\.width&&\1\.drawImage/,
  570. "$H();" + "$&")
  571.  
  572. m.replace("hook:cellColor",
  573. /(\w+=)this\.color,/,
  574. "$1 ($h && $h(this, this.color) || this.color),")
  575.  
  576. m.replace("var:drawGrid",
  577. /(\w+)\.globalAlpha=(\.2\*\w+);/,
  578. "if(!$v)return;" + "$&",
  579. "$v = true")
  580.  
  581. m.replace("hook:drawCellMass",
  582. /&&\((\w+\|\|0==\w+\.length&&\(!this\.\w+\|\|this\.\w+\)&&20<this\.size)\)&&/,
  583. "&&( $h ? $h(this,$1) : ($1) )&&")
  584.  
  585. m.replace("hook:cellMassText",
  586. /(\.\w+)(\(~~\(this\.size\*this\.size\/100\)\))/,
  587. "$1( $h ? $h(this,$2) : $2 )")
  588.  
  589. m.replace("hook:cellMassTextScale",
  590. /(\.\w+)\((this\.\w+\(\))\)([\s\S]{0,1000})\1\(\2\/2\)/,
  591. "$1($2)$3$1( $h ? $h(this,$2/2) : ($2/2) )")
  592.  
  593. m.replace("var:enableDirectionSending",
  594. /;64>(\w+)\*\1\+(\w+)\*\2/,
  595. ";if(!$v)return" + "$&",
  596. "$v = true")
  597.  
  598. m.replace("var:simpleCellDraw",
  599. /(:function\(\){)(var a=10;)/,
  600. "$1 if($v)return true;$2",
  601. "$v=false")
  602.  
  603. m.replace("hook:updateLeaderboard",
  604. /({\w+=null;)(if\(null!=)/,
  605. "$1 if($H())return; $2")
  606.  
  607. var template = (key,n) =>
  608. `this\\.${key}=\\w+\\*\\(this\\.(\\w+)-this\\.(\\w+)\\)\\+this\\.\\${n};`
  609. var re = new RegExp(template('x', 2) + template('y', 4) + template('size', 6))
  610. var match = re.exec(m.text)
  611. if (match) {
  612. m.cellProp.nx = match[1]
  613. m.cellProp.ny = match[3]
  614. m.cellProp.nSize = match[5]
  615. } else
  616. console.error("Expose: cellProp:x,y,size search failed!")
  617.  
  618. }},
  619. ]
  620.  
  621. function makeProperty(name, varname) {
  622. return "'" + name + "' in window.agar || " +
  623. "Object.defineProperty( window.agar, '"+name+"', " +
  624. "{get:function(){return "+varname+"},set:function(){"+varname+"=arguments[0]},enumerable:true})"
  625. }
  626.  
  627. if (window.top != window.self)
  628. return
  629.  
  630. if (document.readyState !== 'loading')
  631. return console.error("Expose: this script should run at document-start")
  632.  
  633. var isFirefox = /Firefox/.test(navigator.userAgent)
  634.  
  635. // Stage 1: Find corresponding rule
  636. var rules
  637. for (var i = 0; i < allRules.length; i++)
  638. if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
  639. rules = allRules[i]
  640. break
  641. }
  642. if (!rules)
  643. return console.error("Expose: cant find corresponding rule")
  644.  
  645.  
  646. // Stage 2: Search for `main_out.js`
  647. if (isFirefox) {
  648. function bse_listener(e) { tryReplace(e.target, e) }
  649. window.addEventListener('beforescriptexecute', bse_listener, true)
  650. } else {
  651. // Iterate over document.head child elements and look for `main_out.js`
  652. for (var i = 0; i < document.head.childNodes.length; i++)
  653. if (tryReplace(document.head.childNodes[i]))
  654. return
  655. // If there are no desired element in document.head, then wait until it appears
  656. function observerFunc(mutations) {
  657. for (var i = 0; i < mutations.length; i++) {
  658. var addedNodes = mutations[i].addedNodes
  659. for (var j = 0; j < addedNodes.length; j++)
  660. if (tryReplace(addedNodes[j]))
  661. return observer.disconnect()
  662. }
  663. }
  664. var observer = new MutationObserver(observerFunc)
  665. observer.observe(document.head, {childList: true})
  666. }
  667.  
  668. // Stage 3: Replace found element using rules
  669. function tryReplace(node, event) {
  670. var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src)
  671. var scriptEmbedded = rules.scriptTextRe && rules.scriptTextRe.test(node.textContent)
  672. if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
  673. return false // this is not desired element; get back to stage 2
  674.  
  675. if (isFirefox) {
  676. event.preventDefault()
  677. window.removeEventListener('beforescriptexecute', bse_listener, true)
  678. }
  679.  
  680. var mod = {
  681. reset: "",
  682. text: null,
  683. history: [],
  684. cellProp: {},
  685. save() {
  686. this.history.push({reset:this.reset, text:this.text})
  687. return true
  688. },
  689. restore() {
  690. var state = this.history.pop()
  691. this.reset = state.reset
  692. this.text = state.text
  693. return true
  694. },
  695. reset_(reset) {
  696. this.reset += reset
  697. return true
  698. },
  699. replace(what, from, to, reset) {
  700. var vars = [], hooks = []
  701. what.split(" ").forEach((x) => {
  702. x = x.split(":")
  703. x[0] === "var" && vars.push(x[1])
  704. x[0] === "hook" && hooks.push(x[1])
  705. })
  706. function replaceShorthands(str) {
  707. function nope(letter, array, fun) {
  708. str = str
  709. .split(new RegExp('\\$' + letter + '([0-9]?)'))
  710. .map((v,n) => n%2 ? fun(array[v||0]) : v)
  711. .join("")
  712. }
  713. nope('v', vars, (name) => "window.agar." + name)
  714. nope('h', hooks, (name) => "window.agar.hooks." + name)
  715. nope('H', hooks, (name) =>
  716. "window.agar.hooks." + name + "&&" +
  717. "window.agar.hooks." + name)
  718. return str
  719. }
  720. var newText = this.text.replace(from, replaceShorthands(to))
  721. if(newText === this.text) {
  722. console.error("Expose: `" + what + "` replacement failed!")
  723. return false
  724. } else {
  725. this.text = newText
  726. if (reset)
  727. this.reset += replaceShorthands(reset) + ";"
  728. return true
  729. }
  730. },
  731. removeNewlines() {
  732. this.text = this.text.replace(/([,\/;])\n/mg, "$1")
  733. },
  734. get: function() {
  735. var cellProp = JSON.stringify(this.cellProp)
  736. return `window.agar={hooks:{},cellProp:${cellProp}};` +
  737. this.reset + this.text
  738. }
  739. }
  740.  
  741. if (scriptEmbedded) {
  742. mod.text = node.textContent
  743. rules.replace(mod)
  744. if (isFirefox) {
  745. document.head.removeChild(node)
  746. var script = document.createElement("script")
  747. script.textContent = mod.get()
  748. document.head.appendChild(script)
  749. } else {
  750. node.textContent = mod.get()
  751. }
  752. console.log("Expose: replacement done")
  753. } else {
  754. document.head.removeChild(node)
  755. var request = new XMLHttpRequest()
  756. request.onload = function() {
  757. var script = document.createElement("script")
  758. mod.text = this.responseText
  759. rules.replace(mod)
  760. script.textContent = mod.get()
  761. // `main_out.js` should not executed before jQuery was loaded, so we need to wait jQuery
  762. function insertScript(script) {
  763. if (typeof jQuery === "undefined")
  764. return setTimeout(insertScript, 0, script)
  765. document.head.appendChild(script)
  766. console.log("Expose: replacement done")
  767. }
  768. insertScript(script)
  769. }
  770. request.onerror = function() { console.error("Expose: response was null") }
  771. request.open("get", node.src, true)
  772. request.send()
  773. }
  774.  
  775. return true
  776. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement