using System; using System.Data; using System.Text; using Aleeda.Core; using IHI.Server.Plugins.Cecer1.IHIPathfinder.Standalone; using Aleeda.HabboHotel.Cache; using Aleeda.HabboHotel.Habbos; using Aleeda.HabboHotel.Rooms; using Aleeda.HabboHotel.Rooms.User; using Aleeda.Storage; namespace Aleeda.HabboHotel.Client { public partial class ClientMessageHandler { private void RequestRoom() { if (mRoomList.Contains(Client)) { Client.GetHabbo().Functions().DepartFromRoom(false); } PrivateRooms mRoom = AleedaEnvironment.GetCache().GetPrivateRooms().getRoom(Request.PopWiredInt32()); { if (mRoom == null) { return; } if (mBoolean.CheckRoomBanned(Client.GetHabbo().Username, mRoom.ID) == true) { Response.Initialize(224); // "C`" SendResponse(); Response.Initialize(18); // "@R" SendResponse(); } else { //Add the room id it's trying to enter! Client.GetHabbo().RoomId = mRoom.ID; if (mRoom.Status == 0) { AllowRoomEntry(); } else if ((uint)mRoom.OwnerID == Client.GetHabbo().ID) { AllowRoomEntry(); } else if (mRoom.Status == 1) { Response.Initialize(91); Response.AppendString(""); SendResponse(); Response.Initialize(91); Response.AppendString(Client.GetHabbo().Username); SendToUsersWithRights(); } if (AleedaEnvironment.GetHabboHotel().GetHabbos().GetHabbo((uint)mRoom.OwnerID).Username == Client.GetHabbo().Username) { Response.Initialize(42); // "@j" SendResponse(); Response.Initialize(47); // "@o" SendResponse(); } } if (mBoolean.CheckRoomRights(Client.GetHabbo().Username, mRoom.ID)) { Response.Initialize(42); // "@j" SendResponse(); Response.Initialize(47); // "@o" SendResponse(); } } } private void AllowRoomEntry() { //Says the user has entered the room! woo! Client.GetHabbo().Functions().ArriveToRoom(); PrivateRooms mRoom = AleedaEnvironment.GetCache().GetPrivateRooms().getRoom(Client.GetHabbo().RoomId); { if (mRoom == null) { return; } Response.Initialize(19); // "@S" SendResponse(); Response.Initialize(166); // "Bf" Response.Append("/client/private/"); Response.Append(mRoom.ID); Response.Append("/id"); SendResponse(); Response.Initialize(69); // "AE" Response.AppendString(mRoom.Model); Response.AppendInt32(mRoom.ID); SendResponse(); //Response.Initialize(345); // "EY" Response.AppendInt32(mRoom.Rating); SendResponse(); //Sets the room model the user is currently in. Client.GetHabbo().FlatModel = mRoom.Model; //Sets the type public/private Client.GetHabbo().FlatType = "private"; //Make a random unit id Client.GetHabbo().UnitId = AleedaEnvironment.GenerateRandomNum(100, 1000); //Save the user Client.SaveUserObject(); if (mRoom.Wall != 0) { Response.Initialize(46); // @n Response.AppendString("wallpaper"); Response.Append(mRoom.Wall); SendResponse(); } if (mRoom.Floor != 0) { Response.Initialize(46); // @n Response.AppendString("floor"); Response.Append(mRoom.Floor); SendResponse(); } Response.Initialize(46); // @n Response.AppendString("landscape"); Response.Append(mRoom.LandScape); SendResponse(); } } private void AnswerDoorbell() { string Name = Request.PopFixedString(); byte[] Result = Request.ReadBytes(1); GameClient sClient = AleedaEnvironment.GetHabboHotel().GetClients().GetClientOfHabbo(Name); if (Client == null) { return; } Boolean Accepted = (Result[0] == Convert.ToByte(65)); Console.WriteLine(Accepted); if (Accepted) { sClient.GetMessageHandler().GetResponse().Initialize(41); sClient.GetMessageHandler().SendResponse(); } else { sClient.GetMessageHandler().GetResponse().Initialize(131); sClient.GetMessageHandler().SendResponse(); } } /// /// 390 - "FF" /// private void GetRoomEntryDataMessageComposer() { try { Client.GetHabbo().X = Client.GetHabbo().Functions().GetModelX(); Client.GetHabbo().Y = Client.GetHabbo().Functions().GetModelY(); } catch { Client.GetHabbo().X = 0; Client.GetHabbo().Y = 0; } using (DatabaseClient dbClient = AleedaEnvironment.GetDatabase().GetClient()) { string map; try { map = dbClient.ReadString("SELECT heightmap FROM room_models WHERE id = '" + Client.GetHabbo().FlatModel + "'"); } catch { map = ""; } Response.Initialize(31); // "@_" Response.AppendString(map.Replace("/", "\r")); SendResponse(); Response.Initialize(470); // "GV" Response.AppendString(map.Replace("/", "\r")); SendResponse(); CatalogIndexMessageEvent(); } } #region Nothing packets private void ProccessPacketCf() { Response.Initialize(309); // "Du" Response.AppendInt32(0); SendResponse(); } private void ProccessPacketCW() { Response.Initialize(297); // "Di" Response.AppendInt32(0); SendResponse(); } #endregion private void CatalogIndexMessageEvent() { if (Client.GetHabbo().FlatType == "private") { PrivateRooms mRoom = AleedaEnvironment.GetCache().GetPrivateRooms().getRoom(Client.GetHabbo().RoomId); if (mRoom == null) { return; } #region Bots if (AleedaEnvironment.GetCache().GetRoomBots().RoomBotCounts(Client.GetHabbo().RoomId) != 0) { AleedaEnvironment.GetCache().GetRoomBots().LoadAnyBotChats(Client.GetHabbo().Username, Client.GetHabbo().RoomId); } #endregion Response.Initialize(45); GetWallItems().SerializeWallDisplay(GetResponse(), Client.GetHabbo().RoomId); SendResponse(); Response.Initialize(32); GetFloorItems().Serialize(GetResponse(), Client.GetHabbo().RoomId); SendResponse(); Response.Initialize(471); // "GW" Serialize.RoomEntryInfo(Client, AleedaEnvironment.GetHabboHotel().GetHabbos().GetHabbo((UInt32)mRoom.OwnerID).Username, Response); SendResponse(); Response.Initialize(28); // "@\" Serialize.SerializeUsers(true, Client.GetHabbo().RoomId, Response); SendRoom(); Response.Initialize(34); // "@b" Serialize.SerializeStatus(true, Client.GetHabbo().RoomId, Response); SendRoom(); } else if (Client.GetHabbo().FlatType == "public") { Response.Initialize(471); // "GW" Serialize.RoomEntryInfo(Client, "", Response); SendResponse(); Response.Initialize(30); // "@^" Response.Append(Select.GetPublicRoomItems(Client.GetHabbo().FlatModel)); SendResponse(); try { Response.Initialize(28); // "@\" Serialize.SerializeUsers(false, Client.GetHabbo().pRoomId, GetResponse()); SendRoom(); Response.Initialize(34); // "@b" Serialize.SerializeStatus(false, Client.GetHabbo().RoomId, GetResponse()); SendRoom(); } catch (Exception e) { Console.WriteLine(e); } } } private void GetRoomSettingsMessageComposer() { PrivateRooms mRoom = AleedaEnvironment.GetCache().GetPrivateRooms().getRoom(Client.GetHabbo().RoomId); if (mRoom == null) { return; } Response.Initialize(465); // "GQ" Response.AppendInt32(mRoom.ID); Response.AppendString(mRoom.Name); Response.AppendString(mRoom.Description); Response.AppendInt32(mRoom.Status); Response.AppendInt32(mRoom.Category); Response.AppendInt32(mRoom.MaxVisitors); Response.AppendInt32(25); Response.AppendInt32(AleedaEnvironment.GetCache().GetPrivateRooms().GetTagCount(mRoom.ID)); //TAG count AleedaEnvironment.GetCache().GetPrivateRooms().AppendTags(Response, mRoom.ID); AleedaEnvironment.GetCache().GetPrivateRooms().SerializeUsersWithRights(Response, mRoom.ID); Response.AppendInt32(AleedaEnvironment.GetCache().GetPrivateRooms().RoomWithRightsCount(mRoom.ID)); Response.AppendInt32(mRoom.PetsAllowed); // allows pets in room - pet system lacking, so always off Response.AppendBoolean(mRoom.PetsEatOtherFood); // allows pets to eat your food - pet system lacking, so always off Response.AppendBoolean(true); Response.AppendBoolean(false); //hidewalls Response.AppendInt32(0); Response.AppendInt32(0); SendResponse(); } private void GetGuestRoomMessageComposer() { PrivateRooms mRoom = AleedaEnvironment.GetCache().GetPrivateRooms().getRoom(Client.GetHabbo().RoomId); if (mRoom == null) { return; } Response.Initialize(454); // "GF" Response.AppendInt32(0); Response.AppendInt32(mRoom.ID); Response.AppendBoolean(true); Response.AppendString(mRoom.Name); Response.AppendString(AleedaEnvironment.GetHabboHotel().GetHabbos().GetHabbo((uint)mRoom.OwnerID).Username); Response.AppendInt32(mRoom.Status); Response.AppendInt32(AleedaEnvironment.GetCache().GetPrivateRooms().UsersInRoomCount(mRoom.ID)); Response.AppendInt32(mRoom.MaxVisitors); Response.AppendString(mRoom.Description); Response.AppendBoolean(true); Response.AppendBoolean(true); //Trading set on by default. Response.AppendInt32(mRoom.Rating); Response.AppendInt32(mRoom.Category); Response.AppendString(""); Response.AppendInt32(AleedaEnvironment.GetCache().GetPrivateRooms().GetTagCount(mRoom.ID)); //TAG count AleedaEnvironment.GetCache().GetPrivateRooms().AppendTags(Response, mRoom.ID); //Response.Append(mRoom.Thumbnail); SendResponse(); } private void QuitMessageComposer() { //Make sure the user offically leaves the room Client.GetHabbo().Functions().DepartFromRoom(true); } private void ChangeMotto() { string newMotto = Request.PopFixedString(); Response.Initialize(266); // "DJ" Response.AppendInt32(Client.GetHabbo().UnitId); //virtual id (unit id) Response.AppendString(Client.GetHabbo().Figure); Response.AppendString(Client.GetHabbo().Gender.ToString().ToLower()); Response.AppendString(newMotto); Response.AppendInt32(0); //Achievement score SendRoom(); Client.GetHabbo().Motto = newMotto; Client.SaveUserObject(); } private void TriggerItem() { if (RoomUser.CalculateRights(Client.GetHabbo().RoomId, Client.GetHabbo().ID)) { int furniID = Request.PopWiredInt32(); FloorItems mFloor = AleedaEnvironment.GetCache().GetFloorItems().getItem(furniID); WallItems mWall = AleedaEnvironment.GetCache().GetWallItems().getItem(furniID); if (mFloor == null) { Response.Initialize(85); // "AU" Response.AppendString(mWall.ID + ""); Response.AppendInt32(mWall.SpriteID); Response.AppendString(mWall.Wall); if (mWall.Trigger == 0) { Response.Append(1); Update.UpdateFurniTrigger(furniID, 1); //Set the trigger AleedaEnvironment.GetCache().GetWallItems().getItem(mWall.ID).Trigger = 1; } else { Response.Append(0); Update.UpdateFurniTrigger(furniID, 0); //Set the trigger AleedaEnvironment.GetCache().GetWallItems().getItem(mWall.ID).Trigger = 0; } SendRoom(); } else if (mWall == null) { Response.Initialize(88); // "AX" Response.Append(furniID); Response.AppendChar(2); if (mFloor.Trigger == 0) { Response.Append(1); Update.UpdateFurniTrigger(furniID, 1); //Set the trigger AleedaEnvironment.GetCache().GetFloorItems().getItem(mFloor.ID).Trigger = 1; } else { Response.Append(0); Update.UpdateFurniTrigger(furniID, 0); //Set the trigger AleedaEnvironment.GetCache().GetFloorItems().getItem(mFloor.ID).Trigger = 0; } Response.AppendChar(2); SendRoom(); } } } private void DeleteRoom() { int Id = Request.PopWiredInt32(); using (DatabaseClient dbClient = AleedaEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("DELETE FROM room_items WHERE mID = '" + Id + "'"); dbClient.ExecuteQuery("DELETE FROM room_bans WHERE roomid = '" + Id + "'"); dbClient.ExecuteQuery("DELETE FROM room_rights WHERE roomid = '" + Id + "'"); dbClient.ExecuteQuery("DELETE FROM private_rooms WHERE id = '" + Id + "'"); //Update Users ID when pressing the x button on navigator Client.GetHabbo().RoomId = 0; Client.SaveUserObject(); //Make sure the user offically leaves the room Leave.LeaveRoom(Client, true); //Delete room from cache AleedaEnvironment.GetCache().GetPrivateRooms().deleteRoom(Id); this.GetOwnGuestRoom(); } } private void SaveRoomIcon() { //Remove crap Request.PopWiredInt32(); string Background = Request.PopEncodeInt32(); string TopLayer = Request.PopEncodeInt32(); //Save the thumbnail AleedaEnvironment.GetCache().GetPrivateRooms().getRoom(Client.GetHabbo().RoomId).Thumbnail = Background + TopLayer + "HH"; GetResponse().Initialize(457); GetResponse().AppendInt32(Client.GetHabbo().RoomId); GetResponse().AppendBoolean(true); SendResponse(); GetResponse().Initialize(456); GetResponse().AppendInt32(Client.GetHabbo().RoomId); SendResponse(); using (DatabaseClient dbClient = AleedaEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("UPDATE private_rooms SET thumbnail = '" + Background + TopLayer + "HH' WHERE id = '" + Client.GetHabbo().RoomId + "'"); } } private void NewHomeRoom() { Client.GetHabbo().HomeRoom = Request.PopWiredInt32(); Response.Initialize(455); Response.AppendInt32(Client.GetHabbo().HomeRoom); SendResponse(); using (DatabaseClient dbClient = AleedaEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("UPDATE users SET homeRoom = '" + Client.GetHabbo().HomeRoom + "' WHERE id = '" + Client.GetHabbo().ID + "'"); } } private void KickUser() { int VirtualId = Request.PopWiredInt32(); Response.Initialize(29); // "@]" Response.AppendRawInt32(VirtualId); SendRoom(); if (AleedaEnvironment.GetCache().GetRoomBots().getBotWithVirtualID(VirtualId) != null) { AleedaEnvironment.GetCache().GetRoomBots().getBotWithVirtualID(VirtualId).IsKicked = true; } else { foreach (GameClient mClient in mRoomList) { if (mClient.GetHabbo().RoomId == Client.GetHabbo().RoomId && mClient.GetHabbo().UnitId == VirtualId) { Response.Initialize(18); mClient.GetMessageHandler().SendResponse(); } } } } public FloorItems GetFloorItems() { return AleedaEnvironment.GetCache().GetFloorItems(); } public WallItems GetWallItems() { return AleedaEnvironment.GetCache().GetWallItems(); } public PrivateRooms GetPrivateRooms() { return AleedaEnvironment.GetCache().GetPrivateRooms(); } public RoomBots GetRoomBots() { return AleedaEnvironment.GetCache().GetRoomBots(); } /// /// Registers request handlers that process room Navigator queries etc. /// public void RegisterRoom() { mRequestHandlers[386] = new RequestHandler(SaveRoomIcon); mRequestHandlers[391] = new RequestHandler(RequestRoom); mRequestHandlers[230] = new RequestHandler(ProccessPacketCf); mRequestHandlers[215] = new RequestHandler(ProccessPacketCW); mRequestHandlers[126] = new RequestHandler(CatalogIndexMessageEvent); mRequestHandlers[400] = new RequestHandler(GetRoomSettingsMessageComposer); mRequestHandlers[390] = new RequestHandler(GetRoomEntryDataMessageComposer); mRequestHandlers[385] = new RequestHandler(GetGuestRoomMessageComposer); mRequestHandlers[53] = new RequestHandler(QuitMessageComposer); mRequestHandlers[484] = new RequestHandler(ChangeMotto); mRequestHandlers[393] = new RequestHandler(TriggerItem); mRequestHandlers[392] = new RequestHandler(TriggerItem); mRequestHandlers[23] = new RequestHandler(DeleteRoom); mRequestHandlers[384] = new RequestHandler(NewHomeRoom); mRequestHandlers[98] = new RequestHandler(AnswerDoorbell); mRequestHandlers[441] = new RequestHandler(KickUser); } } }