From 7113b0ee5398b54316aa99f732826783e7aace23 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 21 Jun 2016 09:53:32 +1000 Subject: [PATCH] Combine /reload and /reveal. (Thanks goodlyay) --- Commands/CPE/CustomBlockCommand.cs | 2 +- Commands/Command.Helpers.cs | 12 ++- Commands/World/{CmdReveal.cs => CmdReload.cs} | 101 ++++++++---------- Drawing/DrawOps/DrawOp.Performer.cs | 2 +- MCGalaxy_.csproj | 2 +- 5 files changed, 52 insertions(+), 67 deletions(-) rename Commands/World/{CmdReveal.cs => CmdReload.cs} (52%) diff --git a/Commands/CPE/CustomBlockCommand.cs b/Commands/CPE/CustomBlockCommand.cs index 2f144b436..232e7a587 100644 --- a/Commands/CPE/CustomBlockCommand.cs +++ b/Commands/CPE/CustomBlockCommand.cs @@ -440,7 +440,7 @@ namespace MCGalaxy.Commands.CPE { if (pl.level == null || !pl.level.HasCustomBlocks) continue; if (!pl.outdatedClient) continue; - CmdReveal.ReloadMap(p, pl, true); + CmdReload.ReloadMap(p, pl, true); } } diff --git a/Commands/Command.Helpers.cs b/Commands/Command.Helpers.cs index 9ca14bc2d..4baac0b01 100644 --- a/Commands/Command.Helpers.cs +++ b/Commands/Command.Helpers.cs @@ -49,14 +49,16 @@ namespace MCGalaxy { } protected bool CheckSuper(Player p, string message, string type) { - if (message != "" || (p != null && p.ircNick == null)) return false; - SuperRequiresArgs(p, type); + if (message != "" || !Player.IsSuper(p)) return false; + SuperRequiresArgs(name, p, type); return true; } - protected void SuperRequiresArgs(Player p, string type) { - string src = p == null ? "console" : "IRC"; - Player.Message(p, "When using /{0} from {2}, you must provide a {1}.", name, type, src); + protected void SuperRequiresArgs(Player p, string type) { SuperRequiresArgs(name, p, type); } + + protected 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); } protected bool CheckExtraPerm(Player p, int num = 1) { diff --git a/Commands/World/CmdReveal.cs b/Commands/World/CmdReload.cs similarity index 52% rename from Commands/World/CmdReveal.cs rename to Commands/World/CmdReload.cs index b8d8177e8..f8836ab0a 100644 --- a/Commands/World/CmdReveal.cs +++ b/Commands/World/CmdReload.cs @@ -17,57 +17,62 @@ */ using System; namespace MCGalaxy.Commands { - - public sealed class CmdReveal : Command { - - public override string name { get { return "reveal"; } } - public override string shortcut { get { return ""; } } - public override string type { get { return CommandTypes.Moderation; } } - public override bool museumUsable { get { return true; } } - public override LevelPermission defaultRank { get { return LevelPermission.AdvBuilder; } } + public sealed class CmdReload : Command { + public override string name { get { return "reload"; } } + public override string shortcut { get { return "reveal"; } } + public override string type { get { return CommandTypes.World; } } + public override bool museumUsable { get { return false; } } + public override LevelPermission defaultRank { get { return LevelPermission.Guest; } } + public override CommandAlias[] Aliases { + get { return new [] { new CommandAlias("rejoin"), new CommandAlias("rd") }; } + } public override CommandPerm[] AdditionalPerms { - get { return new[] { new CommandPerm(LevelPermission.Operator, "+ can reveal to everyone") }; } + get { return new[] { new CommandPerm(LevelPermission.Operator, "+ can reload for other players") }; } } public override void Use(Player p, string message) { + if (CheckSuper(p, message, "player or level name")) return; if (message == "") message = p.name; - string[] parts = message.Split(' '); - for (int i = 0; i < parts.Length; i++) - parts[i] = parts[i].ToLower(); + string[] parts = message.ToLower().Split(' '); - Level lvl = null; - if (parts.Length == 2) { - lvl = LevelInfo.Find(parts[1]); - } else if (p != null && p.level != null) { - lvl = p.level; - } - if (parts[0] == "all") { - if (lvl == null) { Player.Message(p, "Level not found."); return; } - if (!CheckExtraPerm(p)) { MessageNeedPerms(p, "can reload all players in a map."); return; } - - Player[] players = PlayerInfo.Online.Items; - foreach (Player who in players) { - if (who.level == lvl) - ReloadMap(p, who, true); - } + if (!ReloadAll(p, parts)) return; } else { Player who = PlayerInfo.FindMatches(p, parts[0]); - if (who == null) { - return; - } else if (who.group.Permission > p.group.Permission && p != who) { + if (who == null) return; + if (p != null && who.group.Permission > p.group.Permission) { MessageTooHighRank(p, "reload the map for", true); return; - } - ReloadMap(p, who, true); + } + ReloadMap(p, who, true); } GC.Collect(); GC.WaitForPendingFinalizers(); } + bool ReloadAll(Player p, string[] parts) { + Level lvl = null; + if (parts.Length == 2) { + lvl = LevelInfo.Find(parts[1]); + if (lvl == null) return false; + } else if (!Player.IsSuper(p)) { + lvl = p.level; + } else { + SuperRequiresArgs(name + " all", p, "level name"); return false; + } + + if (!CheckExtraPerm(p)) { MessageNeedPerms(p, "can reload all players in a map."); return false; } + Player[] players = PlayerInfo.Online.Items; + foreach (Player who in players) { + if (who.level == lvl) + ReloadMap(p, who, true); + } + return true; + } + internal static void ReloadMap(Player p, Player who, bool showMessage) { who.Loading = true; Entities.DespawnEntities(who); - who.SendUserMOTD(); who.SendMap(who.level); + who.SendUserMOTD(); who.SendMap(who.level); Entities.SpawnEntities(who); who.Loading = false; @@ -78,32 +83,10 @@ namespace MCGalaxy.Commands { } public override void Help(Player p) { - Player.Message(p, "%T/reveal %H- Reloads the map for ."); - Player.Message(p, "%T/reveal all %H- Reloads for all players in your map"); - Player.Message(p, "%T/reveal all %H- Reloads for all players in "); - } - } - - public sealed class CmdReload : Command { - - public override string name { get { return "reload"; } } - public override string shortcut { get { return "rd"; } } - public override string type { get { return CommandTypes.World; } } - public override bool museumUsable { get { return false; } } - public override LevelPermission defaultRank { get { return LevelPermission.Guest; } } - public override CommandAlias[] Aliases { - get { return new [] { new CommandAlias("rejoin") }; } - } - - public override void Use(Player p, string message) { - if (Player.IsSuper(p)) { MessageInGameOnly(p); return; } - CmdReveal.ReloadMap(p, p, false); - } - - public override void Help(Player p) { - Player.Message(p, "%T/reload"); - Player.Message(p, "%HReloads the map you in, just for you."); - Player.Message(p, "%HUse %T/reveal %Hto reload maps for other players."); + Player.Message(p, "%T/reload %H- Reloads the map you are in, just for you."); + Player.Message(p, "%T/reload %H- Reloads the map for [name]."); + Player.Message(p, "%T/reload all %H- Reloads for all players in map you are in."); + Player.Message(p, "%T/reload all [map] %H- Reloads for all players in [map]"); } } } diff --git a/Drawing/DrawOps/DrawOp.Performer.cs b/Drawing/DrawOps/DrawOp.Performer.cs index 19210d5e4..63f74b080 100644 --- a/Drawing/DrawOps/DrawOp.Performer.cs +++ b/Drawing/DrawOps/DrawOp.Performer.cs @@ -127,7 +127,7 @@ namespace MCGalaxy.Drawing.Ops { Player[] players = PlayerInfo.Online.Items; foreach (Player pl in players) { if (pl.level.name.CaselessEq(lvl.name)) - CmdReveal.ReloadMap(p, pl, true); + CmdReload.ReloadMap(p, pl, true); } GC.Collect(); GC.WaitForPendingFinalizers(); diff --git a/MCGalaxy_.csproj b/MCGalaxy_.csproj index a3ae453eb..5d4ee42c2 100644 --- a/MCGalaxy_.csproj +++ b/MCGalaxy_.csproj @@ -386,7 +386,7 @@ - +