Get rid of those try{} catch{} and instead rely on the generic command try{} catch{} handler which prints more detailed information.

This commit is contained in:
UnknownShadow200 2016-02-11 16:54:42 +11:00
parent 0b8cbfe91f
commit 395a59a182
10 changed files with 818 additions and 868 deletions

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
namespace MCGalaxy.Commands namespace MCGalaxy.Commands
{ {
@ -29,132 +29,129 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) public override void Use(Player p, string message)
{ {
try if (message == "")
{ {
if (message == "") Player.SendMessage(p, "Basic blocks: ");
for (byte i = 0; i < 50; i++)
{ {
Player.SendMessage(p, "Basic blocks: "); message += ", " + Block.Name(i);
for (byte i = 0; i < 50; i++)
{
message += ", " + Block.Name(i);
}
Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "&d/blocks all <0/1/2/3/4> " + Server.DefaultColor + "will show the rest.");
} }
else if (message.ToLower() == "all") Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "&d/blocks all <0/1/2/3/4> " + Server.DefaultColor + "will show the rest.");
}
else if (message.ToLower() == "all")
{
Player.SendMessage(p, "Complex blocks: ");
for (byte i = 50; i < 255; i++)
{ {
Player.SendMessage(p, "Complex blocks: "); if (Block.Name(i).ToLower() != "unknown") message += ", " + Block.Name(i);
for (byte i = 50; i < 255; i++)
{
if (Block.Name(i).ToLower() != "unknown") message += ", " + Block.Name(i);
}
Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "Use &d/blocks all <0/1/2/3/4> " + Server.DefaultColor + "for a readable list.");
} }
else if (message.ToLower().IndexOf(' ') != -1 && message.Split(' ')[0] == "all") Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "Use &d/blocks all <0/1/2/3/4> " + Server.DefaultColor + "for a readable list.");
}
else if (message.ToLower().IndexOf(' ') != -1 && message.Split(' ')[0] == "all")
{
int foundRange = 0;
try { foundRange = int.Parse(message.Split(' ')[1]); }
catch { Player.SendMessage(p, "Incorrect syntax"); return; }
if (foundRange >= 5 || foundRange < 0) { Player.SendMessage(p, "Number must be between 0 and 4"); return; }
message = "";
Player.SendMessage(p, "Blocks between " + foundRange * 51 + " and " + (foundRange + 1) * 51);
for (byte i = (byte)(foundRange * 51); i < (byte)((foundRange + 1) * 51); i++)
{ {
int foundRange = 0; if (Block.Name(i).ToLower() != "unknown") message += ", " + Block.Name(i);
try { foundRange = int.Parse(message.Split(' ')[1]); }
catch { Player.SendMessage(p, "Incorrect syntax"); return; }
if (foundRange >= 5 || foundRange < 0) { Player.SendMessage(p, "Number must be between 0 and 4"); return; }
message = "";
Player.SendMessage(p, "Blocks between " + foundRange * 51 + " and " + (foundRange + 1) * 51);
for (byte i = (byte)(foundRange * 51); i < (byte)((foundRange + 1) * 51); i++)
{
if (Block.Name(i).ToLower() != "unknown") message += ", " + Block.Name(i);
}
Player.SendMessage(p, message.Remove(0, 2));
} }
else Player.SendMessage(p, message.Remove(0, 2));
}
else
{
string printMessage = ">>>&b";
if (Block.Byte(message) != Block.Zero)
{ {
string printMessage = ">>>&b"; byte b = Block.Byte(message);
if (b < 51)
if (Block.Byte(message) != Block.Zero)
{ {
byte b = Block.Byte(message); for (byte i = 51; i < 255; i++)
if (b < 51)
{ {
for (byte i = 51; i < 255; i++) if (Block.Convert(i) == b)
{ printMessage += Block.Name(i) + ", ";
if (Block.Convert(i) == b)
printMessage += Block.Name(i) + ", ";
}
if (printMessage != ">>>&b")
{
Player.SendMessage(p, "Blocks which look like \"" + message + "\":");
Player.SendMessage(p, printMessage.Remove(printMessage.Length - 2));
}
else Player.SendMessage(p, "No Complex Blocks look like \"" + message + "\"");
}
else
{
Player.SendMessage(p, "&bComplex information for \"" + message + "\":");
Player.SendMessage(p, "&cBlock will appear as a \"" + Block.Name(Block.Convert(b)) + "\" block");
if (Block.LightPass(b, 0, BlockDefinition.GlobalDefs))
Player.SendMessage(p, "Block will allow light through");
if (Block.Physics(b)) Player.SendMessage(p, "Block affects physics in some way"); //AFFECT!
else Player.SendMessage(p, "Block will not affect physics in any way"); //It's AFFECT!
if (Block.NeedRestart(b)) Player.SendMessage(p, "The block's physics will auto-start");
if (Block.OPBlocks(b)) Player.SendMessage(p, "Block is unaffected by explosions");
if (Block.AllowBreak(b)) Player.SendMessage(p, "Anybody can activate the block");
if (Block.Walkthrough(b)) Player.SendMessage(p, "Block can be walked through");
if (Block.Death(b)) Player.SendMessage(p, "Walking through block will kill you");
if (Block.DoorAirs(b) != (byte)0) Player.SendMessage(p, "Block is an ordinary door");
if (Block.tDoor(b)) Player.SendMessage(p, "Block is a tdoor, which allows other blocks through when open");
if (Block.odoor(b) != Block.Zero) Player.SendMessage(p, "Block is an odoor, which toggles (GLITCHY)");
if (Block.Mover(b)) Player.SendMessage(p, "Block can be activated by walking through it");
}
}
else if (Group.Find(message) != null)
{
LevelPermission Perm = Group.Find(message).Permission;
foreach (Block.Blocks bL in Block.BlockList)
{
if (Block.canPlace(Perm, bL.type) && Block.Name(bL.type).ToLower() != "unknown") printMessage += Block.Name(bL.type) + ", ";
} }
if (printMessage != ">>>&b") if (printMessage != ">>>&b")
{ {
Player.SendMessage(p, "Blocks which " + Group.Find(message).color + Group.Find(message).name + Server.DefaultColor + " can place: "); Player.SendMessage(p, "Blocks which look like \"" + message + "\":");
Player.SendMessage(p, printMessage.Remove(printMessage.Length - 2)); Player.SendMessage(p, printMessage.Remove(printMessage.Length - 2));
} }
else Player.SendMessage(p, "No blocks are specific to this rank"); else Player.SendMessage(p, "No Complex Blocks look like \"" + message + "\"");
}
else if (message.IndexOf(' ') == -1)
{
if (message.ToLower() == "count") Player.SendMessage(p, "Blocks in this map: " + p.level.blocks.Length);
else Help(p);
}
else if (message.Split(' ')[0].ToLower() == "count")
{
int foundNum = 0; byte foundBlock = Block.Byte(message.Split(' ')[1]);
if (foundBlock == Block.Zero) { Player.SendMessage(p, "Could not find block specified"); return; }
for (int i = 0; i < p.level.blocks.Length; i++)
{
if (foundBlock == p.level.blocks[i]) foundNum++;
}
if (foundNum == 0) Player.SendMessage(p, "No blocks were of type \"" + message.Split(' ')[1] + "\"");
else if (foundNum == 1) Player.SendMessage(p, "1 block was of type \"" + message.Split(' ')[1] + "\"");
else Player.SendMessage(p, foundNum.ToString() + " blocks were of type \"" + message.Split(' ')[1] + "\"");
} }
else else
{ {
Player.SendMessage(p, "Unable to find block or rank"); Player.SendMessage(p, "&bComplex information for \"" + message + "\":");
Player.SendMessage(p, "&cBlock will appear as a \"" + Block.Name(Block.Convert(b)) + "\" block");
if (Block.LightPass(b, 0, BlockDefinition.GlobalDefs))
Player.SendMessage(p, "Block will allow light through");
if (Block.Physics(b)) Player.SendMessage(p, "Block affects physics in some way"); //AFFECT!
else Player.SendMessage(p, "Block will not affect physics in any way"); //It's AFFECT!
if (Block.NeedRestart(b)) Player.SendMessage(p, "The block's physics will auto-start");
if (Block.OPBlocks(b)) Player.SendMessage(p, "Block is unaffected by explosions");
if (Block.AllowBreak(b)) Player.SendMessage(p, "Anybody can activate the block");
if (Block.Walkthrough(b)) Player.SendMessage(p, "Block can be walked through");
if (Block.Death(b)) Player.SendMessage(p, "Walking through block will kill you");
if (Block.DoorAirs(b) != (byte)0) Player.SendMessage(p, "Block is an ordinary door");
if (Block.tDoor(b)) Player.SendMessage(p, "Block is a tdoor, which allows other blocks through when open");
if (Block.odoor(b) != Block.Zero) Player.SendMessage(p, "Block is an odoor, which toggles (GLITCHY)");
if (Block.Mover(b)) Player.SendMessage(p, "Block can be activated by walking through it");
} }
} }
else if (Group.Find(message) != null)
{
LevelPermission Perm = Group.Find(message).Permission;
foreach (Block.Blocks bL in Block.BlockList)
{
if (Block.canPlace(Perm, bL.type) && Block.Name(bL.type).ToLower() != "unknown") printMessage += Block.Name(bL.type) + ", ";
}
if (printMessage != ">>>&b")
{
Player.SendMessage(p, "Blocks which " + Group.Find(message).color + Group.Find(message).name + Server.DefaultColor + " can place: ");
Player.SendMessage(p, printMessage.Remove(printMessage.Length - 2));
}
else Player.SendMessage(p, "No blocks are specific to this rank");
}
else if (message.IndexOf(' ') == -1)
{
if (message.ToLower() == "count") Player.SendMessage(p, "Blocks in this map: " + p.level.blocks.Length);
else Help(p);
}
else if (message.Split(' ')[0].ToLower() == "count")
{
int foundNum = 0; byte foundBlock = Block.Byte(message.Split(' ')[1]);
if (foundBlock == Block.Zero) { Player.SendMessage(p, "Could not find block specified"); return; }
for (int i = 0; i < p.level.blocks.Length; i++)
{
if (foundBlock == p.level.blocks[i]) foundNum++;
}
if (foundNum == 0) Player.SendMessage(p, "No blocks were of type \"" + message.Split(' ')[1] + "\"");
else if (foundNum == 1) Player.SendMessage(p, "1 block was of type \"" + message.Split(' ')[1] + "\"");
else Player.SendMessage(p, foundNum.ToString() + " blocks were of type \"" + message.Split(' ')[1] + "\"");
}
else
{
Player.SendMessage(p, "Unable to find block or rank");
}
} }
catch (Exception e) { Server.ErrorLog(e); Help(p); }
} }
public override void Help(Player p) public override void Help(Player p)
{ {
Player.SendMessage(p, "/blocks - Lists all basic blocks"); Player.SendMessage(p, "/blocks - Lists all basic blocks");

View File

@ -11,7 +11,7 @@ software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace MCGalaxy.Commands namespace MCGalaxy.Commands
@ -27,210 +27,205 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) public override void Use(Player p, string message)
{ {
try switch (message.ToLower())
{ {
switch (message.ToLower()) case "":
{ if (Server.oldHelp)
case "": {
if (Server.oldHelp) goto case "old";
{ }
goto case "old"; if (Server.menustyle != 1)
} {
if (Server.menustyle != 1) Player.SendMessage(p, "Use &b/help ranks" + Server.DefaultColor + " for a list of ranks.");
{ Player.SendMessage(p, "Use &b/help build" + Server.DefaultColor + " for a list of building commands.");
Player.SendMessage(p, "Use &b/help ranks" + Server.DefaultColor + " for a list of ranks."); Player.SendMessage(p, "Use &b/help chat" + Server.DefaultColor + " for a list of chat commands.");
Player.SendMessage(p, "Use &b/help build" + Server.DefaultColor + " for a list of building commands."); Player.SendMessage(p, "Use &b/help economy" + Server.DefaultColor + " for a list of economy commands.");
Player.SendMessage(p, "Use &b/help chat" + Server.DefaultColor + " for a list of chat commands."); Player.SendMessage(p, "Use &b/help games" + Server.DefaultColor + " for a list of game commands.");
Player.SendMessage(p, "Use &b/help economy" + Server.DefaultColor + " for a list of economy commands."); Player.SendMessage(p, "Use &b/help information" + Server.DefaultColor + " for a list of information commands.");
Player.SendMessage(p, "Use &b/help games" + Server.DefaultColor + " for a list of game commands."); Player.SendMessage(p, "Use &b/help mod" + Server.DefaultColor + " for a list of moderation commands.");
Player.SendMessage(p, "Use &b/help information" + Server.DefaultColor + " for a list of information commands."); Player.SendMessage(p, "Use &b/help other" + Server.DefaultColor + " for a list of other commands.");
Player.SendMessage(p, "Use &b/help mod" + Server.DefaultColor + " for a list of moderation commands."); Player.SendMessage(p, "Use &b/help world" + Server.DefaultColor + " for a list of world/map commands.");
Player.SendMessage(p, "Use &b/help other" + Server.DefaultColor + " for a list of other commands.");
Player.SendMessage(p, "Use &b/help world" + Server.DefaultColor + " for a list of world/map commands.");
Player.SendMessage(p, "Use &b/help colors" + Server.DefaultColor + " to view the color codes.");
Player.SendMessage(p, "Use &b/help shortcuts" + Server.DefaultColor + " for a list of shortcuts.");
Player.SendMessage(p, "Use &b/help old" + Server.DefaultColor + " to view the Old help menu.");
Player.SendMessage(p, "Use &b/help [command] or /help [block] " + Server.DefaultColor + "to view more info.");
}
else
{
Player.SendMessage(p, Server.DefaultColor + " To see a list of all commands, write %a/Help List");
Player.SendMessage(p, Server.DefaultColor + " To see detailed help for a command, write %a/Help Command");
Player.SendMessage(p, Server.DefaultColor + " To see your stats, write %a/Whois");
Player.SendMessage(p, Server.DefaultColor + " To see loaded maps, write %a/Maps");
Player.SendMessage(p, Server.DefaultColor + " To view your personal world options, use %a/OS");
Player.SendMessage(p, Server.DefaultColor + " To join a Map, write %a/Goto WorldName");
Player.SendMessage(p, Server.DefaultColor + " To send private messages, write %a@PlayerName Message");
}
break;
case "list":
message = "";
Player.SendMessage(p, Server.DefaultColor + " To view all commands in a category, write %a/Help Category");
Player.SendMessage(p, Server.DefaultColor + "Command Categories:");
Player.SendMessage(p, " %aBuilding");
Player.SendMessage(p, " %aChat");
Player.SendMessage(p, " %aEconomy");
Player.SendMessage(p, " %aGames");
Player.SendMessage(p, " %aInfo");
Player.SendMessage(p, " %aModeration");
Player.SendMessage(p, " %aOther");
Player.SendMessage(p, " %aWorld");
Player.SendMessage(p, " %aRanks"); Player.SendMessage(p, "Use &b/help colors" + Server.DefaultColor + " to view the color codes.");
Player.SendMessage(p, " %aColors"); Player.SendMessage(p, "Use &b/help shortcuts" + Server.DefaultColor + " for a list of shortcuts.");
Player.SendMessage(p, " %aShortcuts"); Player.SendMessage(p, "Use &b/help old" + Server.DefaultColor + " to view the Old help menu.");
Player.SendMessage(p, " %aOldMenu"); Player.SendMessage(p, "Use &b/help [command] or /help [block] " + Server.DefaultColor + "to view more info.");
break; }
case "ranks": else
message = ""; {
foreach (Group grp in Group.GroupList) Player.SendMessage(p, Server.DefaultColor + " To see a list of all commands, write %a/Help List");
Player.SendMessage(p, Server.DefaultColor + " To see detailed help for a command, write %a/Help Command");
Player.SendMessage(p, Server.DefaultColor + " To see your stats, write %a/Whois");
Player.SendMessage(p, Server.DefaultColor + " To see loaded maps, write %a/Maps");
Player.SendMessage(p, Server.DefaultColor + " To view your personal world options, use %a/OS");
Player.SendMessage(p, Server.DefaultColor + " To join a Map, write %a/Goto WorldName");
Player.SendMessage(p, Server.DefaultColor + " To send private messages, write %a@PlayerName Message");
}
break;
case "list":
message = "";
Player.SendMessage(p, Server.DefaultColor + " To view all commands in a category, write %a/Help Category");
Player.SendMessage(p, Server.DefaultColor + "Command Categories:");
Player.SendMessage(p, " %aBuilding");
Player.SendMessage(p, " %aChat");
Player.SendMessage(p, " %aEconomy");
Player.SendMessage(p, " %aGames");
Player.SendMessage(p, " %aInfo");
Player.SendMessage(p, " %aModeration");
Player.SendMessage(p, " %aOther");
Player.SendMessage(p, " %aWorld");
Player.SendMessage(p, " %aRanks");
Player.SendMessage(p, " %aColors");
Player.SendMessage(p, " %aShortcuts");
Player.SendMessage(p, " %aOldMenu");
break;
case "ranks":
message = "";
foreach (Group grp in Group.GroupList)
{
if (grp.name != "nobody") // Note that -1 means max undo. Undo anything and everything.
Player.SendMessage(p, grp.color + grp.name + " - &bCmd: " + grp.maxBlocks + " - &2Undo: " + ((grp.maxUndo != -1) ? grp.maxUndo.ToString() : "max") + " - &cPerm: " + (int)grp.Permission);
}
break;
case "build":
case "building":
PrintHelpForGroup(p, "build", "Building" );
break;
case "chat":
PrintHelpForGroup(p, "chat", "Chat" );
break;
case "eco":
case "economy":
PrintHelpForGroup(p, "eco", "Economy" );
break;
case "mod":
case "moderation":
PrintHelpForGroup(p, "mod", "Moderation" );
break;
case "info":
case "information":
PrintHelpForGroup(p, "info", "Information" );
break;
case "game":
case "games":
PrintHelpForGroup(p, "game", "Game" );
break;
case "other":
case "others":
PrintHelpForGroup(p, "other", "Other" );
break;
case "maps":
case "world":
PrintHelpForGroup(p, "world", "World" );
break;
case "short":
case "shortcut":
case "shortcuts":
case "short 1":
case "shortcut 1":
case "shortcuts 1":
case "short 2":
case "shortcut 2":
case "shortcuts 2":
bool list1 = true;
try { if (message.Split()[1] == "2") list1 = false; } catch { }
message = "";
List<string> shortcuts = new List<string>();
foreach (Command comm in Command.all.commands)
if (p == null || p.group.commands.All().Contains(comm))
if (comm.shortcut != "") shortcuts.Add(", &b" + comm.shortcut + " " + Server.DefaultColor + "[" + comm.name + "]");
int top = list1 ? shortcuts.Count / 2 : shortcuts.Count;
for (int i = list1 ? 0 : shortcuts.Count / 2; i < top; i++)
message += shortcuts[i];
if (list1) {
Player.SendMessage(p, "Available shortcuts (1):");
Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "%bType %f/help shortcuts 2%b to view the rest of the list ");
} else {
Player.SendMessage(p, "Available shortcuts (2):");
Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "%bType %f/help shortcuts 1%b to view the rest of the list ");
}
break;
case "colours":
case "colors":
Player.SendMessage(p, "&fTo use a color simply put a '%' sign symbol before you put the color code.");
Player.SendMessage(p, "Colors Available:");
Player.SendMessage(p, "0 - &0Black " + Server.DefaultColor + "| 8 - &8Gray");
Player.SendMessage(p, "1 - &1Navy " + Server.DefaultColor + "| 9 - &9Blue");
Player.SendMessage(p, "2 - &2Green " + Server.DefaultColor + "| a - &aLime");
Player.SendMessage(p, "3 - &3Teal " + Server.DefaultColor + "| b - &bAqua");
Player.SendMessage(p, "4 - &4Maroon " + Server.DefaultColor + "| c - &cRed");
Player.SendMessage(p, "5 - &5Purple " + Server.DefaultColor + "| d - &dPink");
Player.SendMessage(p, "6 - &6Gold " + Server.DefaultColor + "| e - &eYellow");
Player.SendMessage(p, "7 - &7Silver " + Server.DefaultColor + "| f - &fWhite");
break;
case "old":
case "oldmenu":
case "commands":
case "command":
string commandsFound = "";
foreach (Command comm in Command.all.commands)
if (p == null || p.group.commands.All().Contains(comm))
try { commandsFound += ", " + comm.name; } catch { }
Player.SendMessage(p, "Available commands:");
Player.SendMessage(p, commandsFound.Remove(0, 2));
Player.SendMessage(p, "Type \"/help <command>\" for more help.");
Player.SendMessage(p, "Type \"/help shortcuts\" for shortcuts.");
if (!Server.oldHelp) Player.SendMessage(p, "%bIf you can't see all commands, type %f/help %band choose a help type.");
break;
default:
Command cmd = Command.all.Find(message);
if (cmd != null)
{
cmd.Help(p);
string foundRank = Level.PermissionToName(GrpCommands.allowedCommands.Find(grpComm => grpComm.commandName == cmd.name).lowestRank);
Player.SendMessage(p, "Rank needed: " + getColor(cmd.name) + foundRank);
return;
}
byte b = Block.Byte(message);
if (b != Block.Zero)
{
Player.SendMessage(p, "Block \"" + message + "\" appears as &b" + Block.Name(Block.Convert(b)));
Group foundRank = Group.findPerm(Block.BlockList.Find(bs => bs.type == b).lowestRank);
Player.SendMessage(p, "Rank needed: " + foundRank.color + foundRank.name);
return;
}
Plugin plugin = null;
foreach (Plugin p1 in Plugin.all)
{
if (p1.name.ToLower() == message.ToLower())
{ {
if (grp.name != "nobody") // Note that -1 means max undo. Undo anything and everything. plugin = p1;
Player.SendMessage(p, grp.color + grp.name + " - &bCmd: " + grp.maxBlocks + " - &2Undo: " + ((grp.maxUndo != -1) ? grp.maxUndo.ToString() : "max") + " - &cPerm: " + (int)grp.Permission);
}
break;
case "build":
case "building":
PrintHelpForGroup(p, "build", "Building" );
break;
case "chat":
PrintHelpForGroup(p, "chat", "Chat" );
break;
case "eco":
case "economy":
PrintHelpForGroup(p, "eco", "Economy" );
break;
case "mod":
case "moderation":
PrintHelpForGroup(p, "mod", "Moderation" );
break;
case "info":
case "information":
PrintHelpForGroup(p, "info", "Information" );
break;
case "game":
case "games":
PrintHelpForGroup(p, "game", "Game" );
break;
case "other":
case "others":
PrintHelpForGroup(p, "other", "Other" );
break;
case "maps":
case "world":
PrintHelpForGroup(p, "world", "World" );
break;
case "short":
case "shortcut":
case "shortcuts":
case "short 1":
case "shortcut 1":
case "shortcuts 1":
case "short 2":
case "shortcut 2":
case "shortcuts 2":
bool list1 = true;
try { if (message.Split()[1] == "2") list1 = false; } catch { }
message = "";
List<string> shortcuts = new List<string>();
foreach (Command comm in Command.all.commands)
if (p == null || p.group.commands.All().Contains(comm))
if (comm.shortcut != "") shortcuts.Add(", &b" + comm.shortcut + " " + Server.DefaultColor + "[" + comm.name + "]");
int top = list1 ? shortcuts.Count / 2 : shortcuts.Count;
for (int i = list1 ? 0 : shortcuts.Count / 2; i < top; i++)
message += shortcuts[i];
if (list1) {
Player.SendMessage(p, "Available shortcuts (1):");
Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "%bType %f/help shortcuts 2%b to view the rest of the list ");
} else {
Player.SendMessage(p, "Available shortcuts (2):");
Player.SendMessage(p, message.Remove(0, 2));
Player.SendMessage(p, "%bType %f/help shortcuts 1%b to view the rest of the list ");
}
break;
case "colours":
case "colors":
Player.SendMessage(p, "&fTo use a color simply put a '%' sign symbol before you put the color code.");
Player.SendMessage(p, "Colors Available:");
Player.SendMessage(p, "0 - &0Black " + Server.DefaultColor + "| 8 - &8Gray");
Player.SendMessage(p, "1 - &1Navy " + Server.DefaultColor + "| 9 - &9Blue");
Player.SendMessage(p, "2 - &2Green " + Server.DefaultColor + "| a - &aLime");
Player.SendMessage(p, "3 - &3Teal " + Server.DefaultColor + "| b - &bAqua");
Player.SendMessage(p, "4 - &4Maroon " + Server.DefaultColor + "| c - &cRed");
Player.SendMessage(p, "5 - &5Purple " + Server.DefaultColor + "| d - &dPink");
Player.SendMessage(p, "6 - &6Gold " + Server.DefaultColor + "| e - &eYellow");
Player.SendMessage(p, "7 - &7Silver " + Server.DefaultColor + "| f - &fWhite");
break; break;
case "old":
case "oldmenu":
case "commands":
case "command":
string commandsFound = "";
foreach (Command comm in Command.all.commands)
if (p == null || p.group.commands.All().Contains(comm))
try { commandsFound += ", " + comm.name; } catch { }
Player.SendMessage(p, "Available commands:");
Player.SendMessage(p, commandsFound.Remove(0, 2));
Player.SendMessage(p, "Type \"/help <command>\" for more help.");
Player.SendMessage(p, "Type \"/help shortcuts\" for shortcuts.");
if (!Server.oldHelp) Player.SendMessage(p, "%bIf you can't see all commands, type %f/help %band choose a help type.");
break;
default:
Command cmd = Command.all.Find(message);
if (cmd != null)
{
cmd.Help(p);
string foundRank = Level.PermissionToName(GrpCommands.allowedCommands.Find(grpComm => grpComm.commandName == cmd.name).lowestRank);
Player.SendMessage(p, "Rank needed: " + getColor(cmd.name) + foundRank);
return;
} }
byte b = Block.Byte(message); }
if (b != Block.Zero) if (plugin != null)
{ {
Player.SendMessage(p, "Block \"" + message + "\" appears as &b" + Block.Name(Block.Convert(b))); plugin.Help(p);
Group foundRank = Group.findPerm(Block.BlockList.Find(bs => bs.type == b).lowestRank); }
Player.SendMessage(p, "Rank needed: " + foundRank.color + foundRank.name); Player.SendMessage(p, "Could not find command, plugin or block specified.");
return; break;
}
Plugin plugin = null;
foreach (Plugin p1 in Plugin.all)
{
if (p1.name.ToLower() == message.ToLower())
{
plugin = p1;
break;
}
}
if (plugin != null)
{
plugin.Help(p);
}
Player.SendMessage(p, "Could not find command, plugin or block specified.");
break;
}
} }
catch (Exception e) { Server.ErrorLog(e); Player.SendMessage(p, "An error occured"); }
} }
static void PrintHelpForGroup(Player p, string typeName, string typeTitle) { static void PrintHelpForGroup(Player p, string typeName, string typeTitle) {
string message = ""; string message = "";
foreach (Command c in Command.all.commands) { foreach (Command c in Command.all.commands) {
if (p == null || p.group.commands.All().Contains(c)) { if (p == null || p.group.commands.All().Contains(c)) {
if (c.type.Contains(typeName)) if (c.type.Contains(typeName))
message += ", " + getColor(c.name) + c.name; message += ", " + getColor(c.name) + c.name;
} }
} }
if (message == "") { if (message == "") {
Player.SendMessage(p, "No commands of this type are available to you."); Player.SendMessage(p, "No commands of this type are available to you.");
} else { } else {
Player.SendMessage(p, typeTitle + " commands you may use:"); Player.SendMessage(p, typeTitle + " commands you may use:");
Player.SendMessage(p, message.Remove(0, 2) + "."); Player.SendMessage(p, message.Remove(0, 2) + ".");
} }
} }
private static string getColor(string commName) private static string getColor(string commName)

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2011 MCGalaxy 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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -31,68 +31,64 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) public override void Use(Player p, string message)
{ {
try List<string> levels = new List<string>(Server.levels.Count);
string unloadedLevels = ""; int currentNum = 0; int maxMaps = 0;
if (message != "")
{ {
List<string> levels = new List<string>(Server.levels.Count); try {
string unloadedLevels = ""; int currentNum = 0; int maxMaps = 0; int n = int.Parse(message);
if (n <= 0) { Help(p); return; }
if (message != "") maxMaps = n * 50;
{ currentNum = maxMaps - 50;
try { } catch { Help(p); return; }
int n = int.Parse(message); }
if (n <= 0) { Help(p); return; }
maxMaps = n * 50; DirectoryInfo di = new DirectoryInfo("levels/");
currentNum = maxMaps - 50; FileInfo[] fi = di.GetFiles("*.lvl");
} catch { Help(p); return; } foreach (Level l in Server.levels) { levels.Add(l.name.ToLower()); }
}
if (maxMaps == 0)
DirectoryInfo di = new DirectoryInfo("levels/"); {
FileInfo[] fi = di.GetFiles("*.lvl"); foreach (FileInfo file in fi)
foreach (Level l in Server.levels) { levels.Add(l.name.ToLower()); } {
if (!levels.Contains(file.Name.Replace(".lvl", "").ToLower()))
if (maxMaps == 0) {
{ string level = file.Name.Replace(".lvl", "");
foreach (FileInfo file in fi) string visit = GetLoadOnGoto(level) && (p == null || p.group.Permission >= GetPerVisitPermission(level)) ? "%aYes" : "%cNo";
{ unloadedLevels += ", " + Group.findPerm(GetPerBuildPermission(level)).color + level + " &b[" + visit + "&b]";
if (!levels.Contains(file.Name.Replace(".lvl", "").ToLower())) }
{ }
string level = file.Name.Replace(".lvl", ""); if (unloadedLevels != "")
string visit = GetLoadOnGoto(level) && (p == null || p.group.Permission >= GetPerVisitPermission(level)) ? "%aYes" : "%cNo"; {
unloadedLevels += ", " + Group.findPerm(GetPerBuildPermission(level)).color + level + " &b[" + visit + "&b]"; Player.SendMessage(p, "Unloaded levels [Accessible]: ");
} Player.SendMessage(p, unloadedLevels.Remove(0, 2));
} if (fi.Length > 50) { Player.SendMessage(p, "For a more structured list, use /unloaded <1/2/3/..>"); }
if (unloadedLevels != "") }
{ else Player.SendMessage(p, "No maps are unloaded");
Player.SendMessage(p, "Unloaded levels [Accessible]: "); }
Player.SendMessage(p, unloadedLevels.Remove(0, 2)); else
if (fi.Length > 50) { Player.SendMessage(p, "For a more structured list, use /unloaded <1/2/3/..>"); } {
} if (maxMaps > fi.Length) maxMaps = fi.Length;
else Player.SendMessage(p, "No maps are unloaded"); if (currentNum > fi.Length) { Player.SendMessage(p, "No maps beyond number " + fi.Length); return; }
}
else Player.SendMessage(p, "Unloaded levels [Accessible] (" + currentNum + " to " + maxMaps + "):");
{ for (int i = currentNum; i < maxMaps; i++)
if (maxMaps > fi.Length) maxMaps = fi.Length; {
if (currentNum > fi.Length) { Player.SendMessage(p, "No maps beyond number " + fi.Length); return; } if (!levels.Contains(fi[i].Name.Replace(".lvl", "").ToLower()))
{
Player.SendMessage(p, "Unloaded levels [Accessible] (" + currentNum + " to " + maxMaps + "):"); string level = fi[i].Name.Replace(".lvl", "");
for (int i = currentNum; i < maxMaps; i++) string visit = GetLoadOnGoto(level) && (p == null || p.group.Permission >= GetPerVisitPermission(level)) ? "%aYes" : "%cNo";
{ unloadedLevels += ", " + Group.findPerm(GetPerBuildPermission(level)).color + level + " &b[" + visit + "&b]";
if (!levels.Contains(fi[i].Name.Replace(".lvl", "").ToLower())) }
{ }
string level = fi[i].Name.Replace(".lvl", "");
string visit = GetLoadOnGoto(level) && (p == null || p.group.Permission >= GetPerVisitPermission(level)) ? "%aYes" : "%cNo"; if (unloadedLevels != "")
unloadedLevels += ", " + Group.findPerm(GetPerBuildPermission(level)).color + level + " &b[" + visit + "&b]"; {
} Player.SendMessage(p, unloadedLevels.Remove(0, 2));
} }
else Player.SendMessage(p, "No maps are unloaded");
if (unloadedLevels != "")
{
Player.SendMessage(p, unloadedLevels.Remove(0, 2));
}
else Player.SendMessage(p, "No maps are unloaded");
}
} }
catch (Exception e) { Server.ErrorLog(e); Player.SendMessage(p, "An error occured"); }
//Exception catching since it needs to be tested on Ocean Flatgrass //Exception catching since it needs to be tested on Ocean Flatgrass
} }

