private static void EnterMiniRoom(Character chr, Packet packet) { if (chr.Room != null) { miniroomLog.Info($"{chr.Name} cannot enter miniroom: already in one."); return; // Already in a Mini Room } //MessagePacket.SendNotice("PACKET: " + packet.ToString(), chr); int roomId = packet.ReadInt(); if (!MiniRoomBase.MiniRooms.TryGetValue(roomId, out var mrb)) { ReportManager.FileNewReport("Tried entering a trade room without a proper ID.", chr.ID, 0); return; // Invalid Room ID } if (mrb.EnteredUsers == 0) { return; } if (mrb.IsFull()) { miniroomLog.Info($"{chr.Name} cannot enter miniroom: already full."); return; // Error msg if full? } if (mrb.Users.ToList().Exists(u => u != null && u.MapID != chr.MapID)) { InviteResult(chr, 1); // must be on same map. Show "not found" msg return; } chr.Room = mrb; byte nType = (byte)chr.Room.Type; switch (nType) { case 1: // Omok { bool usePassword = packet.ReadBool(); Omok omok = MiniRoomBase.Omoks[chr.Room.ID]; if (usePassword) { string password = packet.ReadString(); if (password != omok.Password) { miniroomLog.Info($"{chr.Name} cannot enter omok: invalid password"); MiniGamePacket.ErrorMessage(chr, MiniGamePacket.MiniGameError.IncorrectPassword); chr.Room = null; break; } } if (chr.Inventory.Mesos >= 100) { omok.AddPlayer(chr); MiniGamePacket.AddVisitor(chr, mrb); MiniGamePacket.ShowWindow(chr, mrb, omok.OmokType); chr.AddMesos(-100); miniroomLog.Info($"{chr.Name} entered omok"); } else { miniroomLog.Info($"{chr.Name} cannot enter omok: not enough mesos"); MiniGamePacket.ErrorMessage(chr, MiniGamePacket.MiniGameError.NotEnoughMesos); } break; } case 3: // Trade { miniroomLog.Info($"{chr.Name} entered trade"); mrb.AddPlayer(chr); MiniRoomPacket.ShowJoin(mrb, chr); MiniRoomPacket.ShowWindow(mrb, chr); break; } case 4: // Player Shop { miniroomLog.Info($"{chr.Name} entered playershop"); PlayerShop shop = MiniRoomBase.PlayerShops[roomId]; for (int i = 0; i < shop.EnteredUsers; i++) { Character shopUser = mrb.Users[i]; if (shopUser != null && shopUser != chr) { shop.AddPlayer(chr); PlayerShopPackets.AddPlayer(chr, shopUser); PlayerShopPackets.OpenPlayerShop(chr, mrb); PlayerShopPackets.PersonalShopRefresh(chr, shop); //Show items } } break; } } }
private static void CreateMiniRoomBase(Character chr, Packet packet) { if (chr.Room != null) { return; } byte nType = packet.ReadByte(); switch (nType) { case 0: // What is this case? { break; } case 1: // Omok { miniroomLog.Info($"{chr.Name} creates an omok miniroom"); MiniRoomBase omok = MiniRoomBase.CreateRoom(chr, 1, packet, false, 0); chr.Room = omok; MiniGamePacket.ShowWindow(chr, omok, MiniRoomBase.Omoks[chr.Room.ID].OmokType); MiniGamePacket.AddAnnounceBox(chr, (byte)MiniRoomBase.RoomType.Omok, omok.ID, omok.Title, omok.Private, omok.PieceType, false); break; } case 2: // Match Cards TODO! { return; miniroomLog.Info($"{chr.Name} creates a match cards"); string title = packet.ReadString(); bool usePassword = packet.ReadBool(); string password = ""; if (usePassword) { password = packet.ReadString(); } packet.Skip(7); byte cardType = packet.ReadByte(); break; } case 3: // Trade { miniroomLog.Info($"{chr.Name} creates a trade miniroom"); MiniRoomBase mrb = MiniRoomBase.CreateRoom(chr, nType, packet, false, 0); chr.Room = mrb; MiniRoomPacket.ShowWindow(mrb, chr); break; } case 4: // Player Shops { return; miniroomLog.Info($"{chr.Name} creates a player shop miniroom"); MiniRoomBase mrb = MiniRoomBase.CreateRoom(chr, nType, packet, false, 0); chr.Room = mrb; PlayerShopPackets.OpenPlayerShop(chr, mrb); break; } } }