From 67503ef02a672b33290b97d924a185c1883bcc49 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 4 Jun 2017 11:16:09 +1000 Subject: [PATCH] Show right message when target rank of /setrank is >= own rank --- MCGalaxy/Commands/Moderation/CmdSetRank.cs | 13 +++++--- MCGalaxy/Commands/Moderation/CmdTempRank.cs | 36 +++++++++------------ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/MCGalaxy/Commands/Moderation/CmdSetRank.cs b/MCGalaxy/Commands/Moderation/CmdSetRank.cs index fb729acee..45ce4bc31 100644 --- a/MCGalaxy/Commands/Moderation/CmdSetRank.cs +++ b/MCGalaxy/Commands/Moderation/CmdSetRank.cs @@ -57,7 +57,7 @@ namespace MCGalaxy.Commands.Moderation { if (newRank == null) return; if (curRank == newRank) { - Player.Message(p, "{0} %Sis already ranked {1}", + Player.Message(p, "{0} %Sis already ranked {1}", PlayerInfo.GetColoredName(p, name), curRank.ColoredName); return; } @@ -69,11 +69,11 @@ namespace MCGalaxy.Commands.Moderation { OnModActionEvent.Call(action); } - bool CanChangeRank(string name, Group curRank, Group newRank, - Player who, Player p, ref string reason) { + internal static bool CanChangeRank(string name, Group curRank, Group newRank, + Player who, Player p, ref string reason) { Group banned = Group.BannedRank; if (reason == null) { - reason = newRank.Permission >= curRank.Permission ? + reason = newRank.Permission >= curRank.Permission ? Server.defaultPromoteMessage : Server.defaultDemoteMessage; } reason = ModActionCmd.ExpandReason(p, reason); @@ -85,9 +85,12 @@ namespace MCGalaxy.Commands.Moderation { if (curRank == banned) { Player.Message(p, "Use /unban to change a player's rank from %S{0}.", banned.ColoredName); return false; } - if (p != null && (curRank.Permission >= p.Rank || newRank.Permission >= p.Rank)) { + if (p != null && curRank.Permission >= p.Rank) { MessageTooHighRank(p, "change the rank of", false); return false; } + if (p != null && newRank.Permission >= p.Rank) { + Player.Message(p, "Can only rank up to below {0}", newRank.ColoredName); return false; + } if (p != null && newRank.Permission >= p.Rank) { Player.Message(p, "Cannot change the rank of a player to a rank equal or higher to yours."); return false; } diff --git a/MCGalaxy/Commands/Moderation/CmdTempRank.cs b/MCGalaxy/Commands/Moderation/CmdTempRank.cs index e9c070af7..afcef5695 100644 --- a/MCGalaxy/Commands/Moderation/CmdTempRank.cs +++ b/MCGalaxy/Commands/Moderation/CmdTempRank.cs @@ -55,8 +55,8 @@ namespace MCGalaxy.Commands.Moderation { if (target == null) return; Player who = PlayerInfo.FindExact(target); - Group group = Matcher.FindRanks(p, args[1]); - if (group == null) return; + Group newRank = Matcher.FindRanks(p, args[1]); + if (newRank == null) return; TimeSpan duration = TimeSpan.Zero; if (!CommandParser.GetTimespan(p, args[2], ref duration, "temp rank for", 'h')) return; @@ -67,42 +67,38 @@ namespace MCGalaxy.Commands.Moderation { if (p != null && who != null && p == who) { Player.Message(p, "&cYou cannot assign yourself a temporary rank."); return; } - Group pGroup = who != null ? who.group : Group.findPlayerGroup(target); - if (p != null && pGroup.Permission >= p.Rank) { - Player.Message(p, "Cannot change the temporary rank of someone equal or higher to yourself."); return; - } - if (p != null && group.Permission >= p.Rank) { - Player.Message(p, "Cannot change the temporary rank to a higher rank than yourself."); return; - } - + Group curRank = who != null ? who.group : Group.findPlayerGroup(target); string reason = args.Length > 3 ? args[3] : "assigning temp rank"; - reason = ModActionCmd.ExpandReason(p, reason); + if (!CmdSetRank.CanChangeRank(target, curRank, newRank, who, p, ref reason)) return; ModAction action = new ModAction(target, p, ModActionType.Rank, reason, duration); - action.targetGroup = pGroup; - action.Metadata = group; + action.targetGroup = curRank; + action.Metadata = newRank; OnModActionEvent.Call(action); } - static void Delete(Player p, string name) { + static void Delete(Player p, string target) { bool assigned = false; StringBuilder all = new StringBuilder(); - Player who = PlayerInfo.FindExact(name); + Player who = PlayerInfo.FindExact(target); + Group curRank = who != null ? who.group : Group.findPlayerGroup(target); + string reason = "temp rank unassigned"; foreach (string line in File.ReadAllLines(Paths.TempRanksFile)) { - if (!line.CaselessStarts(name)) { all.AppendLine(line); continue; } + if (!line.CaselessStarts(target)) { all.AppendLine(line); continue; } string[] parts = line.SplitSpaces(); - Group newgroup = Group.Find(parts[2]); + Group newRank = Group.Find(parts[2]); + if (!CmdSetRank.CanChangeRank(target, curRank, newRank, who, p, ref reason)) return; - ModAction action = new ModAction(name, p, ModActionType.Rank, "temp rank unassigned"); - action.Metadata = newgroup; + ModAction action = new ModAction(target, p, ModActionType.Rank, reason); + action.Metadata = newRank; OnModActionEvent.Call(action); assigned = true; } if (!assigned) { - Player.Message(p, "&a{0}&c has not been assigned a temp rank.", name); return; + Player.Message(p, "&a{0}&c has not been assigned a temp rank.", target); return; } File.WriteAllText(Paths.TempRanksFile, all.ToString()); }