protected override void Process(Entities.User u) { if (!u.Authorized) { return; } if (u.Room != null) { u.Disconnect(); //cheating! } ArrayList ValidRooms = new ArrayList(); Objects.Channel PlayerChannel; Managers.ChannelManager.Instance.channels.TryGetValue(u.Channel, out PlayerChannel); if (PlayerChannel == null) { return; } foreach (Entities.Room Room in PlayerChannel.Rooms.Values) //TODO PING CHECK, FIXED NO OF PLAYERS { if (Room.Players.Count < Room.MaximumPlayers) { if (SuitableLevel(Room.LevelLimit, Core.LevelCalculator.GetLevelforExp(u.XP))) { if (!Room.HasPassword) { ValidRooms.Add(Room); } } } } if (ValidRooms.Count > 0) { Random Random = new Random(); Entities.Room SelectedRoom = (Entities.Room)ValidRooms[Random.Next(0, ValidRooms.Count)]; SelectedRoom.Add(u); } }
protected override void Process(Entities.User u) { if (u.Authorized) { if (u.Room == null) { Objects.Channel channel = Managers.ChannelManager.Instance.Get(u.Channel); uint roomId = GetuInt(0); string roomPassword = GetString(1); if (channel.Rooms.ContainsKey(roomId)) { Entities.Room r = null; if (channel.Rooms.TryGetValue(roomId, out r)) { bool validPassword = true; bool validLevel = true; if (r.HasPassword && r.Password != roomPassword) { validPassword = false; } if (!SuitableLevel(r.LevelLimit, Core.LevelCalculator.GetLevelforExp(u.XP))) { validLevel = false; } if (validPassword) { if (validLevel) { if (!r.Add(u)) { if (r.UserLimit) { u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.UsersExceeded)); } else { u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.RoomIsFull)); } } } else { u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.BadLevel)); } } else { u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.InvalidPassword)); } } else { u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError)); } } else { u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError)); } } } else { u.Disconnect(); } }