Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var net = require('net'),
  2.     dgram = require('dgram');
  3.  
  4. var serverport = 10052,
  5.     maxplayers = 32,
  6.     gamemode = 2,
  7.     maxscore = 10,
  8.     servername = "djazz's |||Node Server",
  9.     lvlFile = 'Battle2.j2l';
  10.  
  11. var players = [
  12.     {
  13.         playerID: 0,
  14.         name: 'Server',
  15.         fur: [16,24,32,40],
  16.         character: 1
  17.     }
  18. ];
  19. var sockets = [null];
  20.  
  21. var listserver = "91.121.144.59";
  22. var ls = net.createConnection(10054, listserver);
  23. ls.on('connect', function () {
  24.     var port = new Buffer(2);
  25.     port[1] = parseInt(serverport / 256);
  26.     port[0] = serverport - (port[1]*256);
  27.     var lsres = new Buffer(42);
  28.     for(var i=0; i < lsres.length; i+=1) {
  29.         lsres[i] = 0;
  30.     }
  31.     port.copy(lsres, 0);
  32.     var servname = new Buffer(servername);
  33.     servname.copy(lsres, 2);
  34.     lsres[2+33] = players.length;
  35.     lsres[2+33+1] = maxplayers;
  36.     lsres[2+33+2] = gamemode;
  37.     var ver = new Buffer("21  ");
  38.     ver.copy(lsres, 2+33+3);
  39.     ls.write(lsres);
  40.     ls.write(new Buffer("\x00\x01"));
  41.     console.log(lsres);
  42. });
  43. ls.on('message', function (data) {
  44.     console.log("Listserver");
  45.     console.log(data);
  46. });
  47.  
  48. var server = net.createServer(function (socket) {
  49.     socket.on('connect', function () {
  50.         console.log("Someone connected");
  51.     });
  52.     socket.on('data', function (data) {
  53.         console.log("Got:");
  54.         console.log(data);
  55.         switch(data[1]) {
  56.             case 0x0E:
  57.                 var sockid = sockets.length;
  58.                 var playeramount = data[2];
  59.                 var packetsize = data.length;
  60.                 var i = 3;
  61.                 sockets[sockid] = socket;
  62.                 while(i < packetsize) {
  63.                     var pid = data[i++];
  64.                     var teamAndChar = data[i++];
  65.                     var furcolors = [data[i++], data[i++], data[i++], data[i++]];
  66.                     var pname = "";
  67.                     while(data[i] != undefined) {pname+=String.fromCharCode(data[i++]);if(data[i]==0) break;}
  68.                     i+=1;
  69.                     players[sockid] = {playerID: pid, name: pname, fur: furcolors, character: teamAndChar & 3};
  70.                     break;
  71.                 }
  72.                
  73.                 console.log(players);
  74.                
  75.                 var toSend = "y\x12"+String.fromCharCode(players.length);
  76.                 for(var i=0; i < players.length; i+=1) {
  77.                     if(!players[i]) continue;
  78.                     toSend+=String.fromCharCode(i)+String.fromCharCode(players[i].playerID)+String.fromCharCode(players[i].character);
  79.                     for(var f=0; f < 4; f+=1) {
  80.                         toSend+=String.fromCharCode(players[i].fur[f]);
  81.                     }
  82.                     toSend+=players[i].name;
  83.                     toSend+="\x00";
  84.                 }
  85.                 toSend+="\x00";
  86.                 sendtcp(socket, new Buffer(toSend));
  87.                
  88.                 break;
  89.            
  90.             case 0x0F:
  91.                 var sockid = sockets.length;
  92.                 var toSend = new Buffer("y\x10"+String.fromCharCode(sockid)+String.fromCharCode(sockid)+String.fromCharCode(lvlFile.length)+lvlFile+"yyyy"+"yyyy"+String.fromCharCode(gamemode)+String.fromCharCode(maxscore));
  93.                 var crc = new Buffer(8);
  94.                 crc[0] = 0x66;
  95.                 crc[1] = 0x5F;
  96.                 crc[2] = 0xB6;
  97.                 crc[3] = 0x96;
  98.                
  99.                 crc[4] = 0xDA;
  100.                 crc[5] = 0x75;
  101.                 crc[6] = 0x82;
  102.                 crc[7] = 0xE1;
  103.                
  104.                 crc.copy(toSend, 5+lvlFile.length);
  105.                
  106.                 sendtcp(socket, toSend);
  107.                 sendtcp(socket, new Buffer("y\x13"));
  108.                 break;
  109.            
  110.             case 0x15:
  111.                
  112.                 sendtcp(socket, new Buffer("y\x0D\x06\x01"+"21  "));
  113.                
  114.                 break;
  115.            
  116.             case 0x1B:
  117.                 sendChat(socket, 0, "I got chat from "+players[data[2]].name);
  118.                 console.log(data.toString());
  119.                 break;
  120.         }
  121.     });
  122.     socket.on('end', function () {
  123.         console.log("Someone left");
  124.         var index = sockets.indexOf(socket);
  125.         if(index > 0) {
  126.             delete sockets[index];
  127.             delete players[index];
  128.         }
  129.         console.log(players);
  130.     });
  131.     socket.on('error', function (err) {
  132.         console.log(err);
  133.     });
  134. });
  135. server.listen(serverport);
  136.  
  137. var udp = dgram.createSocket('udp4');
  138. udp.on('message', function (data, rinfo) {
  139.     //console.log(rinfo);
  140.     //console.log(data);
  141.     switch(data[2]) {
  142.         case 3:
  143.             var toSend = new Buffer("yy\x04"+"yyyyy"+String.fromCharCode(gamemode));
  144.             data.copy(toSend, 3, 3, 5+3);
  145.             sendudp(toSend, rinfo.address, rinfo.port);
  146.            
  147.             break;
  148.        
  149.         case 5:
  150.             var toSend = new Buffer("yy\x06"+String.fromCharCode(data[3])+"\x00\x00\x00\x00"+"21  "+"\x00"+String.fromCharCode(players.length)+String.fromCharCode(gamemode)+String.fromCharCode(maxplayers)+String.fromCharCode(servername.length)+servername+"\x00\x00");
  151.             sendudp(toSend, rinfo.address, rinfo.port);
  152.            
  153.             break;
  154.     }
  155. });
  156. udp.on('listening', function () {
  157.     console.log(udp.address());
  158. });
  159. udp.bind(serverport);
  160.  
  161. function udpchecksum(buf) {
  162.     var x = 1, y = 1, size = buf.length;
  163.     for(var i = 2; i < buf.length; i+=1) {
  164.         x += buf[i];
  165.         y += x;
  166.     }
  167.     buf[0] = x % 251;
  168.     buf[1] = y % 251;
  169.     return buf;
  170. }
  171.  
  172. function sendudp(buf, adr, port) {
  173.     buf = udpchecksum(buf);
  174.     udp.send(buf, 0, buf.length, port, adr);
  175. }
  176.  
  177. function sendtcp(stream, buf) {
  178.     buf[0] = buf.length;
  179.     stream.write(buf);
  180.     console.log("Sent:");
  181.     console.log(buf);
  182. }
  183.  
  184. function sendChat(stream, from, msg) {
  185.     var toSend = new Buffer("y\x1B"+String.fromCharCode(from)+"\x20"+msg);
  186.     sendtcp(stream, toSend);
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement