summaryrefslogtreecommitdiff
path: root/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'app.js')
-rw-r--r--app.js467
1 files changed, 226 insertions, 241 deletions
diff --git a/app.js b/app.js
index 42f1e75..d219310 100644
--- a/app.js
+++ b/app.js
@@ -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