Пример #1
0
        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;
            }
        }
Пример #2
0
 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;
         }
     }
 }
Пример #3
0
 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);
 }
Пример #4
0
 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;
                 }
         }
     }
 }
Пример #5
0
        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;
                    }
            }
        }
Пример #6
0
 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;
                }
            }
        }
Пример #8
0
 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);
         }
     }
 }
Пример #9
0
        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;
            }
        }
Пример #10
0
 public abstract void onCommand(string cmd, string[] args, ICmdSource cmdSource);
Пример #11
0
        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);
            }
        }
Пример #12
0
        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;
            }
        }
Пример #13
0
 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;
                }
            }
        }