Advertisement
vnx5

zM packet parser

May 20th, 2019
8,206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // zursor master parser functions
  2. // updated may 26, 2019
  3.  
  4. zM.dependenciesLoaded |= 0b010000;
  5.  
  6. zM.parse = {
  7.     /**
  8.      * Returns an array as [local, players, offset]
  9.      */
  10.     cursors: function(buffer, offset) {
  11.         var dat = new DataView(buffer);
  12.         var local = dat.getUint16(offset, true);
  13.  
  14.         offset += 2;
  15.  
  16.         var players = [];
  17.         for (var i = 0; i < local; ++i) {
  18.             players.push({
  19.                 id: dat.getUint32(offset, true),
  20.                 x: dat.getUint16(offset + 4, true),
  21.                 y: dat.getUint16(offset + 6, true),
  22.             });
  23.             offset += 8;
  24.         }
  25.  
  26.         return [local, players, offset];
  27.     },
  28.  
  29.     /**
  30.      * Returns an array as [clicks, offset]
  31.      */
  32.     clicks: function(buffer, offset) {
  33.         var dat = new DataView(buffer);
  34.        
  35.         var count = dat.getUint16(offset, true);
  36.         var clicks = [];
  37.  
  38.         offset += 2;
  39.         for (var i = 0; i < count; ++i) {
  40.             clicks.push({
  41.                 x: dat.getUint16(offset, true),
  42.                 y: dat.getUint16(offset + 2, true),
  43.                 time: Date.now()
  44.             });
  45.             offset += 4;
  46.         }
  47.  
  48.         return [clicks, offset];
  49.     },
  50.  
  51.     /**
  52.      * Returns an array as [clicks, offset]
  53.      */
  54.     drawing: function(buffer, offset) {
  55.         var dat = new DataView(buffer);
  56.        
  57.         var count = dat.getUint16(offset, true);
  58.         var drawings = [];
  59.  
  60.         offset += 2;
  61.         for (var i = 0; i < count; ++i) {
  62.             drawings.push({
  63.                 x: dat.getUint16(offset, true),
  64.                 y: dat.getUint16(offset + 2, true),
  65.                 x2: dat.getUint16(offset + 4, true),
  66.                 y2: dat.getUint16(offset + 6, true),
  67.                 time: Date.now()
  68.             });
  69.             offset += 8;
  70.         }
  71.  
  72.         return [drawings, offset];
  73.     },
  74.  
  75.     /**
  76.      * Returns an array as [ids, offset]
  77.      */
  78.     remove: function(buffer, offset) {
  79.         var dat = new DataView(buffer);
  80.  
  81.         var count = dat.getUint16(offset, true);
  82.         var ids = [];
  83.  
  84.         offset += 2;
  85.         for (var i = 0; i < count; ++i) {
  86.             ids.push(dat.getUint32(offset, true));
  87.             offset += 4;
  88.         }
  89.  
  90.         return [ids, offset];
  91.     },
  92.  
  93.     /**
  94.      * Parses objdata (string) and outputs as objects.
  95.      */
  96.     objData: function(objdata) {
  97.         var obj = objdata;
  98.         var nObj = [];
  99.  
  100.         for (var i = 0; i < obj.length; ++i) {
  101.             var nO = {};
  102.             obj[i] = obj[i].split(/\.+/g);
  103.             nO.id = parseInt(obj[i].shift());
  104.             var type = obj[i].shift();
  105.             switch (type) {
  106.                 case '0':
  107.                     nO.type = 0;
  108.                     nO.x = parseInt(obj[i].shift());
  109.                     nO.y = parseInt(obj[i].shift());
  110.                     nO.size = parseInt(obj[i].shift());
  111.                     nO.isCentered = obj[i].shift() === 'false'?false:true;
  112.  
  113.                     nO.content = obj[i].join('');
  114.                     break;
  115.                 case '1':
  116.                     nO.type = 1;
  117.                     nO.x = parseInt(obj[i].shift());
  118.                     nO.y = parseInt(obj[i].shift());
  119.                     nO.w = parseInt(obj[i].shift());
  120.                     nO.h = parseInt(obj[i].shift());
  121.                     nO.color = obj[i].shift();
  122.                     break;
  123.                 case '2':
  124.                     nO.type = 2;
  125.                     nO.x = parseInt(obj[i].shift());
  126.                     nO.y = parseInt(obj[i].shift());
  127.                     nO.w = parseInt(obj[i].shift());
  128.                     nO.h = parseInt(obj[i].shift());
  129.                     nO.isBad = obj[i].shift()==='false'?false:true;
  130.                     break;
  131.                 case '3':
  132.                     nO.type = 3;
  133.                     nO.x = parseInt(obj[i].shift());
  134.                     nO.y = parseInt(obj[i].shift());
  135.                     nO.w = parseInt(obj[i].shift());
  136.                     nO.h = parseInt(obj[i].shift());
  137.                     nO.count = parseInt(obj[i].shift());
  138.                     nO.color = obj[i].shift();
  139.                     break;
  140.                 case '4':
  141.                     nO.type = 4;
  142.                     nO.x = parseInt(obj[i].shift());
  143.                     nO.y = parseInt(obj[i].shift());
  144.                     nO.w = parseInt(obj[i].shift());
  145.                     nO.h = parseInt(obj[i].shift());
  146.                     nO.count = parseInt(obj[i].shift());
  147.                     nO.color = obj[i].shift();
  148.                     nO.lastClickAt = 0;
  149.                     break;
  150.             }
  151.  
  152.             nObj.push(nO);
  153.         }
  154.  
  155.         return nObj;
  156.     },
  157.  
  158.     /**
  159.      * Returns an array as [objdata, offset]
  160.      * objdata is required to be further parsed with zM.parse.objData()
  161.      */
  162.     objects: function(buffer, offset) {
  163.         var dat = new DataView(buffer);
  164.  
  165.         var count = dat.getUint16(offset, true);
  166.         var objdata = [];
  167.  
  168.         offset += 2;
  169.         for (var i = 0; i < count; ++i) {
  170.             var id = dat.getUint32(offset, true);
  171.             offset += 4;
  172.             var type = dat.getUint8(offset);
  173.             var objdat = id+'.';
  174.             ++offset;
  175.             switch (type) {
  176.                 case 0:
  177.                     objdat += '0.';
  178.                     objdat += `${dat.getUint16(offset, true)}.`;
  179.                     objdat += `${dat.getUint16(offset+2, true)}.`;
  180.                     objdat += `${dat.getUint8(offset+4)}.`;
  181.                     objdat += `${!!dat.getUint8(offset+5)}.`;
  182.                     offset += 5;
  183.                     for (;1;) if (dat.getUint8(++offset) != 0) objdat += String.fromCharCode(dat.getUint8(offset));
  184.                               else break;
  185.                    
  186.                     ++offset;
  187.                     break;
  188.                 case 1:
  189.                     objdat += '1.';
  190.                     objdat += `${dat.getUint16(offset, true)}.`;
  191.                     objdat += `${dat.getUint16(offset+2, true)}.`;
  192.                     objdat += `${dat.getUint16(offset+4, true)}.`;
  193.                     objdat += `${dat.getUint16(offset+6, true)}.`;
  194.                     var color = dat.getUint32(offset+8, true).toString(16);
  195.                     for (; color.length < 6;) color = '0' + color;
  196.                     objdat += '#' + color + '.';
  197.  
  198.                     offset += 12;
  199.  
  200.                     break;
  201.  
  202.                 case 2:
  203.                     objdat += '2.';
  204.                     objdat += `${dat.getUint16(offset, true)}.`;
  205.                     objdat += `${dat.getUint16(offset+2, true)}.`;
  206.                     objdat += `${dat.getUint16(offset+4, true)}.`;
  207.                     objdat += `${dat.getUint16(offset+6, true)}.`;
  208.                     objdat += `${!!dat.getUint8(offset+8)}.`;
  209.                     offset += 9;
  210.                     break;
  211.  
  212.                 case 3:
  213.                     objdat += '3.';
  214.                     objdat += `${dat.getUint16(offset, true)}.`;
  215.                     objdat += `${dat.getUint16(offset+2, true)}.`;
  216.                     objdat += `${dat.getUint16(offset+4, true)}.`;
  217.                     objdat += `${dat.getUint16(offset+6, true)}.`;
  218.                     objdat += `${dat.getUint16(offset+8, true)}.`;
  219.                     var color = dat.getUint32(offset+10, true).toString(16);
  220.                     for (; color.length < 6;) color = '0' + color;
  221.                     objdat += '#' + color + '.';
  222.    
  223.                     offset += 14;
  224.                     break;
  225.  
  226.                 case 4:
  227.                     objdat += '4.';
  228.                     objdat += `${dat.getUint16(offset, true)}.`;
  229.                     objdat += `${dat.getUint16(offset+2, true)}.`;
  230.                     objdat += `${dat.getUint16(offset+4, true)}.`;
  231.                     objdat += `${dat.getUint16(offset+6, true)}.`;
  232.                     objdat += `${dat.getUint16(offset+8, true)}.`;
  233.                     var color = dat.getUint32(offset+10, true).toString(16);
  234.                     for (; color.length < 6;) color = '0' + color;
  235.                     objdat += '#' + color + '.';
  236.                     offset += 14;
  237.                     break;
  238.             }
  239.             objdata.push(objdat);
  240.         }
  241.  
  242.         return [objdata, offset];
  243.     }
  244. }
  245.  
  246. zM.packet = {
  247.     /**
  248.      *
  249.      * @param {array} sockets Array of sockets to move
  250.      */
  251.     moveSocket(sockets, x, y, bots) {
  252.         var buf = new ArrayBuffer(9),
  253.             dat = new DataView(buf);
  254.  
  255.         dat.setUint8(0, 1);
  256.         dat.setUint16(1, x, true);
  257.         dat.setUint16(3, y, true);
  258.         dat.setUint32(5, -1, true);
  259.         sockets.forEach(X => typeof X.send === 'function' && X.send(buf));
  260.         bots.forEach(X => {
  261.             ++X.packets.sentTotal;
  262.             ++X.packets.sentPS;
  263.             setTimeout(()=>{--X.packets.sentPS},1000);
  264.             X.packets.lastSent = Date.now();
  265.         });
  266.     },
  267.  
  268.     /**
  269.      *
  270.      * @param {array} sockets Array of sockets to click with
  271.      */
  272.     clickSocket(sockets, x, y, bots) {
  273.         var buf = new ArrayBuffer(9),
  274.             dat = new DataView(buf);
  275.  
  276.         dat.setUint8(0, 2);
  277.         dat.setUint16(1, x, true);
  278.         dat.setUint16(3, y, true);
  279.         dat.setUint32(5, -1, true);
  280.         sockets.forEach(X => typeof X.send === 'function' && X.send(buf));
  281.         bots.forEach(X => {
  282.             ++X.packets.sentTotal;
  283.             ++X.packets.sentPS;
  284.             setTimeout(()=>{--X.packets.sentPS},1000);
  285.             X.packets.lastSent = Date.now();
  286.         });
  287.     },
  288.  
  289.     /**
  290.      *
  291.      * @param {array} sockets Array of sockets to draw with
  292.      */
  293.     drawSocket(sockets, x, y, x2, y2, bots) {
  294.         var buf = new ArrayBuffer(9),
  295.             dat = new DataView(buf);
  296.  
  297.         dat.setUint8(0, 3);
  298.         dat.setUint16(1, x, true);
  299.         dat.setUint16(3, y, true);
  300.         dat.setUint16(5, x2, true);
  301.         dat.setUint16(7, y2, true);
  302.         sockets.forEach(X => typeof X.send === 'function' && (X.send(buf)));
  303.         bots.forEach(X => {
  304.             ++X.packets.sentTotal;
  305.             ++X.packets.sentPS;
  306.             setTimeout(()=>{--X.packets.sentPS},1000);
  307.             X.packets.lastSent = Date.now();
  308.         });
  309.     }
  310. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement