Пример #1
0
        public override void Use(Player p, string message)
        {
            CatchPos cpos;

            if (message == "")
            {
                p.ZoneCheck = true;
                Player.SendMessage(p, "Place a block where you would like to check for zones.");
                return;
            }
            else if (p.group.Permission < LevelPermission.Operator)
            {
                Player.SendMessage(p, "Reserved for OP+");
                return;
            }

            if (message.IndexOf(' ') == -1)
            {
                switch (message.ToLower())
                {
                case "del":
                    p.zoneDel = true;
                    Player.SendMessage(p, "Place a block where you would like to delete a zone.");
                    return;

                default:
                    Help(p);
                    return;
                }
            }


            if (message.ToLower() == "del all")
            {
                if (p.group.Permission < LevelPermission.Admin)
                {
                    Player.SendMessage(p, "Only a SuperOP may delete all zones at once");
                    return;
                }
                else
                {/*
                  * for (int i = 0; i < p.level.ZoneList.Count; i++)
                  * {
                  *     Level.Zone Zn = p.level.ZoneList[i];
                  *     MySQL.executeQuery("DELETE FROM `Zone" + p.level.name + "` WHERE Owner='" + Zn.Owner + "' AND SmallX='" + Zn.smallX + "' AND SMALLY='" + Zn.smallY + "' AND SMALLZ='" + Zn.smallZ + "' AND BIGX='" + Zn.bigX + "' AND BIGY='" + Zn.bigY + "' AND BIGZ='" + Zn.bigZ + "'");
                  *
                  *     Player.SendMessage(p, "Zone deleted for &b" + Zn.Owner);
                  *     p.level.ZoneList.Remove(p.level.ZoneList[i]);
                  *     if (i == p.level.ZoneList.Count) { Player.SendMessage(p, "Finished removing all zones"); return; }
                  *     i--;
                  * }*/
                    Server.s.database.GetTable("Zones" + p.level.name).Truncate();
                    Player.SendMessage(p, "Deleted all zones.");
                    return;
                }
            }


            if (p.group.Permission < LevelPermission.Operator)
            {
                Player.SendMessage(p, "Setting zones is reserved for OP+"); return;
            }

            if (Group.Find(message.Split(' ')[1]) != null)
            {
                message = message.Split(' ')[0] + " grp" + Group.Find(message.Split(' ')[1]).name;
            }

            if (message.Split(' ')[0].ToLower() == "add")
            {
                Player foundPlayer = Player.Find(message.Split(' ')[1]);
                if (foundPlayer == null)
                {
                    cpos.Owner = message.Split(' ')[1].ToString();
                }
                else
                {
                    cpos.Owner = foundPlayer.name;
                }
            }
            else
            {
                Help(p); return;
            }

            if (!Player.ValidName(cpos.Owner))
            {
                Player.SendMessage(p, "INVALID NAME."); return;
            }

            cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos;

            Player.SendMessage(p, "Place two blocks to determine the edges.");
            Player.SendMessage(p, "Zone for: &b" + cpos.Owner + ".");
            p.ClearBlockchange();
            p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
        }
