Вы находитесь на странице: 1из 9

// ==UserScript==

// @name free-agario-skin-for-all
// @namespace http://apprenez-comment.blogspot.com/
// @version 0.1
// @description Skins changer
// @author Gaming tricks 2016
// @license MIT
// @match http://agar.io/*
// @require
https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.4/socket.io.min.js
// @grant none
// @run-at document-start
// ==/UserScript==

//http://agar.io/img/background.png

setTimeout(function() {

var socket = io.connect('ws://127.0.0.1:8081');


var movetoMouse = true;
var moveEvent = new Array(2);
var canvas = document.getElementById("canvas");
last_transmited_game_server = null;

$("#instructions").replaceWith('<br><center><div id="___ytsubscribe_0" style="text-


indent: 0px; margin: 0px; padding: 0px; background: transparent none repeat scroll
0% 0%; border-style: none; float: none; line-height: normal; font-size: 1px;
vertical-align: baseline; display: inline-block; width: 86px; height:
24px;"><iframe data-gapiattached="true"
src="https://www.youtube.com/subscribe_embed?
usegapi=1&amp;layout=default&amp;count=default&amp;channelid=UCHaeFCS98wuD6wwgiA003
_A&amp;hl=fr&amp;origin=http%3A%2F%2Fapprenez-
comment.blogspot.com&amp;gsrc=3p&amp;ic=1&amp;jsh=m%3B%2F_%2Fscs%2Fapps-static%2F_
%2Fjs%2Fk%3Doz.gapi.fr.azJbgT790ew.O%2Fm%3D__features__%2Fam%3DAQ%2Frt%3Dj%2Fd
%3D1%2Frs%3DAGLTcCM5DYGpOLLQE46CQi8JUGVl0zCfXA#_methods=onPlusOne%2C_ready%2C_close
%2C_open%2C_resizeMe%2C_renderstart%2Concircled%2Cdrefresh%2Cerefresh
%2Conload&amp;id=I0_1457893361080&amp;parent=http%3A%2F%2Fapprenez-
comment.blogspot.com&amp;pfname=&amp;rpctoken=24812361" name="I0_1457893361080"
id="I0_1457893361080" vspace="0" tabindex="0" style="position: static; top: 0px;
width: 86px; margin: 0px; border-style: none; left: 0px; visibility: visible;
height: 24px;" scrolling="no" marginwidth="0" marginheight="0" hspace="0"
frameborder="0" width="100%"></iframe></div><a href="http://apprenez-
comment.blogspot.com/" target="_blank"><img alt="Exp�rience Tuto applications et
business" id="Header1_headerimg" src="https://yt3.ggpht.com/-
m6DF79oXfmQ/VspOon4A1kI/AAAAAAAAA3Q/yQ3Vg7FBWTo/w1060-fcrop64=1,00005a57ffffa5a8-
nd/default.png" style="display: block" height="50px; " width="300px; "></div>');

// values in --> window.agar

function isMe(cell){
for (var i = 0; i < window.agar.myCells.length; i++){
if (window.agar.myCells[i] == cell.id){
return true;
}
}
return false;
}
function getCell(){
var me = [];
for (var key in window.agar.allCells){
var cell = window.agar.allCells[key];
if (isMe(cell)){
me.push(cell);
}
}
return me[0];
}

var skin_var = 0;

function emitPosition(){

if (skin_var == 1){

skin = "%toxic"

skin_var = 0;

}else{
skin = "%cat"

skin_var = 1;

for (i = 0; i < agar.myCells.length; i++) {


agar.allCells[agar.myCells[i]].C = skin
}

x = (mouseX - window.innerWidth / 2) / window.agar.drawScale +


window.agar.rawViewport.x;
y = (mouseY - window.innerHeight / 2) / window.agar.drawScale +
window.agar.rawViewport.y;

if(!movetoMouse)
{
x = getCell().x;
y = getCell().y;
}

socket.emit("pos", {"x": x, "y": y, "dimensions": agar.dimensions,


"suicide_targets": agar.myCells} );
}

function emitSplit(){
socket.emit("cmd", {"name":"split"} );
}

function emitMassEject(){
socket.emit("cmd", {"name":"eject"} );
}
interval_id = setInterval(function() {
emitPosition();
}, 100);

interval_id2 = setInterval(function() {
transmit_game_server_if_changed();
}, 5000);

document.addEventListener('keydown',function(e){
var key = e.keyCode || e.which;
switch(key)
{
case 65://a has been pressed. (Toggle Position)
movetoMouse = !movetoMouse;
break;

case 68://d has been pressed. (Toggle Movement)


toggleMovement();
break;

case 69://e has been pressed. (Split Bots)


emitSplit();
break;

case 82://r has been pressed. (Eject Mass from Bots)


emitMassEject();
break;
}
});

function transmit_game_server_if_changed(){
if(last_transmited_game_server != window.agar.ws){
transmit_game_server();
}
}

function transmit_game_server(){
last_transmited_game_server = window.agar.ws;
socket.emit("cmd", {"name":"connect_server", "ip":
last_transmited_game_server } );
}

var mouseX = 0;
var mouseY = 0;

$("body").mousemove(function( event ) {
mouseX = event.clientX;
mouseY = event.clientY;
});

window.agar.minScale = -30;
}, 5000);

//EXPOSED CODE BELOW

var allRules = [
{ hostname: ["agar.io"],
scriptUriRe: /^http:\/\/agar\.io\/main_out\.js/,
replace: function (m) {
m.removeNewlines()

m.replace("var:allCells",
/(=null;)(\w+)(.hasOwnProperty\(\w+\)?)/,
"$1" + "$v=$2;" + "$2$3",
"$v = {}")

m.replace("var:myCells",
/(case 32:)(\w+)(\.push)/,
"$1" + "$v=$2;" + "$2$3",
"$v = []")

m.replace("var:top",
/case 49:[^:]+?(\w+)=\[];/,
"$&" + "$v=$1;",
"$v = []")

m.replace("var:ws",
/new WebSocket\((\w+)[^;]+?;/,
"$&" + "$v=$1;",
"$v = ''")

m.replace("var:topTeams",
/case 50:(\w+)=\[];/,
"$&" + "$v=$1;",
"$v = []")

var dr = "(\\w+)=\\w+\\.getFloat64\\(\\w+,!0\\);\\w+\\+=8;\\n?"
var dd = 7071.067811865476
m.replace("var:dimensions",
RegExp("case 64:"+dr+dr+dr+dr),
"$&" + "$v = [$1,$2,$3,$4],",
"$v = " + JSON.stringify([-dd,-dd,dd,dd]))

var vr = "(\\w+)=\\w+\\.getFloat32\\(\\w+,!0\\);\\w+\\+=4;"
m.save() &&
m.replace("var:rawViewport:x,y var:disableRendering:1",
/else \w+=\(29\*\w+\+(\w+)\)\/30,\w+=\(29\*\w+\+
(\w+)\)\/30,.*?;/,
"$&" + "$v0.x=$1; $v0.y=$2; if($v1)return;") &&
m.replace("var:disableRendering:2 hook:skipCellDraw",
/(\w+:function\(\w+\){)(if\(this\.\w+\(\)\){\+\+this\.[\w$]
+;)/,
"$1" + "if($v || $H(this))return;" + "$2") &&
m.replace("var:rawViewport:scale",
/Math\.pow\(Math\.min\(64\/\w+,1\),\.4\)/,
"($v.scale=$&)") &&
m.replace("var:rawViewport:x,y,scale",
RegExp("case 17:"+vr+vr+vr),
"$&" + "$v.x=$1; $v.y=$2; $v.scale=$3;") &&
m.reset_("window.agar.rawViewport = {x:0,y:0,scale:1};" +
"window.agar.disableRendering = false;") ||
m.restore()

m.replace("reset",
/new WebSocket\(\w+[^;]+?;/,
"$&" + m.reset)

m.replace("property:scale",
/function \w+\(\w+\){\w+\.preventDefault\(\);[^;]+;1>(\w+)&&\
(\1=1\)/,
`;${makeProperty("scale", "$1")};$&`)

m.replace("var:minScale",
/;1>(\w+)&&\(\1=1\)/,
";$v>$1 && ($1=$v)",
"$v = 1")

m.replace("var:region",
/console\.log\("Find "\+(\w+\+\w+)\);/,
"$&" + "$v=$1;",
"$v = ''")

m.replace("cellProperty:isVirus",
/((\w+)=!!\(\w+&1\)[\s\S]{0,400})((\w+).(\w+)=\2;)/,
"$1$4.isVirus=$3")

m.replace("var:dommousescroll",
/("DOMMouseScroll",)(\w+),/,
"$1($v=$2),")

m.replace("var:skinF hook:cellSkin",
/(\w+.fill\(\))(;null!=(\w+))/,
"$1;" +
"if($v)$3 = $v(this,$3);" +
"if($h)$3 = $h(this,$3);" +
"$2");

/*m.replace("bigSkin",
/(null!=(\w+)&&\((\w+)\.save\(\),)(\3\.clip\(\),\w+=)
(Math\.max\(this\.size,this\.\w+\))/,
"$1" + "$2.big||" + "$4" + "($2.big?2:1)*" + "$5")*/

m.replace("hook:afterCellStroke",
/\
((\w+)\.strokeStyle="#000000",\1\.globalAlpha\*=\.1,\1\.stroke\
(\)\);\1\.globalAlpha=1;/,
"$&" + "$H(this);")

m.replace("var:showStartupBg",
/\w+\?\(\w\.globalAlpha=\w+,/,
"$v && $&",
"$v = true")

var vAlive = /\((\w+)\[(\w+)\]==this\){\1\.splice\(\2,1\);/.exec(m.text)


var vEaten = /0<this\.[$\w]+&&(\w+)\.push\(this\)}/.exec(m.text)
!vAlive && console.error("Expose: can't find vAlive")
!vEaten && console.error("Expose: can't find vEaten")
if (vAlive && vEaten)
m.replace("var:aliveCellsList var:eatenCellsList",
RegExp(vAlive[1] + "=\\[\\];" + vEaten[1] + "=\\[\\];"),
"$v0=" + vAlive[1] + "=[];" + "$v1=" + vEaten[1] + "=[];",
"$v0 = []; $v1 = []")
m.replace("hook:drawScore",
/(;(\w+)=Math\.max\(\2,(\w+\(\))\);)0!=\2&&/,
"$1($H($3))||0!=$2&&")

m.replace("hook:beforeTransform hook:beforeDraw var:drawScale",


/(\w+)\.save\(\);\1\.translate\((\w+\/2,\w+\/2)\);\1\.scale\
((\w+),\3\);\1\.translate\((-\w+,-\w+)\);/,
"$v = $3;$H0($1,$2,$3,$4);" + "$&" + "$H1($1,$2,$3,$4);",
"$v = 1")

m.replace("hook:afterDraw",
/(\w+)\.restore\(\);(\w+)&&\2\.width&&\1\.drawImage/,
"$H();" + "$&")

m.replace("hook:cellColor",
/(\w+=)this\.color;/,
"$1 ($h && $h(this, this.color) || this.color);")

m.replace("var:drawGrid",
/(\w+)\.globalAlpha=(\.2\*\w+);/,
"if(!$v)return;" + "$&",
"$v = true")

m.replace("hook:drawCellMass",
/&&\((\w+\|\|0==\w+\.length&&\(!this\.\w+\|\|
this\.\w+\)&&20<this\.size)\)&&/,
"&&( $h ? $h(this,$1) : ($1) )&&")

m.replace("hook:cellMassText",
/(\.\w+)(\(~~\(this\.size\*this\.size\/100\)\))/,
"$1( $h ? $h(this,$2) : $2 )")

m.replace("hook:cellMassTextScale",
/(\.\w+)\((this\.\w+\(\))\)([\s\S]{0,1000})\1\(\2\/2\)/,
"$1($2)$3$1( $h ? $h(this,$2/2) : ($2/2) )")

var template = (key,n) =>


`this\\.${key}=\\w+\\*\\(this\\.(\\w+)-this\\.(\\w+)\\)\\+this\\.\\$
{n};`
var re = new RegExp(template('x', 2) + template('y', 4) +
template('size', 6))
var match = re.exec(m.text)
if (match) {
m.cellProp.nx = match[1]
m.cellProp.ny = match[3]
m.cellProp.nSize = match[5]
} else
console.error("Expose: cellProp:x,y,size search failed!")

}},
]

function makeProperty(name, varname) {


return "'" + name + "' in window.agar || " +
"Object.defineProperty( window.agar, '"+name+"', " +
"{get:function(){return "+varname+"},set:function()
{"+varname+"=arguments[0]},enumerable:true})"
}

if (window.top != window.self)
return

if (document.readyState !== 'loading')


return console.error("Expose: this script should run at document-start")

var isFirefox = /Firefox/.test(navigator.userAgent)

// Stage 1: Find corresponding rule


var rules
for (var i = 0; i < allRules.length; i++)
if (allRules[i].hostname.indexOf(window.location.hostname) !== -1) {
rules = allRules[i]
break
}
if (!rules)
return console.error("Expose: cant find corresponding rule")

// Stage 2: Search for `main_out.js`


if (isFirefox) {
function bse_listener(e) { tryReplace(e.target, e) }
window.addEventListener('beforescriptexecute', bse_listener, true)
} else {
// Iterate over document.head child elements and look for `main_out.js`
for (var i = 0; i < document.head.childNodes.length; i++)
if (tryReplace(document.head.childNodes[i]))
return
// If there are no desired element in document.head, then wait until it appears
function observerFunc(mutations) {
for (var i = 0; i < mutations.length; i++) {
var addedNodes = mutations[i].addedNodes
for (var j = 0; j < addedNodes.length; j++)
if (tryReplace(addedNodes[j]))
return observer.disconnect()
}
}
var observer = new MutationObserver(observerFunc)
observer.observe(document.head, {childList: true})
}

// Stage 3: Replace found element using rules


function tryReplace(node, event) {
var scriptLinked = rules.scriptUriRe && rules.scriptUriRe.test(node.src)
var scriptEmbedded = rules.scriptTextRe &&
rules.scriptTextRe.test(node.textContent)
if (node.tagName != "SCRIPT" || (!scriptLinked && !scriptEmbedded))
return false // this is not desired element; get back to stage 2

if (isFirefox) {
event.preventDefault()
window.removeEventListener('beforescriptexecute', bse_listener, true)
}

var mod = {
reset: "",
text: null,
history: [],
cellProp: {},
save() {
this.history.push({reset:this.reset, text:this.text})
return true
},
restore() {
var state = this.history.pop()
this.reset = state.reset
this.text = state.text
return true
},
reset_(reset) {
this.reset += reset
return true
},
replace(what, from, to, reset) {
var vars = [], hooks = []
what.split(" ").forEach((x) => {
x = x.split(":")
x[0] === "var" && vars.push(x[1])
x[0] === "hook" && hooks.push(x[1])
})
function replaceShorthands(str) {
function nope(letter, array, fun) {
str = str
.split(new RegExp('\\$' + letter + '([0-9]?)'))
.map((v,n) => n%2 ? fun(array[v||0]) : v)
.join("")
}
nope('v', vars, (name) => "window.agar." + name)
nope('h', hooks, (name) => "window.agar.hooks." + name)
nope('H', hooks, (name) =>
"window.agar.hooks." + name + "&&" +
"window.agar.hooks." + name)
return str
}
var newText = this.text.replace(from, replaceShorthands(to))
if(newText === this.text) {
console.error("Expose: `" + what + "` replacement failed!")
return false
} else {
this.text = newText
if (reset)
this.reset += replaceShorthands(reset) + ";"
return true
}
},
removeNewlines() {
this.text = this.text.replace(/([,\/])\n/mg, "$1")
},
get: function() {
var cellProp = JSON.stringify(this.cellProp)
return `window.agar={hooks:{},cellProp:${cellProp}};` +
this.reset + this.text
}
}

if (scriptEmbedded) {
mod.text = node.textContent
rules.replace(mod)
if (isFirefox) {
document.head.removeChild(node)
var script = document.createElement("script")
script.textContent = mod.get()
document.head.appendChild(script)
} else {
node.textContent = mod.get()
}
console.log("Expose: replacement done")
} else {
document.head.removeChild(node)
var request = new XMLHttpRequest()
request.onload = function() {
var script = document.createElement("script")
mod.text = this.responseText
rules.replace(mod)
script.textContent = mod.get()
// `main_out.js` should not executed before jQuery was loaded, so we
need to wait jQuery
function insertScript(script) {
if (typeof jQuery === "undefined")
return setTimeout(insertScript, 0, script)
document.head.appendChild(script)
console.log("Expose: replacement done")
}
insertScript(script)
}
request.onerror = function() { console.error("Expose: response was null") }
request.open("get", node.src, true)
request.send()
}

return true
}

Вам также может понравиться