예제 #1
0
        public override void onMessage(PlayerIOClient.Message m)
        {
            //MessageBox.Show(m.ToString());
            switch (m.Type)
            {
                case "init":
                    {
                        DeserializeInit(m);
                        bot.Connection.Send("init2");
                        bot.Connection.Send("init2");
                        break;
                    }
                case "reset":
                    {
                        LoadWorld(m, 0, width, height);
                        break;
                    }
                case "add":
                    {
                        int id = m.GetInt(0);
                        if (!players.ContainsKey(id))
                        {
                            Player player = new Player(bot, id, m.GetString(1), m.GetInt(2), m.GetDouble(3), m.GetDouble(4), m.GetBoolean(5), m.GetBoolean(6), m.GetBoolean(7), m.GetInt(8), m.GetBoolean(10), m.GetBoolean(11), m.GetInt(9));
                            //player.IsClubMember = m.GetBoolean(14);
                            players.Add(id, player);
                            if (!namePlayers.ContainsKey(player.Name))
                                namePlayers.Add(new KeyValuePair<string, List<IPlayer>>(player.Name, new List<IPlayer>()));
                            namePlayers[player.Name].Add(player);
                            if (disconnectedPlayers.ContainsKey(player.Name))
                                disconnectedPlayers.Remove(player.Name);
                        }
                        break;
                    }
                case "left":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            IPlayer left = players[id];
                            if (left != null)
                            {
                                if (!disconnectedPlayers.ContainsKey(left.Name))
                                    disconnectedPlayers.Add(new KeyValuePair<string, List<IPlayer>>(left.Name, new List<IPlayer>()));
                                disconnectedPlayers[left.Name].Add(left);
                            }
                            namePlayers.Remove(players[id].Name);
                            players.Remove(id);
                        }
                        break;
                    }
                case "m":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].X = m.GetDouble(1);
                            players[id].Y = m.GetDouble(2);
                            players[id].SpeedX = m.GetDouble(3);
                            players[id].SpeedY = m.GetDouble(4);
                            players[id].ModifierX = m.GetInt(5);
                            players[id].ModifierY = m.GetInt(6);
                            players[id].Horizontal = m.GetInt(7);
                            players[id].Vertical = m.GetInt(8);
                            players[id].Coins = m.GetInt(9);
                            players[id].Purple = m.GetBoolean(10);
                            //players[id].Levitation = m.GetBoolean(11);
                        }
                        break;
                    }
                case "c":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].Coins = m.GetInt(1);
                        }
                        break;
                    }
                case "k":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].HasCrown = true;
                        }
                        break;
                    }
                case "ks":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].HasCrownSilver = true;
                        }
                        break;
                    }
                case "face":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].Smiley = m.GetInt(1);
                        }
                        break;
                    }
                case "god":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].Respawn();
                            players[id].IsGod = m.GetBoolean(1);
                        }
                        break;
                    }
                case "mod":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                            players[id].IsMod = m.GetBoolean(1);

                        break;
                    }
                case "lostaccess":
                    {
                        hasAccess = false;
                        break;
                    }
                case "access":
                    {
                        hasAccess = true;
                        break;
                    }
                case "info":
                    break;
                case "p":
                    break;
                case "upgrade":
                    break;
                case "b":
                case "bc":
                case "bs":
                case "pt":
                case "lb":
                case "br":
                case "wp":
                case "ts":
                    HandleBlockPlace(m);
                    break;
                case "show":
                    {
                        string type = m.GetString(0);
                        switch (type)
                        {
                            case "red":
                                this.hideRed = false;
                                break;
                            case "green":
                                this.hideGreen = false;
                                break;
                            case "blue":
                                this.hideBlue = false;
                                break;
                            case "timedoor":
                                this.hideTimeDoor = false;
                                break;
                        }
                    }
                    break;
                case "hide":
                    {
                        string type = m.GetString(0);
                        switch (type)
                        {
                            case "red":
                                this.hideRed = true;
                                break;
                            case "green":
                                this.hideGreen = true;
                                break;
                            case "blue":
                                this.hideBlue = true;
                                break;
                            case "timedoor":
                                this.hideTimeDoor = true;
                                break;
                        }
                    }
                    break;
                case "allowpotions":
                    break;
                case "wu":
                    {
                        int id = m.GetInt(0);
                        if (isOwner && players.ContainsKey(id))
                        {
                            players[id].Reply("Thank you!");
                        }
                    }
                    break;
                case "w":
                    break;
                case "levelup":
                    {
                        int id = m.GetInt(0);
                        if (players.ContainsKey(id))
                        {
                            players[id].Level = m.GetInt(1);
                        }
                    }
                    break;
                case "write":
                    {
                        if (m.GetString(0).Contains(" > you"))
                        {
                            string[] split = m.GetString(0).Split(' ');
                            if (split.Length > 1)
                            {
                                string senderName = split[1];
                                if (namePlayers.ContainsKey(senderName))
                                {
                                    IPlayer sender = namePlayers[senderName].First();

                                    string text = m.GetString(1);
                                    if (text.Length > 0 && text[0].Equals('!'))
                                    {
                                        string textCommandCharRemoved = text.Remove(0, 1);
                                        string[] textSplit = textCommandCharRemoved.Split(' ');
                                        string cmd = textSplit[0];
                                        string[] args = new string[textSplit.Length - 1];
                                        if (textSplit.Length > 0)
                                            Array.Copy(textSplit, 1, args, 0, textSplit.Length - 1);
                                        bot.SubBotHandler.onCommand(cmd, args, sender);
                                    }
                                }
                            }
                        }
                    }
                    break;
                case "say":
                    {
                        int id = m.GetInt(0);
                        string text = m.GetString(1);
                        if (players.ContainsKey(id))
                        {
                            IPlayer player = players[id];
                            if (text.Length > 0 && text[0].Equals('!'))
                            {
                                string textCommandCharRemoved = text.Remove(0, 1);
                                string[] textSplit = textCommandCharRemoved.Split(' ');
                                string cmd = textSplit[0];
                                string[] args = new string[textSplit.Length - 1];
                                if (textSplit.Length > 0)
                                    Array.Copy(textSplit, 1, args, 0, textSplit.Length - 1);
                                bot.SubBotHandler.onCommand(cmd, args, player);
                            }
                        }
                    }
                    break;
                case "say_old":
                    break;
                case "updatemeta":
                    {
                        owner = m.GetString(0);
                        title = m.GetString(1);
                        plays = m.GetInt(2);
                        woots = m.GetInt(3);
                        totalWoots = m.GetInt(4);
                    }
                    break;
                case "autotext":
                    break;
                case "clear":
                    {
                        blockMap.Clear();
                        if (minimap != null)
                        {
                            minimap.Die();
                            minimap = new Minimap.Minimap(bot, width, height);
                            foreach (Player player in players.Values)
                                minimap.DrawPlayer(player);
                        }
                        else
                            minimap = new Minimap.Minimap(bot, width, height);
                        DrawBorder();
                    }
                    break;
                case "tele":
                    {
                        bool usedReset = m.GetBoolean(0);
                        for (int i = 1; i <= m.Count - 1; i += 3)
                        {
                            int playerId = m.GetInt(1);
                            int x = m.GetInt(2);
                            int y = m.GetInt(3);
                            if (players.ContainsKey(playerId))
                            {
                                players[playerId].X = x;
                                players[playerId].Y = y;
                            }
                        }
                        break;
                    }
                case "saved":
                    bot.ChatSayer.Say("World saved.");
                    break;

                default:
                    Console.WriteLine(m.Type);
                    break;
            }
        }