Пример #2
0
        public override void Use(Player p, string message)
        {
            try
            {
                if (message == "")
                {
                    Help(p); return;
                }

                bool stealth = false; bool totalBan = false;
                if (message[0] == '#')
                {
                    message = message.Remove(0, 1).Trim();
                    stealth = true;
                    Server.s.Log("Stealth Ban Attempted");
                }
                else if (message[0] == '@')
                {
                    totalBan = true;
                    message  = message.Remove(0, 1).Trim();
                }

                Player who = Player.Find(message);

                if (who == null)
                {
                    if (!Player.ValidName(message))
                    {
                        Player.SendMessage(p, "Invalid name \"" + message + "\".");
                        return;
                    }

                    Group foundGroup = Group.findPlayerGroup(message);

                    if (foundGroup.Permission >= LevelPermission.Operator)
                    {
                        Player.SendMessage(p, "You can't ban a " + foundGroup.name + "!");
                        return;
                    }
                    if (foundGroup.Permission == LevelPermission.Banned)
                    {
                        Player.SendMessage(p, message + " is already banned.");
                        return;
                    }

                    foundGroup.playerList.Remove(message);
                    foundGroup.playerList.Save();

                    Player.GlobalMessage(message + " &f(offline)" + Server.DefaultColor + " is now &8banned" + Server.DefaultColor + "!");
                    Group.findPerm(LevelPermission.Banned).playerList.Add(message);
                }
                else
                {
                    if (!Player.ValidName(who.name))
                    {
                        Player.SendMessage(p, "Invalid name \"" + who.name + "\".");
                        return;
                    }

                    if (who.group.Permission >= LevelPermission.Operator)
                    {
                        Player.SendMessage(p, "You can't ban a " + who.group.name + "!");
                        return;
                    }
                    if (who.group.Permission == LevelPermission.Banned)
                    {
                        Player.SendMessage(p, message + " is already banned.");
                        return;
                    }

                    who.group.playerList.Remove(message);
                    who.group.playerList.Save();

                    if (stealth)
                    {
                        Player.GlobalMessageOps(who.color + who.name + Server.DefaultColor + " is now STEALTH &8banned" + Server.DefaultColor + "!");
                    }
                    else
                    {
                        Player.GlobalChat(who, who.color + who.name + Server.DefaultColor + " is now &8banned" + Server.DefaultColor + "!", false);
                    }

                    who.group = Group.findPerm(LevelPermission.Banned);
                    who.color = who.group.color;
                    Player.GlobalDie(who, false);
                    Player.GlobalSpawn(who, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1], false);
                    Group.findPerm(LevelPermission.Banned).playerList.Add(who.name);
                }
                Group.findPerm(LevelPermission.Banned).playerList.Save();

                IRCBot.Say(message + " was banned.");
                Server.s.Log("BANNED: " + message.ToLower());

                if (totalBan == true)
                {
                    Command.all.Find("undo").Use(p, message + " 0");
                    Command.all.Find("banip").Use(p, "@ " + message);
                }
            }
            catch (Exception e) { Server.ErrorLog(e); }
        }
Пример #3
0
        public override void Use(Player p, string message)
        {
            if (message == "")
            {
                Help(p); return;
            }

            string[] parameters = message.Split(' '); // Grab the parameters from the player's message
            if (parameters.Length == 5)               // make sure there are 5 params
            {
                switch (parameters[4])
                {
                case "flat":
                case "pixel":
                case "island":
                case "mountains":
                case "ocean":
                case "forest":
                case "desert":
                    break;

                default:
                    Player.SendMessage(p, "Valid types: island, mountains, forest, ocean, flat, pixel, desert"); return;
                }

                string name = parameters[0].ToLower();
                ushort x = 1, y = 1, z = 1;
                try
                {
                    x = Convert.ToUInt16(parameters[1]);
                    y = Convert.ToUInt16(parameters[2]);
                    z = Convert.ToUInt16(parameters[3]);
                }
                catch { Player.SendMessage(p, "Invalid dimensions."); return; }
                if (!isGood(x))
                {
                    Player.SendMessage(p, x + " is not a good dimension! Use a power of 2 next time.");
                }
                if (!isGood(y))
                {
                    Player.SendMessage(p, y + " is not a good dimension! Use a power of 2 next time.");
                }
                if (!isGood(z))
                {
                    Player.SendMessage(p, z + " is not a good dimension! Use a power of 2 next time.");
                }

                if (!Player.ValidName(name))
                {
                    Player.SendMessage(p, "Invalid name!"); return;
                }

                try
                {
                    if (p != null)
                    {
                        if (p.group.Permission < LevelPermission.Admin)
                        {
                            if (x * y * z > 30000000)
                            {
                                Player.SendMessage(p, "Cannot create a map with over 30million blocks"); return;
                            }
                        }
                        else
                        {
                            if (x * y * z > 225000000)
                            {
                                Player.SendMessage(p, "You cannot make a map with over 225million blocks"); return;
                            }
                        }
                    }
                }
                catch
                {
                    Player.SendMessage(p, "An error occured");
                }

                // create a new level...
                try
                {
                    Level lvl = new Level(name, x, y, z, parameters[4]);
                    lvl.Save(true); //... and save it.
                }
                finally
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                }
                Player.GlobalMessage("Level " + name + " created"); // The player needs some form of confirmation.
            }
            else
            {
                Help(p);
            }
        }
Пример #4
0
        public override void Use(Player p, string message)
        {
            if (message.Split(' ').Length < 2)
            {
                Help(p); return;
            }

            string foundPath = message.Split(' ')[1].ToLower();

            if (!Player.ValidName(foundPath))
            {
                Player.SendMessage(p, "Invalid AI name!"); return;
            }
            if (foundPath == "hunt" || foundPath == "kill")
            {
                Player.SendMessage(p, "Reserved for special AI."); return;
            }

            try
            {
                switch (message.Split(' ')[0])
                {
                case "add":
                    if (message.Split(' ').Length == 2)
                    {
                        addPoint(p, foundPath);
                    }
                    else if (message.Split(' ').Length == 3)
                    {
                        addPoint(p, foundPath, message.Split(' ')[2]);
                    }
                    else if (message.Split(' ').Length == 4)
                    {
                        addPoint(p, foundPath, message.Split(' ')[2], message.Split(' ')[3]);
                    }
                    else
                    {
                        addPoint(p, foundPath, message.Split(' ')[2], message.Split(' ')[3], message.Split(' ')[4]);
                    }
                    break;

                case "del":
                    if (!Directory.Exists("bots/deleted"))
                    {
                        Directory.CreateDirectory("bots/deleted");
                    }

                    int currentTry = 0;
                    if (File.Exists("bots/" + foundPath))
                    {
                        retry : try
                        {
                            if (message.Split(' ').Length == 2)
                            {
                                if (currentTry == 0)
                                {
                                    File.Move("bots/" + foundPath, "bots/deleted/" + foundPath);
                                }
                                else
                                {
                                    File.Move("bots/" + foundPath, "bots/deleted/" + foundPath + currentTry);
                                }
                            }
                            else
                            {
                                if (message.Split(' ')[2].ToLower() == "last")
                                {
                                    string[] Lines    = File.ReadAllLines("bots/" + foundPath);
                                    string[] outLines = new string[Lines.Length - 1];
                                    for (int i = 0; i < Lines.Length - 1; i++)
                                    {
                                        outLines[i] = Lines[i];
                                    }

                                    File.WriteAllLines("bots/" + foundPath, outLines);
                                    Player.SendMessage(p, "Deleted the last waypoint from " + foundPath);
                                    return;
                                }
                                else
                                {
                                    Help(p); return;
                                }
                            }
                        }
                        catch (IOException) { currentTry++; goto retry; }
                        Player.SendMessage(p, "Deleted &b" + foundPath);
                    }
                    else
                    {
                        Player.SendMessage(p, "Could not find specified AI.");
                    }
                    break;

                default: Help(p); return;
                }
            }
            catch (Exception e) { Server.ErrorLog(e); }
        }
Пример #5
0
        public static void Load(string givenPath, bool skipsalt = false)
        {
            if (!skipsalt)
            {
                Server.salt = "";
                string rndchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
                Random rnd      = new Random();
                for (int i = 0; i < 16; ++i)
                {
                    Server.salt += rndchars[rnd.Next(rndchars.Length)];
                }
            }

            if (File.Exists(givenPath))
            {
                string[] lines = File.ReadAllLines(givenPath);

                foreach (string line in lines)
                {
                    if (line != "" && line[0] != '#')
                    {
                        //int index = line.IndexOf('=') + 1; // not needed if we use Split('=')
                        string key   = line.Split('=')[0].Trim();
                        string value = line.Split('=')[1].Trim();
                        string color = "";

                        switch (key.ToLower())
                        {
                        case "debug":
                            Server.debugMode = (value.ToLower() == "true");
                            break;

                        case "server-name":
                            if (ValidString(value, "![]:.,{}~-+()?_/\\ "))
                            {
                                Server.name = value;
                            }
                            else
                            {
                                Server.s.Log("server-name invalid! setting to default.");
                            }
                            break;

                        case "motd":
                            if (ValidString(value, "![]&:.,{}~-+()?_/\\ "))
                            {
                                Server.motd = value;
                            }
                            else
                            {
                                Server.s.Log("motd invalid! setting to default.");
                            }
                            break;

                        case "port":
                            try { Server.port = Convert.ToInt32(value); }
                            catch { Server.s.Log("port invalid! setting to default."); }
                            break;

                        case "upnp":
                            Server.upnp = (value.ToLower() == "true") ? true : false;
                            break;

                        case "verify-names":
                            Server.verify = (value.ToLower() == "true") ? true : false;
                            break;

                        case "public":
                            Server.pub = (value.ToLower() == "true") ? true : false;
                            break;

                        case "premium-only":
                            Server.premium = (value.ToLower() == "true");
                            break;

                        case "world-chat":
                            Server.worldChat = (value.ToLower() == "true") ? true : false;
                            break;

                        case "guest-goto":
                            Server.guestGoto = (value.ToLower() == "true") ? true : false;
                            break;

                        case "max-players":
                            try
                            {
                                if (Convert.ToByte(value) > 128)
                                {
                                    value = "128"; Server.s.Log("Max players has been lowered to 128.");
                                }
                                else if (Convert.ToByte(value) < 1)
                                {
                                    value = "1"; Server.s.Log("Max players has been increased to 1.");
                                }
                                Server.players = Convert.ToByte(value);
                            }
                            catch { Server.s.Log("max-players invalid! setting to default."); }
                            break;

                        case "max-guests":
                            try
                            {
                                if (Convert.ToByte(value) > 128)
                                {
                                    value = "128"; Server.s.Log("Max players has been lowered to 128.");
                                }
                                else if (Convert.ToByte(value) < 1)
                                {
                                    value = "1"; Server.s.Log("Max players has been increased to 1.");
                                }
                                Server.guests = Convert.ToByte(value);
                            }
                            catch { Server.s.Log("max-players invalid! setting to default."); }
                            break;

                        case "max-maps":
                            try
                            {
                                if (Convert.ToByte(value) > 100)
                                {
                                    value = "100";
                                    Server.s.Log("Max maps has been lowered to 100.");
                                }
                                else if (Convert.ToByte(value) < 1)
                                {
                                    value = "1";
                                    Server.s.Log("Max maps has been increased to 1.");
                                }
                                Server.maps = Convert.ToByte(value);
                            }
                            catch
                            {
                                Server.s.Log("max-maps invalid! setting to default.");
                            }
                            break;

                        case "irc":
                            Server.irc = (value.ToLower() == "true") ? true : false;
                            break;

                        case "irc-server":
                            Server.ircServer = value;
                            break;

                        case "irc-nick":
                            Server.ircNick = value;
                            break;

                        case "irc-channel":
                            Server.ircChannel = value;
                            break;

                        case "irc-opchannel":
                            Server.ircOpChannel = value;
                            break;

                        case "irc-port":
                            try
                            {
                                Server.ircPort = Convert.ToInt32(value);
                            }
                            catch
                            {
                                Server.s.Log("irc-port invalid! setting to default.");
                            }
                            break;

                        case "irc-identify":
                            try
                            {
                                Server.ircIdentify = Convert.ToBoolean(value);
                            }
                            catch
                            {
                                Server.s.Log("irc-identify boolean value invalid! Setting to the default of: " + Server.ircIdentify + ".");
                            }
                            break;

                        case "irc-password":
                            Server.ircPassword = value;
                            break;

                        case "global-chat":
                            Server.gc = (value.ToLower() == "true") ? true : false;
                            break;

                        case "gc-nick":
                            Server.gcNick = value;
                            break;

                        case "gc-identify":
                            Server.gcIdentify = (value.ToLower() == "true") ? true : false;
                            break;

                        case "gc-password":
                            Server.gcPassword = value;
                            break;

                        case "anti-tunnels":
                            Server.antiTunnel = (value.ToLower() == "true") ? true : false;
                            break;

                        case "max-depth":
                            try
                            {
                                Server.maxDepth = Convert.ToByte(value);
                            }
                            catch
                            {
                                Server.s.Log("maxDepth invalid! setting to default.");
                            }
                            break;

                        case "rplimit":
                            try { Server.rpLimit = Convert.ToInt16(value); }
                            catch { Server.s.Log("rpLimit invalid! setting to default."); }
                            break;

                        case "rplimit-norm":
                            try { Server.rpNormLimit = Convert.ToInt16(value); }
                            catch { Server.s.Log("rpLimit-norm invalid! setting to default."); }
                            break;


                        case "report-back":
                            Server.reportBack = (value.ToLower() == "true") ? true : false;
                            break;

                        case "backup-time":
                            if (Convert.ToInt32(value) > 1)
                            {
                                Server.backupInterval = Convert.ToInt32(value);
                            }
                            break;

                        case "backup-location":
                            if (!value.Contains("System.Windows.Forms.TextBox, Text:"))
                            {
                                Server.backupLocation = value;
                            }
                            break;

                        case "console-only":
                            Server.console = (value.ToLower() == "true") ? true : false;
                            break;

                        case "physicsrestart":
                            Server.physicsRestart = (value.ToLower() == "true") ? true : false;
                            break;

                        case "deathcount":
                            Server.deathcount = (value.ToLower() == "true") ? true : false;
                            break;

                        case "usemysql":
                            Server.useMySQL = (value.ToLower() == "true") ? true : false;
                            break;

                        case "host":
                            Server.MySQLHost = value;
                            break;

                        case "sqlport":
                            Server.MySQLPort = value;
                            break;

                        case "username":
                            Server.MySQLUsername = value;
                            break;

                        case "password":
                            Server.MySQLPassword = value;
                            break;

                        case "databasename":
                            Server.MySQLDatabaseName = value;
                            break;

                        case "pooling":
                            try { Server.MySQLPooling = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "defaultcolor":
                            color = c.Parse(value);
                            if (color == "")
                            {
                                color = c.Name(value); if (color != "")
                                {
                                    color = value;
                                }
                                else
                                {
                                    Server.s.Log("Could not find " + value); return;
                                }
                            }
                            Server.DefaultColor = color;
                            break;

                        case "irc-color":
                            color = c.Parse(value);
                            if (color == "")
                            {
                                color = c.Name(value); if (color != "")
                                {
                                    color = value;
                                }
                                else
                                {
                                    Server.s.Log("Could not find " + value); return;
                                }
                            }
                            Server.IRCColour = color;
                            break;

                        case "gc-color":
                            color = c.Parse(value);
                            if (color == "")
                            {
                                color = c.Name(value); if (color != "")
                                {
                                    color = value;
                                }
                                else
                                {
                                    Server.s.Log("Could not find " + value); return;
                                }
                            }
                            Server.gcColor = color;
                            break;

                        case "old-help":
                            try { Server.oldHelp = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "maintenance-perm":
                            try
                            {
                                sbyte parsed = sbyte.Parse(value);
                                if (parsed < -50 || parsed > 120)
                                {
                                    throw new FormatException();
                                }
                                Server.maintPerm = (LevelPermission)parsed;
                            }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "maintenance-kick":
                            try { Server.maintKick = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "opchat-perm":
                            try
                            {
                                sbyte parsed = sbyte.Parse(value);
                                if (parsed < -50 || parsed > 120)
                                {
                                    throw new FormatException();
                                }
                                Server.opchatperm = (LevelPermission)parsed;
                            }
                            catch { Server.s.Log("Invalid " + key + ".  Using default."); break; }
                            break;

                        case "adminchat-perm":
                            try
                            {
                                sbyte parsed = sbyte.Parse(value);
                                if (parsed < -50 || parsed > 120)
                                {
                                    throw new FormatException();
                                }
                                Server.adminchatperm = (LevelPermission)parsed;
                            }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "log-heartbeat":
                            try { Server.logbeat = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ".  Using default."); break; }
                            break;

                        case "force-cuboid":
                            try { Server.forceCuboid = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ".  Using default."); break; }
                            break;

                        case "cheapmessage":
                            try { Server.cheapMessage = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "cheap-message-given":
                            if (value != "")
                            {
                                Server.cheapMessageGiven = value;
                            }
                            break;

                        case "custom-ban":
                            try { Server.customBan = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "custom-ban-message":
                            if (value != "")
                            {
                                Server.customBanMessage = value;
                            }
                            break;

                        case "custom-shutdown":
                            try { Server.customShutdown = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "custom-shutdown-message":
                            if (value != "")
                            {
                                Server.customShutdownMessage = value;
                            }
                            break;

                        case "rank-super":
                            try { Server.rankSuper = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "default-rank":
                            try { Server.defaultRank = value.ToLower(); }
                            catch { }
                            break;

                        case "afk-minutes":
                            try
                            {
                                Server.afkminutes = Convert.ToInt32(value);
                            }
                            catch
                            {
                                Server.s.Log("irc-port invalid! setting to default.");
                            }
                            break;

                        case "afk-kick":
                            try { Server.afkkick = Convert.ToInt32(value); }
                            catch { Server.s.Log("irc-port invalid! setting to default."); }
                            break;

                        case "check-updates":
                            try { Server.checkUpdates = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "autoload":
                            try { Server.AutoLoad = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "auto-restart":
                            try { Server.autorestart = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "restarttime":
                            try { Server.restarttime = DateTime.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using defualt."); break; }
                            break;

                        case "parse-emotes":
                            try { Server.parseSmiley = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
                            break;

                        case "use-whitelist":
                            Server.useWhitelist = (value.ToLower() == "true") ? true : false;
                            break;

                        case "main-name":
                            if (Player.ValidName(value))
                            {
                                Server.level = value;
                            }
                            else
                            {
                                Server.s.Log("Invalid main name");
                            }
                            break;

                        case "dollar-before-dollar":
                            try { Server.dollardollardollar = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); }
                            break;

                        case "money-name":
                            if (value != "")
                            {
                                Server.moneys = value;
                            }
                            break;

                        case "mono":
                            try { Server.mono = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); }
                            break;

                        case "restart-on-error":
                            try { Server.restartOnError = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); }
                            break;

                        case "repeat-messages":
                            try { Server.repeatMessage = bool.Parse(value); }
                            catch { Server.s.Log("Invalid " + key + ". Using default."); }
                            break;

                        case "host-state":
                            if (value != "")
                            {
                                Server.ZallState = value;
                            }
                            break;
                        }
                    }
                }
                Server.s.SettingsUpdate();
                Save(givenPath);
            }
            else
            {
                Save(givenPath);
            }
        }