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); }
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(); }
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(); }
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)); }
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(); }
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"))); }
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"); } }
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(); }
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); }
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()); } } }
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); }
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(); }
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."); } }
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); } }
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); }
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 + "."); } }
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."); } }
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); }
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"); } * }*/ }