diff --git a/Commands/World/PermissionCmd.cs b/Commands/World/PermissionCmd.cs index 6a8fd6fbf..9f2f7a922 100644 --- a/Commands/World/PermissionCmd.cs +++ b/Commands/World/PermissionCmd.cs @@ -25,12 +25,12 @@ namespace MCGalaxy.Commands.World { public override bool museumUsable { get { return false; } } public override LevelPermission defaultRank { get { return LevelPermission.Operator; } } - protected Level GetArgs(Player p, string[] args, out Group grp) { + protected Level GetArgs(Player p, string[] args, ref Group grp) { if (args.Length == 1 && Player.IsSuper(p)) { SuperRequiresArgs(p, "level"); return null; } Level level = args.Length == 1 ? p.level : LevelInfo.FindMatches(p, args[0]); - if (level == null) return; + if (level == null) return null; string rank = args.Length == 1 ? args[0] : args[1]; grp = Group.FindMatches(p, rank); diff --git a/Commands/World/PermissionCmds.cs b/Commands/World/PermissionCmds.cs index ebd08754f..0e58b2e85 100644 --- a/Commands/World/PermissionCmds.cs +++ b/Commands/World/PermissionCmds.cs @@ -27,7 +27,7 @@ namespace MCGalaxy.Commands.World { if (args.Length < 1 || args.Length > 2) { Help(p); return; } Group grp = null; - Level lvl = GetArgs(p, args, out grp); + Level lvl = GetArgs(p, args, ref grp); if (lvl != null) lvl.BuildAccess.SetMax(p, grp); } @@ -45,7 +45,7 @@ namespace MCGalaxy.Commands.World { if (args.Length < 1 || args.Length > 2) { Help(p); return; } Group grp = null; - Level lvl = GetArgs(p, args, out grp); + Level lvl = GetArgs(p, args, ref grp); if (lvl != null) lvl.BuildAccess.SetMin(p, grp); } @@ -63,7 +63,7 @@ namespace MCGalaxy.Commands.World { if (args.Length < 1 || args.Length > 2) { Help(p); return; } Group grp = null; - Level lvl = GetArgs(p, args, out grp); + Level lvl = GetArgs(p, args, ref grp); if (lvl != null) lvl.VisitAccess.SetMax(p, grp); } @@ -87,7 +87,7 @@ namespace MCGalaxy.Commands.World { } Group grp = null; - Level lvl = GetArgs(p, args, out grp); + Level lvl = GetArgs(p, args, ref grp); if (lvl != null) lvl.VisitAccess.SetMin(p, grp); } diff --git a/Levels/LevelAccess.cs b/Levels/LevelAccess.cs index 694ffd06d..e197c7d86 100644 --- a/Levels/LevelAccess.cs +++ b/Levels/LevelAccess.cs @@ -106,7 +106,8 @@ namespace MCGalaxy { /// had insufficient permission to change the minimum rank. public bool SetMin(Player p, Group grp) { string target = IsVisit ? "pervisit" : "perbuild"; - if (!CheckRank(p, grp, target)) return false; + if (!CheckRank(p, Min, target, false)) return false; + if (!CheckRank(p, grp.Permission, target, true)) return false; Min = grp.Permission; UpdateAllowBuild(); @@ -119,7 +120,9 @@ namespace MCGalaxy { /// had insufficient permission to change the minimum rank. public bool SetMax(Player p, Group grp) { string target = IsVisit ? "pervisitmax" : "perbuildmax"; - if (grp.Permission != LevelPermission.Nobody && !CheckRank(p, grp, target)) return false; + const LevelPermission ignore = LevelPermission.Nobody; + if (Max != ignore && !CheckRank(p, Max, target, false)) return false; + if (grp.Permission != ignore && !CheckRank(p, grp.Permission, target, true)) return false; Max = grp.Permission; UpdateAllowBuild(); @@ -128,13 +131,10 @@ namespace MCGalaxy { } - bool CheckRank(Player p, Group grp, string target) { - if (p != null && Min > p.Rank) { - Player.Message(p, "You cannot change the {0} of a level with a {0} higher than your rank.", target); - return false; - } - if (p != null && grp.Permission > p.Rank) { - Player.Message(p, "You cannot change the {0} of a level to a {0} higher than your rank.", target); + bool CheckRank(Player p, LevelPermission perm, string target, bool newPerm) { + if (p != null && perm > p.Rank) { + Player.Message(p, "You cannot change the {0} of a level {1} a {0} higher than your rank.", + target, newPerm ? "to" : "with"); return false; } return true;