From 7116c49e8f048630dfdf92c68ca8224c6699dc5e Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 28 Jul 2016 23:13:15 +1000 Subject: [PATCH] Now /unban partially matches player names. --- Commands/Moderation/CmdUnban.cs | 52 +++++++++++++++++---------------- Levels/Level.cs | 3 +- Player/List/PlayerList.cs | 9 +++++- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/Commands/Moderation/CmdUnban.cs b/Commands/Moderation/CmdUnban.cs index fefd008ff..b23a0428a 100644 --- a/Commands/Moderation/CmdUnban.cs +++ b/Commands/Moderation/CmdUnban.cs @@ -15,8 +15,7 @@ or implied. See the Licenses for the specific language governing permissions and limitations under the Licenses. */ -namespace MCGalaxy.Commands { - +namespace MCGalaxy.Commands { public sealed class CmdUnban : Command { public override string name { get { return "unban"; } } public override string shortcut { get { return ""; } } @@ -39,31 +38,34 @@ namespace MCGalaxy.Commands { string srcFull = p == null ? "(console)" : p.ColoredName + "%S"; string src = p == null ? "(console)" : p.name; - if (!Group.IsBanned(name)) { - foreach (Server.TempBan tban in Server.tempBans) { - if (!tban.name.CaselessEq(name)) continue; - - Server.tempBans.Remove(tban); - Player.GlobalMessage(name + " had their temporary ban lifted by " + srcFull + "."); - Server.s.Log("UNBANNED: " + name + " by " + src); - Server.IRC.Say(name + " was unbanned by " + src + "."); - return; - } - Player.Message(p, "Player \"" + name + "\" is not banned."); - } else { - Player.GlobalMessage(name + " was &8(unbanned) %Sby " + srcFull + "."); + // Check tempbans first + foreach (Server.TempBan tban in Server.tempBans) { + if (!tban.name.CaselessEq(name)) continue; + + Server.tempBans.Remove(tban); + Player.GlobalMessage(name + " had their temporary ban lifted by " + srcFull + "."); Server.s.Log("UNBANNED: " + name + " by " + src); Server.IRC.Say(name + " was unbanned by " + src + "."); - - Ban.UnbanPlayer(p, name, reason); - Group.findPerm(LevelPermission.Banned).playerList.Remove(name); - Group.findPerm(LevelPermission.Banned).playerList.Save(); - - if (who != null) { - who.group = Group.standard; who.color = who.group.color; - Entities.GlobalDespawn(who, false); - Entities.GlobalSpawn(who, false); - } + return; + } + + Group banned = Group.findPerm(LevelPermission.Banned); + int matches = 0; + name = banned.playerList.FindMatches(p, name, "banned players", out matches); + if (name == null) return; + + Player.GlobalMessage(name + " was &8(unbanned) %Sby " + srcFull + "."); + Server.s.Log("UNBANNED: " + name + " by " + src); + Server.IRC.Say(name + " was unbanned by " + src + "."); + + Ban.UnbanPlayer(p, name, reason); + Group.findPerm(LevelPermission.Banned).playerList.Remove(name); + Group.findPerm(LevelPermission.Banned).playerList.Save(); + + if (who != null) { + who.group = Group.standard; who.color = who.group.color; + Entities.GlobalDespawn(who, false); + Entities.GlobalSpawn(who, false); } string ip = PlayerInfo.FindIP(name); diff --git a/Levels/Level.cs b/Levels/Level.cs index a571de39d..7eb4f66fd 100644 --- a/Levels/Level.cs +++ b/Levels/Level.cs @@ -382,7 +382,8 @@ namespace MCGalaxy { object locker = ThreadSafeCache.DBCache.Get(name); lock (locker) { LevelDB.LoadZones(level, name); - LevelDB.LoadMetadata(level, name); + LevelDB.LoadPortals(level, name); + LevelDB.LoadMessages(level, name); } Server.s.Log(string.Format("Level \"{0}\" loaded.", level.name)); diff --git a/Player/List/PlayerList.cs b/Player/List/PlayerList.cs index 229e43dc5..6f663addc 100644 --- a/Player/List/PlayerList.cs +++ b/Player/List/PlayerList.cs @@ -21,7 +21,7 @@ using System.IO; using System.Text; namespace MCGalaxy { - public sealed class PlayerList { + public sealed class PlayerList { string path; List players = new List(); readonly object locker = new object(); @@ -60,6 +60,13 @@ namespace MCGalaxy { } } + public string FindMatches(Player p, string name, string type, out int matches) { + lock (locker) { + return Extensions.FindMatches(p, name, out matches, players, + n => true, n => n, type, 20); + } + } + public void Save() { Save(true); } public void Save(bool console) {