Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.94 KB | None | 0 0
  1. // ==UserScript==
  2. // @name agario-feeder-bot
  3. // @namespace http://github.com/davidmann4/
  4. // @version 0.02
  5. // @description to be writen
  6. // @author davidmann4
  7. // @license MIT
  8. // @match http://megascouts.ml/mgar/*
  9. // @match http://agariofun.com/*
  10. // @require https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js
  11. // @grant none
  12. // @run-at document-start
  13. // ==/UserScript==
  14.  
  15. setTimeout(function() {
  16. var real_minx = -7071;
  17. var real_miny = -7071;
  18. var real_maxx = 7071;
  19. var real_maxy = 7071;
  20. var lastsent = {
  21. minx: 0,
  22. miny: 0,
  23. maxx: 0,
  24. maxy: 0
  25. };
  26.  
  27. function valcompare(Y, Z) {
  28. return 0.01 > Y - Z && -0.01 < Y - Z
  29. }
  30. window.agar.hooks.dimensionsUpdated = function(server_minx, server_miny, server_maxx, server_maxy) {
  31. if (valcompare(server_maxx - server_minx, server_maxy - server_miny)) {
  32. real_minx = server_minx;
  33. real_miny = server_miny;
  34. real_maxx = server_maxx;
  35. real_maxy = server_maxy
  36. } else {
  37. if (valcompare(server_minx, lastsent.minx)) {
  38. if (0.01 < server_maxx - lastsent.maxx || -0.01 > server_maxx - lastsent.maxx) {
  39. real_minx = server_minx;
  40. real_maxx = server_minx + 14142.135623730952
  41. }
  42. }
  43. if (0.01 < server_minx - lastsent.minx || -0.01 > server_minx - lastsent.minx) {
  44. if (valcompare(server_maxx, lastsent.maxx)) {
  45. real_maxx = server_maxx;
  46. real_minx = server_maxx - 14142.135623730952
  47. }
  48. }
  49. if (0.01 < server_miny - lastsent.miny || -0.01 > server_miny - lastsent.miny) {
  50. if (valcompare(server_maxy, lastsent.maxy)) {
  51. real_maxy = server_maxy;
  52. real_miny = server_maxy - 14142.135623730952
  53. }
  54. }
  55. if (valcompare(server_miny, lastsent.miny)) {
  56. if (0.01 < server_maxy - lastsent.maxy || -0.01 > server_maxy - lastsent.maxy) {
  57. real_miny = server_miny;
  58. real_maxy = server_miny + 14142.135623730952
  59. }
  60. }
  61. if (server_minx < real_minx) {
  62. real_minx = server_minx;
  63. real_maxx = server_minx + 14142.135623730952
  64. }
  65. if (server_maxx > real_maxx) {
  66. real_maxx = server_maxx;
  67. real_minx = server_maxx - 14142.135623730952
  68. }
  69. if (server_miny < real_miny) {
  70. real_miny = server_miny;
  71. real_maxy = server_miny + 14142.135623730952
  72. }
  73. if (server_maxy > real_maxy) {
  74. real_maxy = server_maxy;
  75. real_miny = server_maxy - 14142.135623730952
  76. }
  77. lastsent.minx = server_minx;
  78. lastsent.miny = server_miny;
  79. lastsent.maxy = server_maxy;
  80. lastsent.maxx = server_maxx
  81. }
  82. offset_x = real_minx || -7071;
  83. offset_y = real_miny || -7071
  84. };
  85. var socket = io.connect('ws://Node-pepsispvp386590.codeanyapp.com:8081');
  86. var canMove = true;
  87. var movetoMouse = true;
  88. var moveEvent = new Array(2);
  89. var canvas = document.getElementById("canvas");
  90. last_transmited_game_server = null;
  91. socket.on('force-login', function(data) {
  92. socket.emit("login", {
  93. "uuid": client_uuid,
  94. "type": "client"
  95. });
  96. transmit_game_server()
  97. });
  98.  
  99. $( "#canvas" ).after( "<div style='background-color: #000000; -moz-opacity: 0.4; -khtml-opacity: 0.4; opacity: 0.4; filter: alpha(opacity=40); zoom: 1; width: 205px; top: 10px; left: 10px; display: block; position: absolute; text-align: center; font-size: 15px; color: #ffffff; padding: 5px; font-family: Ubuntu;'> <div style='color:#ffffff; display: inline; -moz-opacity:1; -khtml-opacity: 1; opacity:1; filter:alpha(opacity=100); padding: 10px;'><a>Bots</a></div> <div style='color:#ffffff; display: inline; -moz-opacity:1; -khtml-opacity: 1; opacity:1; filter:alpha(opacity=100); padding: 10px;'><br>Minions: <a id='minionCount' >Offline</a> </div> <div style='color:#ffffff; display: inline; -moz-opacity:1; -khtml-opacity: 1; opacity:1; filter:alpha(opacity=100); padding: 10px;'><br><a>A</a> - Move To Mouse: <a id='ismoveToMouse' >On</a> </div> <div style='color:#ffffff; display: inline; -moz-opacity:1; -khtml-opacity: 1; opacity:1; filter:alpha(opacity=100); padding: 10px;'><br><a>D</a> - Stop Movement: <a id='isStopMove' >Off</a> </div> <a><br>E</a> - Split bots <a><br>R</a> - Eject mass" );
  100. socket.on('spawn-count', function(data) {
  101. document.getElementById('minionCount').innerHTML = data
  102. });
  103. var client_uuid = localStorage.getItem('client_uuid');
  104. if (client_uuid == null) {
  105. console.log("generating a uuid for this user");
  106. client_uuid = ""; var ranStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  107. for (var ii = 0; ii < 15; ii++) client_uuid += ranStr.charAt(Math.floor(Math.random() * ranStr.length));
  108. localStorage.setItem('client_uuid', client_uuid)
  109. }
  110. socket.emit("login", client_uuid);
  111. $("#instructions").replaceWith('<br><div class="input-group"><span class="input-group-addon" id="basic-addon1">UUID</span><input type="text" value="' + client_uuid + '" readonly class="form-control"</div>');
  112.  
  113. function isMe(cell) {
  114. for (var i = 0; i < window.agar.myCells.length; i++) {
  115. if (window.agar.myCells[i] == cell.id) {
  116. return true
  117. }
  118. }
  119. return false
  120. }
  121.  
  122. window.agar.hooks.drawCellMass = function(cell, old_draw) {
  123. if(cell.size > 20) return cell;
  124. }
  125.  
  126. window.agar.hooks.cellMassTextScale = function(cell, old_scale) {
  127. }
  128.  
  129. function getCell() {
  130. var me = [];
  131. for (var key in window.agar.allCells) {
  132. var cell = window.agar.allCells[key];
  133. if (isMe(cell)) {
  134. me.push(cell)
  135. }
  136. }
  137. return me[0]
  138. }
  139. var skin_var = 0;
  140.  
  141. function emitPosition() {
  142. for (i = 0; i < agar.myCells.length; i++) {}
  143. x = (mouseX - window.innerWidth / 2) / window.agar.drawScale + window.agar.rawViewport.x;
  144. y = (mouseY - window.innerHeight / 2) / window.agar.drawScale + window.agar.rawViewport.y;
  145. if (!movetoMouse) {
  146. x = getCell().x;
  147. y = getCell().y
  148. }
  149. socket.emit("pos", {
  150. "x": x - (real_minx + 7071),
  151. "y": y - (real_miny + 7071),
  152. "dimensions": [-7071, -7071, 7071, 7071]
  153. })
  154. }
  155.  
  156.  
  157. function emitSplit() {
  158. socket.emit("cmd", {
  159. "name": "split"
  160. })
  161. }
  162.  
  163. function emitMassEject() {
  164. socket.emit("cmd", {
  165. "name": "eject"
  166. })
  167. }
  168.  
  169. function toggleMovement() {
  170. canMove = !canMove;
  171. switch (canMove) {
  172. case true:
  173. canvas.onmousemove = moveEvent[0];
  174. moveEvent[0] = null;
  175. canvas.onmousedown = moveEvent[1];
  176. moveEvent[1] = null;
  177. break;
  178. case false:
  179. canvas.onmousemove({
  180. clientX: innerWidth / 2,
  181. clientY: innerHeight / 2
  182. });
  183. moveEvent[0] = canvas.onmousemove;
  184. canvas.onmousemove = null;
  185. moveEvent[1] = canvas.onmousedown;
  186. canvas.onmousedown = null;
  187. break
  188. }
  189. }
  190. interval_id = setInterval(function() {
  191. emitPosition()
  192. }, 100);
  193. interval_id2 = setInterval(function() {
  194. transmit_game_server_if_changed()
  195. }, 5000);
  196. document.addEventListener('keydown', function(e) {
  197. var key = e.keyCode || e.which;
  198. switch (key) {
  199. case 65:
  200. movetoMouse = !movetoMouse;
  201. if(movetoMouse) { document.getElementById('ismoveToMouse').innerHTML = "On"; } else { document.getElementById('ismoveToMouse').innerHTML = "Off"; }
  202. break;
  203. case 68:
  204. toggleMovement();
  205. if(!canMove) { document.getElementById('isStopMove').innerHTML = "On"; } else { document.getElementById('isStopMove').innerHTML = "Off"; }
  206. break;
  207. case 69:
  208. emitSplit();
  209. break;
  210. case 82:
  211. emitMassEject();
  212. break
  213. }
  214. });
  215.  
  216. function transmit_game_server_if_changed() {
  217. if (last_transmited_game_server != window.agar.ws) {
  218. last_transmited_game_server = window.agar.ws;
  219. socket.emit("cmd", {
  220. "name": "reconnect_server",
  221. "ip": last_transmited_game_server
  222. })
  223. }
  224. }
  225.  
  226. function transmit_game_server() {
  227. last_transmited_game_server = window.agar.ws;
  228. socket.emit("cmd", {
  229. "name": "connect_server",
  230. "ip": last_transmited_game_server
  231. })
  232. }
  233. var mouseX = 0;
  234. var mouseY = 0;
  235. $("body").mousemove(function(event) {
  236. mouseX = event.clientX;
  237. mouseY = event.clientY
  238. });
  239. window.agar.minScale = -30
  240. }, 5000);
  241.  
  242. var allRules = [
  243. { hostname: ["agar.io"],
  244. scriptUriRe: /^http:\/\/agar\.io\/main_out\.js/,
  245. replace: function (m) {
  246. m.removeNewlines()
  247.  
  248. m.replace("var:allCells",
  249. /(=null;)(\w+)(.hasOwnProperty\(\w+\)?)/,
  250. "$1" + "$v=$2;" + "$2$3",
  251. "$v = {}")
  252.  
  253. m.replace("var:myCells",
  254. /(case 32:)(\w+)(\.push)/,
  255. "$1" + "$v=$2;" + "$2$3",
  256. "$v = []")
  257.  
  258. m.replace("var:top",
  259. /case 49:[^:]+?(\w+)=\[];/,
  260. "$&" + "$v=$1;",
  261. "$v = []")
  262.  
  263. m.replace("var:topTeams",
  264. /case 50:(\w+)=\[];/,
  265. "$&" + "$v=$1;",
  266. "$v = []")
  267.  
  268. var dr = "(\\w+)=\\w+\\.getFloat64\\(\\w+,!0\\);\\w+\\+=8;\\n?"
  269. var dd = 7071.067811865476
  270. m.replace("var:dimensions hook:dimensionsUpdated",
  271. RegExp("case 64:"+dr+dr+dr+dr),
  272. "$&" + "$v = [$1,$2,$3,$4],$H($1,$2,$3,$4),",
  273. "$v = " + JSON.stringify([-dd,-dd,dd,dd]))
  274.  
  275. var vr = "(\\w+)=\\w+\\.getFloat32\\(\\w+,!0\\);\\w+\\+=4;"
  276. m.save() &&
  277. m.replace("var:rawViewport:x,y var:disableRendering:1",
  278. /else \w+=\(5\*\w+\+(\w+)\)\/6,\w+=\(5\*\w+\+(\w+)\)\/6,.*?;/,
  279. "$&" + "$v0.x=$1; $v0.y=$2; if($v1)return;") &&
  280. m.replace("var:disableRendering:2 hook:skipCellDraw",
  281. /(\w+:function\(\w+\){)(if\(this\.\w+\(\)\){\+\+this\.[\w$]+;)/,
  282. "$1" + "if($v || $H(this))return;" + "$2") &&
  283. m.replace("var:rawViewport:scale",
  284. /Math\.pow\(Math\.min\(64\/\w+,1\),\.4\)/,
  285. "($v.scale=$&)") &&
  286. m.replace("var:rawViewport:x,y,scale",
  287. RegExp("case 17:"+vr+vr+vr),
  288. "$&" + "$v.x=$1; $v.y=$2; $v.scale=$3;") &&
  289. m.reset_("window.agar.rawViewport = {x:0,y:0,scale:1};" +
  290. "window.agar.disableRendering = false;") ||
  291. m.restore()
  292.  
  293. m.replace("reset hook:connect var:ws var:webSocket",
  294. /new WebSocket\((\w+)\);/,
  295. "$v1 = $&; $v0=$1;" + m.reset + "$H();",
  296. "$v0 = ''; $v1 = null;")
  297.  
  298. m.replace("property:scale",
  299. /function \w+\(\w+\){\w+\.preventDefault\(\);[^;]+;1>(\w+)&&\(\1=1\)/,
  300. `;${makeProperty("scale", "$1")};$&`)
  301.  
  302. m.replace("var:minScale",
  303. /;1>(\w+)&&\(\1=1\)/,
  304. ";$v>$1 && ($1=$v)",
  305. "$v = 1")
  306.  
  307. m.replace("var:region",
  308. /console\.log\("Find "\+(\w+\+\w+)\);/,
  309. "$&" + "$v=$1;",
  310. "$v = ''")
  311.  
  312. m.replace("cellProperty:isVirus",
  313. /((\w+)=!!\(\w+&1\)[\s\S]{0,400})((\w+).(\w+)=\2;)/,
  314. "$1$4.isVirus=$3")
  315.  
  316. m.replace("var:dommousescroll",
  317. /("DOMMouseScroll",)(\w+),/,
  318. "$1($v=$2),")
  319.  
  320. m.replace("var:skinF hook:cellSkin",
  321. /(\w+.fill\(\))(;null!=(\w+))/,
  322. "$1;" +
  323. "if($v)$3 = $v(this,$3);" +
  324. "if($h)$3 = $h(this,$3);" +
  325. "$2");
  326.  
  327. m.replace("hook:afterCellStroke",
  328. /\((\w+)\.strokeStyle="#000000",\1\.globalAlpha\*=\.1,\1\.stroke\(\)\);\1\.globalAlpha=1;/,
  329. "$&" + "$H(this);")
  330.  
  331. m.replace("var:showStartupBg",
  332. /\w+\?\(\w\.globalAlpha=\w+,/,
  333. "$v && $&",
  334. "$v = true")
  335.  
  336. var vAlive = /\((\w+)\[(\w+)\]==this\){\1\.splice\(\2,1\);/.exec(m.text)
  337. var vEaten = /0<this\.[$\w]+&&(\w+)\.push\(this\)}/.exec(m.text)
  338. !vAlive && console.error("Expose: can't find vAlive")
  339. !vEaten && console.error("Expose: can't find vEaten")
  340. if (vAlive && vEaten)
  341. m.replace("var:aliveCellsList var:eatenCellsList",
  342. RegExp(vAlive[1] + "=\\[\\];" + vEaten[1] + "=\\[\\];"),
  343. "$v0=" + vAlive[1] + "=[];" + "$v1=" + vEaten[1] + "=[];",
  344. "$v0 = []; $v1 = []")
  345.  
  346. m.replace("hook:drawScore",
  347. /(;(\w+)=Math\.max\(\2,(\w+\(\))\);)0!=\2&&/,
  348. "$1($H($3))||0!=$2&&")
  349.  
  350. m.replace("hook:beforeTransform hook:beforeDraw var:drawScale",
  351. /(\w+)\.save\(\);\1\.translate\((\w+\/2,\w+\/2)\);\1\.scale\((\w+),\3\);\1\.translate\((-\w+,-\w+)\);/,
  352. "$v = $3;$H0($1,$2,$3,$4);" + "$&" + "$H1($1,$2,$3,$4);",
  353. "$v = 1")
  354.  
  355. m.replace("hook:afterDraw",
  356. /(\w+)\.restore\(\);(\w+)&&\2\.width&&\1\.drawImage/,
  357. "$H();" + "$&")
  358.  
  359. m.replace("hook:cellColor",
  360. /(\w+=)this\.color,/,
  361. "$1 ($h && $h(this, this.color) || this.color),")
  362.  
  363. m.replace("var:drawGrid",
  364. /(\w+)\.globalAlpha=(\.2\*\w+);/,
  365. "if(!$v)return;" + "$&",
  366. "$v = true")
  367.  
  368. m.replace("hook:drawCellMass",
  369. /&&\((\w+\|\|0==\w+\.length&&\(!this\.\w+\|\|this\.\w+\)&&20<this\.size)\)&&/,
  370. "&&( $h ? $h(this,$1) : ($1) )&&")
  371.  
  372. m.replace("hook:cellMassText",
  373. /(\.\w+)(\(~~\(this\.size\*this\.size\/100\)\))/,
  374. "$1( $h ? $h(this,$2) : $2 )")
  375.  
  376. m.replace("hook:cellMassTextScale",
  377. /(\.\w+)\((this\.\w+\(\))\)([\s\S]{0,1000})\1\(\2\/2\)/,
  378. "$1($2)$3$1( $h ? $h(this,$2/2) : ($2/2) )")
  379.  
  380. m.replace("var:enableDirectionSending",
  381. /;64>(\w+)\*\1\+(\w+)\*\2/,
  382. ";if(!$v)return" + "$&",
  383. "$v = true")
  384.  
  385. m.replace("var:simpleCellDraw",
  386. /(:function\(\){)(var a=10;)/,
  387. "$1 if($v)return true;$2",
  388. "$v=false")
  389.  
  390. m.replace("hook:updateLeaderboard",
  391. /({\w+=null;)(if\(null!=)/,
  392. "$1 if($H())return; $2")
  393.  
  394. var template = (key,n) =>
  395. `this\\.${key}=\\w+\\*\\(this\\.(\\w+)-this\\.(\\w+)\\)\\+this\\.\\${n};`
  396. var re = new RegExp(template('x', 2) + template('y', 4) + template('size', 6))
  397. var match = re.exec(m.text)
  398. if (match) {
  399. m.cellProp.nx = match[1]
  400. m.cellProp.ny = match[3]
  401. m.cellProp.nSize = match[5]
  402. } else
  403. console.error("Expose: cellProp:x,y,size search failed!")
  404.  
  405. }},
  406. ]
  407.  
  408. function makeProperty(name, varname) {
  409. return "'" + name + "' in window.agar || " +
  410. "Object.defineProperty( window.agar, '"+name+"', " +
  411. "{get:function(){return "+varname+"},set:function(){"+varname+"=arguments[0]},enumerable:true})"
  412. }
  413.  
  414. if (window.top != window.self)
  415. return
  416.  
  417. if (document.readyState !== 'loading')
  418. return console.error("Expose: this script should run at document-start")
  419.  
  420. var isFirefox = /Firefox/.test(navigator.userAgent)
  421.  
  422. // Stage 1: Find corresponding rule
  423. var rules
  424. for (var i = 0; i < allRules.length; i++)
  425. if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
  426. rules = allRules[i]
  427. break
  428. }
  429. if (!rules)
  430. return console.error("Expose: cant find corresponding rule")
  431.  
  432.  
  433. // Stage 2: Search for `main_out.js`
  434. if (isFirefox) {
  435. function bse_listener(e) { tryReplace(e.target, e) }
  436. window.addEventListener('beforescriptexecute', bse_listener, true)
  437. } else {
  438. // Iterate over document.head child elements and look for `main_out.js`
  439. for (var i = 0; i < document.head.childNodes.length; i++)
  440. if (tryReplace(document.head.childNodes[i]))
  441. return
  442. // If there are no desired element in document.head, then wait until it appears
  443. function observerFunc(mutations) {
  444. for (var i = 0; i < mutations.length; i++) {
  445. var addedNodes = mutations[i].addedNodes
  446. for (var j = 0; j < addedNodes.length; j++)
  447. if (tryReplace(addedNodes[j]))
  448. return observer.disconnect()
  449. }
  450. }
  451. var observer = new MutationObserver(observerFunc)
  452. observer.observe(document.head, {childList: true})
  453. }
  454.  
  455. // Stage 3: Replace found element using rules
  456. function tryReplace(node, event) {
  457. var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src)
  458. var scriptEmbedded = rules.scriptTextRe && rules.scriptTextRe.test(node.textContent)
  459. if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
  460. return false // this is not desired element; get back to stage 2
  461.  
  462. if (isFirefox) {
  463. event.preventDefault()
  464. window.removeEventListener('beforescriptexecute', bse_listener, true)
  465. }
  466.  
  467. var mod = {
  468. reset: "",
  469. text: null,
  470. history: [],
  471. cellProp: {},
  472. save() {
  473. this.history.push({reset:this.reset, text:this.text})
  474. return true
  475. },
  476. restore() {
  477. var state = this.history.pop()
  478. this.reset = state.reset
  479. this.text = state.text
  480. return true
  481. },
  482. reset_(reset) {
  483. this.reset += reset
  484. return true
  485. },
  486. replace(what, from, to, reset) {
  487. var vars = [], hooks = []
  488. what.split(" ").forEach((x) => {
  489. x = x.split(":")
  490. x[0] === "var" && vars.push(x[1])
  491. x[0] === "hook" && hooks.push(x[1])
  492. })
  493. function replaceShorthands(str) {
  494. function nope(letter, array, fun) {
  495. str = str
  496. .split(new RegExp('\\$' + letter + '([0-9]?)'))
  497. .map((v,n) => n%2 ? fun(array[v||0]) : v)
  498. .join("")
  499. }
  500. nope('v', vars, (name) => "window.agar." + name)
  501. nope('h', hooks, (name) => "window.agar.hooks." + name)
  502. nope('H', hooks, (name) =>
  503. "window.agar.hooks." + name + "&&" +
  504. "window.agar.hooks." + name)
  505. return str
  506. }
  507. var newText = this.text.replace(from, replaceShorthands(to))
  508. if(newText === this.text) {
  509. console.error("Expose: `" + what + "` replacement failed!")
  510. return false
  511. } else {
  512. this.text = newText
  513. if (reset)
  514. this.reset += replaceShorthands(reset) + ";"
  515. return true
  516. }
  517. },
  518. removeNewlines() {
  519. this.text = this.text.replace(/([,\/;])\n/mg, "$1")
  520. },
  521. get: function() {
  522. var cellProp = JSON.stringify(this.cellProp)
  523. return `window.agar={hooks:{},cellProp:${cellProp}};` +
  524. this.reset + this.text
  525. }
  526. }
  527.  
  528. if (scriptEmbedded) {
  529. mod.text = node.textContent
  530. rules.replace(mod)
  531. if (isFirefox) {
  532. document.head.removeChild(node)
  533. var script = document.createElement("script")
  534. script.textContent = mod.get()
  535. document.head.appendChild(script)
  536. } else {
  537. node.textContent = mod.get()
  538. }
  539. console.log("Expose: replacement done")
  540. } else {
  541. document.head.removeChild(node)
  542. var request = new XMLHttpRequest()
  543. request.onload = function() {
  544. var script = document.createElement("script")
  545. mod.text = this.responseText
  546. rules.replace(mod)
  547. script.textContent = mod.get()
  548. // `main_out.js` should not executed before jQuery was loaded, so we need to wait jQuery
  549. function insertScript(script) {
  550. if (typeof jQuery === "undefined")
  551. return setTimeout(insertScript, 0, script)
  552. document.head.appendChild(script)
  553. console.log("Expose: replacement done")
  554. }
  555. insertScript(script)
  556. }
  557. request.onerror = function() { console.error("Expose: response was null") }
  558. request.open("get", node.src, true)
  559. request.send()
  560. }
  561.  
  562. return true
  563. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement