Example #1
0
        public static EcoStats RetrieveEcoStats(string playername)
        {
            EcoStats es;

            es.playerName = playername;
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", playername);
            using (DataTable eco = Database.fillData(query, "SELECT * FROM Economy WHERE player=@Name")) {
                if (eco.Rows.Count >= 1)
                {
                    es.money      = int.Parse(eco.Rows[0]["money"].ToString());
                    es.totalSpent = int.Parse(eco.Rows[0]["total"].ToString());
                    es.purchase   = eco.Rows[0]["purchase"].ToString();
                    es.payment    = eco.Rows[0]["payment"].ToString();
                    es.salary     = eco.Rows[0]["salary"].ToString();
                    es.fine       = eco.Rows[0]["fine"].ToString();
                }
                else
                {
                    es.money      = 0;
                    es.totalSpent = 0;
                    es.purchase   = "%cNone";
                    es.payment    = "%cNone";
                    es.salary     = "%cNone";
                    es.fine       = "%cNone";
                }
            }
            return(es);
        }
Example #2
0
        public void SaveZombieStats(Player p)
        {
            if (p.Game.TotalRoundsSurvived == 0 && p.Game.TotalInfected == 0)
            {
                return;
            }
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", p.name);
            DataTable table = Database.fillData(query, "SELECT * FROM ZombieStats WHERE Name=@Name");

            query.AddParam("@Name", p.name);
            query.AddParam("@TR", p.Game.TotalRoundsSurvived);
            query.AddParam("@MR", p.Game.MaxRoundsSurvived);
            query.AddParam("@TI", p.Game.TotalInfected);
            query.AddParam("@MI", p.Game.MaxInfected);

            if (table.Rows.Count == 0)
            {
                Database.executeQuery(query, "INSERT INTO ZombieStats (TotalRounds, MaxRounds, " +
                                      "TotalInfected, MaxInfected, Name) VALUES (@TR, @MR, @TI, @MI, @Name)");
            }
            else
            {
                Database.executeQuery(query, "UPDATE ZombieStats SET TotalRounds=@TR, MaxRounds=@MR, " +
                                      "TotalInfected=@TI, MaxInfected=@MI WHERE Name=@NAME");
            }
            table.Dispose();
        }
Example #3
0
        public override void Use(Player p, string message)
        {
            if (message == "")
            {
                Help(p); return;
            }
            if (message.IndexOf("'") != -1)
            {
                Player.SendMessage(p, "Cannot parse request."); return;
            }

            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@IP", message);
            DataTable playerDb = Database.fillData(query, "SELECT Name FROM Players WHERE IP=@IP");

            if (playerDb.Rows.Count == 0)
            {
                Player.SendMessage(p, "Could not find anyone with this IP"); return;
            }

            string playerNames = "Players with this IP: ";

            for (int i = 0; i < playerDb.Rows.Count; i++)
            {
                playerNames += playerDb.Rows[i]["Name"] + ", ";
            }
            playerNames = playerNames.Remove(playerNames.Length - 2);

            Player.SendMessage(p, playerNames);
            playerDb.Dispose();
        }
Example #4
0
        public override void Use(Player p, string message)
        {
            message = Colors.EscapeColors(message);
            if (message == "" && p != null)
            {
                message = p.name;
            }
            string name = message;

            int    matches = 0;
            Player who     = PlayerInfo.FindOrShowMatches(p, message, out matches);

            if (matches > 1)
            {
                return;
            }
            if (who == null)
            {
                Player.SendMessage(p, "Could not find player. Searching Player DB.");
                OfflinePlayer target = PlayerInfo.FindOffline(message);
                if (target == null)
                {
                    Player.SendMessage(p, "Could not find any player by the name entered."); return;
                }
                message = target.ip;
            }
            else
            {
                message = who.ip;
            }
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@IP", message);
            DataTable Clones = Database.fillData(query, "SELECT Name FROM Players WHERE IP=@IP");

            if (Clones.Rows.Count == 0)
            {
                Player.SendMessage(p, "Could not find any record of the player entered."); return;
            }

            List <string> alts = new List <string>();

            for (int i = 0; i < Clones.Rows.Count; ++i)
            {
                string altName = Clones.Rows[i]["Name"].ToString();
                AddAlt(altName, alts);
            }

            Clones.Dispose();
            if (alts.Count <= 1)
            {
                Player.SendMessage(p, name + " has no clones."); return;
            }

            Player.SendMessage(p, "These players have the same IP address:");
            Player.SendMessage(p, string.Join(", ", alts));
        }
Example #5
0
        public override void Use(Player p, string message)
        {
            if (message == "")
            {
                Help(p); return;
            }
            string[] args = message.Split(' ');

            Player who = PlayerInfo.FindOrShowMatches(p, args[0]);

            if (who == null)
            {
                return;
            }
            if (p != null && who.group.Permission > p.group.Permission)
            {
                MessageTooHighRank(p, "change the color of", true); return;
            }

            ParameterisedQuery query = ParameterisedQuery.Create();

            if (args.Length == 1)
            {
                Player.SendChatFrom(who, who.color + who.DisplayName + " %Shad their color removed.", false);
                who.color = who.group.color;

                query.AddParam("@Name", who.name);
                Database.executeQuery(query, "UPDATE Players SET color = '' WHERE name = @Name");
            }
            else
            {
                string color = Colors.Parse(args[1]);
                if (color == "")
                {
                    Player.SendMessage(p, "There is no color \"" + args[1] + "\"."); return;
                }
                else if (color == who.color)
                {
                    Player.SendMessage(p, p.DisplayName + " already has that color."); return;
                }
                Player.SendChatFrom(who, who.color + who.DisplayName + " %Shad their color changed to " + color + Colors.Name(color) + "%S.", false);
                who.color = color;

                query.AddParam("@Color", Colors.Name(color));
                query.AddParam("@Name", who.name);
                Database.executeQuery(query, "UPDATE Players SET color = @Color WHERE name = @Name");
            }
            Player.GlobalDespawn(who, false);
            Player.GlobalSpawn(who, false);
            who.SetPrefix();
        }
Example #6
0
        public static void UpdateEcoStats(EcoStats es)
        {
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", es.playerName);
            query.AddParam("@Money", es.money);
            query.AddParam("@Total", es.totalSpent);
            query.AddParam("@Purchase", es.purchase);
            query.AddParam("@Payment", es.payment);
            query.AddParam("@Salary", es.salary);
            query.AddParam("@Fine", es.fine);
            Database.executeQuery(query, string.Format("{0} Economy (player, money, total, purchase, payment, salary, fine) VALUES " +
                                                       "(@Name, @Money, @Total, @Purchase, @Payment, @Salary, @Fine)", (Server.useMySQL ? "REPLACE INTO" : "INSERT OR REPLACE INTO")));
        }
Example #7
0
        static void UpdateDB(Player p, string name, string type, string value, string column)
        {
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", name);
            if (value != "")
            {
                query.AddParam("@ArgValue", value);
                Database.executeQuery(query, "UPDATE Players SET " + column + "=@ArgValue WHERE Name=@Name");
            }
            else
            {
                Database.executeQuery(query, "UPDATE Players SET " + column + "='' WHERE Name=@Name");
            }
        }
Example #8
0
        public override void Use(Player p, string message)
        {
            if (message == "")
            {
                Help(p); return;
            }
            string[] parts = message.Split(trimChars, 2);

            Player who = PlayerInfo.FindOrShowMatches(p, parts[0]);

            if (who == null)
            {
                return;
            }
            if (p != null && who.group.Permission > p.group.Permission)
            {
                MessageTooHighRank(p, "change the title of", true); return;
            }

            string             newTitle = parts.Length > 1 ? parts[1] : "";
            ParameterisedQuery query    = ParameterisedQuery.Create();

            if (newTitle != "")
            {
                newTitle = newTitle.Replace("[", "").Replace("]", "");
            }
            if (newTitle.Length >= 20)
            {
                Player.SendMessage(p, "Title must be under 20 letters."); return;
            }

            if (newTitle == "")
            {
                Player.SendChatFrom(who, who.FullName + " %Shad their title removed.", false);
                query.AddParam("@Name", who.name);
                Database.executeQuery(query, "UPDATE Players SET Title = '' WHERE Name = @Name");
            }
            else
            {
                Player.SendChatFrom(who, who.FullName + " %Swas given the title of &b[" + newTitle + "%b]", false);
                query.AddParam("@Title", newTitle);
                query.AddParam("@Name", who.name);
                Database.executeQuery(query, "UPDATE Players SET Title = @Title WHERE Name = @Name");
            }
            who.title = newTitle;
            who.SetPrefix();
        }
Example #9
0
        void End()
        {
            started = false;
            string nextmap    = "";
            string winner     = "";
            Teams  winnerteam = null;

            if (blueteam.points >= maxpoints || blueteam.points > redteam.points)
            {
                winnerteam = blueteam;
                winner     = "blue team";
            }
            else if (redteam.points >= maxpoints || redteam.points > blueteam.points)
            {
                winnerteam = redteam;
                winner     = "red team";
            }
            else
            {
                Chat.GlobalMessageLevel(mainlevel, "The game ended in a tie!");
            }
            Chat.GlobalMessageLevel(mainlevel, "The winner was " + winnerteam.color + winner + "!!");
            Thread.Sleep(4000);
            //MYSQL!
            cache.ForEach(delegate(Data d)
            {
                const string syntax      = "UPDATE CTF SET Points=@Points, Captures=@Captures, tags=@Tags WHERE Name=@Name";
                d.hasflag                = false;
                ParameterisedQuery query = ParameterisedQuery.Create();
                query.AddParam("@Points", d.points);
                query.AddParam("@Captures", d.cap);
                query.AddParam("@Tags", d.tag);
                query.AddParam("@Name", d.p.name);
                Database.executeQuery(query, syntax);
            });
            nextmap = Vote();
            Chat.GlobalMessageLevel(mainlevel, "Starting a new game!");
            redbase  = null;
            redteam  = null;
            bluebase = null;
            blueteam = null;
            bluebase = new Base();
            redbase  = new Base();
            Thread.Sleep(2000);
            LoadMap(nextmap);
        }
Example #10
0
        public static string FindOfflineName(string name)
        {
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", name);
            string syntax = Server.useMySQL ? "SELECT Name FROM Players WHERE Name=@Name COLLATE utf8_general_ci" :
                            "SELECT * FROM Players WHERE Name=@Name COLLATE NOCASE";

            using (DataTable playerDB = Database.fillData(query, syntax)) {
                if (playerDB.Rows.Count == 0)
                {
                    return(null);
                }
                else
                {
                    return(playerDB.Rows[0]["Name"].ToString().Trim());
                }
            }
        }
Example #11
0
        public ZombieStats LoadZombieStats(string name)
        {
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", name);
            DataTable   table = Database.fillData(query, "SELECT * FROM ZombieStats WHERE Name=@Name");
            ZombieStats stats = default(ZombieStats);

            if (table.Rows.Count > 0)
            {
                DataRow row = table.Rows[0];
                stats.TotalRounds   = int.Parse(row["TotalRounds"].ToString());
                stats.MaxRounds     = int.Parse(row["MaxRounds"].ToString());
                stats.TotalInfected = int.Parse(row["TotalInfected"].ToString());
                stats.MaxInfected   = int.Parse(row["MaxInfected"].ToString());
            }
            table.Dispose();
            return(stats);
        }
Example #12
0
        void UpdateDatabase(Player p, CatchPos cpos, ushort x, ushort y, ushort z)
        {
            cpos.message = cpos.message.Replace("'", "\\'");
            cpos.message = Colors.EscapeColors(cpos.message);
            //safe against SQL injections because no user input is given here
            ParameterisedQuery query    = ParameterisedQuery.Create();
            DataTable          Messages = Database.fillData(query, "SELECT * FROM `Messages" + p.level.name + "` WHERE X=" + x + " AND Y=" + y + " AND Z=" + z);

            query.AddParam("@Message", cpos.message);
            if (Messages.Rows.Count == 0)
            {
                Database.executeQuery(query, "INSERT INTO `Messages" + p.level.name + "` (X, Y, Z, Message) VALUES (" + x + ", " + y + ", " + z + ", @Message)");
            }
            else
            {
                Database.executeQuery(query, "UPDATE `Messages" + p.level.name + "` SET Message=@Message WHERE X=" + x + " AND Y=" + y + " AND Z=" + z);
            }

            Messages.Dispose();
        }
