public override void HandleMessage(Yupi.Model.Domain.Habbo session, Yupi.Protocol.Buffers.ClientMessage request, Yupi.Protocol.IRouter router) { string name = request.GetString(); string description = request.GetString(); string roomModel = request.GetString(); int categoryId = request.GetInteger(); int maxVisitors = request.GetInteger(); int tradeStateId = request.GetInteger(); RoomModel model; TradingState tradeState; if (!RoomModel.TryParse(roomModel, out model) || !TradingState.TryFromInt32(tradeStateId, out tradeState)) { return; } NavigatorCategory category = NavigatorRepository.Find(categoryId); if (category.MinRank > session.Info.Rank) { return; } // TODO Filter Name, Description, max visitors RoomData data = new RoomData() { Name = name, Description = description, Model = model, Category = category, UsersMax = maxVisitors, TradeState = tradeState, Owner = session.Info }; RoomRepository.Save(data); router.GetComposer <OnCreateRoomInfoMessageComposer>().Compose(session, data); }
public override void HandleMessage(Yupi.Model.Domain.Habbo session, Yupi.Protocol.Buffers.ClientMessage request, Yupi.Protocol.IRouter router) { int roomId = request.GetInteger(); RoomData roomData = RoomRepository.Find(roomId); if (roomData == null || !roomData.HasOwnerRights(session.Info)) { return; } // TODO Filter string newName = request.GetString(); // TODO Magic constant if (newName.Length > 2) { roomData.Name = newName; } // TODO Filter roomData.Description = request.GetString(); int stateId = request.GetInteger(); RoomState state; if (RoomState.TryFromInt32(stateId, out state)) { roomData.State = state; } roomData.Password = request.GetString(); roomData.UsersMax = request.GetInteger(); int categoryId = request.GetInteger(); FlatNavigatorCategory category = NavigatorCategoryRepository.Find(categoryId); if (category != null && category.MinRank <= session.Info.Rank) { roomData.Category = category; } int tagCount = request.GetInteger(); if (tagCount <= 2) { roomData.Tags.Clear(); IRepository <Tag> TagRepository = DependencyFactory.Resolve <IRepository <Tag> > (); for (int i = 0; i < tagCount; i++) { string tagValue = request.GetString().ToLower(); Tag tag = TagRepository.Find(tagValue); if (tag == null) { tag = new Tag(tagValue); } roomData.Tags.Add(tag); } } TradingState tradeState; if (TradingState.TryFromInt32(request.GetInteger(), out tradeState)) { roomData.TradeState = tradeState; } roomData.AllowPets = request.GetBool(); roomData.AllowPetsEating = request.GetBool(); roomData.AllowWalkThrough = request.GetBool(); bool hideWall = request.GetBool(); int wallThickness = request.GetInteger(); int floorThickness = request.GetInteger(); if (session.Info.Subscription.HasLevel(ClubLevel.HC)) { roomData.HideWall = hideWall; roomData.WallThickness = wallThickness; roomData.FloorThickness = floorThickness; } else { roomData.HideWall = false; roomData.WallThickness = 0; roomData.FloorThickness = 0; } RoomModerationRight right; if (RoomModerationRight.TryFromInt32(request.GetInteger(), out right)) { roomData.ModerationSettings.WhoCanMute = right; } if (RoomModerationRight.TryFromInt32(request.GetInteger(), out right)) { roomData.ModerationSettings.WhoCanKick = right; } if (RoomModerationRight.TryFromInt32(request.GetInteger(), out right)) { roomData.ModerationSettings.WhoCanBan = right; } ChatType chatType; if (ChatType.TryFromInt32(request.GetInteger(), out chatType)) { roomData.Chat.Type = chatType; } ChatBalloon chatBalloon; if (ChatBalloon.TryFromInt32(request.GetInteger(), out chatBalloon)) { roomData.Chat.Balloon = chatBalloon; } ChatSpeed chatSpeed; if (ChatSpeed.TryFromInt32(request.GetInteger(), out chatSpeed)) { roomData.Chat.Speed = chatSpeed; } int maxDistance = request.GetInteger(); if (roomData.Chat.isValidDistance(maxDistance)) { roomData.Chat.SetMaxDistance(maxDistance); } FloodProtection floodProtection; if (FloodProtection.TryFromInt32(request.GetInteger(), out floodProtection)) { roomData.Chat.FloodProtection = floodProtection; } request.GetBool(); //TODO allow_dyncats_checkbox router.GetComposer <RoomSettingsSavedMessageComposer>().Compose(session, roomData.Id); Room room = RoomManager.GetIfLoaded(roomData); if (room != null) { room.EachUser(x => { x.Router.GetComposer <RoomUpdateMessageComposer>().Compose(x, roomData.Id); x.Router.GetComposer <RoomFloorWallLevelsMessageComposer>().Compose(x, roomData); x.Router.GetComposer <RoomChatOptionsMessageComposer>().Compose(x, roomData); x.Router.GetComposer <RoomDataMessageComposer>().Compose(x, roomData, x.Info, true, true); }); } }