From 79f99cdbfab0e7f64e9ba35f74006ba1783a2708 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 4 Mar 2016 21:34:28 +1100 Subject: [PATCH] Make /measure 45.245% less sucky. (Thanks Skinnygamer) --- Commands/Information/CmdMeasure.cs | 110 ++++++++++++++++------------- Commands/Moderation/CmdBan.cs | 6 +- Commands/other/CmdFakerank.cs | 2 +- 3 files changed, 63 insertions(+), 55 deletions(-) diff --git a/Commands/Information/CmdMeasure.cs b/Commands/Information/CmdMeasure.cs index 4b9bbc010..5e4b722e3 100644 --- a/Commands/Information/CmdMeasure.cs +++ b/Commands/Information/CmdMeasure.cs @@ -1,78 +1,86 @@ /* - Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) - - Dual-licensed under the Educational Community License, Version 2.0 and - the GNU General Public License, Version 3 (the "Licenses"); you may - not use this file except in compliance with the Licenses. You may - obtain a copy of the Licenses at - - http://www.opensource.org/licenses/ecl2.php - http://www.gnu.org/licenses/gpl-3.0.html - - Unless required by applicable law or agreed to in writing, - software distributed under the Licenses are distributed on an "AS IS" - BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - or implied. See the Licenses for the specific language governing - permissions and limitations under the Licenses. -*/ + Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) + + Dual-licensed under the Educational Community License, Version 2.0 and + the GNU General Public License, Version 3 (the "Licenses"); you may + not use this file except in compliance with the Licenses. You may + obtain a copy of the Licenses at + + http://www.opensource.org/licenses/ecl2.php + http://www.gnu.org/licenses/gpl-3.0.html + + Unless required by applicable law or agreed to in writing, + software distributed under the Licenses are distributed on an "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + or implied. See the Licenses for the specific language governing + permissions and limitations under the Licenses. + */ using System; -namespace MCGalaxy.Commands -{ - public sealed class CmdMeasure : Command - { + +namespace MCGalaxy.Commands { + + public sealed class CmdMeasure : Command { + public override string name { get { return "measure"; } } public override string shortcut { get { return "ms"; } } public override string type { get { return CommandTypes.Information; } } public override bool museumUsable { get { return true; } } public override LevelPermission defaultRank { get { return LevelPermission.Guest; } } - public CmdMeasure() { } - public override void Use(Player p, string message) - { + public override void Use(Player p, string message) { if (message.IndexOf(' ') != -1) { Help(p); return; } - - CatchPos cpos; - cpos.toIgnore = Block.Byte(message); - if (cpos.toIgnore == Block.Zero && message != "") { Player.SendMessage(p, "Could not find block specified"); return; } - - cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; - + CatchPos cpos = default(CatchPos); + if (message != "") { + cpos.toIgnore = Block.Byte(message); + if (cpos.toIgnore == Block.Zero) { + Player.SendMessage(p, "Could not find block specified"); return; + } + } + + p.blockchangeObject = cpos; Player.SendMessage(p, "Place two blocks to determine the edges."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); } - public override void Help(Player p) - { - Player.SendMessage(p, "/measure [ignore] - Measures all the blocks between two points"); - Player.SendMessage(p, "/measure [ignore] - Enter a block to ignore them"); - } - public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType) - { + + void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType) { RevertAndClearState(p, x, y, z); CatchPos bp = (CatchPos)p.blockchangeObject; bp.x = x; bp.y = y; bp.z = z; p.blockchangeObject = bp; p.Blockchange += new Player.BlockchangeEventHandler(Blockchange2); } - public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type, byte extType) - { + + void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type, byte extType) { RevertAndClearState(p, x, y, z); CatchPos cpos = (CatchPos)p.blockchangeObject; + ushort minX = Math.Min(cpos.x, x), maxX = Math.Max(cpos.x, x); + ushort minY = Math.Min(cpos.y, y), maxY = Math.Max(cpos.y, y); + ushort minZ = Math.Min(cpos.z, z), maxZ = Math.Max(cpos.z, z); + int foundBlocks = 0; - ushort xx, yy, zz; int foundBlocks = 0; + for (ushort yy = minY; yy <= maxY; yy++) + for (ushort zz = minZ; zz <= maxZ; zz++) + for (ushort xx = minX; xx <= maxX; xx++) + { + if (p.level.GetTile(xx, yy, zz) != cpos.toIgnore) foundBlocks++; + } - for (xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx) - for (yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy) - for (zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz) - { - if (p.level.GetTile(xx, yy, zz) != cpos.toIgnore) foundBlocks++; - } - - Player.SendMessage(p, foundBlocks + " blocks are between (" + cpos.x + ", " + cpos.y + ", " + cpos.z + ") and (" + x + ", " + y + ", " + z + ")"); + int width = maxX - minX + 1, height = maxY - minY + 1, length = maxZ - minZ + 1; + Player.SendMessage(p, "Measuring between (" + minX + ", " + minY + ", " + minZ + + ") and (" + maxX + ", " + maxY + ", " + maxZ + ")"); + Player.SendMessage(p, "Area is " + width + " wide, " + height + " high, " + length + " long." + + " Volume is " + (width * height * length) + " blocks." ); + string name = " non-" + Block.Name(cpos.toIgnore); + Player.SendMessage(p, "There are " + foundBlocks + name + " blocks in the area."); if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1); } - struct CatchPos - { - public ushort x, y, z; public byte toIgnore; + + struct CatchPos { public ushort x, y, z; public byte toIgnore; } + + public override void Help(Player p) { + Player.SendMessage(p, "%T/measure [ignore]"); + Player.SendMessage(p, "%HMeasures all the blocks between two points"); + Player.SendMessage(p, "%H [ignore] is optional, and specifies the block which is not counted."); } } } diff --git a/Commands/Moderation/CmdBan.cs b/Commands/Moderation/CmdBan.cs index 4d5567c10..4946e0b1d 100644 --- a/Commands/Moderation/CmdBan.cs +++ b/Commands/Moderation/CmdBan.cs @@ -60,14 +60,14 @@ namespace MCGalaxy.Commands { string banner = p == null ? "(console)" : p.FullName; string banMsg = null; if (who == null) { - banMsg = target + " &f(offline)" + " %Swas &8banned" + Server.DefaultColor + " by " + banner + "%S." + banReason; + banMsg = target + " &f(offline) %Swas &8banned %Sby " + banner + "%S." + banReason; Player.GlobalMessage(banMsg); } else { if (stealth) { - banMsg = who.FullName + " %Swas STEALTH &8banned" + Server.DefaultColor + " by " + banner + "%S." + banReason; + banMsg = who.FullName + " %Swas STEALTH &8banned %Sby " + banner + "%S." + banReason; Chat.GlobalMessageOps(banMsg); } else { - banMsg = who.FullName + " %Swas &8banned" + Server.DefaultColor + " by " + banner + "%S." + banReason; + banMsg = who.FullName + " %Swas &8banned %Sby " + banner + "%S." + banReason; Player.GlobalMessage(banMsg); } diff --git a/Commands/other/CmdFakerank.cs b/Commands/other/CmdFakerank.cs index 49e888f15..e13ded118 100644 --- a/Commands/other/CmdFakerank.cs +++ b/Commands/other/CmdFakerank.cs @@ -52,7 +52,7 @@ namespace MCGalaxy.Commands if (grp.Permission == LevelPermission.Banned) { string banner = p == null ? "console" : p.color + p.DisplayName + Server.DefaultColor; - Player.GlobalMessage(plr.color + plr.name + Server.DefaultColor + " was &8banned" + Server.DefaultColor + " by " + banner + "."); + Player.GlobalMessage(plr.FullName + " %Swas &8banned" + " %Sby " + banner + "."); } else {