diff options
Diffstat (limited to 'app.js')
-rw-r--r-- | app.js | 467 |
1 files changed, 226 insertions, 241 deletions
@@ -1,3 +1,4 @@ +var consts = require('./client/consts') var mongojs = require("mongojs"); var db = mongojs("localhost:27017/ThePixelWorld", ["account","progress"]); @@ -14,229 +15,12 @@ app.use('/client', express.static(__dirname + '/client')); serv.listen(2000); console.log("Server started."); -var DEBUG = true; var SOCKET_LIST = {}; -var Entity = function(){ - var self = { - x:250, - y:250, - map: '001-1', - speedX:0, - speedY:0, - id:"", - } - self.update = function(){ - self.updatePosition(); - } - self.updatePosition = function(){ - self.x += self.speedX; - self.y += self.speedY; - } - self.getDistance = function(pt){ - return Math.sqrt(Math.pow(self.x-pt.x,2)) + Math.pow(self.y-pt.y,2); - } - return self; -} - -var Player = function(id){ - var self = Entity(); - self.id = id; - self.number = "" + Math.floor(10 * Math.random()); - self.pressingRight = false; - self.pressingLeft = false; - self.pressingUp = false; - self.pressingDown = false; - self.pressingAttack = false; - self.mouseAngle = 0; - self.maxSpeed = 10; - self.hp = 10; - self.hpMax = 10; - self.score = 0; - - var super_update = self.update; - self.update = function(){ - self.updateSpeed(); - super_update(); - if(self.pressingAttack){ - self.shootBullet(self.mouseAngle); - } - } - - self.shootBullet = function(angle){ - var b = Bullet(self.id, angle); - b.x = self.x - b.y = self.y - } - - self.updateSpeed = function(){ - if(self.pressingRight) - self.speedX = self.maxSpeed; - else if(self.pressingLeft) - self.speedX = -self.maxSpeed; - else - self.speedX = 0; - - if(self.pressingUp) - self.speedY = -self.maxSpeed; - else if(self.pressingDown) - self.speedY = self.maxSpeed; - else - self.speedY = 0; - } - - self.getInitPack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - number:self.number, - hp:self.hp, - hpMax:self.hpMax, - score:self.score, - }; - } - self.getUpdatePack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - score:self.score, - hp:self.hp, - }; - } - Player.list[id] = self; - initPack.player.push(self.getInitPack()); - return self; -} - -Player.list = {}; -Player.onConnect = function(socket){ - var player = Player(socket.id); +const Entity = require('./server/Entities/Entity') +const Player = require('./server/Entities/Player') +const Bullet = require('./server/Entities/Bullet') - socket.on('keyPress', function(data){ - if (data.inputId === 'left') - player.pressingLeft = data.state; - else if (data.inputId === 'right') - player.pressingRight = data.state; - else if (data.inputId === 'up') - player.pressingUp = data.state; - else if (data.inputId === 'down') - player.pressingDown = data.state; - else if (data.inputId === 'attack') - player.pressingAttack = data.state; - else if (data.inputId === 'mouseAngle') - player.mouseAngle = data.state; - }); - - socket.emit('init',{ - selfId:socket.id, - player:Player.getAllInitPack(), - bullet:Bullet.getAllInitPack(), - }); -} - -Player.getAllInitPack = function(){ - var players = []; - for(var i in Player.list) - players.push(Player.list[i].getInitPack()); - return players; -} - -Player.onDisconnect = function(socket){ - delete Player.list[socket.id]; - removePack.player.push(socket.id); -} - -Player.update = function(){ - var pack = []; - for(var i in Player.list){ - var player = Player.list[i]; - player.update(); - pack.push(player.getUpdatePack()); - } - return pack; -} - -var Bullet = function(parent, angle) { - var self = Entity(); - self.id = Math.random(); - self.speedX = Math.cos(angle/180*Math.PI) *10; - self.speedY = Math.sin(angle/180*Math.PI) *10; - self.parent = parent; - self.timer = 0; - self.toRemove = false; - var super_update = self.update; - self.update = function(){ - if (self.timer++ > 100) - self.toRemove = true; - super_update(); - for (var i in Player.list){ - var p = Player.list[i]; - if(self.getDistance(p) < 32 && self.parent !== p.id){ - p.hp -= 1; - if (p.hp <= 0){ - var shooter = Player.list[self.parent]; - if (shooter) - shooter.score += 1; - p.hp = p.hpMax; - p.x = Math.random() * 500; - p.y = Math.random() * 500; - - } - self.toRemove = true; - } - } - } - - self.getInitPack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - }; - } - - self.getUpdatePack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - }; - } - - Bullet.list[self.id] = self; - initPack.bullet.push(self.getInitPack()); - return self; -} - -Bullet.list= {}; - -Bullet.update = function(){ - var pack = []; - for(var i in Bullet.list){ - var bullet = Bullet.list[i]; - bullet.update(); - if(bullet.toRemove){ - delete Bullet.list[i]; - removePack.bullet.push(bullet.id); - } - else - pack.push(bullet.getUpdatePack()); - } - return pack; -} - -Bullet.getAllInitPack = function(){ - var bullets = []; - for(var i in Bullet.list) - bullets.push(Bullet.list[i].getInitPack()); - return bullets; -} var isValidPassword = function(data, cb){ db.account.find({username:data.username, password:data.password},function(err,res){ @@ -262,6 +46,21 @@ var addUser = function(data, cb){ }); } +var updateGMLevel = function(username, lvl, cb){ + db.account.update({username:username},{$set:{gmlvl:lvl}},function(err){ + cb(); + }); +} + +var hasPermission = function(username, req, cb){ + db.account.find({username:username},function(err,res){ + if (res[0].gmlvl >= req) + cb(true); + else + cb(false); + }); +} + var io = require('socket.io')(serv, {}); io.sockets.on('connection', function(socket){ socket.id = Math.random(); @@ -270,7 +69,7 @@ io.sockets.on('connection', function(socket){ socket.on('signIn', function(data){ isValidPassword(data, function(res){ if (res){ - Player.onConnect(socket); + Player.Player.onConnect(socket, data.username); socket.playerName = data.username; socket.emit('signInResponse', {success:true}); } else { @@ -292,40 +91,226 @@ io.sockets.on('connection', function(socket){ socket.on('disconnect', function(){ delete SOCKET_LIST[socket.id]; - Player.onDisconnect(socket); + Player.Player.onDisconnect(socket); }); socket.on('sendMsgToServer', function(data){ - var playerName = ("" + socket.id).slice(2,7); - for (var i in SOCKET_LIST){ - SOCKET_LIST[i].emit('addToChat', socket.playerName + ': ' + data); + if (data) + for (var i in SOCKET_LIST){ + SOCKET_LIST[i].emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + ': ' + data, tab: "world"}); + } + }); + + socket.on('command', function(data){ + servermsg = "Server: "; + modifyer = data[0]; + command = data.slice(1).split(' '); + + // TODO: has permission + //staff cmd + if(modifyer === '@'){ + hasPermission(socket.playerName, 1, function(res){ + if (res) + switch (command[0]) { + // @bc (args: <message>) + case "bc": + res = joinArgs(command, 1, 0); + for (var i in SOCKET_LIST){ + SOCKET_LIST[i].emit('addToChat', {ctimestamp: getTimeStamp(0), content: "<font color='red' weight='bold'>GlobalAnnounce: " + res + "</font>", tab: "world"}); + } + break; + + // @who (args: none) + case "who": + for (var i in Player.Player.list){ + servermsg+=Player.Player.list[i].playerName + ", "; + } + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg, tab:"any"}); + break; + + // @where (args:[playername]) + case "where": + found = false; + if(command.length <= 1) + command[1] = socket.playerName; + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName.includes(command[1])){ + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Player.Player.list[i].playerName + ": " + Player.Player.list[i].map + " [" + Player.Player.list[i].x + ", " + Player.Player.list[i].y + "]",tab: "any"}); + found = true; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"}); + break; + + // @goto (args:<playername>) + case "goto": + found = false; + if(command.length <= 1) + command[1] = socket.playerName; + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName.includes(command[1])){ + Player.Player.list[socket.id].map = Player.Player.list[i].map; + Player.Player.list[socket.id].x = Player.Player.list[i].x; + Player.Player.list[socket.id].y = Player.Player.list[i].y; + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Warped to " + Player.Player.list[i].playerName, tab: "any"}); + found = true; + break; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab:"any"}); + break; + + // @recall (args:<playername>) + case "recall": + found = false; + if(command.length <= 1) + command[1] = socket.playerName; + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName.includes(command[1])){ + Player.Player.list[i].map = Player.Player.list[socket.id].map; + Player.Player.list[i].x = Player.Player.list[socket.id].x; + Player.Player.list[i].y = Player.Player.list[socket.id].y; + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Recalled " + Player.Player.list[i].playerName + " to you.", tab: "any"}); + SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "You were Recalled from " + socket.playerName, tab: "any"}); + found = true; + break; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"}); + break; + + // @setgm (args:<playername> <lvl>) + case "setgm": + hasPermission(socket.playerName, 99, function(res){ + if (res) + updateGMLevel(command[1],parseInt(command[2]), function(){ + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "GM level set.", tab:"any"}); + }); + else + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"}); + }); + break; + default: + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Command not found.", tab: "any"}); + break; + } + else{ + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"}); + } + }); + } + + // player cmd + else if(modifyer === '/'){ + switch (command[0]) { + // /who (args: none) + case "who": + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Object.keys(Player.Player.list).length + " Players Online.", tab: "any"}); + break; + + // /where (args: none) + case "where": + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Player.Player.list[socket.id].playerName + ": " + + Player.Player.list[socket.id].map + " [" + Player.Player.list[socket.id].x + ", " + Player.Player.list[socket.id].y + "]", tab: "any"}); + + break; + + // /whisper (args: <playername> <message>) + case "w": + case "whisper": + found = false; + + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName == command[1]){ + res = joinArgs(command, 2, 0); + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + " : " + res, tab: Player.Player.list[i].playerName}); + SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + ": " + res, tab: socket.playerName}); + found = true; + break; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"}); + break; + + default: + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Command not found.", tab: "any"}); + break; + } + } + + // guild commands + else if(modifyer === '#'){ + + } + // party commands + else if(modifyer === '.'){ + + } + // help commands + else if(modifyer === '?'){ + // ? + } + else{ + // this should never happen... } }); - + socket.on('evalServer', function(data){ - if(DEBUG){ - socket.emit('evalAnswer', eval(data)); - } + servermsg = "Server: "; + hasPermission(socket.playerName, 80, function(res){ + if (res) + socket.emit('evalAnswer', eval(data)); + else + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"}); + }); }); }); -var initPack = {player:[], bullet:[]}; -var removePack = {player:[], bullet:[]}; - +// erm... the game loop setInterval(function(){ var pack = { - player:Player.update(), - bullet:Bullet.update() + player: Player.Player.update(), + bullet: Bullet.Bullet.update() } for(var i in SOCKET_LIST){ var socket = SOCKET_LIST[i]; - socket.emit('init', initPack); + socket.emit('init', Entity.initPack); socket.emit('update', pack); - socket.emit('remove', removePack); + socket.emit('remove', Entity.removePack); } - initPack.player = []; - initPack.bullet = []; - removePack.player = []; - removePack.bullet = []; + Entity.initPack.player = []; + Entity.initPack.bullet = []; + Entity.removePack.player = []; + Entity.removePack.bullet = []; + +}, 1000/25); + +//removes (number)remArgsBefore and (number)remArgsAfter from argument array/list +joinArgs = function(argsList, remArgsBefore, remArgsAfter){ + var res = ""; + for(var i = 0; i<argsList.length; i++){ + if(i < remArgsBefore) + continue; + if(argsList.length - i <= remArgsAfter) + continue; + res +=argsList[i] + " "; + } + return res; +} -}, 1000/25);
\ No newline at end of file +// gets the current (weird formated) timestamp (FIXME later...) +getTimeStamp = function(){ + var date_ob = new Date(); + day = date_ob.getDate(); + month = date_ob.getMonth(); + year = date_ob.getFullYear(); + hours = date_ob.getHours(); + minutes = date_ob.getMinutes(); + seconds = date_ob.getSeconds(); + + return (year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds); +}
\ No newline at end of file |