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; } }
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" }