Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var WebSocket = require("ws");
- var port = process.env.PORT; // don't change
- var wss = new WebSocket.Server({
- port: port
- });
- var userCount=0
- var IPList=[]
- var levels = require("./levels.json");
- var levelsRender = require("./levelsr.json");
- var ids = 1;
- var players = [
- [],
- [],
- [],
- [],
- [],
- [],
- [],
- [],
- [],
- []
- ];
- function nextLvl(ws,rqLvl,rqX,rqY){
- players[ws.level][ws.id-1]=null
- ws.level=rqLvl
- ws.send(
- JSON.stringify({
- kind: "levelRender",
- collisions: levels[ws.level],
- render: levelsRender[ws.level],
- "players":players[ws.level]
- })
- );
- ws.posX=rqX;
- ws.posY=rqY;
- ws.send(JSON.stringify({
- "kind":"clientPosUpdate",
- "data":[ws.posX,ws.posY]
- }));
- wss.clients.forEach(function each(client) {
- client.send(JSON.stringify({kind: "disconnection", id: ws.id}));
- });
- }
- wss.on("connection", function(ws, req) {
- if(IPList.includes(req.headers['x-forwarded-for'].split(",")[0])){/*
- ws.send(JSON.stringify({
- "kind":"error",
- "message":"You have reached the IP limit."
- }));
- console.log("someone tried to have 2 connections.")
- ws.close();
- return*/
- };
- IPList[ids]=req.headers['x-forwarded-for'].split(",")[0];
- ws.level = 0;
- ws.posX = 400;
- ws.posY = 300;
- ws.id = ids;
- ids++;
- ws.clickRegulator=true
- wss.clients.forEach(function each(client) {
- if(client!=ws && client.level==0){
- client.send(JSON.stringify({ kind: "userMove", id: ws.id, X: ws.posX, Y: ws.posY }));
- }
- });
- ws.on("error", function(err) {});
- ws.on("close", function(cls) {
- userCount-=1;
- IPList[ws.id]=undefined
- wss.clients.forEach(function each(client) {
- client.send(JSON.stringify({kind: "disconnection", id: ws.id}));
- client.send(JSON.stringify({"kind":"userCountUpdate","count":userCount}));
- });
- players[ws.level][ws.id-1]=null
- });
- ws.on("message", async function(msg) {
- var data = JSON.parse(String(msg));
- if (data.kind == "move") {
- switch (data.direction) {
- case "left":
- var cl=ws.posX-20
- if (ws.posX > 0 && !levels[ws.level].includes(cl+","+ws.posY)) {ws.posX -= 20};
- break;
- case "up":
- var cu=ws.posY-20
- if (ws.posY > 0 && !levels[ws.level].includes(ws.posX+","+cu)) {ws.posY -= 20};
- break;
- case "right":
- var cr=ws.posX+20
- if (ws.posX < 780 && !levels[ws.level].includes(cr+","+ws.posY)) {ws.posX += 20};
- break;
- case "down":
- var cd=ws.posY+20
- if (ws.posY < 580 && !levels[ws.level].includes(ws.posX+","+cd)) {ws.posY += 20};
- break;
- };
- if(ws.posX<0){ws.posX=0} else if(ws.posY<0){ws.posY=0} else if(ws.posX>780){ws.posX=780} else if(ws.posY>580){ws.posY=580}
- //destinations
- if(ws.posX>599 && ws.posX<681 && ws.posY>339 && ws.posY<441 && ws.level==0){
- nextLvl(ws,1,400,300)
- };
- if(ws.posX>-1 && ws.posX<61 && ws.posY>-1 && ws.posY<61 && ws.level==0){
- nextLvl(ws,9,400,300)
- };
- if(ws.posX>-1 && ws.posX<41 && ws.posY>-1 && ws.posY<41 && ws.level==9){
- nextLvl(ws,1,400,300)
- };
- if(ws.posX>-1 && ws.posX<61 && ws.posY>-1 && ws.posY<61 && ws.level==1){
- nextLvl(ws,2,400,300)
- };
- if(ws.posX>719 && ws.posX<781 && ws.posY>-1 && ws.posY<61 && ws.level==2){
- nextLvl(ws,0,80,0)
- };
- wss.clients.forEach(function each(client) {
- if(client!=ws && client.level==ws.level){
- client.send(JSON.stringify({ kind: "userMove", id: ws.id, X: ws.posX, Y: ws.posY }));
- }
- });
- players[ws.level][ws.id-1]=[ws.posX,ws.posY,ws.id]
- ws.send(JSON.stringify({kind:"clientMove", id: ws.id, X: ws.posX, Y: ws.posY}))
- if(true){}
- };
- if(data.kind == "click" && ws.clickRegulator){
- wss.clients.forEach(function each(client) {
- if(client.level==ws.level){
- client.send(JSON.stringify({ kind: "click", X: ws.posX, Y: ws.posY }));
- }
- });
- if(ws.posX==400 && ws.posY==300 && ws.level==9){
- levelsRender[ws.level]["button"][0][4]--;
- wss.clients.forEach(function each(client) {
- if(client.level==ws.level){
- client.send(
- JSON.stringify({
- kind: "levelRender",
- collisions: levels[ws.level],
- render: levelsRender[ws.level],
- "players":players[client.level]
- })
- );
- }
- });
- };
- ws.clickRegulator=false;
- setTimeout(function(){ws.clickRegulator=true},250)
- }
- });
- userCount+=1;
- wss.clients.forEach(function each(client) {
- client.send(JSON.stringify({
- "kind":"userCountUpdate",
- "count":userCount
- }));
- });
- ws.send(JSON.stringify({
- "kind":"clientPosUpdate",
- "data":[ws.posX,ws.posY]
- }));
- ws.send(JSON.stringify({ kind: "id", id: ws.id }));
- ws.send(
- JSON.stringify({
- kind: "levelRender",
- collisions: levels[ws.level],
- render: levelsRender[ws.level],
- "players":players[ws.level]
- })
- );
- });
Advertisement
Add Comment
Please, Sign In to add comment