예제 #2
0
        private uint LoadWorld(PlayerIOClient.Message m, uint ws, int width, int height)
        {
            if (minimap != null)
            {
                minimap.Die();
                minimap = new Minimap.Minimap(bot, width, height);
                foreach (Player player in players.Values)
                    minimap.DrawPlayer(player);
            }
            else
                minimap = new Minimap.Minimap(bot, width, height);
            blockMap.setSize(width, height);
            blockMap.Clear();
            //world start at 17 "ws"
            uint i = ws;
            for (; (int)(i - 2) <= ws || !(m[i - 2] is string); i++)
            {
                if (m[i] is byte[])
                {
                    int blockId = m.GetInt(i - 2);
                    int layer = m.GetInt(i - 1);
                    byte[] xArray = m.GetByteArray(i);
                    byte[] yArray = m.GetByteArray(i + 1);

                    uint toAdd = 0;

                    for (int x = 0; x < xArray.Length; x += 2)
                    {
                        int xIndex = xArray[x] * 256 + xArray[x + 1];
                        int yIndex = yArray[x] * 256 + yArray[x + 1];

                        IBlock result = null;

                        switch (blockId)
                        {
                            case 242: //portal
                            case 381: //portal
                                {
                                    int rotation = m.GetInt(i + 2);
                                    int id = m.GetInt(i + 3);
                                    int destination = m.GetInt(i + 4);
                                    result = new BlockPortal(rotation, id, destination);
                                    toAdd = 3;
                                    break;
                                }
                            case 43: //coin door
                                {
                                    int coins = m.GetInt(i + 2);
                                    result = new BlockCoinDoor(coins);
                                    toAdd = 1;
                                    break;
                                }
                            case 165: //coin gate
                                {
                                    int coins = m.GetInt(i + 2);
                                    result = new BlockCoinGate(coins);
                                    toAdd = 1;
                                    break;
                                }
                            case 361: //spikes
                                {
                                    int rotation = m.GetInt(i + 2);
                                    result = new BlockSpikes(rotation);
                                    toAdd = 1;
                                    break;
                                }
                            case 77: //piano
                                {
                                    int note = m.GetInt(i + 2);
                                    result = new BlockPiano(note);
                                    toAdd = 1;
                                    break;
                                }
                            case 83: //drums
                                {
                                    int note = m.GetInt(i + 2);
                                    result = new BlockDrums(note);
                                    toAdd = 1;
                                    break;
                                }
                            case 1000: //text
                                {
                                    string text = m.GetString(i + 2);
                                    result = new BlockText(text);
                                    toAdd = 1;
                                    break;
                                }
                            case 385: //sign
                                {
                                    string text = m.GetString(i + 2);
                                    result = new BlockSign(text);
                                    toAdd = 1;
                                    break;
                                }
                            case 374: //world portal
                                {
                                    string destination = m.GetString(i + 2);
                                    result = new BlockWorldPortal(destination);
                                    toAdd = 1;
                                    break;
                                }
                            default:
                                {
                                    result = new NormalBlock(blockId, layer);
                                    break;
                                }
                        }
                        if (result != null)
                        {
                            result.OnReceive(bot, xIndex, yIndex);
                            blockMap.setBlock(xIndex, yIndex, result);
                            bot.SubBotHandler.onBlockChange(xIndex, yIndex, blockMap.getBlock(layer, xIndex, yIndex), blockMap.getBlockHistory(layer, xIndex, yIndex).Count >= 2 ? blockMap.getBlockHistory(layer, xIndex, yIndex).ElementAt(1) : new NormalBlock(0, layer));
                        }
                    }
                    i += toAdd;
                    i += 3;
                }
            }
            return i + 2;
            //world end "we"
        }