const Utils = require("./Utils"); var dispatch = function (data, socket, SOCKET_LIST, servermsg, db, Player) { var modifyer = data[0]; var command = data.slice(1).split(' '); //staff cmd if (modifyer === '@') { Utils.hasPermission(db, socket.playerName, 1, function (res) { if (res) switch (command[0].toLowerCase()) { // @bc (args: ) case "bc": case "broadcast": res = Utils.joinArgs(command, 1, 0); for (var i in SOCKET_LIST) { SOCKET_LIST[i].emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: "GlobalAnnounce: " + Utils.escapeHTML(res) + "", tab: "world" }); } break; // @lbc (args: ) case "lbc": case "localbroadcast": res = Utils.joinArgs(command, 1, 0); for (var i in Player.Player.list) { if (Player.Player.list[i].map == Player.Player.list[socket.id].map) SOCKET_LIST[i].emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: "GlobalAnnounce: " + Utils.escapeHTML(res) + "", tab: "world" }); } break; // @who (args: none) case "who": res = servermsg; for (var i in Player.Player.list) { res += Player.Player.list[i].playerName + ", "; } socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: res, tab: "any" }); break; // @where (args:[playername]) case "where": var 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: Utils.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: Utils.getTimeStamp(0), content: servermsg + "Player not found", tab: "any" }); break; // @goto (args:) case "goto": var 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: Utils.getTimeStamp(0), content: servermsg + "Warped to " + Player.Player.list[i].playerName, tab: "any" }); found = true; break; } } if (!found) socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Player not found", tab: "any" }); break; // @recall (args:) case "recall": var 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: Utils.getTimeStamp(0), content: servermsg + "Recalled " + Player.Player.list[i].playerName + " to you.", tab: "any" }); SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "You were Recalled from " + socket.playerName, tab: "any" }); found = true; break; } } if (!found) socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Player not found", tab: "any" }); break; // @warp/@tele/@teleport (args:[map] [ ]) case "warp": case "tele": case "teleport": Utils.hasPermission(db, socket.playerName, 60, function (res) { if (res) { if (command.length < 2 || command.length > 4) { socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + Utils.escapeHTML("Wrong syntax: @warp [map] [ ]"), tab: "any" }); return; } else if (command.length == 2) { Player.Player.list[socket.id].map = command[1]; var new_x = Math.random() * 500; // TODO: map size?! var new_y = Math.random() * 500; Player.Player.list[socket.id].x = new_x; Player.Player.list[socket.id].y = new_y; socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Warped to map:" + command[1] + " x:" + new_x + " y:" + new_y, tab: "any" }); } else if (command.length == 3) { // only cords // TODO: check if map exists Player.Player.list[socket.id].x = parseInt(command[1]); Player.Player.list[socket.id].y = parseInt(command[2]); socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Warped to x:" + command[1] + " y:" + command[2], tab: "any" }); } else if (command.length == 4) { // map x y // TODO: check if map exists Player.Player.list[socket.id].map = command[1]; Player.Player.list[socket.id].x = parseInt(command[2]); Player.Player.list[socket.id].y = parseInt(command[3]); socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Warped to map:" + command[1] + " x:" + command[2] + " y:" + command[3], tab: "any" }); } } else { socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any" }); } }); break; // @hide case "hide": Utils.hasPermission(db, socket.playerName, 60, function (res) { if (res) { Player.Player.list[socket.id].ignorePlayerAttack = !Player.Player.list[socket.id].ignorePlayerAttack; if (Player.Player.list[socket.id].ignorePlayerAttack) socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "You are now immune to player and monster attacks", tab: "any" }); else socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "You are no longer immune to player and monster attacks", tab: "any" }); } else socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any" }); }); break; // @setgm (args: ) case "setgm": Utils.hasPermission(db, socket.playerName, 99, function (res) { if (res) updateGMLevel(db, command[1], parseInt(command[2]), function () { socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "GM level set.", tab: "any" }); }); else socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any" }); }); break; default: socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Command not found.", tab: "any" }); break; } else { socket.emit('addToChat', { ctimestamp: Utils.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: Utils.getTimeStamp(0), content: servermsg + Object.keys(Player.Player.list).length + " Player" + ((Object.keys(Player.Player.list).length > 1) ? "s" : "") + " Online.", tab: "any" }); break; // /where (args: none) case "where": socket.emit('addToChat', { ctimestamp: Utils.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: ) case "w": case "whisper": case "tell": case "msg": var found = false; for (var i in Player.Player.list) { if (Player.Player.list[i].playerName == command[1]) { var res = Utils.escapeHTML(Utils.joinArgs(command, 2, 0)); socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: socket.playerName + ": " + res, tab: Player.Player.list[i].playerName }); SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: socket.playerName + ": " + res, tab: socket.playerName }); found = true; break; } } if (!found) socket.emit('addToChat', { ctimestamp: Utils.getTimeStamp(0), content: servermsg + "Player not found", tab: "any" }); break; default: socket.emit('addToChat', { ctimestamp: Utils.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... } } var updateGMLevel = function (db, username, lvl, cb) { db.account.update({ username: username }, { $set: { gmlvl: lvl } }, function (err) { cb(); }); } module.exports = { dispatch };