//Dictionary<int, Point> firstGodPositions = new Dictionary<int, Point>();
        public override void onMessage(object sender, PlayerIOClient.Message m, Bot bot)
        {
            switch (m.Type)
            {
            case "add":
            {
                string name = m.GetString(1);
                //bot.connection.Send("say", "/giveedit " + name);
            }
            break;

            /*case "god":
             *  {
             *      int id = m.GetInt(0);
             *      bool god = m.GetBoolean(1);
             *      if (bot.playerList.ContainsKey(id))
             *      {
             *          Player p = bot.playerList[id];
             *          if (p.name != "gustav9797" && p.name != "ostkaka")
             *          {
             *              if (god)
             *              {
             *                  if (!firstGodPositions.ContainsKey(id))
             *                      firstGodPositions.Add(id, new Point(p.blockX, p.blockY));
             *                  string name = bot.playerList[id].name;
             *                  bot.connection.Send("say", "/removeedit " + name);
             *                  bot.connection.Send("say", "/giveedit " + name);
             *              }
             *              else
             *              {
             *                  if (firstGodPositions.ContainsKey(id))
             *                  {
             *                      bot.connection.Send("say", "/teleport " + p.name + " " + firstGodPositions[id].X + " " + firstGodPositions[id].Y);
             *                      firstGodPositions.Remove(id);
             *                  }
             *              }
             *          }
             *      }
             *  }
             *  break;*/
            case "init":
                digHardness = new float[bot.room.Width, bot.room.Height];
                resetDigHardness();
                break;

            case "reset":
                digHardness = new float[bot.room.Width, bot.room.Height];
                resetDigHardness();
                break;

            case "m":
            {
                int    userId     = m.GetInt(0);
                float  playerPosX = m.GetFloat(1);
                float  playerPosY = m.GetFloat(2);
                float  speedX     = m.GetFloat(3);
                float  speedY     = m.GetFloat(4);
                float  modifierX  = m.GetFloat(5);
                float  modifierY  = m.GetFloat(6);
                float  horizontal = m.GetFloat(7);
                float  vertical   = m.GetFloat(8);
                int    Coins      = m.GetInt(9);
                int    blockX     = (int)(playerPosX / 16 + 0.5);
                int    blockY     = (int)(playerPosY / 16 + 0.5);
                int    blockId    = (bot.room.getBlock(0, blockX + (int)horizontal, blockY + (int)vertical).blockId);
                Player player;

                lock (bot.playerList)
                {
                    if (!bot.playerList.ContainsKey(userId))
                    {
                        return;
                    }
                    else
                    {
                        player = bot.playerList[userId];
                    }
                }

                if (isDigable(blockId))
                {
                    if (player.digRange > 1)
                    {
                        for (int x = (horizontal == 1) ? -1 : -player.digRange + 1; x < ((horizontal == -1) ? 2 : player.digRange); x++)
                        {
                            for (int y = (vertical == 1) ? -1 : -player.digRange + 1; y < ((vertical == -1) ? 2 : player.digRange); y++)
                            {
                                float distance = (float)Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
                                if (distance <= 1.41421357 * (player.digRange - 1) || distance < 1.4142)
                                {
                                    int cx = blockX + x + (int)Math.Ceiling(horizontal);
                                    int cy = blockY + y + (int)Math.Ceiling(vertical);
                                    if (player.hasPickaxe())
                                    {
                                        PickaxeItem pick = player.Pickaxe;
                                        if (pick.Durability >= digHardness[cx, cy])
                                        {
                                            DigBlock(
                                                cx,
                                                cy,
                                                player,
                                                (player.digRange - distance) * player.digStrength,
                                                false);
                                        }
                                    }
                                }
                            }
                        }
                        return;
                    }
                }
                if (player.hasPickaxe())
                {
                    if (horizontal == 0 || vertical == 0)
                    {
                        DigBlock(blockX + (int)horizontal, blockY + (int)vertical, player, player.digStrength, true);
                    }
                    blockId = bot.room.getBlock(0, blockX, blockY).blockId;
                    DigBlock(blockX, blockY, player, player.digStrength, true);
                }
            }
            break;

            case "b":
            {
                int layer   = m.GetInt(0);
                int x       = m.GetInt(1);
                int y       = m.GetInt(2);
                int blockId = m.GetInt(3);
                resetBlockHardness(x, y, blockId);
            }
            break;
            }
        }
Exemplo n.º 2
0
        //string name;

        public Player(PlayerIOClient.Message m)
            : base(m.GetInt(0), m.GetString(1).ToLower(), m.GetInt(2), m.GetFloat(3), m.GetFloat(4), m.GetBoolean(5), m.GetBoolean(6), m.GetBoolean(7), m.GetInt(8), false, false, 0)
        {
        }
        public override void onMessage(PlayerIOClient.Message m)
        {
            switch (m.Type)
            {
            case "add":
            {
                IPlayer player = bot.Room.getPlayer(m.GetInt(0));
                if (player != null)
                {
                    player.SetMetadata("digplayer", new DigPlayer(player));
                }
            }
            break;

            case "init":
            case "reset":
                digHardness = new float[bot.Room.Width, bot.Room.Height];
                resetDigHardness();
                break;

            case "m":
            {
                int   userId     = m.GetInt(0);
                float playerPosX = m.GetFloat(1);
                float playerPosY = m.GetFloat(2);
                float speedX     = m.GetFloat(3);
                float speedY     = m.GetFloat(4);
                float modifierX  = m.GetFloat(5);
                float modifierY  = m.GetFloat(6);
                float horizontal = m.GetFloat(7);
                float vertical   = m.GetFloat(8);
                int   Coins      = m.GetInt(9);

                int blockX = (int)(playerPosX / 16 + 0.5);
                int blockY = (int)(playerPosY / 16 + 0.5);

                IPlayer player = bot.Room.getPlayer(userId);
                if (player == null || player.IsGod || player.IsMod)
                {
                    return;
                }

                if (!player.HasMetadata("digplayer"))
                {
                    player.SetMetadata("digplayer", new DigPlayer(player));
                }
                DigPlayer digPlayer = (DigPlayer)player.GetMetadata("digplayer");

                int digRange    = digPlayer.digRange;
                int digStrength = digPlayer.digStrength;

                int blockId = (bot.Room.getBlock(0, blockX + (int)horizontal, blockY + (int)vertical).Id);
                if (isDigable(blockId))                                //(blockId >= Skylight.BlockIds.Blocks.Sand.BROWN - 5 && blockId <= Skylight.BlockIds.Blocks.Sand.BROWN)
                {
                    if (digRange > 1)
                    {
                        for (int x = (horizontal == 1) ? -1 : -digRange + 1; x < ((horizontal == -1) ? 2 : digRange); x++)
                        {
                            for (int y = (vertical == 1) ? -1 : -digRange + 1; y < ((vertical == -1) ? 2 : digRange); y++)
                            {
                                float distance = (float)Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
                                if (distance <= 1.41421357 * (digRange - 1) || distance < 1.4142)
                                {
                                    DigBlock(blockX + x + (int)Math.Ceiling(horizontal), blockY + y + (int)Math.Ceiling(vertical), player, (digRange - distance) * digStrength, false);
                                }
                            }
                        }
                        AddUnsavedPlayer(player);
                        return;
                    }
                }
                {
                    if (horizontal == 0 || vertical == 0)
                    {
                        DigBlock(blockX + (int)horizontal, blockY + (int)vertical, player, digStrength, true);
                    }

                    blockId = bot.Room.getBlock(0, blockX, blockY).Id;
                    DigBlock(blockX, blockY, player, digStrength, true);
                    AddUnsavedPlayer(player);
                }
            }
            break;

            case "b":
            {
                int layer   = m.GetInt(0);
                int blockId = m.GetInt(3);
                int x       = m.GetInt(1);
                int y       = m.GetInt(2);

                if (layer == 0)
                {
                    resetBlockHardness(x, y, blockId);
                }
            }
            break;
            }
        }