using System; using System.Collections.Generic; using System.Linq; using System.Text; using DuckEmulator.HabboHotel.Outside.Messages.Types; using DuckEmulator.HabboHotel.Outside.Clients; using DuckEmulator.HabboHotel.Outside.Habbos; using DuckEmulator.HabboHotel.Outside.Rooms; using DuckEmulator.HabboHotel.Inside.Storage.MySql.Database.Interfaces; using DuckEmulator.HabboHotel.Outside.Habbos.HabStructure; using DuckEmulator.HabboHotel.Outside.Furniture; using DuckEmulator.HabboHotel.Outside.Rooms.Movement; using DuckEmulator.HabboHotel.Outside.Catalogue; using DuckEmulator.HabboHotel.Outside.Rooms.Trade; using DuckEmulator.Security; namespace DuckEmulator.HabboHotel.Outside.Messages { partial class MessageHandler { private Dictionary RequestHandlers; private delegate void RequestHandler(); protected readonly uint fId; protected readonly Client fClient; private ClientMessage Request; private ServerMessage Response = new ServerMessage(); internal MessageHandler(Client InternalClient) { this.fId = InternalClient.GetId(); this.fClient = InternalClient; RequestHandlers = new Dictionary(); Register(); } internal void Invoke(uint Id, ClientMessage Message) { if (!RequestHandlers.ContainsKey(Id)) { return; } Request = Filter(Message); if (Request != null) { Response = new ServerMessage(); RequestHandlers[Id].Invoke(); } } protected virtual ClientMessage Filter(ClientMessage _Req) { var BlockedContent = new string[] { "load_file","into_outfile","union","select","update","echo","phpinfo();","phpinfo","php","delete" }; foreach (string i in BlockedContent.ToList()) { if (_Req.GetBody().ToLower().Contains(i)) { _Req = null; } } return _Req; } internal void SendResponse() { if (GetResponse() != null) { GetClient().GetConnection().SendResponse(GetResponse()); } Response = new ServerMessage(); } internal void SendResponse(ServerMessage Message) { if (Message != null) { GetClient().GetConnection().SendResponse(Message); } Response = new ServerMessage(); } internal Client GetClient() { if (DuckEnvironment.ClientManager.GetClient(fId) != null) { return DuckEnvironment.ClientManager.GetClient(fId); } return fClient; } internal ServerMessage GetResponse() { return Response; } internal void Dispose() { RequestHandlers = null; Request = null; Response = null; } #region Register internal void Register() { // Global RequestHandlers[206] = GetSessionParams; RequestHandlers[415] = HandleSSO; // Trading RequestHandlers[71] = SendTrade; RequestHandlers[72] = UpdateTrade; RequestHandlers[405] = UpdateTrade; RequestHandlers[70] = CancelTrade; RequestHandlers[69] = AcceptPremair; RequestHandlers[402] = AcceptPremair; // Rooms RequestHandlers[392] = TriggerItem; RequestHandlers[393] = TriggerItem; RequestHandlers[56] = Whisper; RequestHandlers[348] = SaveEvent; RequestHandlers[347] = StopEvent; RequestHandlers[401] = SaveRoomEditData; RequestHandlers[345] = CreateEvent; RequestHandlers[346] = SaveEvent; RequestHandlers[66] = UpdateRoomEffect; RequestHandlers[90] = PlaceItem; RequestHandlers[67] = RemoveItem; RequestHandlers[73] = UpdateFloorItem; RequestHandlers[91] = UpdateWallItem; RequestHandlers[400] = GetRoomEditData; RequestHandlers[317] = StartTyping; RequestHandlers[318] = StopTyping; RequestHandlers[159] = GetUserBadges; RequestHandlers[263] = GetUserTags; RequestHandlers[29] = CreateRoom; RequestHandlers[384] = UpdateHomeRoom; RequestHandlers[52] = Talk; RequestHandlers[55] = Shout; RequestHandlers[371] = RespectUser; RequestHandlers[75] = Move; RequestHandlers[95] = Kick; RequestHandlers[93] = Dance; RequestHandlers[94] = Wave; RequestHandlers[319] = IgnoreUser; RequestHandlers[322] = UnIgnoreUser; RequestHandlers[320] = BanUser; RequestHandlers[261] = RateRoom; RequestHandlers[215] = StartRoom; RequestHandlers[390] = SerializeMaps; RequestHandlers[126] = SerializeRoom; RequestHandlers[386] = SaveRoomIcon; RequestHandlers[23] = DeleteRoom; RequestHandlers[98] = AnswerDoorbell; RequestHandlers[59] = ReqLoadRoomForUser; // Catalogue RequestHandlers[3007] = GetPetRace; RequestHandlers[3030] = CanSendItem; RequestHandlers[100] = PurchaseItem; RequestHandlers[101] = SerializeIndexs; RequestHandlers[102] = SerializePage; // Navigator RequestHandlers[439] = GetEventRooms; RequestHandlers[437] = SearchRooms; RequestHandlers[382] = GetPopulairTags; RequestHandlers[435] = GetFavoriteRooms; RequestHandlers[436] = GetLastVisited; RequestHandlers[433] = GetWhereFriendAre; RequestHandlers[151] = GetPrivateCategorys; RequestHandlers[19] = AddFavorite; RequestHandlers[20] = RemoveFavorite; RequestHandlers[430] = GetPrivates; RequestHandlers[387] = CanCreateRoom; RequestHandlers[380] = GetFeatured; RequestHandlers[53] = GoHotelView; RequestHandlers[391] = EnterFlat; RequestHandlers[434] = GetOwnRooms; // Achievements RequestHandlers[370] = GetAchievementManager; // Messenger RequestHandlers[12] = InitMessenger; RequestHandlers[41] = SearchMessenger; RequestHandlers[33] = Chat; RequestHandlers[34] = InviteForFollow; RequestHandlers[40] = DeleteFriend; RequestHandlers[39] = ReqFriendFromConsole; RequestHandlers[37] = AcceptUsers; RequestHandlers[38] = DenyUsers; RequestHandlers[262] = FollowBuddy; // Users RequestHandlers[373] = EnableEffect; RequestHandlers[372] = ApplyEffect; RequestHandlers[158] = UpdateBadges; RequestHandlers[404] = SerializeFurniInventory; RequestHandlers[3000] = SerializePetInventory; RequestHandlers[157] = SerializeBadgesInventory; RequestHandlers[44] = EditLook; RequestHandlers[484] = EditMotto; RequestHandlers[3032] = GetAchievementScore; RequestHandlers[7] = GetUserDetails; RequestHandlers[8] = GetBalance; // Quests RequestHandlers[3101] = GetQuests; RequestHandlers[3102] = AcceptQuest; RequestHandlers[3106] = CancelQuest; RequestHandlers[3107] = AcceptNextQuest; } #endregion } #region Global partial class MessageHandler { internal void GetSessionParams() { GetResponse().Init(257); GetResponse().AppendInt32(9); GetResponse().AppendInt32(0); GetResponse().AppendInt32(0); GetResponse().AppendInt32(1); GetResponse().AppendInt32(1); GetResponse().AppendInt32(3); GetResponse().AppendInt32(0); GetResponse().AppendInt32(4); GetResponse().AppendInt32(1); GetResponse().AppendInt32(5); GetResponse().AppendStringWithBreak("dd-MM-yyyy"); GetResponse().AppendInt32(7); GetResponse().AppendInt32(0); GetResponse().AppendInt32(8); GetResponse().AppendStringWithBreak("http://duckhotel.zapto.org/duckhotel/"); GetResponse().AppendInt32(9); GetResponse().AppendInt32(0); SendResponse(); } internal void HandleSSO() { string SSO = Request.PopFixedString(); var Data = HabboManager.GenerateFromTicket(SSO); if (Data == null || DuckEnvironment.ClientManager.GetClientByHabboId(Data.Id) != null) { GetClient().Dispose(false); } else { GetClient().HabboData = Data; GetClient().GetHabbo().iConn = GetClient().GetConnection(); GetClient().GenerateBars(); } } } #endregion #region Quests partial class MessageHandler { internal void GetQuests() { SendResponse(DuckEnvironment.QuestManager.Serialize(GetClient().GetHabbo())); } internal void AcceptQuest() { uint QuestId = Request.PopWiredUInt(); DuckEnvironment.QuestManager.AcceptQuest(QuestId,GetClient().GetHabbo()); } internal void CancelQuest() { DuckEnvironment.QuestManager.CancelQuest(GetClient().GetHabbo()); } internal void AcceptNextQuest() { DuckEnvironment.QuestManager.AcceptNextQuest(GetClient().GetHabbo()); } } #endregion #region Rooms partial class MessageHandler { internal void EnterRandom() { uint RoomId = DuckEnvironment.RoomManager.GetRandomRoomIdWithUser(GetClient()); // Session = no current room =) GetResponse().Init(831); GetResponse().AppendBoolean(!GetClient().GetHabbo().LastVisited.Contains(RoomId)); SendResponse(); PrepareRoom(DuckEnvironment.RoomManager.LoadRoom(RoomId, true), ""); } internal void EnterFlat() { uint RoomId = Request.PopWiredUInt(); string PW = Request.PopFixedString(); Room Room = DuckEnvironment.RoomManager.LoadRoom(RoomId, true); if (Room == null) { return; } PrepareRoom(Room, PW); } internal void PrepareRoom(Room Room, string Password) { if (Room == null || !Room.IsAlive) { return; } if (GetClient().GetHabbo().InRoom) { GetClient().GetHabbo().GetCurrentRoom().RemoveUserFromRoom(GetClient().GetHabbo().GetRoomUser().VirtualId, false); } if (Room.RoomEngine.UserHasBanned(GetClient().GetHabbo().Id)) { GetResponse().Init(224); GetResponse().AppendInt32(4); SendResponse(); GetResponse().Init(18); SendResponse(); return; } if (Room.UserCount >= 25) { GetResponse().Init(224); GetResponse().AppendBoolean(true); SendResponse(); GetResponse().Init(18); SendResponse(); return; } GetClient().GetHabbo().LoadingRoom = 0; SendResponse(new ServerMessage(19)); GetClient().GetHabbo().LoadingRoom = Room.Id; if (!Room.RoomEngine.HasRights(GetClient().GetHabbo(), true) && GetClient().GetHabbo().Rank <= 1) { if (Room.State == 1) { if (Room.UserCount <= 0) { GetResponse().Init(131); SendResponse(); } else { GetResponse().Init(91); GetResponse().AppendStringWithBreak(""); SendResponse(); ServerMessage RingMessage = new ServerMessage(91); RingMessage.AppendStringWithBreak(GetClient().GetHabbo().Username); foreach (RoomUser User in Room.RoomEngine.Users.Values.ToList()) { if (Room.RoomEngine.HasRights(User.GetClient().GetHabbo(), false)) { User.GetClient().GetConnection().SendResponse(RingMessage); } } } return; } else if (Room.State == 2) { if (Password.ToLower() != Room.Password.ToLower()) { GetResponse().Init(33); GetResponse().AppendInt32(-100002); SendResponse(); GetResponse().Init(18); SendResponse(); return; } } } LoadRoom(Room); } internal void LoadRoom(Room Room) { if (Room == null || !Room.IsAlive) { return; } GetClient().GetHabbo().CurrentRoomId = GetClient().GetHabbo().LoadingRoom; GetClient().GetHabbo().LoadingRoom = 0; Room.SerializeBefore(this); } internal void ReqLoadRoomForUser() { if (GetClient().GetHabbo().LoadingRoom <= 0) { return; } LoadRoom(DuckEnvironment.RoomManager.GetRoom(GetClient().GetHabbo().LoadingRoom)); } internal void StartRoom() { GetResponse().Init(297); GetResponse().AppendBoolean(false); SendResponse(); } internal void SerializeMaps() { SendResponse(GetClient().GetHabbo().GetCurrentRoom().SerializeReliativeMap()); SendResponse(GetClient().GetHabbo().GetCurrentRoom().SerializeAlternativeMap()); } internal void SerializeRoom() { GetClient().GetHabbo().GetCurrentRoom().SerializeInLine(this); } internal void Talk() { if (!GetClient().GetHabbo().InRoom) { return; } string Message = DuckEnvironment.CleanInjections(Request.PopFixedString()); GetClient().GetHabbo().GetRoomUser().Chat(Message, false); } internal void Shout() { if (!GetClient().GetHabbo().InRoom) { return; } string Message = DuckEnvironment.CleanInjections(Request.PopFixedString()); GetClient().GetHabbo().GetRoomUser().Chat(Message, true); } internal void Whisper() { if (!GetClient().GetHabbo().InRoom) { return; } string Data = Request.PopFixedString(); RoomUser Target = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboName(Data.Split(' ')[0]); if (Target == null) { GetClient().SendNotif("User not in room.", false); return; } GetClient().GetHabbo().GetRoomUser().Whisper(Target, DuckEnvironment.CleanInjections(Data.Replace(Data.Split(' ')[0] + " ",""))); } internal void RespectUser() { if (!GetClient().GetHabbo().InRoom) { return; } RoomUser Target = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboId(Request.PopWiredUInt()); if (Target == null) { return; } Target.GetClient().GetHabbo().Respect++; GetClient().GetHabbo().DailyRespect--; GetClient().GetHabbo().RespectGiven++; ServerMessage Message = new ServerMessage(440); Message.AppendUInt(Target.Habbo.Id); Message.AppendInt32(Target.GetClient().GetHabbo().Respect); GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(Message); DuckEnvironment.AchievementManager.UpdateAchievement(Target.GetClient().GetHabbo(), 109); DuckEnvironment.AchievementManager.UpdateAchievement(GetClient().GetHabbo(), 108); Target.GetClient().GetHabbo().UpdateVariable("respect", Target.GetClient().GetHabbo().Respect); GetClient().GetHabbo().UpdateVariable("daily_respect", GetClient().GetHabbo().DailyRespect); GetClient().GetHabbo().UpdateVariable("respect_given", GetClient().GetHabbo().RespectGiven); if (GetClient().GetHabbo().ProgressQuest == 13) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void Move() { if (!GetClient().GetHabbo().InRoom) { return; } int X = Request.PopWiredInt32(); int Y = Request.PopWiredInt32(); GetClient().GetHabbo().GetRoomUser().MoveTo(X, Y); } internal void Kick() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } uint HabboId = Request.PopWiredUInt(); RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboId(HabboId); if (TargetUser == null) { return; } if (TargetUser.GetClient().GetHabbo().Rank > 1 || TargetUser.GetRoom().RoomEngine.HasRights(TargetUser.GetClient().GetHabbo(), true)) { GetClient().SendNotif("You can't ban this user.", false); return; } GetClient().GetHabbo().GetCurrentRoom().KickUser(HabboId, true); } internal void BanUser() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } uint HabboId = Request.PopWiredUInt(); RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboId(HabboId); if (TargetUser == null) { return; } if (TargetUser.GetClient().GetHabbo().Rank > 1 || TargetUser.GetRoom().RoomEngine.HasRights(TargetUser.GetClient().GetHabbo(), true)) { GetClient().SendNotif("You can't ban this user.", false); return; } GetClient().GetHabbo().GetCurrentRoom().RoomEngine.AddBan(TargetUser.Habbo.Id); GetClient().GetHabbo().GetCurrentRoom().KickUser(HabboId, false); } internal void Wave() { if (!GetClient().GetHabbo().InRoom) { return; } GetResponse().Init(481); GetResponse().AppendUInt(GetClient().GetHabbo().GetRoomUser().VirtualId); GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(GetResponse()); if (GetClient().GetHabbo().ProgressQuest == 15) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void Dance() { if (!GetClient().GetHabbo().InRoom) { return; } int DanceId = Request.PopWiredInt32(); GetClient().GetHabbo().GetRoomUser().DanceId = DanceId; GetResponse().Init(480); GetResponse().AppendUInt(GetClient().GetHabbo().GetRoomUser().VirtualId); GetResponse().AppendInt32(DanceId); GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(GetResponse()); if (GetClient().GetHabbo().ProgressQuest == 14) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void IgnoreUser() { if (!GetClient().GetHabbo().InRoom) { return; } string Username = Request.PopFixedString(); if (Username.ToLower() == GetClient().GetHabbo().Username.ToLower()) { return; } RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboName(Username); if (TargetUser == null) { return; } if (TargetUser.GetClient().GetHabbo().Rank > 1) { GetClient().SendNotif("You can't ignore this user.", false); return; } if (GetClient().GetHabbo().GetRoomUser().Ignores.Contains(TargetUser.Habbo.Id)) { return; } GetClient().GetHabbo().GetRoomUser().Ignores.Add(TargetUser.Habbo.Id); GetResponse().Init(419); GetResponse().AppendBoolean(true); SendResponse(); } internal void UnIgnoreUser() { if (!GetClient().GetHabbo().InRoom) { return; } string Username = Request.PopFixedString(); if (Username.ToLower() == GetClient().GetHabbo().Username.ToLower()) { return; } RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboName(Username); if (TargetUser == null) { return; } if (!GetClient().GetHabbo().GetRoomUser().Ignores.Contains(TargetUser.Habbo.Id)) { return; } GetClient().GetHabbo().GetRoomUser().Ignores.Remove(TargetUser.Habbo.Id); GetResponse().Init(419); GetResponse().AppendInt32(3); SendResponse(); } internal void RateRoom() { if (!GetClient().GetHabbo().InRoom) { return; } if (GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } uint RoomId = Request.PopWiredUInt(); if (GetClient().GetHabbo().RatedRooms.Contains(RoomId)) { return; } GetClient().GetHabbo().RatedRooms.Add(RoomId); GetClient().GetHabbo().GetCurrentRoom().RoomScore++; GetClient().GetHabbo().GetCurrentRoom().RoomEngine.UpdateVar("room_score", GetClient().GetHabbo().GetCurrentRoom().RoomScore); GetResponse().Init(345); GetResponse().AppendInt32(GetClient().GetHabbo().GetCurrentRoom().RoomScore); SendResponse(); } internal void StartTyping() { if (!GetClient().GetHabbo().InRoom) { return; } GetResponse().Init(361); GetResponse().AppendUInt(GetClient().GetHabbo().GetRoomUser().VirtualId); GetResponse().AppendBoolean(true); GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(GetResponse()); } internal void StopTyping() { if (!GetClient().GetHabbo().InRoom) { return; } GetResponse().Init(361); GetResponse().AppendUInt(GetClient().GetHabbo().GetRoomUser().VirtualId); GetResponse().AppendBoolean(false); GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(GetResponse()); } internal void GetRoomEditData() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } Room Room = GetClient().GetHabbo().GetCurrentRoom(); if (Room == null) { return; } GetResponse().Init(465); GetResponse().AppendUInt(Room.Id); GetResponse().AppendStringWithBreak(Room.Name); GetResponse().AppendStringWithBreak(Room.Description); GetResponse().AppendInt32(Room.State); GetResponse().AppendInt32(Room.Category); GetResponse().AppendInt32(Room.MaxUsers); GetResponse().AppendInt32(25); GetResponse().AppendInt32(Room.Tags.Count); foreach (string Tag in Room.Tags) { GetResponse().AppendStringWithBreak(Tag); } GetResponse().AppendInt32(Room.RoomEngine.UsersWithRights.Count); // users /w rights count foreach (uint UserId in Room.RoomEngine.UsersWithRights) { GetResponse().AppendUInt(UserId); GetResponse().AppendStringWithBreak(DuckEnvironment.ClientManager.GetUsernameById(UserId)); } GetResponse().AppendInt32(Room.RoomEngine.UsersWithRights.Count); // users /w rights count GetResponse().AppendBoolean(Room.AllowPets); // allows pets in room - pet system lacking, so always off GetResponse().AppendBoolean(Room.AllowPetsEat); // allows pets to eat your food - pet system lacking, so always off GetResponse().AppendBoolean(Room.AllowWalkthough); GetResponse().AppendBoolean(Room.HideWalls); GetResponse().AppendInt32(Room.WallType); GetResponse().AppendInt32(Room.FloorType); SendResponse(); } internal void SaveRoomEditData() { //401 - I@DNAME@KDESCRIPTIONI@@QFHJ@DTAG1@DTAG2@@@@HH if (!GetClient().GetHabbo().InRoom) { return; } uint Id = Request.PopWiredUInt(); Room Room = DuckEnvironment.RoomManager.GetRoom(Id); if (Room == null || !Room.RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } string Name = DuckEnvironment.CleanInjections(Request.PopFixedString()); string Description = DuckEnvironment.CleanInjections(Request.PopFixedString()); int State = Request.PopWiredInt32(); string Password = DuckEnvironment.CleanInjections(Request.PopFixedString()); int MaxUsers = Request.PopWiredInt32(); int CategoryId = Request.PopWiredInt32(); if (GetClient().GetHabbo().Rank < DuckEnvironment.NavigatorManager.PrivateCats[CategoryId].MinRank) { CategoryId = 0; } int TagCount = Request.PopWiredInt32(); var TagList = new List(); for (int i = 0; i < TagCount; i++) { TagList.Add(DuckEnvironment.CleanInjections(Request.PopFixedString())); } bool AllowPets = (Request.PlainReadBytes(1)[0].ToString() == "65"); Request.AdvancePointer(1); bool AllowPetsEat = (Request.PlainReadBytes(1)[0].ToString() == "65"); Request.AdvancePointer(1); bool AllowWalkthough = (Request.PlainReadBytes(1)[0].ToString() == "65"); Request.AdvancePointer(1); bool Hidewall = (Request.PlainReadBytes(1)[0].ToString() == "65"); Request.AdvancePointer(1); int WallType = Request.PopWiredInt32(); int FloorType = Request.PopWiredInt32(); Room.Name = Name; Room.Description = Description; Room.State = State; Room.Password = Password; Room.MaxUsers = MaxUsers; Room.Category = CategoryId; Room.Tags = TagList; Room.AllowPets = AllowPets; Room.AllowPetsEat = AllowPetsEat; Room.AllowWalkthough = AllowWalkthough; Room.HideWalls = Hidewall; Room.WallType = WallType; Room.FloorType = FloorType; ServerMessage RoomData = new ServerMessage(454); Room.SerializeRoomData(RoomData); Room.BroadcastResponse(RoomData); GetResponse().Init(467); GetResponse().AppendUInt(Room.Id); SendResponse(); GetResponse().Init(456); GetResponse().AppendUInt(Room.Id); SendResponse(); ServerMessage RoomStruct = new ServerMessage(472); RoomStruct.AppendBoolean(Hidewall); RoomStruct.AppendInt32(WallType); // -1 = thing, 0 = normal, 1 = fat RoomStruct.AppendInt32(FloorType); // -1 = thing, 0 = normal, 1 = fat Room.BroadcastResponse(RoomStruct); Room.RoomEngine.UpdateVar("name", Name, true); Room.RoomEngine.UpdateVar("description", Description, true); Room.RoomEngine.UpdateVar("state", State); Room.RoomEngine.UpdateVar("password", Password,true); Room.RoomEngine.UpdateVar("max_users", MaxUsers); Room.RoomEngine.UpdateVar("category", CategoryId); string Builder = ""; foreach (string Tag in TagList) { Builder += Tag; if (Array.IndexOf(TagList.ToArray(), Tag) < TagCount) { Builder += ","; } } Room.RoomEngine.UpdateVar("tags", Builder); Room.RoomEngine.UpdateVar("allow_hidewall", ((Hidewall) ? 1 : 0)); Room.RoomEngine.UpdateVar("walls_type", WallType); Room.RoomEngine.UpdateVar("floor_type", FloorType); Room.RoomEngine.UpdateVar("allow_pets", ((AllowPets) ? 1 : 0)); Room.RoomEngine.UpdateVar("allow_pets_eat", ((AllowPetsEat) ? 1 : 0)); Room.RoomEngine.UpdateVar("allow_walkthough", ((AllowWalkthough) ? 1 : 0)); } internal void DeleteRoom() { uint RoomId = Request.PopWiredUInt(); Room Room = DuckEnvironment.RoomManager.GetRoom(RoomId); if (Room == null || !Room.RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } DuckEnvironment.RoomManager.UnloadRoom(RoomId); using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("UPDATE items SET room_id = '0' WHERE room_id = '" + RoomId + "'"); Adapter.runFastQuery("DELETE FROM private_rooms WHERE id = '" + RoomId + "' LIMIT 1"); Adapter.runFastQuery("DELETE FROM private_room_rights WHERE room_id = '" + RoomId + "'"); Adapter.runFastQuery("DELETE FROM user_favorites WHERE room_id = '" + RoomId + "'"); Adapter.runFastQuery("UPDATE users SET home_room = '0' WHERE home_room = '" + RoomId + "'"); } } internal void SaveRoomIcon() { Room Room = GetClient().GetHabbo().GetCurrentRoom(); if (Room == null || !Room.RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } int Junk = Request.PopWiredInt32(); // always 3 var Items = new SecurityDictionary(); int Background = Request.PopWiredInt32(); int TopLayer = Request.PopWiredInt32(); int AmountOfItems = Request.PopWiredInt32(); for (int i = 0; i < AmountOfItems; i++) { int Pos = Request.PopWiredInt32(); int Item = Request.PopWiredInt32(); if (Pos < 0 || Pos > 10) { return; } if (Item < 1 || Item > 27) { return; } if (Items.ContainsKey(Pos)) { return; } Items.Add(Pos, Item); } if (Background < 1 || Background > 24) { return; } if (TopLayer < 0 || TopLayer > 11) { return; } StringBuilder FormattedItems = new StringBuilder(); int j = 0; foreach (KeyValuePair Item in Items) { if (j > 0) { FormattedItems.Append("|"); } FormattedItems.Append(Item.Key + "," + Item.Value); j++; } Room.Icon = new RoomIcon(Room.Id, TopLayer, Background, FormattedItems.ToString()); GetResponse().Init(457); GetResponse().AppendUInt(Room.Id); GetResponse().AppendBoolean(true); SendResponse(); GetResponse().Init(456); GetResponse().AppendUInt(Room.Id); SendResponse(); ServerMessage Message = new ServerMessage(454); Message.AppendBoolean(false); Room.SerializeNavigator(Message, false); Room.BroadcastResponse(Message); Room.RoomEngine.UpdateVar("icon_background", Background); Room.RoomEngine.UpdateVar("icon_foreground", TopLayer); Room.RoomEngine.UpdateVar("icon_items", FormattedItems.ToString()); } internal void CreateEvent() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } GetResponse().Init(367); GetResponse().AppendBoolean(true); GetResponse().AppendBoolean(false); SendResponse(); } internal void SaveEvent() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } int Category = Request.PopWiredInt32(); string Name = DuckEnvironment.CleanInjections(Request.PopFixedString()); string Description = DuckEnvironment.CleanInjections(Request.PopFixedString()); int TagCount = Request.PopWiredInt32(); var TagList = new List(); for (int i = 0; i < TagCount; i++) { TagList.Add(DuckEnvironment.CleanInjections(Request.PopFixedString())); } RoomEvent Event = new RoomEvent(GetClient().GetHabbo().CurrentRoomId, Name, Description, Category, TagList.ToList()); GetResponse().Init(370); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Id.ToString()); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().CurrentRoomId.ToString()); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Username); GetResponse().AppendInt32(Category); GetResponse().AppendStringWithBreak(Name); GetResponse().AppendStringWithBreak(Description); GetResponse().AppendStringWithBreak(Event.GetTime()); GetResponse().AppendInt32(TagCount); foreach (string Tag in TagList.ToList()) { GetResponse().AppendStringWithBreak(Tag); } GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(GetResponse()); if (GetClient().GetHabbo().GetCurrentRoom().Event == null) { GetClient().GetHabbo().GetMessenger().BroadcastAchievement(Name, false); } GetClient().GetHabbo().GetCurrentRoom().Event = Event; } internal void StopEvent() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } GetClient().GetHabbo().GetCurrentRoom().DropEvent(); } internal void GetUserBadges() { if (!GetClient().GetHabbo().InRoom) { return; } uint HabboId = Request.PopWiredUInt(); RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboId(HabboId); if (TargetUser == null) { return; } GetResponse().Init(228); GetResponse().AppendUInt(HabboId); GetResponse().AppendInt32(TargetUser.GetClient().GetHabbo().GetBadgeTable().GetEquiped().Count); foreach (Badge Badge in TargetUser.GetClient().GetHabbo().GetBadgeTable().GetEquiped()) { if (Badge.SlotId <= 0 || Badge.SlotId > 5 || Badge.BadgeCode == "") continue; GetResponse().AppendInt32(Badge.SlotId); GetResponse().AppendStringWithBreak(Badge.BadgeCode); } SendResponse(); } internal void GetUserTags() { if (!GetClient().GetHabbo().InRoom) { return; } uint HabboId = Request.PopWiredUInt(); RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUserByHabboId(HabboId); if (TargetUser == null) { return; } GetResponse().Init(350); GetResponse().AppendUInt(HabboId); GetResponse().AppendInt32(TargetUser.GetClient().GetHabbo().Tags.Count); TargetUser.GetClient().GetHabbo().Tags.ToList().ForEach(GetResponse().AppendStringWithBreak); SendResponse(); } internal void UpdateBadges() { foreach (Badge Badge in GetClient().GetHabbo().GetBadgeTable().Badges) { Badge.SlotId = 0; } while (Request.RemainingLength > 0) { int Slot = Request.PopWiredInt32(); string Badge = Request.PopFixedString(); GetClient().GetHabbo().GetBadgeTable().UpdateBadge(Badge, Slot); } foreach (Badge Badge in GetClient().GetHabbo().GetBadgeTable().Badges) { if (Badge.SlotId == 0) { GetClient().GetHabbo().GetBadgeTable().UpdateBadge(Badge.BadgeCode, Badge.SlotId); } } GetResponse().Init(228); GetResponse().AppendUInt(GetClient().GetHabbo().Id); GetResponse().AppendInt32(GetClient().GetHabbo().GetBadgeTable().GetEquiped().Count); foreach (Badge Badge in GetClient().GetHabbo().GetBadgeTable().GetEquiped()) { if (Badge.SlotId <= 0 || Badge.SlotId > 5) { continue; } GetResponse().AppendInt32(Badge.SlotId); GetResponse().AppendStringWithBreak(Badge.BadgeCode); } if (GetClient().GetHabbo().InRoom) { GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(GetResponse()); } else { SendResponse(GetResponse()); } } internal void PlaceItem() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), true)) { return; } string PlacementData = Request.PopFixedString(); string[] DataBits = PlacementData.Split(' '); bool Wallitem = DataBits[1].StartsWith(":"); uint ItemId = Convert.ToUInt32(DataBits[0]); Furni Furni = GetClient().GetHabbo().GetInventory().GetFurni(ItemId); if (Furni == null) { return; } int i = 0; foreach (Furni _Furni in GetClient().GetHabbo().GetCurrentRoom().RoomEngine.Items.Values.ToList()) { if (_Furni.GetBaseItem().Id == Furni.GetBaseItem().Id) { i++; } } if (Furni.GetBaseItem().SpriteName.ToLower() == "es_skating_ice") { GetClient().GetHabbo().IceTagPerks++; GetClient().GetHabbo().UpdateVariable("icetag_perks", GetClient().GetHabbo().IceTagPerks); DuckEnvironment.AchievementManager.UpdateAchievement(GetClient().GetHabbo(), 122); } if (i <= 0) { GetClient().GetHabbo().FurniCountUnsigned++; GetClient().GetHabbo().UpdateVariable("furni_count_unsigned", GetClient().GetHabbo().FurniCountUnsigned); DuckEnvironment.AchievementManager.UpdateAchievement(GetClient().GetHabbo(), 126); } if (Wallitem) { string Pos = GetClient().GetHabbo().GetCurrentRoom().WallPositionCheck(":" + PlacementData.Split(':')[1]); if (Pos == null) { GetResponse().Init(516); GetResponse().AppendInt32(11); SendResponse(); return; } if (GetClient().GetHabbo().GetCurrentRoom().SetWallItem(Furni, Pos)) { GetClient().GetHabbo().GetInventory().RemoveFurni(ItemId); } } else { int X = Convert.ToInt32(DataBits[1]); int Y = Convert.ToInt32(DataBits[2]); int Rot = Convert.ToInt32(DataBits[3]); if (GetClient().GetHabbo().GetCurrentRoom().SetFloorItem(Furni, X, Y, Rot, true)) { GetClient().GetHabbo().GetInventory().RemoveFurni(ItemId); } } GetClient().GetHabbo().FurniCount++; GetClient().GetHabbo().UpdateVariable("furni_count", GetClient().GetHabbo().FurniCount); DuckEnvironment.AchievementManager.UpdateAchievement(GetClient().GetHabbo(), 125); if (GetClient().GetHabbo().ProgressQuest == 4) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } else if (GetClient().GetHabbo().ProgressQuest == 7 && Furni.Z >= 0.5) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void RemoveItem() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } int Junk = Request.PopWiredInt32(); uint ItemId = Request.PopWiredUInt(); Furni Furni = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetFurni(ItemId); if (Furni == null) { return; } if (GetClient().GetHabbo().GetCurrentRoom().DeleteItem(ItemId)) { GetClient().GetHabbo().GetInventory().AddnewFurni(Furni, false); } if (GetClient().GetHabbo().ProgressQuest == 5) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void UpdateFloorItem() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } uint ItemId = Request.PopWiredUInt(); Furni Furni = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetFurni(ItemId); if (Furni == null) { return; } int X = Request.PopWiredInt32(); int Y = Request.PopWiredInt32(); int Rot = Request.PopWiredInt32(); if (GetClient().GetHabbo().ProgressQuest == 2 && (Furni.X != X || Furni.Y != Y)) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } else if (GetClient().GetHabbo().ProgressQuest == 3 && Furni.Rotation != Rot) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } else if (GetClient().GetHabbo().ProgressQuest == 7 && Furni.Z >= 0.5) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } GetClient().GetHabbo().GetCurrentRoom().SetFloorItem(Furni, X, Y, Rot, true); } internal void TriggerItem() { uint ItemId = Request.PopWiredUInt(); Furni Furni = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetFurni(ItemId); if (Furni == null) { return; } Furni.Interactor.FurniTriggered(Request.PopWiredInt32(), Furni, GetClient().GetHabbo().GetRoomUser()); if (GetClient().GetHabbo().ProgressQuest == 6) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void UpdateWallItem() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } uint ItemId = Request.PopWiredUInt(); string Wallpos = Request.PopFixedString(); Furni Furni = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetFurni(ItemId); if (Furni == null) return; string Pos = GetClient().GetHabbo().GetCurrentRoom().WallPositionCheck(Wallpos); if (Pos == null) { GetResponse().Init(516); GetResponse().AppendInt32(11); SendResponse(); return; } GetClient().GetHabbo().GetCurrentRoom().SetWallItem(Furni, Wallpos); } internal void UpdateRoomEffect() { if (!GetClient().GetHabbo().InRoom) { return; } uint ItemId = Request.PopWiredUInt(); if (!GetClient().GetHabbo().GetCurrentRoom().RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } Furni Furni = GetClient().GetHabbo().GetInventory().GetFurni(ItemId); if (Furni == null) return; string type = "floor"; if (Furni.GetBaseItem().SpriteName.ToLower().Contains("wallpaper")) { type = "wallpaper"; } else if (Furni.GetBaseItem().SpriteName.ToLower().Contains("landscape")) { type = "landscape"; } switch (type) { case "floor": GetClient().GetHabbo().GetCurrentRoom().Floor = Furni.ExtraData; break; case "wallpaper": GetClient().GetHabbo().GetCurrentRoom().Wallpaper = Furni.ExtraData; break; case "landscape": GetClient().GetHabbo().GetCurrentRoom().Landscape = Furni.ExtraData; break; } if (GetClient().GetHabbo().ProgressQuest == 8 && type == "floor") { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } else if (GetClient().GetHabbo().ProgressQuest == 9 && type == "wallpaper") { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } ServerMessage Message = new ServerMessage(46); Message.AppendStringWithBreak(type); Message.AppendStringWithBreak(Furni.ExtraData); GetClient().GetHabbo().GetCurrentRoom().BroadcastResponse(Message); GetClient().GetHabbo().GetInventory().RemoveFurni(Furni.Id); GetClient().GetHabbo().GetCurrentRoom().RoomEngine.UpdateVar(type, Furni.ExtraData); using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("DELETE FROM items WHERE id = '" + Furni.Id + "' LIMIT 1"); } } internal void SendTrade() { if (!GetClient().GetHabbo().InRoom) { return; } if (GetClient().GetHabbo().GetRoomUser().IsTrading) { return; } uint VirtualId = Request.PopWiredUInt(); RoomUser TargetUser = GetClient().GetHabbo().GetCurrentRoom().RoomEngine.GetUser(VirtualId); if (TargetUser == null || TargetUser.IsTrading) { return; } Trade Trade = DuckEnvironment.TradeManager.CreateTrade(GetClient().GetHabbo().Id, TargetUser.GetClient().GetHabbo().Id); Trade.StartTrade(); } internal void UpdateTrade() { if (!GetClient().GetHabbo().InRoom) { return; } if (!GetClient().GetHabbo().GetRoomUser().IsTrading) { return; } uint TradeItemId = Request.PopWiredUInt(); Furni Furni = GetClient().GetHabbo().GetInventory().GetFurni(TradeItemId); if (Furni == null) { return; } Trade Trade = DuckEnvironment.TradeManager.GetTradeByHabbo(GetClient().GetHabbo().Id); if (Trade == null) { return; } Trade.UpdateFurni(GetClient().GetHabbo().Id, Furni); } internal void CancelTrade() { Trade Trade = DuckEnvironment.TradeManager.GetTradeByHabbo(GetClient().GetHabbo().Id); if (Trade == null) { return; } Trade.StopTrade(GetClient().GetHabbo().Id); } internal void AcceptPremair() { Trade Trade = DuckEnvironment.TradeManager.GetTradeByHabbo(GetClient().GetHabbo().Id); if (Trade == null) { return; } Trade.AcceptTrade(GetClient().GetHabbo().Id, true); } internal void AnswerDoorbell() { Room Room = GetClient().GetHabbo().GetCurrentRoom(); if (Room == null || !Room.RoomEngine.HasRights(GetClient().GetHabbo(), false)) { return; } string Name = Request.PopFixedString(); byte[] Result = Request.ReadBytes(1); Client Client = DuckEnvironment.ClientManager.GetClientByHabboId(DuckEnvironment.ClientManager.GetIdByUsername(Name)); if (Client == null) { return; } Boolean Accepted = (Result[0] == Convert.ToByte(65)); if (Accepted) { Client.GetMessageHandler().GetResponse().Init(41); Client.GetMessageHandler().SendResponse(); } else { Client.GetMessageHandler().GetResponse().Init(131); Client.GetMessageHandler().SendResponse(); } } } #endregion #region Users partial class MessageHandler { internal void GetUserDetails() { GetResponse().Init(5); GetResponse().AppendRawUInt(GetClient().GetHabbo().Id); GetResponse().AppendStringWithBreak(""); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Username); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Look); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Gender.ToUpper()); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Motto); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Email.Split('@')[0]); GetResponse().AppendBoolean(false); GetResponse().AppendStringWithBreak(""); GetResponse().AppendBoolean(false); GetResponse().AppendBoolean(true); GetResponse().AppendInt32(GetClient().GetHabbo().Respect); GetResponse().AppendInt32(GetClient().GetHabbo().DailyRespect); GetResponse().AppendInt32(GetClient().GetHabbo().DailyRespectPet); SendResponse(); } internal void GetAchievementScore() { GetResponse().Init(443); GetResponse().AppendInt32(GetClient().GetHabbo().Score); SendResponse(); } internal void GetBalance() { GetResponse().Init(6); GetResponse().AppendStringWithBreak(Convert.ToDouble(GetClient().GetHabbo().Credits).ToString()); SendResponse(); GetResponse().Init(628); GetResponse().AppendBoolean(true); GetResponse().AppendBoolean(false); GetResponse().AppendInt32(GetClient().GetHabbo().Pixels); SendResponse(); } internal void GetAchievementManager() { GetClient().GetConnection().SendResponse(DuckEnvironment.AchievementManager.Serialize(GetClient().GetHabbo())); } internal void EditMotto() { string Motto = DuckEnvironment.CleanInjections(Request.PopFixedString()); if (Motto == GetClient().GetHabbo().Motto) { return; } GetClient().GetHabbo().Motto = Motto; GetClient().GetHabbo().RefreshUserDetails(); GetClient().GetHabbo().GetMessenger().UpdateStatus(); GetClient().GetHabbo().UpdateVariable("motto", Motto,true); } internal void EditLook() { string Gender = Request.PopFixedString(); string Look = DuckEnvironment.CleanInjections(Request.PopFixedString()); if (GetClient().GetHabbo() == null) { return; } GetClient().GetHabbo().Look = Look; GetClient().GetHabbo().Gender = Gender; GetResponse().Init(266); GetResponse().AppendInt32(-1); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Look); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Gender.ToLower()); GetResponse().AppendStringWithBreak(GetClient().GetHabbo().Motto); GetResponse().AppendInt32(GetClient().GetHabbo().Score); SendResponse(); GetClient().GetHabbo().RefreshUserDetails(); GetClient().GetHabbo().GetMessenger().UpdateStatus(); GetClient().GetHabbo().UpdateVariable("look", Look); GetClient().GetHabbo().UpdateVariable("gender", Gender.ToUpper()); } internal void SerializeBadgesInventory() { if (GetClient().GetHabbo() == null) { return; } SendResponse(GetClient().GetHabbo().GetBadgeTable().SerializeInventory()); } internal void SerializeFurniInventory() { if (GetClient().GetHabbo() == null) { return; } SendResponse(GetClient().GetHabbo().GetInventory().SerializeFloorItems()); SendResponse(GetClient().GetHabbo().GetInventory().SerializeWallItems()); } internal void SerializePetInventory() { if (GetClient().GetHabbo() == null) { return; } SendResponse(GetClient().GetHabbo().GetInventory().SerializePets()); } internal void EnableEffect() { uint EffectId = Request.PopWiredUInt(); GetClient().GetHabbo().GetEffectsTable().EnableEffect(EffectId); } internal void ApplyEffect() { int RawEffectId = Request.PopWiredInt32(); if (RawEffectId == -1) { RawEffectId = 0; } GetClient().GetHabbo().GetEffectsTable().ApplyEffect((uint)RawEffectId); } } #endregion #region Navigator partial class MessageHandler { internal void GetOwnRooms() { SendResponse(DuckEnvironment.NavigatorManager.SerializeOwnRooms(GetClient().GetHabbo())); } internal void GetFeatured() { SendResponse(DuckEnvironment.NavigatorManager.SerializePublicRooms()); } internal void GetPrivateCategorys() { SendResponse(DuckEnvironment.NavigatorManager.SerializePrivateCats()); } internal void GetPrivates() { int Category; if (!int.TryParse(Request.PopFixedString(), out Category)) { Category = 0; } SendResponse(DuckEnvironment.NavigatorManager.SerializePrivRooms(Category)); } internal void GetEventRooms() { int Category; if (!int.TryParse(Request.PopFixedString(), out Category)) { Category = -1; } SendResponse(DuckEnvironment.NavigatorManager.SerializeEvents(Category)); } internal void SearchRooms() { try { string Query = DuckEnvironment.CleanInjections(Request.PopFixedString()); SendResponse(DuckEnvironment.NavigatorManager.SearchRooms(Query)); } catch (Exception) { DuckEnvironment.WriteLine("Searching will be nulled.", ConsoleColor.Red); } } internal void GetPopulairTags() { SendResponse(DuckEnvironment.NavigatorManager.SerializePopulairTags()); } internal void GetFavoriteRooms() { SendResponse(DuckEnvironment.NavigatorManager.SerializeFavoriteRooms(GetClient().GetHabbo())); } internal void GetLastVisited() { SendResponse(DuckEnvironment.NavigatorManager.SerializeLastVisited(GetClient().GetHabbo())); } internal void GetWhereFriendAre() { SendResponse(DuckEnvironment.NavigatorManager.SerializeWhereFriendsAre(GetClient().GetHabbo())); } internal void GoHotelView() { if (GetClient().GetHabbo().InRoom) { GetClient().GetHabbo().GetRoomUser().WalkToDoor(); } } internal void CanCreateRoom() { //H@ISCcannot GetResponse().Init(512); GetResponse().AppendInt32(0); GetResponse().AppendInt32(50); // maxrooms SendResponse(); } internal void AddFavorite() { uint RoomId = Request.PopWiredUInt(); if (GetClient().GetHabbo().Favorites.Contains(RoomId)) { return; } GetClient().GetHabbo().Favorites.Add(RoomId); GetResponse().Init(459); GetResponse().AppendUInt(RoomId); GetResponse().AppendBoolean(true); SendResponse(); using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("INSERT INTO user_favorites (user_id,room_id) VALUES ('" + GetClient().GetHabbo().Id + "','" + RoomId + "')"); } } internal void RemoveFavorite() { uint RoomId = Request.PopWiredUInt(); if (!GetClient().GetHabbo().Favorites.Contains(RoomId)) { return; } GetClient().GetHabbo().Favorites.Remove(RoomId); GetResponse().Init(459); GetResponse().AppendUInt(RoomId); GetResponse().AppendBoolean(false); SendResponse(); using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("DELETE FROM user_favorites WHERE room_id = '" + RoomId + "' AND user_id = '" + GetClient().GetHabbo().Id + "' LIMIT 1"); } } internal void CreateRoom() { string Name = DuckEnvironment.CleanInjections(Request.PopFixedString()); string ModelName = Request.PopFixedString(); //@{jeMZmdirectname{{2}} Room Room = DuckEnvironment.RoomManager.CreateRoom(Name, ModelName, GetClient().GetHabbo().Username); if (Room == null) { return; } GetResponse().Init(59); GetResponse().AppendUInt(Room.Id); GetResponse().AppendStringWithBreak(Name); SendResponse(); } internal void UpdateHomeRoom() { uint RoomId = Request.PopWiredUInt(); if (GetClient().GetHabbo().HomeRoom == RoomId) { return; // already } GetResponse().Init(455); GetResponse().AppendUInt(RoomId); SendResponse(); GetClient().GetHabbo().HomeRoom = RoomId; GetClient().GetHabbo().UpdateVariable("home_room", RoomId); } } #endregion #region Catalogue partial class MessageHandler { internal void SerializeIndexs() { SendResponse(DuckEnvironment.CatalogueManager.SerializeIndex(GetClient().GetHabbo())); } internal void SerializePage() { SendResponse(DuckEnvironment.CatalogueManager.SerializePage(Request.PopWiredInt32())); } internal void PurchaseItem() { uint PageId = Request.PopWiredUInt(); uint ItemId = Request.PopWiredUInt(); string ExtraData = Request.PopFixedString(); Catalogue.CatalogueItem Item = DuckEnvironment.CatalogueManager.GetCataItem(ItemId); if (Item == null) { return; } DuckEnvironment.CatalogueManager.PurchaseItem(GetClient().GetHabbo(), Item, PageId,ExtraData); } internal void CanSendItem() { uint ItemId = Request.PopWiredUInt(); CatalogueItem Item = DuckEnvironment.CatalogueManager.GetCataItem(ItemId); if (Item == null) { return; } GetResponse().Init(622); GetResponse().AppendUInt(ItemId); GetResponse().AppendBoolean(false); // can or not SendResponse(); } internal void GetPetRace() { string PetType = Request.PopFixedString(); int Type = Convert.ToInt32(PetType.Substring(6)); if (Type < 0) { return; } int count = 0; GetResponse().Init(827); if (Type == 0) { count = 25; } else if (Type == 1) { count = 25; } else if (Type == 2) { count = 12; } else if (Type == 3) { count = 7; } else if (Type == 4) { count = 4; } else if (Type == 5) { count = 7; } else if (Type == 6) { count = 13; } else if (Type == 7) { count = 8; } else if (Type == 8) { count = 13; } else if (Type == 9) { count = 9; } else if (Type == 10) { count = 0; } else if (Type == 11) { count = 13; } else if (Type == 12) { count = 6; } GetResponse().AppendStringWithBreak("a0 pet" + Type); GetResponse().AppendInt32(count); for (int i = 0; i < count; i++) { GetResponse().AppendInt32(Type); GetResponse().AppendInt32(i); GetResponse().AppendBoolean(true); GetResponse().AppendBoolean(false); } SendResponse(); } } #endregion #region Messenger partial class MessageHandler { internal void InitMessenger() { SendResponse(GetClient().GetHabbo().GetMessenger().SerializeBuddies()); SendResponse(GetClient().GetHabbo().GetMessenger().SerializeRequests()); } internal void SearchMessenger() { string Name = Request.PopFixedString(); SendResponse(GetClient().GetHabbo().GetMessenger().Search(Name)); } internal void Chat() { uint BuddyId = Request.PopWiredUInt(); string Message = DuckEnvironment.CleanInjections(Request.PopFixedString()); GetClient().GetHabbo().GetMessenger().ChatTo(BuddyId, Message); } internal void InviteForFollow() { int Length = Request.PopWiredInt32(); for (int i = 0; i < Length; i++) { uint BuddyId = Request.PopWiredUInt(); string Message = DuckEnvironment.CleanInjections(Request.PopFixedString()); GetClient().GetHabbo().GetMessenger().SendFollow(BuddyId, Message); } } internal void DeleteFriend() { int Length = Request.PopWiredInt32(); for (int i = 0; i < Length; i++) { SendResponse(GetClient().GetHabbo().GetMessenger().DeletBuddy(Request.PopWiredUInt())); } } internal void ReqFriendFromConsole() { string Username = Request.PopFixedString(); GetClient().GetHabbo().GetMessenger().RequestUser(Username); if (GetClient().GetHabbo().ProgressQuest == 12) { DuckEnvironment.QuestManager.UpdateQuest(GetClient().GetHabbo()); } } internal void AcceptUsers() { int Length = Request.PopWiredInt32(); for (int i = 0; i < Length; i++) { GetClient().GetHabbo().GetMessenger().AcceptUser(Request.PopWiredUInt()); } } internal void DenyUsers() { int Length = Request.PopWiredInt32(); for (int i = 0; i < Length; i++) { GetClient().GetHabbo().GetMessenger().DenyUser(Request.PopWiredUInt()); } } internal void FollowBuddy() { if (!GetClient().GetHabbo().InRoom) return; // hotelvieuw uint BuddyId = Request.PopWiredUInt(); GetClient().GetHabbo().GetMessenger().FollowBuddy(BuddyId); } } #endregion }