Advertisement
hossem147

orad

Apr 11th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.85 KB | None | 0 0
  1. $( "#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>Hossbots.ga Free plan</a></div> <div style='color:#ffffff; display: inline; -moz-opacity:1; -khtml-opacity: 1; opacity:1; filter:alpha(opacity=100); padding: 10px;'><br>Minions 40 </a></div> <div style='color:#ffffff; display: inline; -moz-opacity:1; -khtml-opacity: 1; opacity:1; filter:alpha(opacity=100); padding: 10px;'><br>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>Stop Movement: <a id='isStopMove' >Off</a> </div>" );
  2. socket.on('spawn-count', function(data) {
  3. document.getElementById('minionCount').innerHTML = data
  4. });
  5. var client_uuid = localStorage.getItem('client_uuid');
  6. if (client_uuid == null) {
  7. console.log("generating a uuid for this user");
  8. client_uuid = ""; var ranStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  9. for (var ii = 0; ii < 15; ii++) client_uuid += ranStr.charAt(Math.floor(Math.random() * ranStr.length));
  10. localStorage.setItem('client_uuid', client_uuid)
  11. }
  12. socket.emit("login", client_uuid);
  13. $("#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>');
  14.  
  15. function isMe(cell) {
  16. for (var i = 0; i < window.agar.myCells.length; i++) {
  17. if (window.agar.myCells[i] == cell.id) {
  18. return true
  19. }
  20. }
  21. return false
  22. }
  23.  
  24. function getCell() {
  25. var me = [];
  26. for (var key in window.agar.allCells) {
  27. var cell = window.agar.allCells[key];
  28. if (isMe(cell)) {
  29. me.push(cell)
  30. }
  31. }
  32. return me[0]
  33. }
  34. var skin_var = 0;
  35.  
  36. function emitPosition() {
  37. for (i = 0; i < agar.myCells.length; i++) {}
  38. x = (mouseX - window.innerWidth / 2) / window.agar.drawScale + window.agar.rawViewport.x;
  39. y = (mouseY - window.innerHeight / 2) / window.agar.drawScale + window.agar.rawViewport.y;
  40. if (!movetoMouse) {
  41. x = getCell().x;
  42. y = getCell().y
  43. }
  44. socket.emit("pos", {
  45. "x": x - (real_minx + 7071),
  46. "y": y - (real_miny + 7071),
  47. "dimensions": [-7071, -7071, 7071, 7071]
  48. })
  49. }
  50.  
  51.  
  52. function emitSplit() {
  53. socket.emit("cmd", {
  54. "name": "split"
  55. })
  56. }
  57.  
  58. function emitMassEject() {
  59. socket.emit("cmd", {
  60. "name": "eject"
  61. })
  62. }
  63.  
  64. function toggleMovement() {
  65. canMove = !canMove;
  66. switch (canMove) {
  67. case true:
  68. canvas.onmousemove = moveEvent[0];
  69. moveEvent[0] = null;
  70. canvas.onmousedown = moveEvent[1];
  71. moveEvent[1] = null;
  72. break;
  73. case false:
  74. canvas.onmousemove({
  75. clientX: innerWidth / 2,
  76. clientY: innerHeight / 2
  77. });
  78. moveEvent[0] = canvas.onmousemove;
  79. canvas.onmousemove = null;
  80. moveEvent[1] = canvas.onmousedown;
  81. canvas.onmousedown = null;
  82. break
  83. }
  84. }
  85. interval_id = setInterval(function() {
  86. emitPosition()
  87. }, 100);
  88. interval_id2 = setInterval(function() {
  89. transmit_game_server_if_changed()
  90. }, 5000);
  91. document.addEventListener('keydown', function(e) {
  92. var key = e.keyCode || e.which;
  93. switch (key) {
  94. case 65:
  95. movetoMouse = !movetoMouse;
  96. if(movetoMouse) { document.getElementById('ismoveToMouse').innerHTML = "On"; } else { document.getElementById('ismoveToMouse').innerHTML = "Off"; }
  97. break;
  98. case 68:
  99. toggleMovement();
  100. if(!canMove) { document.getElementById('isStopMove').innerHTML = "On"; } else { document.getElementById('isStopMove').innerHTML = "Off"; }
  101. break;
  102. case 69:
  103. emitSplit();
  104. break;
  105. case 82:
  106. emitMassEject();
  107. break
  108. }
  109. });
  110.  
  111. function transmit_game_server_if_changed() {
  112. if (last_transmited_game_server != window.agar.ws) {
  113. transmit_game_server()
  114. }
  115. }
  116.  
  117. function transmit_game_server() {
  118. last_transmited_game_server = window.agar.ws;
  119. socket.emit("cmd", {
  120. "name": "connect_server",
  121. "ip": last_transmited_game_server
  122. })
  123. }
  124. var mouseX = 0;
  125. var mouseY = 0;
  126. $("body").mousemove(function(event) {
  127. mouseX = event.clientX;
  128. mouseY = event.clientY
  129. });
  130. window.agar.minScale = -30
  131. }, 5000);
  132.  
  133. var allRules = [
  134. { hostname: ["agar.io"],
  135. scriptUriRe: /^http:\/\/agar\.io\/main_out\.js/,
  136. replace: function (m) {
  137. m.removeNewlines()
  138.  
  139. m.replace("var:allCells",
  140. /(=null;)(\w+)(.hasOwnProperty\(\w+\)?)/,
  141. "$1" + "$v=$2;" + "$2$3",
  142. "$v = {}")
  143.  
  144. m.replace("var:myCells",
  145. /(case 32:)(\w+)(\.push)/,
  146. "$1" + "$v=$2;" + "$2$3",
  147. "$v = []")
  148.  
  149. m.replace("var:top",
  150. /case 49:[^:]+?(\w+)=\[];/,
  151. "$&" + "$v=$1;",
  152. "$v = []")
  153.  
  154. m.replace("var:topTeams",
  155. /case 50:(\w+)=\[];/,
  156. "$&" + "$v=$1;",
  157. "$v = []")
  158.  
  159. var dr = "(\\w+)=\\w+\\.getFloat64\\(\\w+,!0\\);\\w+\\+=8;\\n?"
  160. var dd = 7071.067811865476
  161. m.replace("var:dimensions hook:dimensionsUpdated",
  162. RegExp("case 64:"+dr+dr+dr+dr),
  163. "$&" + "$v = [$1,$2,$3,$4],$H($1,$2,$3,$4),",
  164. "$v = " + JSON.stringify([-dd,-dd,dd,dd]))
  165.  
  166. var vr = "(\\w+)=\\w+\\.getFloat32\\(\\w+,!0\\);\\w+\\+=4;"
  167. m.save() &&
  168. m.replace("var:rawViewport:x,y var:disableRendering:1",
  169. /else \w+=\(5\*\w+\+(\w+)\)\/6,\w+=\(5\*\w+\+(\w+)\)\/6,.*?;/,
  170. "$&" + "$v0.x=$1; $v0.y=$2; if($v1)return;") &&
  171. m.replace("var:disableRendering:2 hook:skipCellDraw",
  172. /(\w+:function\(\w+\){)(if\(this\.\w+\(\)\){\+\+this\.[\w$]+;)/,
  173. "$1" + "if($v || $H(this))return;" + "$2") &&
  174. m.replace("var:rawViewport:scale",
  175. /Math\.pow\(Math\.min\(64\/\w+,1\),\.4\)/,
  176. "($v.scale=$&)") &&
  177. m.replace("var:rawViewport:x,y,scale",
  178. RegExp("case 17:"+vr+vr+vr),
  179. "$&" + "$v.x=$1; $v.y=$2; $v.scale=$3;") &&
  180. m.reset_("window.agar.rawViewport = {x:0,y:0,scale:1};" +
  181. "window.agar.disableRendering = false;") ||
  182. m.restore()
  183.  
  184. m.replace("reset hook:connect var:ws var:webSocket",
  185. /new WebSocket\((\w+)\);/,
  186. "$v1 = $&; $v0=$1;" + m.reset + "$H();",
  187. "$v0 = ''; $v1 = null;")
  188.  
  189. m.replace("property:scale",
  190. /function \w+\(\w+\){\w+\.preventDefault\(\);[^;]+;1>(\w+)&&\(\1=1\)/,
  191. `;${makeProperty("scale", "$1")};$&`)
  192.  
  193. m.replace("var:minScale",
  194. /;1>(\w+)&&\(\1=1\)/,
  195. ";$v>$1 && ($1=$v)",
  196. "$v = 1")
  197.  
  198. m.replace("var:region",
  199. /console\.log\("Find "\+(\w+\+\w+)\);/,
  200. "$&" + "$v=$1;",
  201. "$v = ''")
  202.  
  203. m.replace("cellProperty:isVirus",
  204. /((\w+)=!!\(\w+&1\)[\s\S]{0,400})((\w+).(\w+)=\2;)/,
  205. "$1$4.isVirus=$3")
  206.  
  207. m.replace("var:dommousescroll",
  208. /("DOMMouseScroll",)(\w+),/,
  209. "$1($v=$2),")
  210.  
  211. m.replace("var:skinF hook:cellSkin",
  212. /(\w+.fill\(\))(;null!=(\w+))/,
  213. "$1;" +
  214. "if($v)$3 = $v(this,$3);" +
  215. "if($h)$3 = $h(this,$3);" +
  216. "$2");
  217.  
  218. m.replace("hook:afterCellStroke",
  219. /\((\w+)\.strokeStyle="#000000",\1\.globalAlpha\*=\.1,\1\.stroke\(\)\);\1\.globalAlpha=1;/,
  220. "$&" + "$H(this);")
  221.  
  222. m.replace("var:showStartupBg",
  223. /\w+\?\(\w\.globalAlpha=\w+,/,
  224. "$v && $&",
  225. "$v = true")
  226.  
  227. var vAlive = /\((\w+)\[(\w+)\]==this\){\1\.splice\(\2,1\);/.exec(m.text)
  228. var vEaten = /0<this\.[$\w]+&&(\w+)\.push\(this\)}/.exec(m.text)
  229. !vAlive && console.error("Expose: can't find vAlive")
  230. !vEaten && console.error("Expose: can't find vEaten")
  231. if (vAlive && vEaten)
  232. m.replace("var:aliveCellsList var:eatenCellsList",
  233. RegExp(vAlive[1] + "=\\[\\];" + vEaten[1] + "=\\[\\];"),
  234. "$v0=" + vAlive[1] + "=[];" + "$v1=" + vEaten[1] + "=[];",
  235. "$v0 = []; $v1 = []")
  236.  
  237. m.replace("hook:drawScore",
  238. /(;(\w+)=Math\.max\(\2,(\w+\(\))\);)0!=\2&&/,
  239. "$1($H($3))||0!=$2&&")
  240.  
  241. m.replace("hook:beforeTransform hook:beforeDraw var:drawScale",
  242. /(\w+)\.save\(\);\1\.translate\((\w+\/2,\w+\/2)\);\1\.scale\((\w+),\3\);\1\.translate\((-\w+,-\w+)\);/,
  243. "$v = $3;$H0($1,$2,$3,$4);" + "$&" + "$H1($1,$2,$3,$4);",
  244. "$v = 1")
  245.  
  246. m.replace("hook:afterDraw",
  247. /(\w+)\.restore\(\);(\w+)&&\2\.width&&\1\.drawImage/,
  248. "$H();" + "$&")
  249.  
  250. m.replace("hook:cellColor",
  251. /(\w+=)this\.color,/,
  252. "$1 ($h && $h(this, this.color) || this.color),")
  253.  
  254. m.replace("var:drawGrid",
  255. /(\w+)\.globalAlpha=(\.2\*\w+);/,
  256. "if(!$v)return;" + "$&",
  257. "$v = true")
  258.  
  259. m.replace("hook:drawCellMass",
  260. /&&\((\w+\|\|0==\w+\.length&&\(!this\.\w+\|\|this\.\w+\)&&20<this\.size)\)&&/,
  261. "&&( $h ? $h(this,$1) : ($1) )&&")
  262.  
  263. m.replace("hook:cellMassText",
  264. /(\.\w+)(\(~~\(this\.size\*this\.size\/100\)\))/,
  265. "$1( $h ? $h(this,$2) : $2 )")
  266.  
  267. m.replace("hook:cellMassTextScale",
  268. /(\.\w+)\((this\.\w+\(\))\)([\s\S]{0,1000})\1\(\2\/2\)/,
  269. "$1($2)$3$1( $h ? $h(this,$2/2) : ($2/2) )")
  270.  
  271. m.replace("var:enableDirectionSending",
  272. /;64>(\w+)\*\1\+(\w+)\*\2/,
  273. ";if(!$v)return" + "$&",
  274. "$v = true")
  275.  
  276. m.replace("var:simpleCellDraw",
  277. /(:function\(\){)(var a=10;)/,
  278. "$1 if($v)return true;$2",
  279. "$v=false")
  280.  
  281. m.replace("hook:updateLeaderboard",
  282. /({\w+=null;)(if\(null!=)/,
  283. "$1 if($H())return; $2")
  284.  
  285. var template = (key,n) =>
  286. `this\\.${key}=\\w+\\*\\(this\\.(\\w+)-this\\.(\\w+)\\)\\+this\\.\\${n};`
  287. var re = new RegExp(template('x', 2) + template('y', 4) + template('size', 6))
  288. var match = re.exec(m.text)
  289. if (match) {
  290. m.cellProp.nx = match[1]
  291. m.cellProp.ny = match[3]
  292. m.cellProp.nSize = match[5]
  293. } else
  294. console.error("Expose: cellProp:x,y,size search failed!")
  295.  
  296. }},
  297. ]
  298.  
  299. function makeProperty(name, varname) {
  300. return "'" + name + "' in window.agar || " +
  301. "Object.defineProperty( window.agar, '"+name+"', " +
  302. "{get:function(){return "+varname+"},set:function(){"+varname+"=arguments[0]},enumerable:true})"
  303. }
  304.  
  305. if (window.top != window.self)
  306. return
  307.  
  308. if (document.readyState !== 'loading')
  309. return console.error("Expose: this script should run at document-start")
  310.  
  311. var isFirefox = /Firefox/.test(navigator.userAgent)
  312.  
  313. // Stage 1: Find corresponding rule
  314. var rules
  315. for (var i = 0; i < allRules.length; i++)
  316. if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
  317. rules = allRules[i]
  318. break
  319. }
  320. if (!rules)
  321. return console.error("Expose: cant find corresponding rule")
  322.  
  323.  
  324. // Stage 2: Search for `main_out.js`
  325. if (isFirefox) {
  326. function bse_listener(e) { tryReplace(e.target, e) }
  327. window.addEventListener('beforescriptexecute', bse_listener, true)
  328. } else {
  329. // Iterate over document.head child elements and look for `main_out.js`
  330. for (var i = 0; i < document.head.childNodes.length; i++)
  331. if (tryReplace(document.head.childNodes[i]))
  332. return
  333. // If there are no desired element in document.head, then wait until it appears
  334. function observerFunc(mutations) {
  335. for (var i = 0; i < mutations.length; i++) {
  336. var addedNodes = mutations[i].addedNodes
  337. for (var j = 0; j < addedNodes.length; j++)
  338. if (tryReplace(addedNodes[j]))
  339. return observer.disconnect()
  340. }
  341. }
  342. var observer = new MutationObserver(observerFunc)
  343. observer.observe(document.head, {childList: true})
  344. }
  345.  
  346. // Stage 3: Replace found element using rules
  347. function tryReplace(node, event) {
  348. var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src)
  349. var scriptEmbedded = rules.scriptTextRe && rules.scriptTextRe.test(node.textContent)
  350. if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
  351. return false // this is not desired element; get back to stage 2
  352.  
  353. if (isFirefox) {
  354. event.preventDefault()
  355. window.removeEventListener('beforescriptexecute', bse_listener, true)
  356. }
  357.  
  358. var mod = {
  359. reset: "",
  360. text: null,
  361. history: [],
  362. cellProp: {},
  363. save() {
  364. this.history.push({reset:this.reset, text:this.text})
  365. return true
  366. },
  367. restore() {
  368. var state = this.history.pop()
  369. this.reset = state.reset
  370. this.text = state.text
  371. return true
  372. },
  373. reset_(reset) {
  374. this.reset += reset
  375. return true
  376. },
  377. replace(what, from, to, reset) {
  378. var vars = [], hooks = []
  379. what.split(" ").forEach((x) => {
  380. x = x.split(":")
  381. x[0] === "var" && vars.push(x[1])
  382. x[0] === "hook" && hooks.push(x[1])
  383. })
  384. function replaceShorthands(str) {
  385. function nope(letter, array, fun) {
  386. str = str
  387. .split(new RegExp('\\$' + letter + '([0-9]?)'))
  388. .map((v,n) => n%2 ? fun(array[v||0]) : v)
  389. .join("")
  390. }
  391. nope('v', vars, (name) => "window.agar." + name)
  392. nope('h', hooks, (name) => "window.agar.hooks." + name)
  393. nope('H', hooks, (name) =>
  394. "window.agar.hooks." + name + "&&" +
  395. "window.agar.hooks." + name)
  396. return str
  397. }
  398. var newText = this.text.replace(from, replaceShorthands(to))
  399. if(newText === this.text) {
  400. console.error("Expose: `" + what + "` replacement failed!")
  401. return false
  402. } else {
  403. this.text = newText
  404. if (reset)
  405. this.reset += replaceShorthands(reset) + ";"
  406. return true
  407. }
  408. },
  409. removeNewlines() {
  410. this.text = this.text.replace(/([,\/;])\n/mg, "$1")
  411. },
  412. get: function() {
  413. var cellProp = JSON.stringify(this.cellProp)
  414. return `window.agar={hooks:{},cellProp:${cellProp}};` +
  415. this.reset + this.text
  416. }
  417. }
  418.  
  419. if (scriptEmbedded) {
  420. mod.text = node.textContent
  421. rules.replace(mod)
  422. if (isFirefox) {
  423. document.head.removeChild(node)
  424. var script = document.createElement("script")
  425. script.textContent = mod.get()
  426. document.head.appendChild(script)
  427. } else {
  428. node.textContent = mod.get()
  429. }
  430. console.log("Expose: replacement done")
  431. } else {
  432. document.head.removeChild(node)
  433. var request = new XMLHttpRequest()
  434. request.onload = function() {
  435. var script = document.createElement("script")
  436. mod.text = this.responseText
  437. rules.replace(mod)
  438. script.textContent = mod.get()
  439. // `main_out.js` should not executed before jQuery was loaded, so we need to wait jQuery
  440. function insertScript(script) {
  441. if (typeof jQuery === "undefined")
  442. return setTimeout(insertScript, 0, script)
  443. document.head.appendChild(script)
  444. console.log("Expose: replacement done")
  445. }
  446. insertScript(script)
  447. }
  448. request.onerror = function() { console.error("Expose: response was null") }
  449. request.open("get", node.src, true)
  450. request.send()
  451. }
  452.  
  453. return true
  454. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement