mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-24 05:03:34 -04:00
Cleanup permission commands.
This commit is contained in:
parent
4c8e6fd95b
commit
362112697b
@ -19,43 +19,22 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace MCGalaxy.Commands.World {
|
namespace MCGalaxy.Commands.World {
|
||||||
static class PermissionCmd {
|
public abstract class PermissionCmd : Command {
|
||||||
|
public override string shortcut { get { return ""; } }
|
||||||
|
public override string type { get { return CommandTypes.World; } }
|
||||||
|
public override bool museumUsable { get { return false; } }
|
||||||
|
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
|
||||||
|
|
||||||
public static void Use(Player p, string[] args, bool skipNobodyPerm, string target,
|
protected Level GetArgs(Player p, string[] args, out Group grp) {
|
||||||
Func<Level, LevelPermission> getter, Action<Level, LevelPermission> setter) {
|
if (args.Length == 1 && Player.IsSuper(p)) {
|
||||||
if (args.Length == 1 && p == null) {
|
SuperRequiresArgs(p, "level"); return null;
|
||||||
Player.Message(p, "You must provide a level name when using this command from console.");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
Level level = args.Length == 1 ? p.level : LevelInfo.FindMatches(p, args[0]);
|
Level level = args.Length == 1 ? p.level : LevelInfo.FindMatches(p, args[0]);
|
||||||
if (level == null) return;
|
if (level == null) return;
|
||||||
|
|
||||||
string rank = args.Length == 1 ? args[0] : args[1];
|
string rank = args.Length == 1 ? args[0] : args[1];
|
||||||
Group grp = Group.FindMatches(p, rank);
|
grp = Group.FindMatches(p, rank);
|
||||||
if (grp == null) return;
|
return grp != null ? level : null;
|
||||||
|
|
||||||
if (p != null && getter(level) > p.Rank) {
|
|
||||||
if (skipNobodyPerm || (getter(level) != LevelPermission.Nobody)) {
|
|
||||||
Player.Message(p, "You cannot change the {0} of a level with a {0} higher than your rank.", target);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p != null && grp.Permission > p.Rank) {
|
|
||||||
if (skipNobodyPerm || (grp.Permission != LevelPermission.Nobody)) {
|
|
||||||
Player.Message(p, "You cannot change the {0} of a level to a {0} higher than your rank.", target);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setter(level, grp.Permission);
|
|
||||||
UpdateAllowBuild(level);
|
|
||||||
Level.SaveSettings(level);
|
|
||||||
|
|
||||||
Server.s.Log(level.name + " " + target + " permission changed to " + grp.Permission + ".");
|
|
||||||
Chat.MessageLevel(level, target + " permission changed to " + grp.ColoredName + "%S.");
|
|
||||||
if (p == null || p.level != level)
|
|
||||||
Player.Message(p, "{0} permission changed to {1}%S on {2}.", target, grp.ColoredName, level.name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void UseList(Player p, string[] args, string target,
|
public static void UseList(Player p, string[] args, string target,
|
||||||
|
@ -19,21 +19,16 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace MCGalaxy.Commands.World {
|
namespace MCGalaxy.Commands.World {
|
||||||
public sealed class CmdPerbuildMax : Command {
|
public sealed class CmdPerbuildMax : PermissionCmd {
|
||||||
public override string name { get { return "perbuildmax"; } }
|
public override string name { get { return "perbuildmax"; } }
|
||||||
public override string shortcut { get { return ""; } }
|
|
||||||
public override string type { get { return CommandTypes.World; } }
|
|
||||||
public override bool museumUsable { get { return false; } }
|
|
||||||
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
|
|
||||||
public CmdPerbuildMax() { }
|
|
||||||
|
|
||||||
public override void Use(Player p, string message) {
|
public override void Use(Player p, string message) {
|
||||||
string[] args = message.Split(' ');
|
string[] args = message.Split(' ');
|
||||||
if (args.Length < 1 || args.Length > 2) { Help(p); return; }
|
if (args.Length < 1 || args.Length > 2) { Help(p); return; }
|
||||||
|
|
||||||
PermissionCmd.Use(
|
Group grp = null;
|
||||||
p, args, false, "perbuildmax", l => l.perbuildmax,
|
Level lvl = GetArgs(p, args, out grp);
|
||||||
(l, v) => l.perbuildmax = v);
|
if (lvl != null) lvl.BuildAccess.SetMax(p, grp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Help(Player p) {
|
public override void Help(Player p) {
|
||||||
@ -42,21 +37,16 @@ namespace MCGalaxy.Commands.World {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class CmdPermissionBuild : Command {
|
public sealed class CmdPermissionBuild : PermissionCmd {
|
||||||
public override string name { get { return "perbuild"; } }
|
public override string name { get { return "perbuild"; } }
|
||||||
public override string shortcut { get { return ""; } }
|
|
||||||
public override string type { get { return CommandTypes.World; } }
|
|
||||||
public override bool museumUsable { get { return false; } }
|
|
||||||
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
|
|
||||||
public CmdPermissionBuild() { }
|
|
||||||
|
|
||||||
public override void Use(Player p, string message) {
|
public override void Use(Player p, string message) {
|
||||||
string[] args = message.Split(' ');
|
string[] args = message.Split(' ');
|
||||||
if (args.Length < 1 || args.Length > 2) { Help(p); return; }
|
if (args.Length < 1 || args.Length > 2) { Help(p); return; }
|
||||||
|
|
||||||
PermissionCmd.Use(
|
Group grp = null;
|
||||||
p, args, true, "perbuild", l => l.permissionbuild,
|
Level lvl = GetArgs(p, args, out grp);
|
||||||
(l, v) => l.permissionbuild = v);
|
if (lvl != null) lvl.BuildAccess.SetMin(p, grp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Help(Player p) {
|
public override void Help(Player p) {
|
||||||
@ -65,21 +55,16 @@ namespace MCGalaxy.Commands.World {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class CmdPervisitMax : Command {
|
public sealed class CmdPervisitMax : PermissionCmd {
|
||||||
public override string name { get { return "pervisitmax"; } }
|
public override string name { get { return "pervisitmax"; } }
|
||||||
public override string shortcut { get { return ""; } }
|
|
||||||
public override string type { get { return CommandTypes.World; } }
|
|
||||||
public override bool museumUsable { get { return false; } }
|
|
||||||
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
|
|
||||||
public CmdPervisitMax() { }
|
|
||||||
|
|
||||||
public override void Use(Player p, string message) {
|
public override void Use(Player p, string message) {
|
||||||
string[] args = message.Split(' ');
|
string[] args = message.Split(' ');
|
||||||
if (args.Length < 1 || args.Length > 2) { Help(p); return; }
|
if (args.Length < 1 || args.Length > 2) { Help(p); return; }
|
||||||
|
|
||||||
PermissionCmd.Use(
|
Group grp = null;
|
||||||
p, args, false, "pervisitmax", l => l.pervisitmax,
|
Level lvl = GetArgs(p, args, out grp);
|
||||||
(l, v) => l.pervisitmax = v);
|
if (lvl != null) lvl.VisitAccess.SetMax(p, grp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Help(Player p) {
|
public override void Help(Player p) {
|
||||||
@ -88,13 +73,8 @@ namespace MCGalaxy.Commands.World {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class CmdPermissionVisit : Command {
|
public sealed class CmdPermissionVisit : PermissionCmd {
|
||||||
public override string name { get { return "pervisit"; } }
|
public override string name { get { return "pervisit"; } }
|
||||||
public override string shortcut { get { return ""; } }
|
|
||||||
public override string type { get { return CommandTypes.World; } }
|
|
||||||
public override bool museumUsable { get { return false; } }
|
|
||||||
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
|
|
||||||
public CmdPermissionVisit() { }
|
|
||||||
|
|
||||||
public override void Use(Player p, string message) {
|
public override void Use(Player p, string message) {
|
||||||
string[] args = message.Split(' ');
|
string[] args = message.Split(' ');
|
||||||
@ -106,9 +86,9 @@ namespace MCGalaxy.Commands.World {
|
|||||||
l => l.VisitWhitelist, l => l.VisitBlacklist); return;
|
l => l.VisitWhitelist, l => l.VisitBlacklist); return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PermissionCmd.Use(
|
Group grp = null;
|
||||||
p, args, true, "pervisit", l => l.permissionvisit,
|
Level lvl = GetArgs(p, args, out grp);
|
||||||
(l, v) => l.permissionvisit = v);
|
if (lvl != null) lvl.VisitAccess.SetMin(p, grp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Help(Player p) {
|
public override void Help(Player p) {
|
@ -36,11 +36,19 @@ namespace MCGalaxy {
|
|||||||
/// <summary> Lowest allowed rank. </summary>
|
/// <summary> Lowest allowed rank. </summary>
|
||||||
public LevelPermission Min {
|
public LevelPermission Min {
|
||||||
get { return IsVisit ? lvl.permissionvisit : lvl.permissionbuild; }
|
get { return IsVisit ? lvl.permissionvisit : lvl.permissionbuild; }
|
||||||
|
set {
|
||||||
|
if (IsVisit) lvl.permissionvisit = value;
|
||||||
|
else lvl.permissionbuild = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Highest allowed rank. </summary>
|
/// <summary> Highest allowed rank. </summary>
|
||||||
public LevelPermission Max {
|
public LevelPermission Max {
|
||||||
get { return IsVisit ? lvl.pervisitmax : lvl.perbuildmax; }
|
get { return IsVisit ? lvl.pervisitmax : lvl.perbuildmax; }
|
||||||
|
set {
|
||||||
|
if (IsVisit) lvl.pervisitmax = value;
|
||||||
|
else lvl.perbuildmax = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> List of always allowed players, overrides rank allowances. </summary>
|
/// <summary> List of always allowed players, overrides rank allowances. </summary>
|
||||||
@ -53,6 +61,7 @@ namespace MCGalaxy {
|
|||||||
get { return IsVisit ? lvl.VisitBlacklist : lvl.BuildBlacklist; }
|
get { return IsVisit ? lvl.VisitBlacklist : lvl.BuildBlacklist; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary> Returns whether the given player is allowed by these access permissions. </summary>
|
/// <summary> Returns whether the given player is allowed by these access permissions. </summary>
|
||||||
public bool Check(Player p, bool ignoreRankPerm = false) {
|
public bool Check(Player p, bool ignoreRankPerm = false) {
|
||||||
if (Blacklisted.CaselessContains(p.name)) return false;
|
if (Blacklisted.CaselessContains(p.name)) return false;
|
||||||
@ -90,5 +99,62 @@ namespace MCGalaxy {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary> Sets the minimum rank allowed to access these permissions. </summary>
|
||||||
|
/// <returns> true if the minimum rank was changed, false if the given player
|
||||||
|
/// had insufficient permission to change the minimum rank. </returns>
|
||||||
|
public bool SetMin(Player p, Group grp) {
|
||||||
|
string target = IsVisit ? "pervisit" : "perbuild";
|
||||||
|
if (!CheckRank(p, grp, target)) return false;
|
||||||
|
Min = grp.Permission;
|
||||||
|
|
||||||
|
UpdateAllowBuild();
|
||||||
|
OnPermissionChanged(p, grp, target);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary> Sets the minimum rank allowed to access these permissions. </summary>
|
||||||
|
/// <returns> true if the minimum rank was changed, false if the given player
|
||||||
|
/// had insufficient permission to change the minimum rank. </returns>
|
||||||
|
public bool SetMax(Player p, Group grp) {
|
||||||
|
string target = IsVisit ? "pervisitmax" : "perbuildmax";
|
||||||
|
if (grp.Permission != LevelPermission.Nobody && !CheckRank(p, grp, target)) return false;
|
||||||
|
Max = grp.Permission;
|
||||||
|
|
||||||
|
UpdateAllowBuild();
|
||||||
|
OnPermissionChanged(p, grp, target);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnPermissionChanged(Player p, Group grp, string target) {
|
||||||
|
Level.SaveSettings(lvl);
|
||||||
|
Server.s.Log(lvl.name + " " + target + " permission changed to " + grp.Permission + ".");
|
||||||
|
Chat.MessageLevel(lvl, target + " permission changed to " + grp.ColoredName + "%S.");
|
||||||
|
if (p == null || p.level != lvl)
|
||||||
|
Player.Message(p, "{0} permission changed to {1}%S on {2}.", target, grp.ColoredName, lvl.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAllowBuild() {
|
||||||
|
if (IsVisit) return;
|
||||||
|
Player[] players = PlayerInfo.Online.Items;
|
||||||
|
foreach (Player p in players) {
|
||||||
|
if (p.level != lvl) continue;
|
||||||
|
p.AllowBuild = lvl.BuildAccess.Check(p, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -385,7 +385,7 @@
|
|||||||
<Compile Include="Commands\World\CmdMuseum.cs" />
|
<Compile Include="Commands\World\CmdMuseum.cs" />
|
||||||
<Compile Include="Commands\World\CmdNewLvl.cs" />
|
<Compile Include="Commands\World\CmdNewLvl.cs" />
|
||||||
<Compile Include="Commands\World\CmdPause.cs" />
|
<Compile Include="Commands\World\CmdPause.cs" />
|
||||||
<Compile Include="Commands\World\CmdPermissions.cs" />
|
<Compile Include="Commands\World\PermissionCmds.cs" />
|
||||||
<Compile Include="Commands\World\CmdPhysics.cs" />
|
<Compile Include="Commands\World\CmdPhysics.cs" />
|
||||||
<Compile Include="Commands\World\CmdRenameLvl.cs" />
|
<Compile Include="Commands\World\CmdRenameLvl.cs" />
|
||||||
<Compile Include="Commands\World\CmdResizeLvl.cs" />
|
<Compile Include="Commands\World\CmdResizeLvl.cs" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user