Combine /reload and /reveal. (Thanks goodlyay)

This commit is contained in:
UnknownShadow200 2016-06-21 09:53:32 +10:00
parent 30a2dc5315
commit 7113b0ee53
5 changed files with 52 additions and 67 deletions

View File

@ -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);
}
}

View File

@ -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) {
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}.", name, type, src);
Player.Message(p, "When using /{0} from {2}, you must provide a {1}.", cmd, type, src);
}
protected bool CheckExtraPerm(Player p, int num = 1) {

View File

@ -17,45 +17,30 @@
*/
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();
Level lvl = null;
if (parts.Length == 2) {
lvl = LevelInfo.Find(parts[1]);
} else if (p != null && p.level != null) {
lvl = p.level;
}
string[] parts = message.ToLower().Split(' ');
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);
@ -64,6 +49,26 @@ namespace MCGalaxy.Commands {
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);
@ -78,32 +83,10 @@ namespace MCGalaxy.Commands {
}
public override void Help(Player p) {
Player.Message(p, "%T/reveal <name> %H- Reloads the map for <name>.");
Player.Message(p, "%T/reveal all %H- Reloads for all players in your map");
Player.Message(p, "%T/reveal all <map> %H- Reloads for all players in <map>");
}
}
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 <name> %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]");
}
}
}

View File

@ -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();

View File

@ -386,7 +386,7 @@
<Compile Include="Commands\World\CmdPhysics.cs" />
<Compile Include="Commands\World\CmdRenameLvl.cs" />
<Compile Include="Commands\World\CmdRestore.cs" />
<Compile Include="Commands\World\CmdReveal.cs" />
<Compile Include="Commands\World\CmdReload.cs" />
<Compile Include="Commands\World\CmdSave.cs" />
<Compile Include="Commands\World\CmdSetspawn.cs" />
<Compile Include="Commands\World\CmdUnflood.cs" />