Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function init(view,value,attr){function Class(){attr.x=view.getUint16(value,true);value+=2;attr.y=view.getUint16(value,true);value+=2;attr.width=view.getUint16(value,true);value+=2;attr.height=view.getUint16(value,true);value+=2;}
- function done(){var color=view.getUint32(value,true).toString(16);for(;6>color.length;){color="0"+color;}
- value+=4;attr.color="#"+color;}
- var name=view.getUint8(value);value+=1;attr.type=name;switch(name){case 255:break;case 0:attr.x=view.getUint16(value,true);value+=2;attr.y=view.getUint16(value,true);value+=2;attr.size=view.getUint8(value);value+=1;attr.isCentered=!!view.getUint8(value);value+=1;name=read(view,value);attr.text=name[0];value=name[1];break;case 1:Class();var py=!attr.color;done();break;name=attr.x|0;var y=attr.y|0;var version=attr.width|0;var h=attr.height|0;if(py){py=y;for(;py<y+h;++py){var info=name;for(;info<name+version;++info){++tmp[info+400*py];}}}
- break;case 2:Class();attr.isBad=!!view.getUint8(value);value+=1;break;case 3:Class();attr.count=view.getUint16(value,true);value+=2;done();break;case 4:Class();attr.count=view.getUint16(value,true);value+=2;done();break;default:throw Error("Unknown object type "+name);;}
- return value;}
- function read(view,offset){var optsData="";var lo=0;var chunk=0;for(;0!=(chunk=view.getUint8(offset));++offset){lo<<=8;lo|=chunk;if(!(chunk&128)){optsData+=String.fromCharCode(lo);lo=0;}}
- if(0!=lo){optsData+=String.fromCharCode(lo);}
- return[optsData,offset+1];}
- function proc(data){var view=new DataView(data.buffer),v,index,parts,x;if(view.getUint8(0)==1){var push=function(view,element){return element+2+4*view.getUint16(element,true)};index=view.getUint16(1,true);index=push(view,3+8*index);v=view.getUint16(index,true);index+=2;parts=0;for(;parts<v;parts++){x=view.getUint32(index,true);item=0;a:for(;item<items.length;item++){if(items[item].id==x){items.splice(item,1);break a;}}
- index+=4;}
- v=view.getUint16(index,true);index+=2;parts=0;for(;parts<v;parts++){a:{item=view.getUint32(index,true);x=0;for(;x<items.length;x++){if(items[x].id==item){item=items[x];break a;}}
- item={id:item};items.push(item);}
- index+=4;index=init(view,index,item);}
- return;}
- items=[];head=[view.getUint16(1,true),view.getUint16(3,true)];v=view.getUint16(5,true);index=7;parts=0;for(;parts<v;parts++){item={};item.id=view.getUint32(index,true);index+=4;index=init(view,index,item);if(item.x>0)item.x--,item.width++;if(item.y>0)item.y--,item.height++;if(item.x+item.width<400)item.width++;if(item.y+item.height<300)item.height++;items.push(item);}}
- function dos(head){var gridX=400,gridY=300;var grid=[];visit=[];for(var i=0;i<gridY;i++){grid[i]=[];visit[i]=[];for(var j=0;j<gridX;j++)grid[i][j]=0,visit[i][j]=0;}
- items.forEach(function(d){if((d.type==1)||(d.type==2&&d.isBad))
- for(var j=0;j<d.height;j++)for(var i=0;i<d.width;i++)grid[d.y+j][d.x+i]=3});var bfs=[head],bfs2=[];while(bfs.length){bfs.forEach(function(dat){var x=dat[0],y=dat[1];if(grid[y][x]==3)return;grid[y][x]=3;for(var X=x+1;X<gridX&&!(grid[y][X]&1);X++){grid[y][X]|=1;if(!visit[y][X]){visit[y][X]=[x,y],bfs2.push([X,y]);}}
- for(var X=x-1;X>=0&&!(grid[y][X]&1);X--){grid[y][X]|=1;if(!visit[y][X]){visit[y][X]=[x,y],bfs2.push([X,y]);}}
- for(var Y=y+1;Y<gridY&&!(grid[Y][x]&2);Y++){grid[Y][x]|=2;if(!visit[Y][x]){visit[Y][x]=[x,y],bfs2.push([x,Y]);}}
- for(var Y=y-1;Y>=0&&!(grid[Y][x]&2);Y--){grid[Y][x]|=2;if(!visit[Y][x]){visit[Y][x]=[x,y],bfs2.push([x,Y]);}}});bfs=bfs2;bfs2=[];}
- console.log("DOS done");}
- var tmp=WebSocket.prototype.send;WebSocket.prototype.send=function(x){WebSocket.prototype.send=tmp;tmp=this;this.send=function(){};var t2=this.onmessage;this.onmessage=function(x){var msg=new Uint8Array(x.data);if(msg[0]==1||msg[0]==4){proc(msg);}
- return t2.call(this,x)}}
- var ff=navigator.userAgent.indexOf("Chrome")==-1;var num_1=1*prompt("sockets (DONT GO OVER 2 AS CURSORS.io HAS RESTRICTIONS NOW (WORKING ON FIX))",ff?190:25),num_2=0;var pool=[],cursors=[];for(var i=0;i<num_1;i++){pool.push(new WebSocket("ws://104.248.73.48:2828"));pool[pool.length-1].onopen=function(x){if(++num_2==num_1)alert("OK. remember to disable cursor lock. shift+click to deploy minion. ctrl+click to ignore pathfinding. click to move");}}
- canvas.onclick=function(e){var xy=[(e.layerX-(ff?canvas.offsetLeft:0))/2|0,(e.layerY-(ff?canvas.offsetTop:0))/2|0];console.log(xy);var mov=[];if(window["items"]&&!(xy[0]==head[0]&&xy[1]==head[1])&&!e.ctrlKey){dos(head);var xy2=xy.slice(0);while(visit[xy2[1]][xy2[0]]){mov.push(xy2);xy2=visit[xy2[1]][xy2[0]]}mov=mov.reverse();}else mov.push(xy);if(mov.length==0){console.log("NO MOV");return;}
- if(!e.shiftKey){head=xy;pool.forEach(function(x){move(x,mov)});move(tmp,mov);return;}
- var buf=new ArrayBuffer(9),q=new DataView(buf);q.setUint8(0,2,1);q.setUint16(1,xy[0],1);q.setUint16(3,xy[1],1);q.setInt32(5,-1,1);cursors.push(pool.pop());cursors[cursors.length-1].click=buf;move(cursors[cursors.length-1],mov);}
- function move(x,mov,i=0){if(i==0)x.rdy=0;if(i>=mov.length){x.rdy=1;return;}
- var buf=new ArrayBuffer(9),q=new DataView(buf);q.setUint8(0,2,1);q.setUint16(1,mov[i][0],1);q.setUint16(3,mov[i][1],1);q.setInt32(5,-1,1);WebSocket.prototype.send.call(x,buf);setTimeout(function(){move(x,mov,i+1)},100);}
- var lop=setInterval(function(){cursors.forEach(function(x){if(x.rdy)x.send(x.click)})},500);
Add Comment
Please, Sign In to add comment