summaryrefslogblamecommitdiff
path: root/server/Commands.js
blob: 2bf81b79d38f3291a128db62fdf7e9e3cb25c569 (plain) (tree)













































































































































































































































































                                                                                                                                                                                                                                                                              
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: <message>)
                    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: "<font color='red' weight='bold'>GlobalAnnounce: " + Utils.escapeHTML(res) + "</font>", tab: "world" });
                        }
                        break;

                    // @lbc (args: <message>)
                    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: "<font color='red' weight='bold'>GlobalAnnounce: " + Utils.escapeHTML(res) + "</font>", 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:<playername>)
                    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:<playername>)
                    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] [<x> <y>])
                    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] [<x> <y>]"), 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:<playername> <lvl>)
                    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: <playername> <message>)
            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 };