public void Dispose() { SendMessage(new CloseConnectionComposer()); if (!mDisposed) { isCrashed = false; mDisposed = true; try { if (ProcessTask != null && ProcessTask.IsCompleted) { ProcessTask.Dispose(); } } catch { } GetRoomItemHandler().SaveFurniture(); using (IQueryAdapter dbClient = QuasarEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.runFastQuery("UPDATE `rooms` SET `users_now` = '0' WHERE `id` = '" + Id + "' LIMIT 1"); } if (this._roomUserManager.PetCount > 0) { this._roomUserManager.UpdatePets(); } this.SaveAI(); UsersNow = 0; RoomData.UsersNow = 0; UsersWithRights.Clear(); Bans.Clear(); MutedUsers.Clear(); Tents.Clear(); this.TonerData = null; this.MoodlightData = null; this._filterComponent.Cleanup(); this._wiredComponent.Cleanup(); if (this._gameItemHandler != null) { this._gameItemHandler.Dispose(); } if (this._gameManager != null) { this._gameManager.Dispose(); } if (this._freeze != null) { this._freeze.Dispose(); } if (this._banzai != null) { this._banzai.Dispose(); } if (this._soccer != null) { this._soccer.Dispose(); } if (this._gamemap != null) { this._gamemap.Dispose(); } if (this._roomUserManager != null) { this._roomUserManager.Dispose(); } if (this._roomItemHandling != null) { this._roomItemHandling.Dispose(); } if (ActiveTrades.Count > 0) { ActiveTrades.Clear(); } } }
public void Parse(GameClient session, ClientPacket packet) { if (session == null || session.Habbo == null || !session.Habbo.InRoom) { return; } if (!PlusEnvironment.GetGame().GetRoomManager().TryGetRoom(session.Habbo.CurrentRoomId, out Room room)) { return; } string rawData = packet.PopString(); var data = rawData.Split(' '); if (!int.TryParse(data[0], out int itemId)) { return; } bool hasRights = room.CheckRights(session, false, true); if (!hasRights) { session.SendPacket(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_not_owner}")); return; } Item item = session.Habbo.GetInventoryComponent().GetItem(itemId); if (item == null) { return; } if (room.GetRoomItemHandler().GetWallAndFloor.Count() > Convert.ToInt32(PlusEnvironment.GetSettingsManager().TryGetValue("room.item.placement_limit"))) { session.SendNotification("You cannot have more than " + Convert.ToInt32(PlusEnvironment.GetSettingsManager().TryGetValue("room.item.placement_limit")) + " items in a room!"); return; } if (item.Data.InteractionType == InteractionType.EXCHANGE && room.OwnerId != session.Habbo.Id && !session.Habbo.GetPermissions().HasRight("room_item_place_exchange_anywhere")) { session.SendNotification("You cannot place exchange items in other people's rooms!"); return; } //TODO: Make neat. switch (item.GetBaseItem().InteractionType) { #region Interaction Types case InteractionType.MOODLIGHT: { MoodlightData moodData = room.MoodlightData; if (moodData != null && room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) { session.SendNotification("You can only have one background moodlight per room!"); return; } break; } case InteractionType.TONER: { TonerData tonerData = room.TonerData; if (tonerData != null && room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null) { session.SendNotification("You can only have one background toner per room!"); return; } break; } case InteractionType.HOPPER: { if (room.GetRoomItemHandler().HopperCount > 0) { session.SendNotification("You can only have one hopper per room!"); return; } break; } case InteractionType.TENT: case InteractionType.TENT_SMALL: { room.AddTent(item.Id); break; } #endregion } if (!item.IsWallItem) { if (data.Length < 4) { return; } if (!int.TryParse(data[1], out int x)) { return; } if (!int.TryParse(data[2], out int y)) { return; } if (!int.TryParse(data[3], out int rotation)) { return; } Item roomItem = new Item(item.Id, room.RoomId, item.BaseItem, item.ExtraData, x, y, 0, rotation, session.Habbo.Id, item.GroupId, item.LimitedNo, item.LimitedTot, string.Empty, room); if (room.GetRoomItemHandler().SetFloorItem(session, roomItem, x, y, rotation, true, false, true)) { session.Habbo.GetInventoryComponent().RemoveItem(itemId); if (session.Habbo.Id == room.OwnerId) { _achievementManager.ProgressAchievement(session, "ACH_RoomDecoFurniCount", 1); } if (roomItem.IsWired) { try { room.GetWired().LoadWiredBox(roomItem); } catch { Console.WriteLine(item.GetBaseItem().InteractionType); } } } else { session.SendPacket(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); } } else if (item.IsWallItem) { string[] correctedData = new string[data.Length - 1]; for (int i = 1; i < data.Length; i++) { correctedData[i - 1] = data[i]; } if (TrySetWallItem(correctedData, out string wallPos)) { try { Item roomItem = new Item(item.Id, room.RoomId, item.BaseItem, item.ExtraData, 0, 0, 0, 0, session.Habbo.Id, item.GroupId, item.LimitedNo, item.LimitedTot, wallPos, room); if (room.GetRoomItemHandler().SetWallItem(session, roomItem)) { session.Habbo.GetInventoryComponent().RemoveItem(itemId); if (session.Habbo.Id == room.OwnerId) { _achievementManager.ProgressAchievement(session, "ACH_RoomDecoFurniCount", 1); } } } catch { session.SendPacket(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); } } else { session.SendPacket(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); } } }
public void Dispose() { SendPacket(new CloseConnectionComposer()); if (!mDisposed) { isCrashed = false; mDisposed = true; /* TODO: Needs reviewing */ try { if (ProcessTask != null && ProcessTask.IsCompleted) { ProcessTask.Dispose(); } } catch { } if (ActiveTrades.Count > 0) { ActiveTrades.Clear(); } TonerData = null; MoodlightData = null; if (MutedUsers.Count > 0) { MutedUsers.Clear(); } if (Tents.Count > 0) { Tents.Clear(); } if (UsersWithRights.Count > 0) { UsersWithRights.Clear(); } if (_gameManager != null) { _gameManager.Dispose(); _gameManager = null; } if (_freeze != null) { _freeze.Dispose(); _freeze = null; } if (_soccer != null) { _soccer.Dispose(); _soccer = null; } if (_banzai != null) { _banzai.Dispose(); _banzai = null; } if (_gamemap != null) { _gamemap.Dispose(); _gamemap = null; } if (_gameItemHandler != null) { _gameItemHandler.Dispose(); _gameItemHandler = null; } // Room Data? if (teambanzai != null) { teambanzai.Dispose(); teambanzai = null; } if (teamfreeze != null) { teamfreeze.Dispose(); teamfreeze = null; } if (_roomUserManager != null) { _roomUserManager.Dispose(); _roomUserManager = null; } if (_roomItemHandling != null) { _roomItemHandling.Dispose(); _roomItemHandling = null; } if (_wordFilterList.Count > 0) { _wordFilterList.Clear(); } if (_filterComponent != null) { _filterComponent.Cleanup(); } if (_wiredComponent != null) { _wiredComponent.Cleanup(); } if (_bansComponent != null) { _bansComponent.Cleanup(); } if (_tradingComponent != null) { _tradingComponent.Cleanup(); } } }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom) { return; } if (!NeonEnvironment.GetGame().GetRoomManager().TryGetRoom(Session.GetHabbo().CurrentRoomId, out Room Room)) { return; } string RawData = Packet.PopString(); string[] Data = RawData.Split(' '); if (!int.TryParse(Data[0], out int ItemId)) { return; } bool HasRights = false; if (Room.CheckRights(Session, false, true)) { HasRights = true; } if (!HasRights) { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_not_owner}")); return; } Item Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } if (Room.ForSale) { Session.SendWhisper("No se puede editar la Sala mientras está a la venta."); Session.SendWhisper("Cancela la Venta de la Sala expulsando a todos escribe ':unload' (sin las '')"); return; } if (Room.GetRoomItemHandler().GetWallAndFloor.Count() > NeonStaticGameSettings.RoomFurnitureLimit) { Session.SendNotification("no se puede tener mas de " + NeonStaticGameSettings.RoomFurnitureLimit + " furnis en una sala!"); return; } else if (Item.GetBaseItem().ItemName.ToLower().Contains("cf") && Room.OwnerId != Session.GetHabbo().Id&& !Session.GetHabbo().GetPermissions().HasRight("room_item_place_exchange_anywhere")) { Session.SendNotification("No se puede colocar monedas canjeables en esta sala!"); return; } //TODO: Make neat. switch (Item.GetBaseItem().InteractionType) { #region Interaction Types case InteractionType.MOODLIGHT: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) { Session.SendNotification("Solo puedes tener un (1) regulador por sala!"); return; } break; } case InteractionType.TONER: { TonerData tonerData = Room.TonerData; if (tonerData != null && Room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null) { Session.SendNotification("Solo puedes tener un (1) pinta fondo por sala!"); return; } break; } case InteractionType.HOPPER: { if (Room.GetRoomItemHandler().HopperCount > 0) { Session.SendNotification("Solo puedes tener un (1) SaltaSalas en esta habitacion!"); return; } break; } case InteractionType.TENT: case InteractionType.TENT_SMALL: { Room.AddTent(Item.Id); break; } #endregion } if (!Item.IsWallItem) { if (Data.Length < 4) { return; } if (!int.TryParse(Data[1], out int X)) { return; } if (!int.TryParse(Data[2], out int Y)) { return; } if (!int.TryParse(Data[3], out int Rotation)) { return; } Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rotation, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, string.Empty, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rotation, true, false, true)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { NeonEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } if (RoomItem.IsWired) { try { Room.GetWired().LoadWiredBox(RoomItem); } catch { Console.WriteLine(Item.GetBaseItem().InteractionType); } } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else if (Item.IsWallItem) { string[] CorrectedData = new string[Data.Length - 1]; for (int i = 1; i < Data.Length; i++) { CorrectedData[i - 1] = Data[i]; } if (TrySetWallItem(Session.GetHabbo(), Item, CorrectedData, out string WallPos)) { try { Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, 0, 0, 0, 0, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, WallPos, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { NeonEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } } } catch { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom) { return; } Room Room = null; if (!CloudServer.GetGame().GetRoomManager().TryGetRoom(Session.GetHabbo().CurrentRoomId, out Room)) { return; } int ItemId = 0; string[] Data = null; string RawData = Packet.PopString(); Data = RawData.Split(' '); if (!int.TryParse(Data[0], out ItemId)) { return; } bool HasRights = false; if (Room.CheckRights(Session, false, true)) { HasRights = true; } if (!HasRights) { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_not_owner}")); return; } Item Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } if (Room.ForSale) { Session.SendWhisper("Você não pode editar o quarto enquanto ele esta a venda"); Session.SendWhisper("Para cancelar a venda digite ':unload' (sem'')"); return; } if (Room.GetRoomItemHandler().GetWallAndFloor.Count() > Convert.ToInt32(CloudServer.GetGame().GetSettingsManager().TryGetValue("room.item.placement_limit"))) { Session.SendNotification("Você não pode ter mais de " + Convert.ToInt32(CloudServer.GetGame().GetSettingsManager().TryGetValue("room.item.placement_limit")) + " mobs em uma sala!"); return; } else if (Item.GetBaseItem().ItemName.ToLower().Contains("cf") && Room.OwnerId != Session.GetHabbo().Id&& !Session.GetHabbo().GetPermissions().HasRight("room_item_place_exchange_anywhere")) { Session.SendNotification("Você não pode colocar moedas trocadas nesta sala!"); return; } //TODO: Make neat. switch (Item.GetBaseItem().InteractionType) { #region Interaction Types case InteractionType.MOODLIGHT: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) { Session.SendNotification("Você pode ter apenas um (1) regulador de quarto!"); return; } break; } case InteractionType.TONER: { TonerData tonerData = Room.TonerData; if (tonerData != null && Room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null) { Session.SendNotification("Você pode ter apenas um (1) Sala de fundo pintado!"); return; } break; } case InteractionType.HOPPER: { if (Room.GetRoomItemHandler().HopperCount > 0) { Session.SendNotification("Você só pode ter um (1) SaltaSalas nesta sala!"); return; } break; } case InteractionType.TENT: case InteractionType.TENT_SMALL: { Room.AddTent(Item.Id); break; } #endregion } if (!Item.IsWallItem) { if (Data.Length < 4) { return; } int X = 0; int Y = 0; int Rotation = 0; if (!int.TryParse(Data[1], out X)) { return; } if (!int.TryParse(Data[2], out Y)) { return; } if (!int.TryParse(Data[3], out Rotation)) { return; } Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rotation, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, string.Empty, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rotation, true, false, true)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { CloudServer.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } if (RoomItem.IsWired) { try { Room.GetWired().LoadWiredBox(RoomItem); } catch { Console.WriteLine(Item.GetBaseItem().InteractionType); } } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else if (Item.IsWallItem) { string[] CorrectedData = new string[Data.Length - 1]; for (int i = 1; i < Data.Length; i++) { CorrectedData[i - 1] = Data[i]; } string WallPos = string.Empty; if (TrySetWallItem(Session.GetHabbo(), Item, CorrectedData, out WallPos)) { try { Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, 0, 0, 0, 0, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, WallPos, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { CloudServer.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } } } catch { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom) { return; } if (Session.GetHabbo().ViewInventory) { Session.SendMessage("Oeps! Je kunt dit item niet plaatsen omdat je momenteel iemand anders zijn of haar inventaris aan het bekijken bent."); return; } Room Room = null; if (!QuasarEnvironment.GetGame().GetRoomManager().TryGetRoom(Session.GetHabbo().CurrentRoomId, out Room)) { return; } int ItemId = 0; string[] Data = null; string RawData = Packet.PopString(); Data = RawData.Split(' '); if (!int.TryParse(Data[0], out ItemId)) { return; } bool HasRights = false; if (Room.CheckRights(Session, false, true)) { HasRights = true; } if (!HasRights) { Session.SendMessage(RoomNotificationComposer.SendBubble("bubble_bouwen", "Oeps! Je kan dit item hier niet plaatsen.", "")); return; } Item Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } if (Room.ForSale) { Session.SendWhisper("Oeps! Je kunt de kamer niet bewerken wanneer deze te koop staat!"); Session.SendWhisper("Als je de verkoop wilt annuleren gebruik dan de command :unload."); return; } if (Room.GetRoomItemHandler().GetWallAndFloor.Count() > QuasarStaticGameSettings.RoomFurnitureLimit) { Session.SendNotification("Oeps! Je kunt niet meer dan " + QuasarStaticGameSettings.RoomFurnitureLimit + " items in één kamer hebben."); return; } else if (Item.GetBaseItem().ItemName.ToLower().Contains("cf") && Room.OwnerId != Session.GetHabbo().Id&& !Session.GetHabbo().GetPermissions().HasRight("room_item_place_exchange_anywhere")) { Session.SendNotification("Oeps! Je hebt niet de bevoegdheid om deze actie uit te voeren."); return; } if (Item.GetBaseItem().InteractionType == InteractionType.HOLE) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoHoleFurniCount", 1, false); } if (Item.GetBaseItem().InteractionType == InteractionType.DICE) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_CasinoPlaceDices", 1, false); } if (Item.GetBaseItem().InteractionType == InteractionType.POKER) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_CasinoPlayPoker", 1, false); } //TODO: Make neat. switch (Item.GetBaseItem().InteractionType) { #region Interaction Types case InteractionType.MOODLIGHT: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) { Session.SendMessage(new RoomCustomizedAlertComposer("Oeps! Je kunt maar één sfeerverlichter per kamer.")); return; } break; } case InteractionType.TONER: { TonerData tonerData = Room.TonerData; if (tonerData != null && Room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null) { Session.SendNotification("Oeps! Je kunt maar één kamer achtergrond toner per kamer."); return; } break; } case InteractionType.HOPPER: { if (Room.GetRoomItemHandler().HopperCount > 0) { Session.SendNotification("Oeps! Je kunt maar één hopper per kamer."); return; } break; } case InteractionType.JUKEBOX: { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_JukeboxPlaceRadio", 1); } break; case InteractionType.TENT: case InteractionType.TENT_SMALL: { Room.AddTent(Item.Id); break; } #endregion } QuasarEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.FURNI_PLACE); // Quests if (!Item.IsWallItem) { if (Data.Length < 4) { return; } int X = 0; int Y = 0; int Rotation = 0; if (!int.TryParse(Data[1], out X)) { return; } if (!int.TryParse(Data[2], out Y)) { return; } if (!int.TryParse(Data[3], out Rotation)) { return; } Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rotation, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, string.Empty, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rotation, true, false, true)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } if (RoomItem.IsWired) { try { Room.GetWired().LoadWiredBox(RoomItem); } catch { Console.WriteLine(Item.GetBaseItem().InteractionType); } } if (RoomItem.IsTrigger) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_WiredExpertTriggers", 1, false); } if (RoomItem.IsAction) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_WiredExpertActions", 1, false); } if (RoomItem.IsCondition) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_WiredExpertConditions", 1, false); } if (RoomItem.IsHighscore) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_WiredExpertHighscores", 1, false); } } else { Session.SendMessage(RoomNotificationComposer.SendBubble("bubble_bouwen", "Oeps! Je kan dit item hier niet plaatsen.", "")); return; } } else if (Item.IsWallItem) { string[] CorrectedData = new string[Data.Length - 1]; for (int i = 1; i < Data.Length; i++) { CorrectedData[i - 1] = Data[i]; } string WallPos = string.Empty; if (TrySetWallItem(Session.GetHabbo(), Item, CorrectedData, out WallPos)) { try { Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, 0, 0, 0, 0, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, WallPos, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } } } catch { Session.SendMessage(RoomNotificationComposer.SendBubble("bubble_bouwen", "Oeps! Je kan dit item hier niet plaatsen.", "")); return; } } else { Session.SendMessage(RoomNotificationComposer.SendBubble("bubble_bouwen", "Oeps! Je kan dit item hier niet plaatsen.", "")); return; } } }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom) { return; } Room Room = null; if (!RocketEmulador.GetGame().GetRoomManager().TryGetRoom(Session.GetHabbo().CurrentRoomId, out Room)) { return; } int ItemId = 0; string[] Data = null; string RawData = Packet.PopString(); Data = RawData.Split(' '); if (!int.TryParse(Data[0], out ItemId)) { return; } bool HasRights = false; if (Room.CheckRights(Session, false, true)) { HasRights = true; } if (!HasRights) { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_not_owner}")); return; } Item Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } if (Room.GetRoomItemHandler().GetWallAndFloor.Count() > RocketGame.RoomFurnitureLimit) { Session.SendNotification("You cannot have more than " + RocketGame.RoomFurnitureLimit + " items in a room!"); return; } else if (Item.GetBaseItem().ItemName.ToLower().Contains("cf") && Room.OwnerId != Session.GetHabbo().Id&& !Session.GetHabbo().GetPermissions().HasRight("room_item_place_exchange_anywhere")) { Session.SendNotification("You cannot place exchange items in other people's rooms!"); return; } //TODO: Make neat. switch (Item.GetBaseItem().InteractionType) { #region Interaction Types case InteractionType.MOODLIGHT: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) { Session.SendNotification("You can only have one background moodlight per room!"); return; } break; } case InteractionType.TONER: { TonerData tonerData = Room.TonerData; if (tonerData != null && Room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null) { Session.SendNotification("You can only have one background toner per room!"); return; } break; } case InteractionType.HOPPER: { if (Room.GetRoomItemHandler().HopperCount > 0) { Session.SendNotification("You can only have one hopper per room!"); return; } break; } case InteractionType.TENT: case InteractionType.TENT_SMALL: { Room.AddTent(Item.Id); break; } #endregion } if (!Item.IsWallItem) { if (Data.Length < 4) { return; } int X = 0; int Y = 0; int Rotation = 0; if (!int.TryParse(Data[1], out X)) { return; } if (!int.TryParse(Data[2], out Y)) { return; } if (!int.TryParse(Data[3], out Rotation)) { return; } Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rotation, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, string.Empty, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rotation, true, false, true)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { RocketEmulador.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } if (RoomItem.IsWired) { try { Room.GetWired().LoadWiredBox(RoomItem); } catch { Console.WriteLine(Item.GetBaseItem().InteractionType); } } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else if (Item.IsWallItem) { string[] CorrectedData = new string[Data.Length - 1]; for (int i = 1; i < Data.Length; i++) { CorrectedData[i - 1] = Data[i]; } string WallPos = string.Empty; if (TrySetWallItem(Session.GetHabbo(), Item, CorrectedData, out WallPos)) { try { Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, 0, 0, 0, 0, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, WallPos, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (Session.GetHabbo().Id == Room.OwnerId) { RocketEmulador.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } } } catch { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom) { return; } Room Room = null; if (!PlusEnvironment.GetGame().GetRoomManager().TryGetRoom(Session.GetHabbo().CurrentRoomId, out Room)) { return; } int ItemId = 0; string[] Data = null; string RawData = Packet.PopString(); Data = RawData.Split(' '); if (!int.TryParse(Data[0], out ItemId)) { return; } bool HasRights = false; if (Room.CheckRights(Session, false, true)) { HasRights = true; } var RentableItems = Room.GetRoomItemHandler().GetFloor.Where(x => x.GetBaseItem().InteractionType == InteractionType.RENTABLE_SPACE).ToList(); Item SpaceItem = null; if (RentableItems.Count > 0) { foreach (var RentableSpace in RentableItems) { var SpaceData = RentableSpace.RentableSpaceData; if (SpaceData == null) { continue; } if (SpaceData.FarmingSpace != null) { continue; } if (SpaceData.OwnerId != Session.GetHabbo().Id) { continue; } HasRights = true; SpaceItem = RentableSpace; break; } } if (!HasRights) { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_not_owner}")); return; } Item Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } if (Room.GetRoomItemHandler().GetWallAndFloor.Count() > PlusStaticGameSettings.RoomFurnitureLimit) { Session.SendNotification("Você não pode ter mais do que " + PlusStaticGameSettings.RoomFurnitureLimit + " items no quarto!"); return; } else if (Item.GetBaseItem().ItemName.ToLower().Contains("cf") && Room.OwnerId != Session.GetHabbo().Id&& !Session.GetHabbo().GetPermissions().HasRight("room_item_place_exchange_anywhere")) { Session.SendNotification("Você não pode colocar itens de troca em salas de outras pessoas!"); return; } //TODO: Make neat. switch (Item.GetBaseItem().InteractionType) { #region Interaction Types case InteractionType.MOODLIGHT: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) { Session.SendNotification("Você só pode ter um estilo de fundo claro por sala!"); return; } break; } case InteractionType.TONER: { TonerData tonerData = Room.TonerData; if (tonerData != null && Room.GetRoomItemHandler().GetItem(tonerData.ItemId) != null) { Session.SendNotification("Você só pode ter um toner de fundo por sala!"); return; } break; } case InteractionType.HOPPER: { if (Room.GetRoomItemHandler().HopperCount > 0) { Session.SendNotification("Você só pode ter um funil por sala!"); return; } break; } case InteractionType.TENT: case InteractionType.TENT_SMALL: { Room.AddTent(Item.Id); break; } #endregion } if (!Item.IsWallItem) { if (Data.Length < 4) { return; } int X = 0; int Y = 0; int Rotation = 0; if (!int.TryParse(Data[1], out X)) { return; } if (!int.TryParse(Data[2], out Y)) { return; } if (!int.TryParse(Data[3], out Rotation)) { return; } Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, X, Y, 0, Rotation, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, string.Empty, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rotation, true, false, true, false, true, SpaceItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); if (RoomItem.IsWired) { try { Room.GetWired().LoadWiredBox(RoomItem); } catch { Console.WriteLine(Item.GetBaseItem().InteractionType); } } if (!Item.GetBaseItem().IsSeat) { foreach (var square in Item.GetAffectedTiles) { if (Room.GetGameMap().SquareHasUsers(square.X, square.Y)) { foreach (var user in Room.GetGameMap().GetRoomUsers(square)) { if (!user.IsWalking) { user.SetPos(user.Coordinate.X, user.Coordinate.Y, Room.GetGameMap().GetHeightForSquare(square)); } } } } } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else if (Item.IsWallItem) { string[] CorrectedData = new string[Data.Length - 1]; for (int i = 1; i < Data.Length; i++) { CorrectedData[i - 1] = Data[i]; } string WallPos = string.Empty; if (TrySetWallItem(Session.GetHabbo(), Item, CorrectedData, out WallPos)) { try { Item RoomItem = new Item(Item.Id, Room.RoomId, Item.BaseItem, Item.ExtraData, 0, 0, 0, 0, Session.GetHabbo().Id, Item.GroupId, Item.LimitedNo, Item.LimitedTot, WallPos, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId); //if (Session.GetHabbo().Id == Room.OwnerId) //PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_RoomDecoFurniCount", 1, false); } } catch { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } else { Session.SendMessage(new RoomNotificationComposer("furni_placement_error", "message", "${room.error.cant_set_item}")); return; } } }