Make perbuild/pervisit/perbuildmax/pervisitmax show actual rank name instead of the LevelPermission enum value (thanks Joshim4), also fix not showing multiple level matches for those commands too.

This commit is contained in:
UnknownShadow200 2016-07-29 08:46:49 +10:00
parent 7116c49e8f
commit b188c12172
4 changed files with 34 additions and 39 deletions

View File

@ -56,7 +56,7 @@ namespace MCGalaxy {
protected void SuperRequiresArgs(Player p, string type) { SuperRequiresArgs(name, p, type); }
protected static void SuperRequiresArgs(string cmd, Player p, string type) {
protected internal static void SuperRequiresArgs(string cmd, Player p, string type) {
string src = p == null ? "console" : "IRC";
Player.Message(p, "When using /{0} from {2}, you must provide a {1}.", cmd, type, src);
}

View File

@ -31,46 +31,39 @@ namespace MCGalaxy.Commands.World {
if (level == null) return;
string rank = args.Length == 1 ? args[0] : args[1];
LevelPermission newRank = Level.PermissionFromName(rank);
if (newRank == LevelPermission.Null) {
Player.Message(p, "Not a valid rank"); return;
}
Group grp = Group.FindMatches(p, rank);
if (grp == null) return;
if (p != null && getter(level) > p.Rank) {
if (skipNobodyPerm || (getter(level) != LevelPermission.Nobody)) {
Player.Message(p, "You cannot change the " + target + " of a level " +
"with a " + target + " higher than your rank.");
Player.Message(p, "You cannot change the {0} of a level with a {0} higher than your rank.", target);
return;
}
}
if (p != null && newRank > p.Rank) {
if (skipNobodyPerm || (newRank != LevelPermission.Nobody)) {
Player.Message(p, "You cannot change the " + target + " of a level " +
"to a " + target + " higher than your rank.");
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, newRank);
setter(level, grp.Permission);
Level.SaveSettings(level);
Server.s.Log(level.name + " " + target + " permission changed to " + newRank + ".");
Chat.GlobalMessageLevel(level, target + " permission changed to " + newRank + ".");
Server.s.Log(level.name + " " + target + " permission changed to " + grp.Permission + ".");
Chat.GlobalMessageLevel(level, target + " permission changed to " + grp.ColoredName + "%S.");
if (p == null || p.level != level)
Player.Message(p, target + " permission changed to " + newRank + " on " + level.name + ".");
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,
Func<Level, LevelPermission> getter,
Func<Level, List<string>> wlGetter, Func<Level, List<string>> blGetter) {
if (args.Length == 1 && p == 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.Find(args[0]);
if (level == null) {
Player.Message(p, "There is no level \"" + args[0] + "\" loaded."); return;
if (args.Length == 1 && Player.IsSuper(p)) {
Command.SuperRequiresArgs(target, p, "level"); return;
}
Level level = args.Length == 1 ? p.level : LevelInfo.FindMatches(p, args[0]);
if (level == null) return;
string name = args.Length == 1 ? args[0] : args[1];
string mode = name[0] == '+' ? "whitelist" : "blacklist";
@ -79,26 +72,25 @@ namespace MCGalaxy.Commands.World {
name = name.Substring(1);
if (name == "") {
Player.Message(p, "You must provide a player name to " + mode + "."); return;
Player.Message(p, "You must provide a player name to {0}.", mode); return;
}
if (p != null && name.CaselessEq(p.name)) {
Player.Message(p, "You cannot " + mode + " yourself."); return;
Player.Message(p, "You cannot {0} yourself.", mode); return;
}
if (p != null && getter(level) > p.Rank) {
Player.Message(p, "You cannot change the " + target + " " + mode +
" permissions for a player higher than your rank."); return;
Player.Message(p, "You cannot change the {0} {1} permissions " +
"for a player higher than your rank.", target, mode); return;
}
if (p != null && blGetter(level).CaselessContains(p.name)) {
Player.Message(p, "You cannot change " + target + " " +
"permissions as you are blacklisted."); return;
Player.Message(p, "You cannot change {0} permissions as you are blacklisted.", target); return;
}
if (p != null && PlayerInfo.GetGroup(name).Permission > p.Rank) {
Player.Message(p, "You cannot whitelist/blacklist players of a higher rank."); return;
}
if (list.CaselessContains(name)) {
Player.Message(p, "\"" + name + "\" is already " + mode + "ed."); return;
Player.Message(p, "\"{0}\" is already {1}ed.", name, mode); return;
}
list.Add(name);
other.CaselessRemove(name);
@ -108,7 +100,7 @@ namespace MCGalaxy.Commands.World {
Server.s.Log(msg + " on " + level.name);
Chat.GlobalMessageLevel(level, msg);
if (p == null || p.level != level)
Player.Message(p, msg + " on " + level.name + ".");
Player.Message(p, msg + " on {0}.", level.name);
}
}
}

View File

@ -120,16 +120,16 @@ namespace MCGalaxy.Commands.Building {
void ShowMessageBlocks(Player p) {
p.showMBs = !p.showMBs;
//safe against SQL injections because no user input is given here
using (DataTable Messages = Database.Fill("SELECT * FROM `Messages" + p.level.name + "`")) {
using (DataTable table = Database.Fill("SELECT * FROM `Messages" + p.level.name + "`")) {
if (p.showMBs) {
for (int i = 0; i < Messages.Rows.Count; i++) {
DataRow row = Messages.Rows[i];
for (int i = 0; i < table.Rows.Count; i++) {
DataRow row = table.Rows[i];
p.SendBlockchange(ushort.Parse(row["X"].ToString()), ushort.Parse(row["Y"].ToString()), ushort.Parse(row["Z"].ToString()), Block.MsgWhite);
}
Player.Message(p, "Now showing &a" + Messages.Rows.Count + " %SMBs.");
Player.Message(p, "Now showing &a" + table.Rows.Count + " %SMBs.");
} else {
for (int i = 0; i < Messages.Rows.Count; i++) {
DataRow row = Messages.Rows[i];
for (int i = 0; i < table.Rows.Count; i++) {
DataRow row = table.Rows[i];
p.RevertBlock(ushort.Parse(row["X"].ToString()), ushort.Parse(row["Y"].ToString()), ushort.Parse(row["Z"].ToString()));
}
Player.Message(p, "Now hiding MBs.");

View File

@ -126,9 +126,12 @@ namespace MCGalaxy {
//safe against SQL injections because the levelname (message) is first being checked if it exists
Database.Execute("DROP TABLE `Block" + name + "`");
Database.Execute("DROP TABLE `Portals" + name + "`");
Database.Execute("DROP TABLE `Messages" + name + "`");
Database.Execute("DROP TABLE `Zone" + name + "`");
object locker = ThreadSafeCache.DBCache.Get(name);
lock (locker) {
Database.Execute("DROP TABLE `Portals" + name + "`");
Database.Execute("DROP TABLE `Messages" + name + "`");
Database.Execute("DROP TABLE `Zone" + name + "`");
}
}
public static void Replace(Level old, Level lvl) {