diff --git a/Commands/Moderation/CmdAka.cs b/Commands/Fun/CmdAka.cs
similarity index 97%
rename from Commands/Moderation/CmdAka.cs
rename to Commands/Fun/CmdAka.cs
index f7b3e16e8..9db2ab6de 100644
--- a/Commands/Moderation/CmdAka.cs
+++ b/Commands/Fun/CmdAka.cs
@@ -23,7 +23,7 @@ namespace MCGalaxy.Commands
{
public override string name { get { return "aka"; } }
public override string shortcut { get { return ""; } }
- public override string type { get { return CommandTypes.Moderation; } }
+ public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public CmdAka() { }
diff --git a/Commands/building/CmdMessageBlock.cs b/Commands/building/CmdMessageBlock.cs
index 3a8235036..f7a2bbb23 100644
--- a/Commands/building/CmdMessageBlock.cs
+++ b/Commands/building/CmdMessageBlock.cs
@@ -1,7 +1,7 @@
/*
Copyright 2011 MCGalaxy
- Dual-licensed under the Educational Community License, Version 2.0 and
+ 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
@@ -14,119 +14,58 @@
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;
using System.Data;
using System.Text.RegularExpressions;
using MCGalaxy.SQL;
-namespace MCGalaxy.Commands
-{
- public sealed class CmdMessageBlock : Command
- {
+namespace MCGalaxy.Commands {
+
+ public sealed class CmdMessageBlock : Command {
+
public override string name { get { return "mb"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Building; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.AdvBuilder; } }
public CmdMessageBlock() { }
+ static char[] trimChars = { ' ' };
- public override void Use(Player p, string message)
- {
+ public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
CatchPos cpos;
- cpos.message = "";
-
- try
- {
- switch (message.Split(' ')[0])
- {
+ cpos.message = null;
+ string[] args = message.Split(trimChars, 2);
+ switch (args[0].ToLower()) {
case "air": cpos.type = Block.MsgAir; break;
case "water": cpos.type = Block.MsgWater; break;
case "lava": cpos.type = Block.MsgLava; break;
case "black": cpos.type = Block.MsgBlack; break;
case "white": cpos.type = Block.MsgWhite; break;
- case "show": showMBs(p); return;
+ case "show": ShowMessageBlocks(p); return;
default: cpos.type = Block.MsgWhite; cpos.message = message; break;
+ }
+ if (cpos.message == null)
+ cpos.message = args[1];
+
+ foreach (Command com in Command.all.commands) {
+ if (com.defaultRank <= p.group.Permission && !com.type.Contains("mod")) continue;
+
+ if (CaselessStarts(cpos.message, "/" + com.name)) {
+ p.SendMessage("You cannot use that command in a messageblock."); return;
+ }
+ if (com.shortcut != "" && CaselessStarts(cpos.message, "/" + com.shortcut)) {
+ p.SendMessage("You cannot use that command in a messageblock."); return;
}
}
- catch { cpos.type = Block.MsgWhite; cpos.message = message; }
- string current = "";
- string cmdparts = "";
-
- /*Fix by alecdent*/
- try
- {
- foreach (var com in Command.all.commands)
- {
- if (com.type.Contains("mod"))
- {
- current = "/" + com.name;
-
- cmdparts = message.Split(' ')[0].ToLower().ToString();
- if (cmdparts[0] == '/')
- {
- if (current == cmdparts.ToLower())
- {
- p.SendMessage("You can't use that command in your messageblock!");
- return;
- }
- }
-
- cmdparts = message.Split(' ')[1].ToLower().ToString();
- if (cmdparts[0] == '/')
- {
- if (current == cmdparts.ToLower())
- {
- p.SendMessage("You can't use that command in your messageblock!");
- return;
- }
- }
- if (com.shortcut != "")
- {
- current = "/" + com.name;
-
- cmdparts = message.Split(' ')[0].ToLower().ToString();
- if (cmdparts[0] == '/')
- {
- if (current == cmdparts.ToLower())
- {
- p.SendMessage("You can't use that command in your messageblock!");
- return;
- }
- }
-
- cmdparts = message.Split(' ')[1].ToLower().ToString();
- if (cmdparts[0] == '/')
- {
- if (current == cmdparts.ToLower())
- {
- p.SendMessage("You can't use that command in your messageblock!");
- return;
- }
- }
- }
- }
- }
- }
- catch { }
-
- if (cpos.message == "") cpos.message = message.Substring(message.IndexOf(' ') + 1);
p.blockchangeObject = cpos;
-
Player.SendMessage(p, "Place where you wish the message block to go."); p.ClearBlockchange();
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
}
- public override void Help(Player p)
- {
- Player.SendMessage(p, "/mb [block] [message] - Places a message in your next block.");
- Player.SendMessage(p, "Valid blocks: white, black, air, water, lava");
- Player.SendMessage(p, "/mb show shows or hides MBs");
- }
- public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType)
- {
+ public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType) {
p.ClearBlockchange();
CatchPos cpos = (CatchPos)p.blockchangeObject;
@@ -135,52 +74,47 @@ namespace MCGalaxy.Commands
//safe against SQL injections because no user input is given here
DataTable Messages = Database.fillData("SELECT * FROM `Messages" + p.level.name + "` WHERE X=" + (int)x + " AND Y=" + (int)y + " AND Z=" + (int)z);
Database.AddParams("@Message", cpos.message);
+
if (Messages.Rows.Count == 0)
- {
Database.executeQuery("INSERT INTO `Messages" + p.level.name + "` (X, Y, Z, Message) VALUES (" + (int)x + ", " + (int)y + ", " + (int)z + ", @Message)");
- }
else
- {
Database.executeQuery("UPDATE `Messages" + p.level.name + "` SET Message=@Message WHERE X=" + (int)x + " AND Y=" + (int)y + " AND Z=" + (int)z);
- }
+
Messages.Dispose();
Player.SendMessage(p, "Message block placed.");
p.level.Blockchange(p, x, y, z, cpos.type);
p.SendBlockchange(x, y, z, cpos.type);
- if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
+ if (p.staticCommands)
+ p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
}
struct CatchPos { public string message; public byte type; }
+
+ static bool CaselessStarts(string a, string b) {
+ return a.StartsWith(b, StringComparison.OrdinalIgnoreCase);
+ }
- public void showMBs(Player p)
- {
- try
- {
- p.showMBs = !p.showMBs;
- //safe against SQL injections because no user input is given here
- using (DataTable Messages = Database.fillData("SELECT * FROM `Messages" + p.level.name + "`"))
- {
- int i;
-
- if (p.showMBs)
- {
- for (i = 0; i < Messages.Rows.Count; i++)
- p.SendBlockchange(ushort.Parse(Messages.Rows[i]["X"].ToString()), ushort.Parse(Messages.Rows[i]["Y"].ToString()), ushort.Parse(Messages.Rows[i]["Z"].ToString()), Block.MsgWhite);
- Player.SendMessage(p, "Now showing &a" + i.ToString() + Server.DefaultColor + " MBs.");
- }
- else
- {
- for (i = 0; i < Messages.Rows.Count; i++)
- p.SendBlockchange(ushort.Parse(Messages.Rows[i]["X"].ToString()), ushort.Parse(Messages.Rows[i]["Y"].ToString()), ushort.Parse(Messages.Rows[i]["Z"].ToString()), p.level.GetTile(ushort.Parse(Messages.Rows[i]["X"].ToString()), ushort.Parse(Messages.Rows[i]["Y"].ToString()), ushort.Parse(Messages.Rows[i]["Z"].ToString())));
- Player.SendMessage(p, "Now hiding MBs.");
- }
+ void ShowMessageBlocks(Player p) {
+ p.showMBs = !p.showMBs;
+ //safe against SQL injections because no user input is given here
+ using (DataTable Messages = Database.fillData("SELECT * FROM `Messages" + p.level.name + "`")) {
+ if (p.showMBs) {
+ for (int i = 0; i < Messages.Rows.Count; i++)
+ p.SendBlockchange(ushort.Parse(Messages.Rows[i]["X"].ToString()), ushort.Parse(Messages.Rows[i]["Y"].ToString()), ushort.Parse(Messages.Rows[i]["Z"].ToString()), Block.MsgWhite);
+ Player.SendMessage(p, "Now showing &a" + Messages.Rows.Count + " %SMBs.");
+ } else {
+ for (int i = 0; i < Messages.Rows.Count; i++)
+ p.SendBlockchange(ushort.Parse(Messages.Rows[i]["X"].ToString()), ushort.Parse(Messages.Rows[i]["Y"].ToString()), ushort.Parse(Messages.Rows[i]["Z"].ToString()), p.level.GetTile(ushort.Parse(Messages.Rows[i]["X"].ToString()), ushort.Parse(Messages.Rows[i]["Y"].ToString()), ushort.Parse(Messages.Rows[i]["Z"].ToString())));
+ Player.SendMessage(p, "Now hiding MBs.");
}
}
- catch (Exception e)
- {
- Server.ErrorLog(e);
- }
+ }
+
+ public override void Help(Player p) {
+ Player.SendMessage(p, "/mb [block] [message] - Places a message in your next block.");
+ Player.SendMessage(p, "Valid blocks: white, black, air, water, lava");
+ Player.SendMessage(p, "/mb show shows or hides MBs");
}
}
}
diff --git a/MCGalaxy_.csproj b/MCGalaxy_.csproj
index 42d592faa..367f697b2 100644
--- a/MCGalaxy_.csproj
+++ b/MCGalaxy_.csproj
@@ -170,6 +170,7 @@
+
@@ -222,7 +223,6 @@
-
diff --git a/Network/Player.Networking.cs b/Network/Player.Networking.cs
index 1d701139c..bd9b59e47 100644
--- a/Network/Player.Networking.cs
+++ b/Network/Player.Networking.cs
@@ -640,15 +640,14 @@ namespace MCGalaxy {
}
void SendHackControl( byte allowflying, byte allownoclip, byte allowspeeding, byte allowrespawning,
- byte allowthirdperson, byte allowchangingweather, short maxjumpheight ) {
+ byte allowthirdperson, short maxjumpheight ) {
byte[] buffer = new byte[7];
buffer[0] = allowflying;
buffer[1] = allownoclip;
buffer[2] = allowspeeding;
buffer[3] = allowrespawning;
buffer[4] = allowthirdperson;
- buffer[5] = allowchangingweather;
- NetUtils.WriteI16(maxjumpheight, buffer, 6);
+ NetUtils.WriteI16(maxjumpheight, buffer, 5);
SendRaw( Opcode.CpeHackControl, buffer );
}