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();
                }
            }
        }
Exemple #2
0
        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}"));
                }
            }
        }
Exemple #3
0
        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;
                }
            }
        }
Exemple #5
0
        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;
                }
            }
        }
Exemple #6
0
        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;
                }
            }
        }
Exemple #7
0
        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;
                }
            }
        }
Exemple #8
0
        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;
                }
            }
        }