Example #13
0
        public override void Use(Player p, string message)
        {
            if (message == "") { Help(p); return; }
            if (message[0] == '@')
            {
                message = message.Remove(0, 1).Trim();
                Player who = PlayerInfo.Find(message);
                if (who == null) {
                    ParameterisedQuery query = ParameterisedQuery.Create();
                    query.AddParam("@Name", message);
                    DataTable ip = Database.fillData(query, "SELECT IP FROM Players WHERE Name = @Name");
                    if (ip.Rows.Count > 0) {
                        message = ip.Rows[0]["IP"].ToString();
                    } else {
                        Player.SendMessage(p, "Unable to find an IP address for that user."); return;
                    }
                    ip.Dispose();
                } else {
                    message = who.ip;
                }
            }

            if (message.IndexOf('.') == -1) { Player.SendMessage(p, "Not a valid ip!"); return; }
            if (p != null) if (p.ip == message) { Player.SendMessage(p, "You shouldn't be able to use this command..."); return; }
            if (!Server.bannedIP.Contains(message)) { Player.SendMessage(p, message + " doesn't seem to be banned..."); return; }
            Server.bannedIP.Remove(message); Server.bannedIP.Save("banned-ip.txt", false);

            if (p != null)
            {
                Server.IRC.Say(message.ToLower() + " was un-ip-banned by " + p.name + ".");
                Server.s.Log("IP-UNBANNED: " + message.ToLower() + " by " + p.name + ".");
                Player.GlobalMessage(message + " was &8un-ip-banned" + Server.DefaultColor + " by " + p.color + p.name + Server.DefaultColor + ".");
            }
            else
            {
                Server.IRC.Say(message.ToLower() + " was un-ip-banned by console.");
                Server.s.Log("IP-UNBANNED: " + message.ToLower() + " by console.");
                Player.GlobalMessage(message + " was &8un-ip-banned" + Server.DefaultColor + " by console.");
            }
        }
Example #14
0
        public static OfflinePlayer FindOffline(string name, bool fullStats = false)
        {
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Name", name);
            string syntax = Server.useMySQL ? "SELECT * FROM Players WHERE Name=@Name COLLATE utf8_general_ci" :
                            "SELECT * FROM Players WHERE Name=@Name COLLATE NOCASE";

            using (DataTable playerDB = Database.fillData(query, syntax)) {
                if (playerDB.Rows.Count == 0)
                {
                    return(null);
                }

                OfflinePlayer pl  = new OfflinePlayer();
                DataRow       row = playerDB.Rows[0];
                pl.name = row["Name"].ToString().Trim();
                pl.ip   = row["IP"].ToString().Trim();

                pl.totalTime  = row["TimeSpent"].ToString();
                pl.firstLogin = row["FirstLogin"].ToString();
                pl.lastLogin  = row["LastLogin"].ToString();
                if (!fullStats)
                {
                    return(pl);
                }

                pl.title      = row["Title"].ToString().Trim();
                pl.titleColor = Colors.Parse(row["title_color"].ToString().Trim());
                pl.color      = Colors.Parse(row["color"].ToString().Trim());

                pl.money  = row["Money"].ToString();
                pl.deaths = row["TotalDeaths"].ToString();
                pl.blocks = row["totalBlocks"].ToString();
                pl.logins = row["totalLogin"].ToString();
                pl.kicks  = row["totalKicked"].ToString();
                return(pl);
            }
        }
Example #15
0
        void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type, byte extType)
        {
            RevertAndClearState(p, x, y, z);
            CatchPos cpos = (CatchPos)p.blockchangeObject;

            Level.Zone Zn;
            Zn.smallX = Math.Min(cpos.x, x);
            Zn.smallY = Math.Min(cpos.y, y);
            Zn.smallZ = Math.Min(cpos.z, z);
            Zn.bigX   = Math.Max(cpos.x, x);
            Zn.bigY   = Math.Max(cpos.y, y);
            Zn.bigZ   = Math.Max(cpos.z, z);
            Zn.Owner  = cpos.Owner;

            p.level.ZoneList.Add(Zn);

            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@Owner", Zn.Owner);
            Database.executeQuery(query, "INSERT INTO `Zone" + p.level.name + "` (SmallX, SmallY, SmallZ, BigX, BigY, BigZ, Owner) VALUES ("
                                  + Zn.smallX + ", " + Zn.smallY + ", " + Zn.smallZ + ", " + Zn.bigX + ", " + Zn.bigY + ", " + Zn.bigZ + ", @Owner)");
            Player.SendMessage(p, "Added zone for &b" + cpos.Owner);
        }
