public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (!(cmdSource is IPlayer)) { return; } IPlayer player = cmdSource as IPlayer; switch(cmd) { case "help": player.Reply("Godrun commands: !help, !stats, !kills, !wins, !score"); break; case "kills": player.Reply("You got " + getPlayerData(player).Kills + " kill!"); break; case "wins": player.Reply("You got " + getPlayerData(player).Wins + " wins!"); break; case "score": player.Reply("Your score is " + getPlayerData(player).Score ); break; case "stats": player.Reply("Your wins: " + getPlayerData(player).Wins); player.Reply("Your kills: " + getPlayerData(player).Kills); player.Reply("Your score: " + getPlayerData(player).Score); break; } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (cmdSource is IPlayer) { IPlayer player = (IPlayer)cmdSource; switch (cmd) { case "maze": { GenMaze(); break; } case "setcake": { cake = new BlockWithPos(player.BlockX, player.BlockY, new NormalBlock(337, 0)); bot.Room.setBlock(player.BlockX, player.BlockY, new NormalBlock(337, 0)); SaveData(); } break; case "sethologram": { hologram = new BlockWithPos(player.BlockX, player.BlockY, new NormalBlock(397, 0)); bot.Room.setBlock(player.BlockX, player.BlockY, new NormalBlock(397, 0)); SaveData(); } break; case "eatme": MakeZombie(player); break; case "zombie": zombies.Add(new Zombie(player.BlockX, player.BlockY, bot)); break; } } }
public void PrintFurnitures(ICmdSource receiver) { string s = "You can place: "; foreach (var pair in furnitureTypes) s += pair.Key + ", "; s = s.Remove(s.Length - 3, 2); receiver.Reply(s); }
public override void onCommand(string cmd, string[] args, ICmdSource sender) { if (sender is Player) { Player player = (Player)sender; switch (cmd) { case "clearworld": { if (bot.Room.IsOwner && player.IsOp) bot.Connection.Send("clear"); else sender.Reply("You are not the owner."); break; } case "loadworld": { if (bot.Room.IsOwner && player.IsOp) bot.ChatSayer.Command("/loadlevel"); else sender.Reply("You are not the owner."); break; } case "saveworld": { if (bot.Room.IsOwner && player.IsOp) bot.Connection.Send("save"); else sender.Reply("You are not the owner."); break; } case "name": { if (bot.Room.IsOwner && player.IsOp) { string name = ""; if(args != null && args.Length > 0) { for (int i = 0; i < args.Length; i++) name += args[i] + " "; } bot.Connection.Send("name", name); } else sender.Reply("You are not the owner."); break; } } } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { switch(cmd) { case "test": { if (cmdSource is IPlayer) blockPlayers.Add(((Player)cmdSource).Id); else cmdSource.Reply("You are not a player."); break; } case "testf": case "testb": { int layer = 0; ; if (cmd == "testb") layer = 1; if (cmdSource is IPlayer) { IPlayer player = (IPlayer)cmdSource; int x = player.BlockX; int y = player.BlockY; IBlock block = bot.Room.getBlock(layer, x, y); if (block != null) player.Reply("ID:" + block.Id + " X:" + x + " Y:" + y + " Placer:" + (block.Placer != null ? block.Placer.Name : "undefined")); else player.Reply("That is a null block, not good!"); } else cmdSource.Reply("You are not a player."); break; } } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (cmdSource is IPlayer && (IPlayer)cmdSource != null) { IPlayer player = (IPlayer)cmdSource; DigPlayer digPlayer = DigPlayer.FromPlayer(player); AddUnsavedPlayer(player); switch (cmd) { case "dynamite": { ItemDynamite dynamite = new ItemDynamite(); dynamite.Placer = digPlayer; if (digPlayer.Inventory.RemoveItem(dynamite, 1) || player.IsGod) { bot.ChatSayer.Say(player.Name + " has placed a big barrel of dynamite! Hide!!"); bot.Room.setBlock(player.BlockX, player.BlockY, new NormalBlock(163, 0)); dynamites.Add( new Pair<BlockPos, ItemDynamite>(new BlockPos(0, player.BlockX, player.BlockY), dynamite) ); } else player.Reply("You have no dynamite! Buy it at the shop."); } break; case "dig": case "help": case "commands": case "digcommands": player.Reply("Here are the commands: !xp, !level, !inventory, !xpleft, !buy, !sell, !money, !levelforores, !save"); break; case "levelforores": { string total = ""; foreach (Ore ore in ItemManager.GetOres()) { total += ore.Name + ": " + ore.LevelRequired + (ItemManager.GetOres().Last().Name.Equals(ore.Name) ? "" : ", "); } player.Reply(total); } break; case "generate": if (player.IsOp) { int seed = -1; if (args.Length >= 1) { Int32.TryParse(args[0], out seed); } if (seed == -1) seed = random.Next(); bot.ChatSayer.Say("Generating new map with seed " + seed + "."); digHardness = new float[bot.Room.Width, bot.Room.Height]; Generate(bot.Room.Width, bot.Room.Height, seed); } break; case "worm": if (player.IsOp) { zombies.SpawnZombie(player.BlockX, player.BlockY); player.Reply("Worm spawned."); } break; case "givexp": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int xp = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) receiver.SetMetadata("digplayer", new DigPlayer(receiver)); DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digXp += xp; AddUnsavedPlayer(receiver); } else player.Reply("That player doesn't exist."); } else player.Reply("Usage: !givexp <player> <xp>"); break; case "setxp": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int xp = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) receiver.SetMetadata("digplayer", new DigPlayer(receiver)); DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digXp = xp; AddUnsavedPlayer(receiver); } else player.Reply("That player doesn't exist."); } else player.Reply("Usage: !setxp <player> <xp>"); break; case "givemoney": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int money = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) receiver.SetMetadata("digplayer", new DigPlayer(receiver)); DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digMoney += money; AddUnsavedPlayer(receiver); } else player.Reply("That player doesn't exist."); } else player.Reply("Usage: !givemoney <player> <money>"); break; case "setmoney": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int money = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) receiver.SetMetadata("digplayer", new DigPlayer(receiver)); DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digMoney = money; AddUnsavedPlayer(receiver); } else player.Reply("That player doesn't exist."); } else player.Reply("Usage: !setmoney <player> <money>"); break; case "xp": player.Reply("XP: " + digPlayer.digXp); break; case "xpleft": player.Reply("You need " + (digPlayer.xpRequired_ - digPlayer.digXp).ToString() + " XP for level " + (digPlayer.digLevel + 1).ToString()); break; case "level": player.Reply("Level: " + digPlayer.digLevel); break; case "inventory": player.Reply(digPlayer.Inventory.ToString()); break; case "save": player.Reply("Saved!"); digPlayer.Save(); break; case "setshop": if (player.IsOp) { Shop.SetLocation(player.BlockX, player.BlockY); player.Reply("Shop set at X:" + player.BlockX + " Y:" + player.BlockY); } break; case "money": player.Reply("Money: " + digPlayer.digMoney); break; case "buy": if (Shop.IsPlayerClose(player)) { if (args.Length >= 1) { string itemName = args[0].ToLower(); int amount = 1; if (args.Length >= 2) { if (!int.TryParse(args[1], out amount)) amount = 1; } if (amount < 1) { player.Reply("You can't buy a negative amount of items."); break; } Shop.BuyItem(digPlayer, itemName, amount); } else { player.Reply("Usage: !buy <item> [amount=1]"); Shop.BuyItem(digPlayer, "", 0); } } else player.Reply("You aren't near the shop."); break; case "sell": if (Shop.IsPlayerClose(player)) { if (args.Length >= 1) { string itemName = args[0].ToLower(); int amount = 1; if (args.Length >= 2) { if (!int.TryParse(args[1], out amount)) amount = 1; } if (amount < 1) { player.Reply("You can't buy a negative amount of items."); break; } Shop.SellItem(digPlayer, itemName, amount); } else { player.Reply("Usage: !sell <item> [amount=1]"); Shop.SellItem(digPlayer, "", 0); } } else player.Reply("You aren't near the shop."); break; } } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { lock (subBots) { foreach (ASubBot subBot in subBots.Values) { if (subBot.Enabled) subBot.onCommand(cmd, args, cmdSource); } } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (cmdSource is IPlayer) { IPlayer player = (IPlayer)cmdSource; if (!player.IsOp) return; } IPlayer arg = null; if (args.Length >= 1 && bot.Room.getPlayer(args[0].Trim().ToLower()) != null) { arg = bot.Room.getPlayer(args[0].Trim().ToLower()); } if (arg != null) { switch (cmd) { case "protect": if (args.Length >= 1) { lock (protectedPlayers) { if (!protectedPlayers.Contains(arg)) protectedPlayers.Add(arg); } } break; case "unprotect": if (args.Length >= 1) { lock (protectedPlayers) { if (protectedPlayers.Contains(arg)) protectedPlayers.Remove(arg); } } break; case "disableedit": if (args.Length >= 1) { lock (disabledPlayers) { if (!disabledPlayers.Contains(arg)) disabledPlayers.Add(arg); } } break; case "enableedit": if (args.Length >= 1) { lock (disabledPlayers) { if (disabledPlayers.Contains(arg)) disabledPlayers.Remove(arg); } } break; case "disabletroll": if (args.Length >= 1) { lock (disabledPlayers) { if (!disabledPlayers.Contains(arg)) disabledPlayers.Add(arg); } } goto case "rollbackpl"; case "rollbackplayer": case "rollbackpl": Rollback(bot, (IBlock block, IBlock oldBlock) => { if (block.Placer != null) { if (block.Placer.Name == arg.Name) { if (oldBlock == null || oldBlock.Placer == null || oldBlock.Placer.Name != arg.Name) return true; } } return false; }); break; case "repair": Rollback(bot, (IBlock block, IBlock oldBlock) => { if(oldBlock != null && block.Placer != oldBlock.Placer) { if (oldBlock.Placer != null && oldBlock.Placer.Name == arg.Name) return true; } return false; }); break; } } //else // cmdSource.Reply("Could not find player"); switch (cmd) { case "repair": break; case "repairprotected": break; case "cleantroll": break; } }
public abstract void onCommand(string cmd, string[] args, ICmdSource cmdSource);
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (cmdSource is Player && ((Player)cmdSource).IsOp) { Player player = (Player)cmdSource; if (player.GetMetadata("editregion") == null) player.SetMetadata("editregion", new EditRegion()); EditRegion region = (EditRegion)player.GetMetadata("editregion"); BeginRecord(player); switch (cmd) { case "fill": if (args.Length >= 1) { int id = -1; int layer = 0; int.TryParse(args[0], out id); if (args.Length >= 2) int.TryParse(args[1], out layer); if (id != -1) { layer = (id >= 500 && id < 1000) ? 1 : layer; EditRegion region2 = new EditRegion(); region2.FirstCorner = new Point(1, 1); region2.SecondCorner = new Point(bot.Room.Width - 2, bot.Room.Height - 2); SetRegion(bot, region2, new NormalBlock(id, layer)); } else bot.ChatSayer.Say(player.Name + ": Invalid ID."); } else bot.ChatSayer.Say(player.Name + ": Usage: !fill <id> [layer]"); break; case "undo": if (player.HasMetadata("worldedithistory") && player.HasMetadata("worldedithistoryindex")) { List<IEditChange> history = (List<IEditChange>)player.GetMetadata("worldedithistory"); int index = (int)player.GetMetadata("worldedithistoryindex"); if (index >= 0 && index <= history.Count - 1 && (index != 0 || !history[index].IsUndone)) { history[index].Undo(blockDrawer); if (index - 1 >= 0) player.SetMetadata("worldedithistoryindex", ((int)player.GetMetadata("worldedithistoryindex")) - 1); } else player.Reply("Nothing left to undo."); } else player.Reply("No history."); break; case "redo": if (player.HasMetadata("worldedithistory") && player.HasMetadata("worldedithistoryindex")) { List<IEditChange> history = (List<IEditChange>)player.GetMetadata("worldedithistory"); int index = (int)player.GetMetadata("worldedithistoryindex"); if (index <= history.Count - 1 && (index != history.Count - 1 || !history[index].IsRedone)) { if (history.Count - 1 >= index + 1) history[index + 1].Redo(blockDrawer); else history[index].Redo(blockDrawer); if (index + 1 <= history.Count - 1) player.SetMetadata("worldedithistoryindex", ((int)player.GetMetadata("worldedithistoryindex")) + 1); } else player.Reply("Nothing left to redo."); } else player.Reply("No history."); break; case "set": if (region.Set) { if (args.Length >= 1) { int id = -1; int.TryParse(args[0], out id); if (id != -1) { int layer = ((id >= 500 && id < 1000) || id == 1337 ? 1 : 0); if (args.Length >= 2) int.TryParse(args[1], out layer); SetRegion(bot, region, new NormalBlock(id, layer)); } else bot.ChatSayer.Say(player.Name + ": Invalid ID."); } else bot.ChatSayer.Say(player.Name + ": Usage: !set <id> [layer]"); } else player.Send("You have to set a region."); break; case "replace": if (region.Set) { int blockToReplace; int blockToReplaceWith; if (args.Length >= 2 && int.TryParse(args[0], out blockToReplace) && int.TryParse(args[1], out blockToReplaceWith)) { SetRegion(bot, region, new NormalBlock(blockToReplaceWith), new NormalBlock(blockToReplace)); } else bot.ChatSayer.Say(player.Name + ": Usage: !replace <from> <to>"); } else player.Send("You have to set a region."); break; case "replacenear": { int range; int blockToReplace; int blockToReplaceWith; if (args.Length >= 3 && int.TryParse(args[0], out range) && int.TryParse(args[1], out blockToReplace) && int.TryParse(args[2], out blockToReplaceWith)) { EditRegion closeRegion = new EditRegion(); closeRegion.FirstCorner = new Point(player.BlockX - range, player.BlockY - range); closeRegion.SecondCorner = new Point(player.BlockX + range, player.BlockY + range); SetRegion(bot, closeRegion, new NormalBlock(blockToReplaceWith), new NormalBlock(blockToReplace)); } else bot.ChatSayer.Say(player.Name + ": Usage: !replacenear <range> <from> <to>"); } break; case "copy": if (region.FirstCornerSet) { BlockMap selection = new BlockMap(bot, region.Width, region.Height); foreach (Point pos in region) { selection.setBlock(pos.X - region.FirstCorner.X, pos.Y - region.FirstCorner.Y, bot.Room.getBlock(1, pos.X, pos.Y)); selection.setBlock(pos.X - region.FirstCorner.X, pos.Y - region.FirstCorner.Y, bot.Room.getBlock(0, pos.X, pos.Y)); } player.SetMetadata("selection", selection); } else player.Send("You have to place a region block."); break; case "paste": if (region.FirstCornerSet) { BlockMap selection = (BlockMap)player.GetMetadata("selection"); if (selection != null) { for (int x = 0; x < selection.Width; x++) { for (int y = 0; y < selection.Height; y++) { int blax = x + region.FirstCorner.X; int blay = y + region.FirstCorner.Y; RecordSetBlock(blax, blay, selection.getBackgroundBlock(x, y)); RecordSetBlock(blax, blay, selection.getForegroundBlock(x, y)); } } } else player.Send("You have to copy first."); } else player.Send("You have to place a region block."); break; case "line": { int tempBlock; if (args.Length >= 1 && int.TryParse(args[0], out tempBlock)) { if (region.Set) DrawLine(region.FirstCorner.X, region.FirstCorner.Y, region.SecondCorner.X, region.SecondCorner.Y, new NormalBlock(tempBlock, (tempBlock >= 500 && tempBlock < 1000) ? 1 : 0)); else player.Reply("You have to set a region."); } else player.Reply("Usage: !line <block>"); } break; case "circle": if (region.FirstCornerSet) { int radius; int block; if (args.Length >= 2 && int.TryParse(args[0], out radius) && int.TryParse(args[1], out block)) { DrawCircle(region.FirstCorner.X, region.FirstCorner.Y, radius, new NormalBlock(block, (block >= 500 && block < 1000) ? 1 : 0)); } else player.Send("Usage: !circle <radius> <block>"); } else player.Send("You have to place a region block."); break; case "square": if (region.FirstCornerSet) { int radius; int block; if (args.Length >= 2 && int.TryParse(args[0], out radius) && int.TryParse(args[1], out block)) { for (int x = region.FirstCorner.X - radius; x <= region.FirstCorner.X + radius; x++) { for (int y = region.FirstCorner.Y - radius; y <= region.FirstCorner.Y + radius; y++) { RecordSetBlock(x, y, new NormalBlock(block, (block >= 500 && block < 1000) ? 1 : 0)); } } } else player.Send("Usage: !square <radius> <block>"); } else player.Send("You have to place a region block."); break; case "fillexpand": { int toReplace = 0; int toReplaceLayer = 0; int toReplaceWith = 0; if (args.Length == 1) { if (!int.TryParse(args[0], out toReplaceWith)) { player.Reply("Usage: !fillexpand <from=0> <to>"); return; } } else if (args.Length >= 2) { if (!int.TryParse(args[1], out toReplaceWith) || !int.TryParse(args[0], out toReplace)) { player.Reply("Usage: !fillexpand <from=0> <to>"); return; } } else { player.Reply("Usage: !fillexpand <from=0> <to>"); break; } if (toReplace >= 500 && toReplace < 1000) toReplaceLayer = 1; IBlock startBlock = bot.Room.BlockMap.getBlock(toReplaceLayer, player.BlockX, player.BlockY); if (startBlock.Id == toReplace) { int total = 0; List<Point> closeBlocks = new List<Point> { new Point(1, 0), new Point(-1, 0), new Point(0, 1), new Point(0, -1) }; Queue<Point> blocksToCheck = new Queue<Point>(); List<Point> blocksToFill = new List<Point>(); blocksToCheck.Enqueue(new Point(player.BlockX, player.BlockY)); while (blocksToCheck.Count > 0) { Point parent = blocksToCheck.Dequeue(); for (int i = 0; i < closeBlocks.Count; i++) { Point current = new Point(closeBlocks[i].X + parent.X, closeBlocks[i].Y + parent.Y); IBlock currentBlock = bot.Room.BlockMap.getBlock(toReplaceLayer, current.X, current.Y); if (currentBlock.Id == toReplace && !blocksToCheck.Contains(current) && !blocksToFill.Contains(current) && current.X >= 0 && current.Y >= 0 && current.X <= bot.Room.Width && current.Y <= bot.Room.Height) { blocksToFill.Add(current); blocksToCheck.Enqueue(current); total++; } } } bot.ChatSayer.Say("total blocks: " + total + ". Filling.."); int layer = 0; if (toReplaceWith >= 500 && toReplaceWith < 1000) layer = 1; foreach (Point p in blocksToFill) { RecordSetBlock((int)p.X, (int)p.Y, new NormalBlock(toReplaceWith, layer)); } } } break; case "stop": blockDrawer.Stop(); break; case "start": blockDrawer.Start(); break; case "clearrepairblocks": //TODO: add function to blockdrawer break; case "write": if (region.FirstCornerSet) { int drawBlock = 0; if (args.Length >= 2 && int.TryParse(args[0], out drawBlock)) { List<char[]> letters = new List<char[]>(); foreach (string str in args.Skip(1)) letters.Add(str.ToLower().ToCharArray()); int spacing = 0; foreach (char[] array in letters) { for (int letterindex = 0; letterindex < array.Length; letterindex++) { string l = array[letterindex].ToString(); if (l != "_") { WriteLetter(spacing, l, region.FirstCorner.X, region.FirstCorner.Y, new NormalBlock(drawBlock, (drawBlock >= 500 && drawBlock < 1000) ? 1 : 0)); } if (l == @"@") spacing += 4; else if (l == "m" || l == "w" || l == "#" || l == "&") spacing += 2; else if (l == "n" || l == "%" || l == @"/" || l == @"\") spacing += 1; if (l == "|" || l == "." || l == "," || l == "'" || l == "!") { spacing -= 2; } else if (l == ",") { spacing -= 1; } spacing += 4; } spacing += array.Length; } } else player.Reply("Usage: !write <block> <text..>"); } else player.Reply("You have to set the first corner."); break; case "border": { int thickness; int block; if (args.Length >= 2 && int.TryParse(args[0], out thickness) && int.TryParse(args[1], out block)) { IBlock baseBlock = (bot.Room.getBlock(1, player.BlockX, player.BlockY).Id == 0 ? bot.Room.getBlock(0, player.BlockX, player.BlockY) : bot.Room.getBlock(0, player.BlockX, player.BlockY)); int layer = baseBlock.Layer; int x = player.BlockX; int y = player.BlockY; List<Point> closeBlocks = new List<Point> { new Point(1, 0), new Point(0, -1), new Point(-1, 0), new Point(0, 1) }; HashSet<Point> previouslySetBlocks = new HashSet<Point>(); for (int currentThickness = 0; currentThickness < thickness; currentThickness++) { int xx = x; while (bot.Room.getBlock(layer, xx + 1, y).Id == baseBlock.Id && !previouslySetBlocks.Contains(new Point(xx + 1, y)) && xx < 2000) xx++; List<Point> blocksToSet = new List<Point>(); HashSet<Point> blocksChecked = new HashSet<Point>(); Queue<Point> blocksToCheck = new Queue<Point>(); Point startPoint = new Point(xx, y); blocksToCheck.Enqueue(startPoint); blocksToSet.Add(startPoint); while (blocksToCheck.Count > 0) { Point parent = blocksToCheck.Dequeue(); for (int i = 0; i < closeBlocks.Count; i++) { Point current = new Point(closeBlocks[i].X + parent.X, closeBlocks[i].Y + parent.Y); IBlock currentBlock = bot.Room.BlockMap.getBlock(layer, current.X, current.Y); if (currentBlock.Id == baseBlock.Id && !previouslySetBlocks.Contains(current) && !blocksToCheck.Contains(current) && !blocksChecked.Contains(current)) { blocksToCheck.Enqueue(current); } else if ((currentBlock.Id != baseBlock.Id || previouslySetBlocks.Contains(current)) && !blocksToSet.Contains(parent)) { blocksToSet.Add(parent); } blocksChecked.Add(parent); } } foreach (Point p in blocksToSet) { RecordSetBlock(p.X, p.Y, new NormalBlock(block, (block >= 500 && block < 1000) ? 1 : 0)); previouslySetBlocks.Add(p); } } } else player.Reply("Usage: !border <thickness> <block>"); } break; case "worldborder": { int block; if (int.TryParse(args[0], out block)) { for (int x = 0; x < bot.Room.Width; x++) { for (int y = 0; y < bot.Room.Height; y++) { if (bot.Room.BlockMap.isOnBorder(x, y)) RecordSetBlock(x, y, new NormalBlock(block)); } } } else player.Reply("Usage: !worldborder <block>"); } break; default: return; } EndRecord(player); } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { switch (cmd) { case "loadhouses": if (cmdSource is IPlayer) { IPlayer player = cmdSource as IPlayer; if (player.IsOp) houseManager.Load(); } break; case "helphouse": case "househelp": if (cmdSource is IPlayer) { IPlayer player = cmdSource as IPlayer; player.Send("House commands: !houseinfo, !build, !finishhouse, !edithouse, !destroyhouse, !place, !trust, !untrust, !whoistrusted"); } break; case "deletehouse": case "removehouse": case "destroyhouse": if (cmdSource is IPlayer) { IPlayer builder = cmdSource as IPlayer; houseManager.DestroyHouse(builder); } break; case "changehouse": case "edithouse": if (cmdSource is IPlayer) { IPlayer builder = cmdSource as IPlayer; houseManager.EditHouse(builder); } break; case "buildhouse": case "build": if (cmdSource is IPlayer) { IPlayer builder = cmdSource as IPlayer; if (args.Count() >= 1) { int width = 12; int height = 12; int x = builder.BlockX - width; int y = builder.BlockY - height; string houseType = args[0]; if (houseManager.BuildHouse(builder, houseType)) builder.Reply("say !finishhouse when you're done!"); } else houseManager.ShowHouses(builder); } break; case "placefurniture": case "placef": case "place": if (cmdSource is IPlayer) { IPlayer player = cmdSource as IPlayer; if (args.Length >= 1) { string furnitureType = args[0]; if (furnitureManager.GetFurnitureType(furnitureType) == null) { player.Reply("That is not a valid furniture."); return; } Furniture furniture = (Furniture)Activator.CreateInstance(furnitureManager.GetFurnitureType(furnitureType).GetType(), new object[] {-1, -1}); if (furnitureType != null) { House house = houseManager.FindHouse(player.BlockX, player.BlockY); if (house != null) { if (house.IsValidFurniturePosition(player.BlockX, player.BlockY)) { BlockPos pos = new BlockPos(0, player.BlockX, player.BlockY); furniture.X = pos.X; furniture.Y = pos.Y; bot.Room.setBlock(pos.X, pos.Y, furniture.getBlock(bot, player, house)); if (house.Furniture.ContainsKey(pos)) { if (house.Furniture[pos].Type != "empty") player.Reply("Replaced old furniture."); else player.Reply("Furniture placed."); house.Furniture[pos] = furniture; } else { house.Furniture.Add(pos, furniture); player.Reply("Furniture placed."); } houseManager.Save(); } else player.Reply("You can't place furniture there."); } else player.Reply("You must be inside your house to place furniture!"); } else { furnitureManager.PrintFurnitures(player); } } else { furnitureManager.PrintFurnitures(player); //string s = "You can place: "; //foreach (var v in FurnitureManager.FurnitureTypes) // s += v.Key + ", "; //s = s.Remove(s.Length - 3, 2); //player.Reply(s); } } break; case "finishouse": case "finishhouse": if (cmdSource is IPlayer) { IPlayer builder = cmdSource as IPlayer; houseManager.FinishHouse(builder); } break; case "houseinfo": if (cmdSource is IPlayer && args.Length >= 1) { IPlayer player = cmdSource as IPlayer; HouseType houseType = houseManager.GetHouseType(args[0]); if (houseType == null) { houseManager.ListHouseTypes(player); } else { IInventoryContainer inventoryPlayer = (IInventoryContainer)player.GetMetadata("digplayer"); player.Reply(houseType.Name + " " + "Size: " + houseType.Width + "*" + houseType.Height); houseType.PrintCost(player, inventoryPlayer.Inventory); } } break; case "trust": if (cmdSource is IPlayer && args.Length >= 1) { HousePlayer housePlayer = HousePlayer.Get(cmdSource as IPlayer); housePlayer.Trust(args[0]); housePlayer.PrintTrusted(); } break; case "untrust": if (cmdSource is IPlayer && args.Length >= 1) { HousePlayer housePlayer = HousePlayer.Get(cmdSource as IPlayer); if (housePlayer.IsTrusted(args[0])) { housePlayer.Untrust(args[0]); cmdSource.Reply("You no longer trust" + args[0] + "."); housePlayer.PrintTrusted(); } else { cmdSource.Reply("You never trusted " + args[0] + "."); } } break; case "whoistrusted": if (cmdSource is IPlayer && args.Length >= 1) { HousePlayer.Get(cmdSource as IPlayer).PrintTrusted(); } break; default: break; } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (cmdSource is Player && ((Player)cmdSource).IsOp) { Player player = (Player)cmdSource; switch (cmd) { case "reset": bot.Connection.Send("say", "/reset"); break; case "clear": bot.Connection.Send("clear"); break; case "load": bot.Connection.Send("say", "/loadlevel"); break; case "setcode": { if (args.Length > 0) { bot.Connection.Send("key", args[0]); } else player.Reply("Usage: !setcode <code>"); } break; case "title": { if (args.Length > 0) { string title = ""; foreach (string s in args) title += s + " "; bot.Connection.Send("name", title); } else player.Reply("Usage: !title <title>"); } break; case "visible": { if (args.Length > 0) { bot.Connection.Send("say", "/visible " + args[0]); } else player.Reply("Usage: !visible <true/false>"); } break; case "kick": { if (args.Length > 0) { string reason = ""; if (args.Length > 1) { for (int i = 1; i < args.Length; i++) reason += args[i] + " "; } bot.Connection.Send("say", "/kick " + args[0] + " " + reason); } else player.Reply("Usage: !kick <player>"); } break; } } }
public override void onCommand(string cmd, string[] args, ICmdSource cmdSource) { if (cmdSource is IPlayer && (IPlayer)cmdSource != null) { IPlayer player = (IPlayer)cmdSource; DigPlayer digPlayer = DigPlayer.FromPlayer(player); AddUnsavedPlayer(player); switch (cmd) { case "dynamite": { ItemDynamite dynamite = new ItemDynamite(); dynamite.Placer = digPlayer; if (digPlayer.Inventory.RemoveItem(dynamite, 1) || player.IsGod) { bot.ChatSayer.Say(player.Name + " has placed a big barrel of dynamite! Hide!!"); bot.Room.setBlock(player.BlockX, player.BlockY, new NormalBlock(163, 0)); dynamites.Add( new Pair <BlockPos, ItemDynamite>(new BlockPos(0, player.BlockX, player.BlockY), dynamite) ); } else { player.Reply("You have no dynamite! Buy it at the shop."); } } break; case "dig": case "help": case "commands": case "digcommands": player.Reply("Here are the commands: !xp, !level, !inventory, !xpleft, !buy, !sell, !money, !levelforores, !save"); break; case "levelforores": { string total = ""; foreach (Ore ore in ItemManager.GetOres()) { total += ore.Name + ": " + ore.LevelRequired + (ItemManager.GetOres().Last().Name.Equals(ore.Name) ? "" : ", "); } player.Reply(total); } break; case "generate": if (player.IsOp) { int seed = -1; if (args.Length >= 1) { Int32.TryParse(args[0], out seed); } if (seed == -1) { seed = random.Next(); } bot.ChatSayer.Say("Generating new map with seed " + seed + "."); digHardness = new float[bot.Room.Width, bot.Room.Height]; Generate(bot.Room.Width, bot.Room.Height, seed); } break; case "worm": if (player.IsOp) { zombies.SpawnZombie(player.BlockX, player.BlockY); player.Reply("Worm spawned."); } break; case "givexp": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int xp = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) { receiver.SetMetadata("digplayer", new DigPlayer(receiver)); } DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digXp += xp; AddUnsavedPlayer(receiver); } else { player.Reply("That player doesn't exist."); } } else { player.Reply("Usage: !givexp <player> <xp>"); } break; case "setxp": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int xp = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) { receiver.SetMetadata("digplayer", new DigPlayer(receiver)); } DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digXp = xp; AddUnsavedPlayer(receiver); } else { player.Reply("That player doesn't exist."); } } else { player.Reply("Usage: !setxp <player> <xp>"); } break; case "givemoney": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int money = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) { receiver.SetMetadata("digplayer", new DigPlayer(receiver)); } DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digMoney += money; AddUnsavedPlayer(receiver); } else { player.Reply("That player doesn't exist."); } } else { player.Reply("Usage: !givemoney <player> <money>"); } break; case "setmoney": if (player.IsOp && args.Length >= 2) { IPlayer receiver = bot.Room.getPlayer(args[0]); if (receiver != null) { int money = Int32.Parse(args[1]); if (!receiver.HasMetadata("digplayer")) { receiver.SetMetadata("digplayer", new DigPlayer(receiver)); } DigPlayer receiverDigPlayer = (DigPlayer)receiver.GetMetadata("digplayer"); receiverDigPlayer.digMoney = money; AddUnsavedPlayer(receiver); } else { player.Reply("That player doesn't exist."); } } else { player.Reply("Usage: !setmoney <player> <money>"); } break; case "xp": player.Reply("XP: " + digPlayer.digXp); break; case "xpleft": player.Reply("You need " + (digPlayer.xpRequired_ - digPlayer.digXp).ToString() + " XP for level " + (digPlayer.digLevel + 1).ToString()); break; case "level": player.Reply("Level: " + digPlayer.digLevel); break; case "inventory": player.Reply(digPlayer.Inventory.ToString()); break; case "save": player.Reply("Saved!"); digPlayer.Save(); break; case "setshop": if (player.IsOp) { Shop.SetLocation(player.BlockX, player.BlockY); player.Reply("Shop set at X:" + player.BlockX + " Y:" + player.BlockY); } break; case "money": player.Reply("Money: " + digPlayer.digMoney); break; case "buy": if (Shop.IsPlayerClose(player)) { if (args.Length >= 1) { string itemName = args[0].ToLower(); int amount = 1; if (args.Length >= 2) { if (!int.TryParse(args[1], out amount)) { amount = 1; } } if (amount < 1) { player.Reply("You can't buy a negative amount of items."); break; } Shop.BuyItem(digPlayer, itemName, amount); } else { player.Reply("Usage: !buy <item> [amount=1]"); Shop.BuyItem(digPlayer, "", 0); } } else { player.Reply("You aren't near the shop."); } break; case "sell": if (Shop.IsPlayerClose(player)) { if (args.Length >= 1) { string itemName = args[0].ToLower(); int amount = 1; if (args.Length >= 2) { if (!int.TryParse(args[1], out amount)) { amount = 1; } } if (amount < 1) { player.Reply("You can't buy a negative amount of items."); break; } Shop.SellItem(digPlayer, itemName, amount); } else { player.Reply("Usage: !sell <item> [amount=1]"); Shop.SellItem(digPlayer, "", 0); } } else { player.Reply("You aren't near the shop."); } break; } } }