View File

@ -1,57 +1,50 @@
/* /*
Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
namespace MCGalaxy.Commands namespace MCGalaxy.Commands {
{
public sealed class CmdBotRemove : Command public sealed class CmdBotRemove : Command {
{
public override string name { get { return "botremove"; } } public override string name { get { return "botremove"; } }
public override string shortcut { get { return ""; } } public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Moderation; } } public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return false; } } public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Admin; } } public override LevelPermission defaultRank { get { return LevelPermission.Admin; } }
public string[,] botlist;
public CmdBotRemove() { } public CmdBotRemove() { }
public override void Use(Player p, string message) public override void Use(Player p, string message) {
{
if (message == "") { Help(p); return; } if (message == "") { Help(p); return; }
if (p == null) { MessageInGameOnly(p); return; } if (p == null) { MessageInGameOnly(p); return; }
try if (message.ToLower() == "all") {
{ PlayerBot.RemoveAllFromLevel(p.level);
if (message.ToLower() == "all") { } else {
PlayerBot.RemoveAllFromLevel(p.level); PlayerBot who = PlayerBot.Find(message);
} else { if (who == null) { Player.SendMessage(p, "There is no bot " + who + "!"); return; }
PlayerBot who = PlayerBot.Find(message); if (p.level != who.level) { Player.SendMessage(p, who.name + " is in a different level."); return; }
if (who == null) { Player.SendMessage(p, "There is no bot " + who + "!"); return; } PlayerBot.Remove(who);
if (p.level != who.level) { Player.SendMessage(p, who.name + " is in a different level."); return; } Player.SendMessage(p, "Removed bot.");
PlayerBot.Remove(who);
Player.SendMessage(p, "Removed bot.");
}
} }
catch (Exception e) { Server.ErrorLog(e); Player.SendMessage(p, "Error caught"); }
} }
public override void Help(Player p) public override void Help(Player p) {
{
Player.SendMessage(p, "/botremove <name> - Remove a bot on the same level as you"); Player.SendMessage(p, "/botremove <name> - Remove a bot on the same level as you");
// Player.SendMessage(p, "If All is used, all bots on the current level are removed"); Player.SendMessage(p, "If 'all' is used, all bots on the current level are removed");
} }
} }
} }

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2011 MCGalaxy 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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
namespace MCGalaxy.Commands namespace MCGalaxy.Commands
{ {
@ -22,7 +22,7 @@ namespace MCGalaxy.Commands
{ {
public override string name { get { return "follow"; } } public override string name { get { return "follow"; } }
public override string shortcut { get { return ""; } } public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Moderation; } } public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } } public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public CmdFollow() { } public CmdFollow() { }
@ -35,86 +35,83 @@ namespace MCGalaxy.Commands
Player.SendMessage(p, "You're currently being &4possessed" + Server.DefaultColor + "!"); Player.SendMessage(p, "You're currently being &4possessed" + Server.DefaultColor + "!");
return; return;
} }
try
bool stealth = false;
if (message != "")
{ {
bool stealth = false; if (message == "#")
if (message != "")
{ {
if (message == "#") if (p.following != "")
{ {
if (p.following != "") stealth = true;
{ message = "";
stealth = true;
message = "";
}
else
{
Help(p);
return;
}
} }
else if (message.IndexOf(' ') != -1) else
{ {
if (message.Split(' ')[0] == "#") Help(p);
{
if (p.hidden) stealth = true;
message = message.Split(' ')[1];
}
}
}
Player who = PlayerInfo.Find(message);
if (message == "" && p.following == "") {
Help(p);
return;
}
else if (message == "" && p.following != "" || message == p.following)
{
who = PlayerInfo.Find(p.following);
p.following = "";
if (p.hidden)
{
if (who != null)
p.SendSpawn(who.id, who.color + who.name, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]);
if (!stealth)
{
Command.all.Find("hide").Use(p, "");
}
else
{
if (who != null)
{
Player.SendMessage(p, "You have stopped following " + who.color + who.DisplayName + Server.DefaultColor + " and remained hidden.");
}
else
{
Player.SendMessage(p, "Following stopped.");
}
}
return; return;
} }
} }
if (who == null) { Player.SendMessage(p, "Could not find player."); return; } else if (message.IndexOf(' ') != -1)
else if (who == p) { Player.SendMessage(p, "Cannot follow yourself."); return; }
else if (who.group.Permission >= p.group.Permission) { Player.SendMessage(p, "Cannot follow someone of equal or greater rank."); return; }
else if (who.following != "") { Player.SendMessage(p, who.DisplayName + " is already following " + who.following); return; }
if (!p.hidden) Command.all.Find("hide").Use(p, "");
if (p.level != who.level) Command.all.Find("tp").Use(p, who.name);
if (p.following != "")
{ {
who = PlayerInfo.Find(p.following); if (message.Split(' ')[0] == "#")
p.SendSpawn(who.id, who.color + who.name, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]); {
if (p.hidden) stealth = true;
message = message.Split(' ')[1];
}
} }
who = PlayerInfo.Find(message);
p.following = who.name;
Player.SendMessage(p, "Following " + who.color + who.DisplayName + Server.DefaultColor + ". Use \"/follow\" to stop.");
p.SendDespawn(who.id);
} }
catch (Exception e) { Server.ErrorLog(e); Player.SendMessage(p, "Error occured"); }
Player who = PlayerInfo.Find(message);
if (message == "" && p.following == "") {
Help(p);
return;
}
else if (message == "" && p.following != "" || message == p.following)
{
who = PlayerInfo.Find(p.following);
p.following = "";
if (p.hidden)
{
if (who != null)
p.SendSpawn(who.id, who.color + who.name, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]);
if (!stealth)
{
Command.all.Find("hide").Use(p, "");
}
else
{
if (who != null)
{
Player.SendMessage(p, "You have stopped following " + who.color + who.DisplayName + Server.DefaultColor + " and remained hidden.");
}
else
{
Player.SendMessage(p, "Following stopped.");
}
}
return;
}
}
if (who == null) { Player.SendMessage(p, "Could not find player."); return; }
else if (who == p) { Player.SendMessage(p, "Cannot follow yourself."); return; }
else if (who.group.Permission >= p.group.Permission) { Player.SendMessage(p, "Cannot follow someone of equal or greater rank."); return; }
else if (who.following != "") { Player.SendMessage(p, who.DisplayName + " is already following " + who.following); return; }
if (!p.hidden) Command.all.Find("hide").Use(p, "");
if (p.level != who.level) Command.all.Find("tp").Use(p, who.name);
if (p.following != "")
{
who = PlayerInfo.Find(p.following);
p.SendSpawn(who.id, who.color + who.name, who.pos[0], who.pos[1], who.pos[2], who.rot[0], who.rot[1]);
}
who = PlayerInfo.Find(message);
p.following = who.name;
Player.SendMessage(p, "Following " + who.color + who.DisplayName + Server.DefaultColor + ". Use \"/follow\" to stop.");
p.SendDespawn(who.id);
} }
public override void Help(Player p) public override void Help(Player p)
{ {
Player.SendMessage(p, "/follow <name> - Follows <name> until the command is cancelled"); Player.SendMessage(p, "/follow <name> - Follows <name> until the command is cancelled");

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2011 MCGalaxy 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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
using System.IO; using System.IO;
namespace MCGalaxy.Commands namespace MCGalaxy.Commands
@ -98,48 +98,41 @@ namespace MCGalaxy.Commands
} }
} }
try DirectoryInfo di;
string[] fileContent;
if (Directory.Exists("extra/undo/" + message.Split(' ')[0]))
{ {
DirectoryInfo di; di = new DirectoryInfo("extra/undo/" + message.Split(' ')[0]);
string[] fileContent;
if (Directory.Exists("extra/undo/" + message.Split(' ')[0])) for (int i = 0; i < di.GetFiles("*.undo").Length; i++)
{ {
di = new DirectoryInfo("extra/undo/" + message.Split(' ')[0]); fileContent = File.ReadAllText("extra/undo/" + message.Split(' ')[0] + "/" + i + ".undo").Split(' ');
highlightStuff(fileContent, seconds, p);
for (int i = 0; i < di.GetFiles("*.undo").Length; i++)
{
fileContent = File.ReadAllText("extra/undo/" + message.Split(' ')[0] + "/" + i + ".undo").Split(' ');
highlightStuff(fileContent, seconds, p);
}
FoundUser = true;
}
if (Directory.Exists("extra/undoPrevious/" + message.Split(' ')[0]))
{
di = new DirectoryInfo("extra/undoPrevious/" + message.Split(' ')[0]);
for (int i = 0; i < di.GetFiles("*.undo").Length; i++)
{
fileContent = File.ReadAllText("extra/undoPrevious/" + message.Split(' ')[0] + "/" + i + ".undo").Split(' ');
highlightStuff(fileContent, seconds, p);
}
FoundUser = true;
}
if (FoundUser)
{
Player.SendMessage(p, "Now highlighting &b" + seconds + Server.DefaultColor + " seconds for " + Server.FindColor(message.Split(' ')[0]) + message.Split(' ')[0]);
Player.SendMessage(p, "&cUse /reveal to un-highlight");
}
else
{
Player.SendMessage(p, "Could not find player specified.");
} }
FoundUser = true;
} }
catch (Exception e)
if (Directory.Exists("extra/undoPrevious/" + message.Split(' ')[0]))
{ {
Server.ErrorLog(e); di = new DirectoryInfo("extra/undoPrevious/" + message.Split(' ')[0]);
for (int i = 0; i < di.GetFiles("*.undo").Length; i++)
{
fileContent = File.ReadAllText("extra/undoPrevious/" + message.Split(' ')[0] + "/" + i + ".undo").Split(' ');
highlightStuff(fileContent, seconds, p);
}
FoundUser = true;
}
if (FoundUser)
{
Player.SendMessage(p, "Now highlighting &b" + seconds + Server.DefaultColor + " seconds for " + Server.FindColor(message.Split(' ')[0]) + message.Split(' ')[0]);
Player.SendMessage(p, "&cUse /reveal to un-highlight");
}
else
{
Player.SendMessage(p, "Could not find player specified.");
} }
} }

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2010 MCLawl Team - Written by Valek (Modified for use with MCGalaxy) Copyright 2010 MCLawl Team - Written by Valek (Modified for use with 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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
namespace MCGalaxy.Commands namespace MCGalaxy.Commands
@ -23,7 +23,7 @@ namespace MCGalaxy.Commands
{ {
public override string name { get { return "possess"; } } public override string name { get { return "possess"; } }
public override string shortcut { get { return ""; } } public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Moderation; } } public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Admin; } } public override LevelPermission defaultRank { get { return LevelPermission.Admin; } }
public CmdPossess() { } public CmdPossess() { }
@ -32,40 +32,17 @@ namespace MCGalaxy.Commands
{ {
if (message.Split(' ').Length > 2) { Help(p); return; } if (message.Split(' ').Length > 2) { Help(p); return; }
if (p == null) { Player.SendMessage(p, "Console possession? Nope.avi."); return; } if (p == null) { Player.SendMessage(p, "Console possession? Nope.avi."); return; }
try
string skin = (message.Split(' ').Length == 2) ? message.Split(' ')[1] : "";
message = message.Split(' ')[0];
if (message == "")
{ {
string skin = (message.Split(' ').Length == 2) ? message.Split(' ')[1] : ""; if (p.possess == "")
message = message.Split(' ')[0];
if (message == "")
{ {
if (p.possess == "") Help(p);
{ return;
Help(p);
return;
}
else
{
Player who = PlayerInfo.Find(p.possess);
if (who == null)
{
p.possess = "";
Player.SendMessage(p, "Possession disabled.");
return;
}
who.following = "";
who.canBuild = true;
p.possess = "";
if (!who.MarkPossessed())
{
return;
}
p.invincible = false;
Command.all.Find("hide").Use(p, "");
Player.SendMessage(p, "Stopped possessing " + who.color + who.name + Server.DefaultColor + ".");
return;
}
} }
else if (message == p.possess) else
{ {
Player who = PlayerInfo.Find(p.possess); Player who = PlayerInfo.Find(p.possess);
if (who == null) if (who == null)
@ -74,11 +51,6 @@ namespace MCGalaxy.Commands
Player.SendMessage(p, "Possession disabled."); Player.SendMessage(p, "Possession disabled.");
return; return;
} }
if (who == p)
{
Player.SendMessage(p, "Cannot possess yourself!");
return;
}
who.following = ""; who.following = "";
who.canBuild = true; who.canBuild = true;
p.possess = ""; p.possess = "";
@ -91,68 +63,89 @@ namespace MCGalaxy.Commands
Player.SendMessage(p, "Stopped possessing " + who.color + who.name + Server.DefaultColor + "."); Player.SendMessage(p, "Stopped possessing " + who.color + who.name + Server.DefaultColor + ".");
return; return;
} }
else
{
Player who = PlayerInfo.Find(message);
if (who == null)
{
Player.SendMessage(p, "Could not find player.");
return;
}
if (who.group.Permission >= p.group.Permission)
{
Player.SendMessage(p, "Cannot possess someone of equal or greater rank.");
return;
}
if (who.possess != "")
{
Player.SendMessage(p, "That player is currently possessing someone!");
return;
}
if (who.following != "")
{
Player.SendMessage(p, "That player is either following someone or already possessed.");
return;
}
if (p.possess != "")
{
Player oldwho = PlayerInfo.Find(p.possess);
if (oldwho != null)
{
oldwho.following = "";
oldwho.canBuild = true;
if (!oldwho.MarkPossessed())
{
return;
}
//p.SendSpawn(oldwho.id, oldwho.color + oldwho.name, oldwho.pos[0], oldwho.pos[1], oldwho.pos[2], oldwho.rot[0], oldwho.rot[1]);
}
}
Command.all.Find("tp").Use(p, who.name);
if (!p.hidden)
{
Command.all.Find("hide").Use(p, "");
}
p.possess = who.name;
who.following = p.name;
if (!p.invincible)
{
p.invincible = true;
}
bool result = (skin == "#") ? who.MarkPossessed() : who.MarkPossessed(p.name);
if (!result)
{
return;
}
p.SendDespawn(who.id);
who.canBuild = false;
Player.SendMessage(p, "Successfully possessed " + who.color + who.name + Server.DefaultColor + ".");
}
} }
catch (Exception e) else if (message == p.possess)
{ {
Server.ErrorLog(e); Player who = PlayerInfo.Find(p.possess);
Player.SendMessage(p, "There was an error."); if (who == null)
{
p.possess = "";
Player.SendMessage(p, "Possession disabled.");
return;
}
if (who == p)
{
Player.SendMessage(p, "Cannot possess yourself!");
return;
}
who.following = "";
who.canBuild = true;
p.possess = "";
if (!who.MarkPossessed())
{
return;
}
p.invincible = false;
Command.all.Find("hide").Use(p, "");
Player.SendMessage(p, "Stopped possessing " + who.color + who.name + Server.DefaultColor + ".");
return;
}
else
{
Player who = PlayerInfo.Find(message);
if (who == null)
{
Player.SendMessage(p, "Could not find player.");
return;
}
if (who.group.Permission >= p.group.Permission)
{
Player.SendMessage(p, "Cannot possess someone of equal or greater rank.");
return;
}
if (who.possess != "")
{
Player.SendMessage(p, "That player is currently possessing someone!");
return;
}
if (who.following != "")
{
Player.SendMessage(p, "That player is either following someone or already possessed.");
return;
}
if (p.possess != "")
{
Player oldwho = PlayerInfo.Find(p.possess);
if (oldwho != null)
{
oldwho.following = "";
oldwho.canBuild = true;
if (!oldwho.MarkPossessed())
{
return;
}
//p.SendSpawn(oldwho.id, oldwho.color + oldwho.name, oldwho.pos[0], oldwho.pos[1], oldwho.pos[2], oldwho.rot[0], oldwho.rot[1]);
}
}
Command.all.Find("tp").Use(p, who.name);
if (!p.hidden)
{
Command.all.Find("hide").Use(p, "");
}
p.possess = who.name;
who.following = p.name;
if (!p.invincible)
{
p.invincible = true;
}
bool result = (skin == "#") ? who.MarkPossessed() : who.MarkPossessed(p.name);
if (!result)
{
return;
}
p.SendDespawn(who.id);
who.canBuild = false;
Player.SendMessage(p, "Successfully possessed " + who.color + who.name + Server.DefaultColor + ".");
} }
} }

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2011 MCGalaxy 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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
using System.IO; using System.IO;
using MCGalaxy.SQL; using MCGalaxy.SQL;
@ -24,7 +24,7 @@ namespace MCGalaxy.Commands
{ {
public override string name { get { return "renamelvl"; } } public override string name { get { return "renamelvl"; } }
public override string shortcut { get { return ""; } } public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Moderation; } } public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } } public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Admin; } } public override LevelPermission defaultRank { get { return LevelPermission.Admin; } }
public CmdRenameLvl() { } public CmdRenameLvl() { }
@ -46,78 +46,76 @@ namespace MCGalaxy.Commands
foundLevel.Unload(); foundLevel.Unload();
File.Move("levels/" + foundLevel.name + ".lvl", "levels/" + newName + ".lvl");
try try
{ {
File.Move("levels/" + foundLevel.name + ".lvl", "levels/" + newName + ".lvl"); File.Move("levels/" + foundLevel.name + ".lvl.backup", "levels/" + newName + ".lvl.backup");
try } catch { }
{
File.Move("levels/" + foundLevel.name + ".lvl.backup", "levels/" + newName + ".lvl.backup"); try
} catch { } {
File.Move("levels/level properties/" + foundLevel.name + ".properties", "levels/level properties/" + newName + ".properties");
try
{
File.Move("levels/level properties/" + foundLevel.name + ".properties", "levels/level properties/" + newName + ".properties");
}
catch { }
try
{
File.Move("levels/level properties/" + foundLevel.name, "levels/level properties/" + newName + ".properties");
}
catch { }
try {
if (File.Exists("blockdefs/lvl_" + foundLevel.name + ".json"))
File.Move("blockdefs/lvl_" + foundLevel.name + ".json", "blockdefs/lvl_" + newName + ".json");
} catch {}
//Move and rename backups
try
{
string foundLevelDir, newNameDir;
for (int i = 1; ; i++)
{
foundLevelDir = @Server.backupLocation + "/" + foundLevel.name + "/" + i + "/";
newNameDir = @Server.backupLocation + "/" + newName + "/" + i + "/";
if (File.Exists(foundLevelDir + foundLevel.name + ".lvl"))
{
Directory.CreateDirectory(newNameDir);
File.Move(foundLevelDir + foundLevel.name + ".lvl", newNameDir + newName + ".lvl");
if (DirectoryEmpty(foundLevelDir))
Directory.Delete(foundLevelDir);
}
else
{
if (DirectoryEmpty(@Server.backupLocation + "/" + foundLevel.name + "/"))
Directory.Delete(@Server.backupLocation + "/" + foundLevel.name + "/");
break;
}
}
}
catch { }
//safe against SQL injections because foundLevel is being checked and,
//newName is being split and partly checked on illegal characters reserved for Windows.
if (Server.useMySQL)
Database.executeQuery(String.Format("RENAME TABLE `Block{0}` TO `Block{1}`, " +
"`Portals{0}` TO `Portals{1}`, " +
"`Messages{0}` TO `Messages{1}`, " +
"`Zone{0}` TO `Zone{1}`", foundLevel.name.ToLower(), newName.ToLower()));
else {
using (DatabaseTransactionHelper helper = SQLiteTransactionHelper.Create()) { // ensures that it's either all work, or none work.
helper.Execute(String.Format("ALTER TABLE Block{0} RENAME TO Block{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Execute(String.Format("ALTER TABLE Portals{0} RENAME TO Portals{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Execute(String.Format("ALTER TABLE Messages{0} RENAME TO Messages{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Execute(String.Format("ALTER TABLE Zone{0} RENAME TO Zone{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Commit();
}
}
try { Command.all.Find("load").Use(p, newName); }
catch { }
Player.GlobalMessage("Renamed " + foundLevel.name + " to " + newName);
} }
catch (Exception e) { Player.SendMessage(p, "Error when renaming."); Server.ErrorLog(e); } catch { }
try
{
File.Move("levels/level properties/" + foundLevel.name, "levels/level properties/" + newName + ".properties");
}
catch { }
try {
if (File.Exists("blockdefs/lvl_" + foundLevel.name + ".json"))
File.Move("blockdefs/lvl_" + foundLevel.name + ".json", "blockdefs/lvl_" + newName + ".json");
} catch {}
//Move and rename backups
try
{
string foundLevelDir, newNameDir;
for (int i = 1; ; i++)
{
foundLevelDir = @Server.backupLocation + "/" + foundLevel.name + "/" + i + "/";
newNameDir = @Server.backupLocation + "/" + newName + "/" + i + "/";
if (File.Exists(foundLevelDir + foundLevel.name + ".lvl"))
{
Directory.CreateDirectory(newNameDir);
File.Move(foundLevelDir + foundLevel.name + ".lvl", newNameDir + newName + ".lvl");
if (DirectoryEmpty(foundLevelDir))
Directory.Delete(foundLevelDir);
}
else
{
if (DirectoryEmpty(@Server.backupLocation + "/" + foundLevel.name + "/"))
Directory.Delete(@Server.backupLocation + "/" + foundLevel.name + "/");
break;
}
}
}
catch { }
//safe against SQL injections because foundLevel is being checked and,
//newName is being split and partly checked on illegal characters reserved for Windows.
if (Server.useMySQL)
Database.executeQuery(String.Format("RENAME TABLE `Block{0}` TO `Block{1}`, " +
"`Portals{0}` TO `Portals{1}`, " +
"`Messages{0}` TO `Messages{1}`, " +
"`Zone{0}` TO `Zone{1}`", foundLevel.name.ToLower(), newName.ToLower()));
else {
using (DatabaseTransactionHelper helper = SQLiteTransactionHelper.Create()) { // ensures that it's either all work, or none work.
helper.Execute(String.Format("ALTER TABLE Block{0} RENAME TO Block{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Execute(String.Format("ALTER TABLE Portals{0} RENAME TO Portals{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Execute(String.Format("ALTER TABLE Messages{0} RENAME TO Messages{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Execute(String.Format("ALTER TABLE Zone{0} RENAME TO Zone{1}", foundLevel.name.ToLower(), newName.ToLower()));
helper.Commit();
}
}
try { Command.all.Find("load").Use(p, newName); }
catch { }
Player.GlobalMessage("Renamed " + foundLevel.name + " to " + newName);
} }
public override void Help(Player p) public override void Help(Player p)
{ {
Player.SendMessage(p, "/renamelvl <level> <new name> - Renames <level> to <new name>"); Player.SendMessage(p, "/renamelvl <level> <new name> - Renames <level> to <new name>");

View File

@ -1,20 +1,20 @@
/* /*
Copyright 2011 MCGalaxy 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 the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS" software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses. permissions and limitations under the Licenses.
*/ */
using System; using System;
using System.IO; using System.IO;
using System.IO.Compression; using System.IO.Compression;
@ -35,64 +35,55 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) public override void Use(Player p, string message)
{ {
string path; string path;
if (message.Split(' ').Length == 1) path = "levels/" + message + ".lvl"; if (message.Split(' ').Length == 1) path = "levels/" + message + ".lvl";
else if (message.Split(' ').Length == 2) try { path = @Server.backupLocation + "/" + message.Split(' ')[0] + "/" + int.Parse(message.Split(' ')[1]) + "/" + message.Split(' ')[0] + ".lvl"; } else if (message.Split(' ').Length == 2) try { path = @Server.backupLocation + "/" + message.Split(' ')[0] + "/" + int.Parse(message.Split(' ')[1]) + "/" + message.Split(' ')[0] + ".lvl"; }
catch { Help(p); return; } catch { Help(p); return; }
else { Help(p); return; } else { Help(p); return; }
if (File.Exists(path)) if (File.Exists(path))
{ {
try Level level = LvlFile.Load(name, path);
{ level.setPhysics(0);
Level level = LvlFile.Load(name, path);
level.setPhysics(0);
level.backedup = true; level.backedup = true;
level.permissionbuild = LevelPermission.Admin; level.permissionbuild = LevelPermission.Admin;
level.jailx = (ushort)(level.spawnx * 32); level.jailx = (ushort)(level.spawnx * 32);
level.jaily = (ushort)(level.spawny * 32); level.jaily = (ushort)(level.spawny * 32);
level.jailz = (ushort)(level.spawnz * 32); level.jailz = (ushort)(level.spawnz * 32);
level.jailrotx = level.rotx; level.jailroty = level.roty; level.jailrotx = level.rotx; level.jailroty = level.roty;
p.Loading = true; p.Loading = true;
foreach (Player pl in PlayerInfo.players) if (p.level == pl.level && p != pl) p.SendDespawn(pl.id); foreach (Player pl in PlayerInfo.players) if (p.level == pl.level && p != pl) p.SendDespawn(pl.id);
foreach (PlayerBot b in PlayerBot.playerbots) if (p.level == b.level) p.SendDespawn(b.id); foreach (PlayerBot b in PlayerBot.playerbots) if (p.level == b.level) p.SendDespawn(b.id);
Player.GlobalDespawn(p, true); Player.GlobalDespawn(p, true);
Level oldLevel = p.level; Level oldLevel = p.level;
p.level = level; p.level = level;
p.SendMotd(); p.SendMotd();
if (!p.SendRawMap(oldLevel, level)) if (!p.SendRawMap(oldLevel, level))
return; return;
ushort x = (ushort)((0.5 + level.spawnx) * 32); ushort x = (ushort)((0.5 + level.spawnx) * 32);
ushort y = (ushort)((1 + level.spawny) * 32); ushort y = (ushort)((1 + level.spawny) * 32);
ushort z = (ushort)((0.5 + level.spawnz) * 32); ushort z = (ushort)((0.5 + level.spawnz) * 32);
p.aiming = false; p.aiming = false;
Player.GlobalSpawn(p, x, y, z, level.rotx, level.roty, true); Player.GlobalSpawn(p, x, y, z, level.rotx, level.roty, true);
p.ClearBlockchange(); p.ClearBlockchange();
p.Loading = false; p.Loading = false;
if (message.IndexOf(' ') == -1) if (message.IndexOf(' ') == -1)
level.name = "&cMuseum " + Server.DefaultColor + "(" + message.Split(' ')[0] + ")"; level.name = "&cMuseum " + Server.DefaultColor + "(" + message.Split(' ')[0] + ")";
else else
level.name = "&cMuseum " + Server.DefaultColor + "(" + message.Split(' ')[0] + " " + message.Split(' ')[1] + ")"; level.name = "&cMuseum " + Server.DefaultColor + "(" + message.Split(' ')[0] + " " + message.Split(' ')[1] + ")";
if (!p.hidden) if (!p.hidden)
{ Player.GlobalMessage(p.color + p.prefix + p.name + Server.DefaultColor + " went to the " + level.name);
Player.GlobalMessage(p.color + p.prefix + p.name + Server.DefaultColor + " went to the " + level.name); } else {
} Player.SendMessage(p, "Level or backup could not be found.");
} catch (Exception ex) {
Player.SendMessage(p, "Error loading level.");
Server.ErrorLog(ex);
}
} else {
Player.SendMessage(p, "Level or backup could not be found.");
} }
} }
public override void Help(Player p) public override void Help(Player p)

View File

@ -30,72 +30,69 @@ namespace MCGalaxy.Commands
public override void Use(Player p, string message) public override void Use(Player p, string message)
{ {
if (p == null) { MessageInGameOnly(p); return; } if (p == null) { MessageInGameOnly(p); return; }
if (message.Split(' ').Length < 2) { Help(p); return; } if (message.Split(' ').Length < 2) { Help(p); return; }
string foundPath = message.Split(' ')[1].ToLower(); string foundPath = message.Split(' ')[1].ToLower();
if (!Player.ValidName(foundPath)) { Player.SendMessage(p, "Invalid AI name!"); return; } if (!Player.ValidName(foundPath)) { Player.SendMessage(p, "Invalid AI name!"); return; }
if (foundPath == "hunt" || foundPath == "kill") { Player.SendMessage(p, "Reserved for special AI."); return; } if (foundPath == "hunt" || foundPath == "kill") { Player.SendMessage(p, "Reserved for special AI."); return; }
try switch (message.Split(' ')[0])
{ {
switch (message.Split(' ')[0]) case "add":
{ if (message.Split(' ').Length == 2) addPoint(p, foundPath);
case "add": else if (message.Split(' ').Length == 3) addPoint(p, foundPath, message.Split(' ')[2]);
if (message.Split(' ').Length == 2) addPoint(p, foundPath); else if (message.Split(' ').Length == 4) addPoint(p, foundPath, message.Split(' ')[2], message.Split(' ')[3]);
else if (message.Split(' ').Length == 3) addPoint(p, foundPath, message.Split(' ')[2]); else addPoint(p, foundPath, message.Split(' ')[2], message.Split(' ')[3], message.Split(' ')[4]);
else if (message.Split(' ').Length == 4) addPoint(p, foundPath, message.Split(' ')[2], message.Split(' ')[3]); break;
else addPoint(p, foundPath, message.Split(' ')[2], message.Split(' ')[3], message.Split(' ')[4]); case "del":
break; if (!Directory.Exists("bots/deleted")) Directory.CreateDirectory("bots/deleted");
case "del":
if (!Directory.Exists("bots/deleted")) Directory.CreateDirectory("bots/deleted");
int currentTry = 0; int currentTry = 0;
if (File.Exists("bots/" + foundPath)) if (File.Exists("bots/" + foundPath))
{ {
retry: try retry: try
{
if (message.Split(' ').Length == 2)
{ {
if (message.Split(' ').Length == 2) if (currentTry == 0)
File.Move("bots/" + foundPath, "bots/deleted/" + foundPath);
else
File.Move("bots/" + foundPath, "bots/deleted/" + foundPath + currentTry);
}
else
{
if (message.Split(' ')[2].ToLower() == "last")
{ {
if (currentTry == 0) string[] Lines = File.ReadAllLines("bots/" + foundPath);
File.Move("bots/" + foundPath, "bots/deleted/" + foundPath); string[] outLines = new string[Lines.Length - 1];
else for (int i = 0; i < Lines.Length - 1; i++)
File.Move("bots/" + foundPath, "bots/deleted/" + foundPath + currentTry); {
outLines[i] = Lines[i];
}
File.WriteAllLines("bots/" + foundPath, outLines);
Player.SendMessage(p, "Deleted the last waypoint from " + foundPath);
return;
} }
else else
{ {
if (message.Split(' ')[2].ToLower() == "last") Help(p); return;
{
string[] Lines = File.ReadAllLines("bots/" + foundPath);
string[] outLines = new string[Lines.Length - 1];
for (int i = 0; i < Lines.Length - 1; i++)
{
outLines[i] = Lines[i];
}
File.WriteAllLines("bots/" + foundPath, outLines);
Player.SendMessage(p, "Deleted the last waypoint from " + foundPath);
return;
}
else
{
Help(p); return;
}
} }
} }
catch (IOException) { currentTry++; goto retry; }
Player.SendMessage(p, "Deleted &b" + foundPath);
} }
else catch (IOException) { currentTry++; goto retry; }
{ Player.SendMessage(p, "Deleted &b" + foundPath);
Player.SendMessage(p, "Could not find specified AI."); }
} else
break; {
Player.SendMessage(p, "Could not find specified AI.");
}
break;
default: Help(p); return; default: Help(p); return;
}
} }
catch (Exception e) { Server.ErrorLog(e); }
} }
public override void Help(Player p) public override void Help(Player p)
{ {
Player.SendMessage(p, "/botai <add/del> [AI name] <extra> - Adds or deletes [AI name]"); Player.SendMessage(p, "/botai <add/del> [AI name] <extra> - Adds or deletes [AI name]");