Example #16
0
        public override void Use(Player p, string message)
        {
            if (message == "" || message.IndexOf(' ') == -1)
            {
                Help(p); return;
            }

            Player who = PlayerInfo.Find(message.Split(' ')[0]);

            string whoTo, fromname;

            if (who != null)
            {
                whoTo = who.name;
            }
            else
            {
                whoTo = message.Split(' ')[0];
            }
            if (p != null)
            {
                fromname = p.name;
            }
            else
            {
                fromname = "Console";
            }

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

            message = message.Substring(message.IndexOf(' ') + 1);

            if (!Regex.IsMatch(message.ToLower(), @".*%([0-9]|[a-f]|[k-r])%([0-9]|[a-f]|[k-r])%([0-9]|[a-f]|[k-r])"))
            {
                if (Regex.IsMatch(message.ToLower(), @".*%([0-9]|[a-f]|[k-r])(.+?).*"))
                {
                    Regex           rg = new Regex(@"%([0-9]|[a-f]|[k-r])(.+?)");
                    MatchCollection mc = rg.Matches(message.ToLower());
                    if (mc.Count > 0)
                    {
                        Match           ma = mc[0];
                        GroupCollection gc = ma.Groups;
                        message.Replace("%" + gc[1].ToString().Substring(1), "&" + gc[1].ToString().Substring(1));
                    }
                }
            }

            //DB
            if (message.Length > 255 && Server.useMySQL)
            {
                Player.SendMessage(p, "Message was too long. The text below has been trimmed."); Player.SendMessage(p, message.Substring(256)); message = message.Remove(256);
            }
            //safe against SQL injections because whoTo is checked for illegal characters
            Database.executeQuery("CREATE TABLE if not exists `Inbox" + whoTo + "` (PlayerFrom CHAR(20), TimeSent DATETIME, Contents VARCHAR(255));");
            if (!Server.useMySQL)
            {
                Server.s.Log(message.Replace("'", "\\'"));
            }

            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@From", fromname);
            query.AddParam("@Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            query.AddParam("@Content", message);
            Database.executeQuery(query, "INSERT INTO `Inbox" + whoTo + "` (PlayerFrom, TimeSent, Contents) VALUES (@From, @Time, @Content)");
            //DB

            Player.SendMessage(p, "Message sent to &5" + whoTo + ".");
            if (who != null)
            {
                who.SendMessage("Message recieved from &5" + fromname + Server.DefaultColor + ".");
            }
        }
Example #17
0
        public override void Use(Player p, string message)
        {
            try
            {
                //safe against SQL injections because no user input is given here
                if (Server.useMySQL)
                {
                    Database.executeQuery("CREATE TABLE if not exists `Inbox" + p.name + "` (PlayerFrom CHAR(20), TimeSent DATETIME, Contents VARCHAR(255));");
                }
                else
                {
                    Database.executeQuery("CREATE TABLE if not exists `Inbox" + p.name + "` (PlayerFrom TEXT, TimeSent DATETIME, Contents TEXT);");
                }
                if (message == "")
                {
                    //safe against SQL injections because no user input is given here
                    DataTable Inbox = Database.fillData("SELECT * FROM `Inbox" + p.name + "` ORDER BY TimeSent");

                    if (Inbox.Rows.Count == 0)
                    {
                        Player.SendMessage(p, "No messages found."); Inbox.Dispose(); return;
                    }

                    for (int i = 0; i < Inbox.Rows.Count; ++i)
                    {
                        Player.SendMessage(p, i + ": From &5" + Inbox.Rows[i]["PlayerFrom"].ToString() + Server.DefaultColor + " at &a" + Inbox.Rows[i]["TimeSent"].ToString());
                    }
                    Inbox.Dispose();
                }
                else if (message.Split(' ')[0].ToLower() == "del" || message.Split(' ')[0].ToLower() == "delete")
                {
                    int FoundRecord = -1;

                    if (message.Split(' ')[1].ToLower() != "all")
                    {
                        try
                        {
                            FoundRecord = int.Parse(message.Split(' ')[1]);
                        }
                        catch { Player.SendMessage(p, "Incorrect number given."); return; }

                        if (FoundRecord < 0)
                        {
                            Player.SendMessage(p, "Cannot delete records below 0"); return;
                        }
                    }
                    //safe against SQL injections because no user input is given here
                    DataTable Inbox = Database.fillData("SELECT * FROM `Inbox" + p.name + "` ORDER BY TimeSent");

                    if (Inbox.Rows.Count - 1 < FoundRecord || Inbox.Rows.Count == 0)
                    {
                        Player.SendMessage(p, "\"" + FoundRecord + "\" does not exist."); Inbox.Dispose(); return;
                    }

                    ParameterisedQuery query = ParameterisedQuery.Create();
                    string             queryString;
                    //safe against SQL injections because no user input is given here
                    if (FoundRecord == -1)
                    {
                        queryString = Server.useMySQL ? "TRUNCATE TABLE `Inbox" + p.name + "`" : "DELETE FROM `Inbox" + p.name + "`";
                    }
                    else
                    {
                        query.AddParam("@From", Inbox.Rows[FoundRecord]["PlayerFrom"]);
                        query.AddParam("@Time", Convert.ToDateTime(Inbox.Rows[FoundRecord]["TimeSent"]).ToString("yyyy-MM-dd HH:mm:ss"));
                        queryString = "DELETE FROM `Inbox" + p.name + "` WHERE PlayerFrom=@FROM AND TimeSent=@Time";
                    }
                    Database.executeQuery(query, queryString);

                    if (FoundRecord == -1)
                    {
                        Player.SendMessage(p, "Deleted all messages.");
                    }
                    else
                    {
                        Player.SendMessage(p, "Deleted message.");
                    }

                    Inbox.Dispose();
                }
                else
                {
                    int FoundRecord;

                    try
                    {
                        FoundRecord = int.Parse(message);
                    }
                    catch { Player.SendMessage(p, "Incorrect number given."); return; }

                    if (FoundRecord < 0)
                    {
                        Player.SendMessage(p, "Cannot read records below 0"); return;
                    }

                    //safe against SQL injections because no user input is given here
                    DataTable Inbox = Database.fillData("SELECT * FROM `Inbox" + p.name + "` ORDER BY TimeSent");

                    if (Inbox.Rows.Count - 1 < FoundRecord || Inbox.Rows.Count == 0)
                    {
                        Player.SendMessage(p, "\"" + FoundRecord + "\" does not exist."); Inbox.Dispose(); return;
                    }

                    Player.SendMessage(p, "Message from &5" + Inbox.Rows[FoundRecord]["PlayerFrom"] + Server.DefaultColor + " sent at &a" + Inbox.Rows[FoundRecord]["TimeSent"] + ":");
                    Player.SendMessage(p, Inbox.Rows[FoundRecord]["Contents"].ToString());
                    Inbox.Dispose();
                }
            }
            catch
            {
                Player.SendMessage(p, "Error accessing inbox. You may have no mail, try again.");
            }
        }
Example #18
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 (!CheckAdditionalPerm(p, 1))
            {
                MessageNeedPerms(p, "can delete zones.", 1); return;
            }

            if (message.IndexOf(' ') == -1)
            {
                if (p.canBuild)                //Checks if player can build there
                {
                    switch (message.ToLower()) //If true - they can delete the zone
                    {
                    case "del":
                        p.zoneDel = true;
                        Player.SendMessage(p, "Place a block where you would like to delete a zone.");
                        return;

                    default:
                        Help(p);
                        return;
                    }
                }
                else //if they cant, it warns them, the ops and logs it on the server!
                {
                    Player.SendMessage(p, "You can't delete a zone which is above your rank!");
                    Chat.GlobalMessageOps(p.name + " tried to delete a zone that is above their rank!");
                    Server.s.Log(p.name + " tried to delete a zone that is above their rank!");
                    return;
                }
            }


            if (message.ToLower() == "del all")
            {
                if (!CheckAdditionalPerm(p, 2))
                {
                    MessageNeedPerms(p, "can delete all zones.", 2); return;
                }
                else
                {
                    for (int i = 0; i < p.level.ZoneList.Count; i++)
                    {
                        Level.Zone         Zn    = p.level.ZoneList[i];
                        ParameterisedQuery query = ParameterisedQuery.Create();
                        query.AddParam("@Owner", Zn.Owner);
                        Database.executeQuery(query, "DELETE FROM `Zone" + p.level.name + "` WHERE Owner=@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--;
                    }
                }
            }


            if (!CheckAdditionalPerm(p, 3))
            {
                MessageNeedPerms(p, "can create zones.", 3); 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 = PlayerInfo.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);
        }
Example #19
0
        public override void Use(Player p, string message)
        {
            if (String.IsNullOrEmpty(message.Trim()))
            {
                Help(p); return;
            }
            message = Colors.EscapeColors(message);
            string name = "";

            if (message[0] == '@')
            {
                message = message.Remove(0, 1).Trim();
                Player who = PlayerInfo.Find(message);

                if (who == null)
                {
                    OfflinePlayer target = PlayerInfo.FindOffline(message);
                    if (target != null)
                    {
                        name    = message.ToLower();
                        message = target.ip;
                    }
                    else
                    {
                        Player.SendMessage(p, "Unable to find an IP address for that user."); return;
                    }
                }
                else
                {
                    name    = who.name.ToLower();
                    message = who.ip;
                }
            }
            else
            {
                Player who = PlayerInfo.Find(message);
                if (who != null)
                {
                    name    = who.name.ToLower();
                    message = who.ip;
                }
            }

            if (message.Equals("127.0.0.1"))
            {
                Player.SendMessage(p, "You can't ip-ban the server!"); return;
            }
            if (message.IndexOf('.') == -1)
            {
                Player.SendMessage(p, "Invalid IP!"); return;
            }
            if (message.Split('.').Length != 4)
            {
                Player.SendMessage(p, "Invalid IP!"); return;
            }
            if (p != null && p.ip == message)
            {
                Player.SendMessage(p, "You can't ip-ban yourself.!"); return;
            }
            if (Server.bannedIP.Contains(message))
            {
                Player.SendMessage(p, message + " is already ip-banned."); return;
            }

            // Check if IP belongs to an op+
            // First get names of active ops+ with that ip
            List <string> opNamesWithThatIP = (from pl in PlayerInfo.players where (pl.ip == message && [email protected] >= LevelPermission.Operator) select pl.name).ToList();
            // Next, add names from the database
            ParameterisedQuery query = ParameterisedQuery.Create();

            query.AddParam("@IP", message);
            DataTable dbnames = Database.fillData(query, "SELECT Name FROM Players WHERE IP = @IP");

            foreach (DataRow row in dbnames.Rows)
            {
                opNamesWithThatIP.Add(row[0].ToString());
            }
            dbnames.Dispose();

            if (p != null && opNamesWithThatIP != null && opNamesWithThatIP.Count > 0)
            {
                // We have at least one op+ with a matching IP
                // Check permissions of everybody who matched that IP
                foreach (string opname in opNamesWithThatIP)
                {
                    // If one of these guys matches a player with a higher rank don't allow the ipban to proceed!
                    Group grp = Group.findPlayerGroup(opname);
                    if (grp == null || grp.Permission < p.group.Permission)
                    {
                        continue;
                    }

                    Player.SendMessage(p, "You can only ipban IPs used by players with a lower rank.");
                    Player.SendMessage(p, opname + "(" + grp.ColoredName + "%S) uses that IP.");
                    Server.s.Log(p.name + "failed to ipban " + message + " - IP is also used by: " + opname + "(" + grp.name + ")");
                    return;
                }
            }

            if (p != null)
            {
                Server.IRC.Say(message.ToLower() + " was ip-banned by " + p.name + ".");
                Server.s.Log("IP-BANNED: " + message.ToLower() + " by " + p.name + ".");
                Player.GlobalMessage(message + " was &8ip-banned %Sby " + p.color + p.name + "%S.");
            }
            else
            {
                Server.IRC.Say(message.ToLower() + " was ip-banned by console.");
                Server.s.Log("IP-BANNED: " + message.ToLower() + " by console.");
                Player.GlobalMessage(message + " was &8ip-banned %S by (console).");
            }
            Server.bannedIP.Add(message);
            Server.bannedIP.Save("banned-ip.txt", false);

            /*
             * foreach (Player pl in PlayerInfo.players) {
             *  if (message == pl.ip) { pl.Kick("Kicked by ipban"); }
             * }*/
        }