Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <h1> Cursors.io development program </h1><div style="border: 10px solid #000000; margin: 20px auto 10px auto; padding: 0; width: 800px; height: 600px;"><canvas id="cursor" style="width: 800px; height: 600px;" width="800" height="600"></canvas></div><p id="ponline" style="text-align:center"></p> <script>
- const ws = new WebSocket('wss://websocketproxy-1.bens7.repl.co/');
- var img = document.createElement("img");
- img.crossOrigin="anonymous";
- img.src="https://raw.githubusercontent.com/BenS12362/Cursorsiopicture/main/cursor.png";
- // zursor master parser functions see i stole code lol
- // updated may 26, 2019
- zM = {};//added by ME
- window.drawings = [];
- window.clicks = [];
- var players = [];
- var x,y;
- zM.ease = function(n, o, upd) {
- var dist = n - o,
- prog = (Date.now() - upd) / 100,
- maxMin = Math.min(Math.max(0, prog), 1);
- return o + (maxMin ** 2 * (3 - 2 * maxMin)) * dist;
- }
- zM.parse = {
- /**
- * Returns an array as [local, players, offset]
- */
- cursors: function(buffer, offset) {
- var dat = new DataView(buffer);
- var local = dat.getUint16(offset, true);
- offset += 2;
- var players = [];
- for (var i = 0; i < local; ++i) {
- if(window.id === dat.getUint32(offset, true)){window.x=dat.getUint16(offset + 4, true);window.y=dat.getUint16(offset + 6, true);}
- players.push({
- id: dat.getUint32(offset, true),
- x: dat.getUint16(offset + 4, true),
- y: dat.getUint16(offset + 6, true),
- });
- offset += 8;
- }
- return [local, players, offset];
- },
- /**
- * Returns an array as [clicks, offset]
- */
- clicks: function(buffer, offset) {
- var dat = new DataView(buffer);
- var count = dat.getUint16(offset, true);
- var clicks = [];
- offset += 2;
- for (var i = 0; i < count; ++i) {
- clicks.push({
- x: dat.getUint16(offset, true),
- y: dat.getUint16(offset + 2, true),
- time: Date.now()
- });
- offset += 4;
- }
- return [clicks, offset];
- },
- /**
- * Returns an array as [clicks, offset]
- */
- drawing: function(buffer, offset) {
- var dat = new DataView(buffer);
- var count = dat.getUint16(offset, true);
- var drawings = [];
- offset += 2;
- for (var i = 0; i < count; ++i) {
- drawings.push({
- x: dat.getUint16(offset, true),
- y: dat.getUint16(offset + 2, true),
- x2: dat.getUint16(offset + 4, true),
- y2: dat.getUint16(offset + 6, true),
- time: Date.now()
- });
- offset += 8;
- }
- return [drawings, offset];
- },
- /**
- * Returns an array as [ids, offset]
- */
- remove: function(buffer, offset) {
- var dat = new DataView(buffer);
- var count = dat.getUint16(offset, true);
- var ids = [];
- offset += 2;
- for (var i = 0; i < count; ++i) {
- ids.push(dat.getUint32(offset, true));
- offset += 4;
- }
- return [ids, offset];
- },
- /**
- * Parses objdata (string) and outputs as objects.
- */
- objData: function(objdata) {
- var obj = objdata;
- var nObj = [];
- for (var i = 0; i < obj.length; ++i) {
- var nO = {};
- obj[i] = obj[i].split(/\.+/g);
- nO.id = parseInt(obj[i].shift());
- var type = obj[i].shift();
- switch (type) {
- case '0':
- nO.type = 0;
- nO.x = parseInt(obj[i].shift());
- nO.y = parseInt(obj[i].shift());
- nO.size = parseInt(obj[i].shift());
- nO.isCentered = obj[i].shift() === 'false'?false:true;
- nO.content = obj[i].join('');
- break;
- case '1':
- nO.type = 1;
- nO.x = parseInt(obj[i].shift());
- nO.y = parseInt(obj[i].shift());
- nO.w = parseInt(obj[i].shift());
- nO.h = parseInt(obj[i].shift());
- nO.color = obj[i].shift();
- break;
- case '2':
- nO.type = 2;
- nO.x = parseInt(obj[i].shift());
- nO.y = parseInt(obj[i].shift());
- nO.w = parseInt(obj[i].shift());
- nO.h = parseInt(obj[i].shift());
- nO.isBad = obj[i].shift()==='false'?false:true;
- break;
- case '3':
- nO.type = 3;
- nO.x = parseInt(obj[i].shift());
- nO.y = parseInt(obj[i].shift());
- nO.w = parseInt(obj[i].shift());
- nO.h = parseInt(obj[i].shift());
- nO.count = parseInt(obj[i].shift());
- nO.color = obj[i].shift();
- break;
- case '4':
- nO.type = 4;
- nO.x = parseInt(obj[i].shift());
- nO.y = parseInt(obj[i].shift());
- nO.w = parseInt(obj[i].shift());
- nO.h = parseInt(obj[i].shift());
- nO.count = parseInt(obj[i].shift());
- nO.color = obj[i].shift();
- nO.lastClickAt = 0;
- break;
- }
- nObj.push(nO);
- }
- return nObj;
- },
- /**
- * Returns an array as [objdata, offset]
- * objdata is required to be further parsed with zM.parse.objData()
- */
- objects: function(buffer, offset) {
- var dat = new DataView(buffer);
- var count = dat.getUint16(offset, true);
- var objdata = [];
- offset += 2;
- for (var i = 0; i < count; ++i) {
- var id = dat.getUint32(offset, true);
- offset += 4;
- var type = dat.getUint8(offset);
- var objdat = id+'.';
- ++offset;
- switch (type) {
- case 0:
- objdat += '0.';
- objdat += `${dat.getUint16(offset, true)}.`;
- objdat += `${dat.getUint16(offset+2, true)}.`;
- objdat += `${dat.getUint8(offset+4)}.`;
- objdat += `${!!dat.getUint8(offset+5)}.`;
- offset += 5;
- for (;1;) if (dat.getUint8(++offset) != 0) objdat += String.fromCharCode(dat.getUint8(offset));
- else break;
- ++offset;
- break;
- case 1:
- objdat += '1.';
- objdat += `${dat.getUint16(offset, true)}.`;
- objdat += `${dat.getUint16(offset+2, true)}.`;
- objdat += `${dat.getUint16(offset+4, true)}.`;
- objdat += `${dat.getUint16(offset+6, true)}.`;
- var color = dat.getUint32(offset+8, true).toString(16);
- for (; color.length < 6;) color = '0' + color;
- objdat += '#' + color + '.';
- offset += 12;
- break;
- case 2:
- objdat += '2.';
- objdat += `${dat.getUint16(offset, true)}.`;
- objdat += `${dat.getUint16(offset+2, true)}.`;
- objdat += `${dat.getUint16(offset+4, true)}.`;
- objdat += `${dat.getUint16(offset+6, true)}.`;
- objdat += `${!!dat.getUint8(offset+8)}.`;
- offset += 9;
- break;
- case 3:
- objdat += '3.';
- objdat += `${dat.getUint16(offset, true)}.`;
- objdat += `${dat.getUint16(offset+2, true)}.`;
- objdat += `${dat.getUint16(offset+4, true)}.`;
- objdat += `${dat.getUint16(offset+6, true)}.`;
- objdat += `${dat.getUint16(offset+8, true)}.`;
- var color = dat.getUint32(offset+10, true).toString(16);
- for (; color.length < 6;) color = '0' + color;
- objdat += '#' + color + '.';
- offset += 14;
- break;
- case 4:
- objdat += '4.';
- objdat += `${dat.getUint16(offset, true)}.`;
- objdat += `${dat.getUint16(offset+2, true)}.`;
- objdat += `${dat.getUint16(offset+4, true)}.`;
- objdat += `${dat.getUint16(offset+6, true)}.`;
- objdat += `${dat.getUint16(offset+8, true)}.`;
- var color = dat.getUint32(offset+10, true).toString(16);
- for (; color.length < 6;) color = '0' + color;
- objdat += '#' + color + '.';
- offset += 14;
- break;
- }
- objdata.push(objdat);
- }
- return [objdata, offset];
- }
- }
- zM.packet = {
- /**
- *
- * @param {array} sockets Array of sockets to move
- */
- moveSocket(sockets, x, y, bots) {
- var buf = new ArrayBuffer(9),
- dat = new DataView(buf);
- dat.setUint8(0, 1);
- dat.setUint16(1, x, true);
- dat.setUint16(3, y, true);
- dat.setUint32(5, -1, true);
- sockets.forEach(X => typeof X.send === 'function' && X.send(buf));
- bots.forEach(X => {
- ++X.packets.sentTotal;
- ++X.packets.sentPS;
- setTimeout(()=>{--X.packets.sentPS},1000);
- X.packets.lastSent = Date.now();
- });
- },
- /**
- *
- * @param {array} sockets Array of sockets to click with
- */
- clickSocket(sockets, x, y, bots) {
- var buf = new ArrayBuffer(9),
- dat = new DataView(buf);
- dat.setUint8(0, 2);
- dat.setUint16(1, x, true);
- dat.setUint16(3, y, true);
- dat.setUint32(5, -1, true);
- sockets.forEach(X => typeof X.send === 'function' && X.send(buf));
- bots.forEach(X => {
- ++X.packets.sentTotal;
- ++X.packets.sentPS;
- setTimeout(()=>{--X.packets.sentPS},1000);
- X.packets.lastSent = Date.now();
- });
- },
- /**
- *
- * @param {array} sockets Array of sockets to draw with
- */
- drawSocket(sockets, x, y, x2, y2, bots) {
- var buf = new ArrayBuffer(9),
- dat = new DataView(buf);
- dat.setUint8(0, 3);
- dat.setUint16(1, x, true);
- dat.setUint16(3, y, true);
- dat.setUint16(5, x2, true);
- dat.setUint16(7, y2, true);
- sockets.forEach(X => typeof X.send === 'function' && (X.send(buf)));
- bots.forEach(X => {
- ++X.packets.sentTotal;
- ++X.packets.sentPS;
- setTimeout(()=>{--X.packets.sentPS},1000);
- X.packets.lastSent = Date.now();
- });
- }
- }
- window.playersOnline = 0;
- window.objs = [];
- var abs = [];
- var c = document.getElementById("cursor");
- var a = c.getContext("2d");
- window.updatec = function(objs){
- a.fillStyle="#FFFFFF";
- a.fillRect(0,0,800,600);
- a.fillStyle="#000000";
- var m = objs;
- var t = +new Date();
- a.textAlign="start";
- for (n = 0; n < m.length; n++) {
- var b = m[n];
- if (0 == b.type) {
- a.font = b.size + "px NovaSquare";
- var c = b.x << 1,
- d = b.y << 1;
- b.isCentered && (c -= a.measureText(b.content).width / 2);
- a.fillStyle = "#000000";
- a.fillText(b.content, c, d)
- } else if (1 == b.type) a.fillStyle = b.color,
- a.fillRect(b.x << 1, b.y << 1, b.w << 1, b.h << 1), a.strokeStyle = "#000000", a.globalAlpha = .2, a.lineWidth = 2, a.strokeRect((b.x << 1) + 1, (b.y << 1) + 1, (b.w << 1) - 2, (b.h << 1) - 2), a.globalAlpha = 1;
- else if (2 == b.type) a.fillStyle = b.isBad ? "#FF0000" : "#00FF00", a.globalAlpha = .2, a.fillRect(b.x << 1, b.y << 1, b.w << 1, b.h << 1), a.globalAlpha = 1;
- else if (3 == b.type) {
- var c = b.x << 1,
- d = b.y << 1,
- f = b.w << 1,
- e = b.h << 1;
- a.fillStyle = b.color;
- a.globalAlpha = .2;
- a.fillRect(c, d, f, e);
- a.globalAlpha = .5;
- a.fillStyle = "#000000";
- 40 > b.w ||
- 40 > b.h ? (a.font = "30px NovaSquare", a.fillText(b.count, c + f / 2 - a.measureText(b.count).width / 2, d + e / 2 + 10)) : (a.font = "60px NovaSquare", a.fillText(b.count, c + f / 2 - a.measureText(b.count).width / 2, d + e / 2 + 20));
- a.globalAlpha = 1
- } else if (4 == b.type) {
- c = b.x << 1;
- d = b.y << 1;
- f = b.w << 1;
- e = b.h << 1;
- a.fillStyle = b.color;
- a.strokeStyle = b.color;
- a.globalAlpha = 1;
- a.fillRect(c, d, f, e);
- a.globalAlpha = .2;
- a.fillStyle = "#000000";
- a.fillRect(c, d, f, e);
- a.globalAlpha = 1;
- a.fillStyle = b.color;
- var h = false,
- g = h ? 8 : 12;
- a.fillRect(c + g,
- d + g, f - 2 * g, e - 2 * g);
- a.strokeStyle = "#000000";
- a.globalAlpha = .1;
- a.beginPath();
- a.moveTo(c, d);
- a.lineTo(c + g, d + g);
- a.moveTo(c + f, d);
- a.lineTo(c + f - g, d + g);
- a.moveTo(c, d + e);
- a.lineTo(c + g, d + e - g);
- a.moveTo(c + f, d + e);
- a.lineTo(c + f - g, d + e - g);
- a.moveTo(c, d);
- a.rect(c, d, f, e);
- a.rect(c + g, d + g, f - 2 * g, e - 2 * g);
- a.stroke();
- a.fillStyle = "#000000";
- a.globalAlpha = .5;
- 50 > b.w || 50 > b.h ? (a.font = "35px NovaSquare", a.fillText(b.count, c + f / 2 - a.measureText(b.count).width / 2, d + e / 2 + 13)) : (a.font = "45px NovaSquare", a.fillText(b.count, c + f / 2 - a.measureText(b.count).width /
- 2, d + e / 2 + 16));
- h && (a.fillStyle = "#000000", a.globalAlpha = .15, a.fillRect(c + g, d + g, f - 2 * g, e - 2 * g));
- a.globalAlpha = 1
- }
- }}
- function plays(b) {
- var offset = 1;
- var players = [];
- var local = b.getUint16(offset, !0);
- offset += 2;
- for (var i = 0; i < local; i++) {
- players.push({
- id: b.getUint32(offset, !0),
- x: b.getUint16(offset + 4, !0),
- y: b.getUint16(offset + 6, !0)
- })
- }
- return players;
- }
- function objs2(dat) {
- var offset = 5;
- let count = dat.getUint16(offset, !0);
- let objdata = [];
- offset += 2;
- for (let i = 0; i < count; ++i) {
- let id = dat.getUint32(offset, !0);
- offset += 4;
- let type = dat.getUint8(offset, !1);
- ++offset;
- switch (type) {
- case 0:
- objdata.push({
- type: 0,isCentered:!!dat.getUint8(offset+5,!1), x:dat.getUint16(offset,!0),
- y:dat.getUint16(offset+2,!0),
- size:dat.getUint8(offset+4,!1)
- });
- offset += 5;
- objdata[i].content = "";
- for (; 1;){
- if (dat.getUint8(++offset, !1) != 0) {
- objdata[i].content += String.fromCharCode(dat.getUint8(offset, !1));
- }
- else {
- break;
- }}
- ++offset;break;
- case 1:
- let color = dat.getUint32(offset + 8, !0).toString(16);
- for (; color.length < 6;) color = '0' + color;
- color2 = '#' + color;
- objdata.push({
- type: 1
- ,color:color2, x:dat.getUint16(offset,!0),
- y:dat.getUint16(offset+2,!0),
- w:dat.getUint16(offset+4,!0),
- h:dat.getUint16(offset+6,!0)
- });
- offset += 12;
- break;
- case 2:
- objdata.push({
- type: 2,
- isBad:!!dat.getUint8(offset+8,!1),
- x:dat.getUint16(offset,!0),
- y:dat.getUint16(offset+2,!0),
- w:dat.getUint16(offset+4,!0),
- h:dat.getUint16(offset+6,!0)
- });
- offset += 9;
- break;
- case 3:
- let color4 = dat.getUint32(offset + 10, !0).toString(16);
- for (; color4.length < 6;){ color4 = '0' + color4;}
- color2 = '#' + color4;
- objdata.push({
- type: 3, x:dat.getUint16(offset,!0),
- y:dat.getUint16(offset+2,!0),
- w:dat.getUint16(offset+4,!0),
- h:dat.getUint16(offset+6,!0),count:dat.getUint16(offset+8, !0),color:color2
- });
- offset += 14;
- break;
- case 4:
- let color3 = dat.getUint32(offset + 10, !0).toString(16);
- for (; color3.length < 6;) color3 = '0' + color3;
- color2 = '#' + color3;
- objdata.push({
- type: 4, x:dat.getUint16(offset,!0),
- y:dat.getUint16(offset+2,!0),
- w:dat.getUint16(offset+4,!0),
- h:dat.getUint16(offset+6,!0),count:dat.getUint16(offset+8, !0),color:color2
- });
- offset += 14;
- break;
- }
- }
- return objdata;
- }
- window.logged2=0;
- window.loggged=false;
- function ren(plays){for(var j = 0;j<plays.length;j++){this.players = plays;
- this.players[j].ox = zM.ease(this.players[j].x, this.players[j].ox, this.players[j].lastUpdate);
- this.players[j].oy = zM.ease(this.players[j].y, this.players[j].oy, this.players[j].lastUpdate);
- a.drawImage(img, this.players[j].ox*2 - 6, this.players[j].oy*2 - 6, 23, 30);}if(window.logged2<3){console.log(plays);}
- window.logged2+=1;}
- function msg(a) {
- var b = new DataView(a.data);
- let len = b.byteLength;
- switch (b.getUint8(0)) {
- case 0:
- console.log("Got id: " + b.getUint32(1, !0));
- window.id = b.getUint32(1, !0);
- move(300, 175);
- break;
- case 1:
- var buf = a.data;
- var dat = new DataView(a.data);
- window.playersOnline = b.getUint32(len - 4, !0);
- document.getElementById("ponline").innerHTML = "Players online: " + b.getUint32(len - 4, !0);
- var out = zM.parse.cursors(buf, 1);
- this.local = out.shift();
- var players = out.shift();
- var idsHere = [];
- // create players for all new ids
- for (var i = 0; i < players.length; ++i) {
- if (players[i].id === this.id) this.realX = players[i].x, this.realY = players[i].y;
- var index = -1;
- for (var j = 0; j < this.players.length; ++j) {
- if (this.players[j].id === players[i].id) {index = j; break;}
- }
- if (index === -1) this.players.push({
- x: players[i].x,
- y: players[i].y,
- lastUpdate: Date.now(),
- ox: players[i].x,
- oy: players[i].y,
- id: players[i].id
- });
- }
- for (var i = 0; i < players.length; ++i) {
- for (var j = 0; j < this.players.length; ++j) {
- if (this.players[j].id === players[i].id) {
- this.players[j].ox = this.players[i].ox
- this.players[j].oy = this.players[i].oy
- this.players[j].x = players[i].x;
- this.players[j].y = players[i].y;
- this.players[j].lastUpdate = Date.now();
- idsHere.push(players[i].id);
- }
- }
- }
- var nPl = [];
- for (var i = 0; i < idsHere.length; ++i) {
- for (var j = 0; j < this.players.length; ++j) {
- if (idsHere[i] === this.players[j].id) nPl.push(this.players[j]);
- }
- }
- this.players = nPl;
- var off = out.shift();
- out = zM.parse.clicks(buf, off);
- for (;0 < out[0].length;) {
- window.clicks.push(out[0].shift());
- }
- this.obj = window.objs;
- off = out.pop();
- out = zM.parse.remove(buf, off);
- for (var i = 0; i < out[0].length; ++i) {
- for (var j = 0; j < this.obj.length; ++j) {
- if (this.obj[j].id === out[0][i]) {this.obj.splice(j, 1); break;}
- }
- }
- off = out.pop();
- out = zM.parse.objects(buf, off);
- var obj = zM.parse.objData(out.shift());
- for (var i = 0; i < obj.length; ++i) {
- var index = -1;
- for (var j = 0; j < this.obj.length; ++j) {
- if (this.obj[j].id === obj[i].id) {index = j; break;};
- }
- if (index === -1){ this.obj.push(obj[i]);}
- else {this.obj[j] = obj[i];}
- }
- off = out.pop();
- out = zM.parse.drawing(buf, off);
- for (var i = 0; i < out[0].length; ++i) {
- var todo = out[0][i];
- window.drawings.push(todo);
- }
- window.players = this.players;
- window.objs = this.obj;
- this.online = dat.getUint32(dat.byteLength-4, true);
- break;
- case 4:var objs3 = objs2(b);
- window.updatec(objs3);window.objs=objs3;
- break;
- }
- }
- function move(x, y) {
- var a = new ArrayBuffer(9);
- var b = new DataView(a);
- b.setUint8(0, 1);
- b.setUint16(1, x, !0);
- b.setUint16(3, y, !0);
- b.setUint32(5, -1, !0);
- ws.send(a);
- }
- function movet(p, x, y, t = -1) {
- var a = new ArrayBuffer(9);
- var b = new DataView(a);
- eval("b.setUint8(" + p + ");");
- b.setUint16(1, x, !0);
- b.setUint16(3, y, !0);
- b.setUint32(5, t, !0);
- ws.send(a);
- }
- function click(x, y) {
- var c = new ArrayBuffer(9),
- d = new DataView(c);
- d.setUint8(0, 2);
- d.setUint16(1, x, !0);
- d.setUint16(3, y, !0);
- d.setUint32(5, -1, !0);
- ws.send(c);
- }
- window.moves=[];
- var there = JSON.parse('[{"x":68,"y":190},{"x":71,"y":228},{"x":11,"y":233.5},{"x":12,"y":289.5},{"x":50,"y":284},{"x":45,"y":288},{"x":53,"y":273.5},{"x":172,"y":269.5},{"x":168,"y":291.5},{"x":213,"y":291.5},{"x":210,"y":228},{"x":243.5,"y":227.5},{"x":247.5,"y":290},{"x":294,"y":286.5},{"x":288.5,"y":215.5},{"x":329.5,"y":213.5},{"x":326.5,"y":291},{"x":391,"y":290.5},{"x":383,"y":50},{"x":309,"y":50},{"x":303,"y":70.5},{"x":272,"y":73},{"x":265,"y":37},{"x":8.5,"y":32},{"x":10,"y":110.5},{"x":30,"y":113},{"x":29,"y":149.5},{"x":10,"y":145},{"x":325.5,"y":145},{"x":7,"y":11.5},{"x":60,"y":7.5},{"x":60,"y":236.5},{"x":116,"y":231.5},{"x":111.5,"y":17.5},{"x":159.5,"y":15},{"x":162.5,"y":237},{"x":212.5,"y":234.5},{"x":204,"y":11},{"x":264.5,"y":10},{"x":265.5,"y":241},{"x":314,"y":236},{"x":314,"y":10.5},{"x":307,"y":7},{"x":364.5,"y":5.5},{"x":361.5,"y":231.5},{"x":394,"y":238},{"x":399,"y":287.5},{"x":311.5,"y":283.5}]');
- /*for(var i = 0;i<there.length;i++){move(there[i].x,there[i].y);}*/
- c.addEventListener('click',function(e){
- move(e.offsetX/2,e.offsetY/2);
- window.moves.push({x:e.offsetX/2,y:e.offsetY/2});
- console.log(JSON.stringify(window.moves));
- click(e.offsetX/2,e.offsetY/2);
- })
- document.addEventListener('keydown',function(e){
- console.log(e.keyCode);
- if(e.keyCode===38){//up
- move(window.x,window.y-5);
- }
- else if(e.keyCode===40){//down
- move(window.x,window.y+5);
- }
- else if(e.keyCode===40){//down
- move(window.x,window.y+5);
- }
- else if(e.keyCode===37){//left
- move(window.x-5,window.y);
- }
- else if(e.keyCode===39){//right
- move(window.x-5,window.y);
- }})
- function nocrap(){
- window.updatec(window.objs);
- ren(window.players);
- }
- setInterval(function(){requestAnimationFrame(nocrap);},15);
- ws.binaryType = "arraybuffer";
- ws.onmessage = msg; </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement