Example #1
0
        public void LoadItems()
        {
            DataTable items = null;

            using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient())
            {
                items = dbClient.ReadDataTable("SELECT id, user_id, base_item, extra_data, x, y, z, rot, wall_pos FROM items WHERE room_id = '" + this.Room.ID + "' ORDER BY room_id DESC");
            }

            Dictionary <uint, RoomItem> requestData = new Dictionary <uint, RoomItem>();

            if (items != null)
            {
                foreach (DataRow dataRow in items.Rows)
                {
                    string   wallPos  = (string)dataRow["wall_pos"];
                    RoomItem roomItem = RoomItem.GetRoomItem((uint)dataRow["Id"], this.Room.ID, (uint)dataRow["user_id"], (uint)dataRow["base_item"], (string)dataRow["extra_data"], (int)dataRow["x"], (int)dataRow["y"], (double)dataRow["z"], (int)dataRow["rot"], (string.IsNullOrEmpty(wallPos) ? null : new WallCoordinate(wallPos)), this.Room);
                    this.AddItem(null, roomItem, false);

                    if (roomItem.GetBaseItem().InteractionType.ToLower().StartsWith("wf_") || roomItem.GetBaseItem().InteractionType.ToLower() == "fbgate" || roomItem.GetBaseItem().InteractionType.ToLower() == "firework" || roomItem.GetBaseItem().InteractionType.ToLower() == "jukebox" || roomItem.GetBaseItem().InteractionType.ToLower() == "photo")
                    {
                        requestData.Add(roomItem.ID, roomItem);
                    }
                }
            }

            if (requestData != null && requestData.Count > 0)
            {
                DataTable data = null;
                using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient())
                {
                    data = dbClient.ReadDataTable("SELECT * FROM items_data WHERE item_id IN(" + string.Join(",", requestData.Keys) + ") LIMIT " + requestData.Count);
                }

                if (data != null && data.Rows.Count > 0)
                {
                    foreach (DataRow dataRow in data.Rows)
                    {
                        requestData[(uint)dataRow["item_id"]].LoadItemData((string)dataRow["data"]);
                    }
                }
            }
        }
Example #2
0
        public bool AddFloorItemToRoom(GameClient session, RoomItem item, int x, int y, int rotation)
        {
            int forceRotation = session != null?session.GetHabbo().GetRoomSession().GetRoomUser().ForceRotate : -1;

            if (forceRotation != -1)
            {
                rotation = forceRotation;
            }

            HashSet <AffectedTile> tiles = new HashSet <AffectedTile>();

            tiles.UnionWith(ItemUtilies.AffectedTiles(item.BaseItem.Lenght, item.BaseItem.Width, x, y, rotation).Values);
            tiles.Add(new AffectedTile(x, y, rotation));

            double height = 0;

            foreach (AffectedTile tile in tiles)
            {
                if (!this.CanPlaceItemAt(item, tile.X, tile.Y))
                {
                    return(false);
                }

                RoomTile tile_ = this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y);
                if (tile_.GetZ(true) > height)
                {
                    height = tile_.GetZ(true);
                }
            }

            double forceHeight = session.GetHabbo().GetRoomSession().GetRoomUser().ForceHeight;
            int    forceState  = session.GetHabbo().GetRoomSession().GetRoomUser().ForceState;

            if (forceState != -1)
            {
                if (item.GetBaseItem().InteractionType == "default")
                {
                    int mode = forceState;

                    if (mode > item.GetBaseItem().InteractionModeCounts - 1)
                    {
                        mode = 0;
                    }

                    item.ExtraData = mode.ToString();
                }
            }

            item.Rot = rotation;
            if (forceHeight != -1.0)
            {
                item.SetLocation(x, y, forceHeight);
            }
            else
            {
                item.SetLocation(x, y, height);
            }

            this.AddItem(session, item, true);
            foreach (AffectedTile tile in tiles)
            {
                this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y).AddItemToTile(item);
            }

            this.Room.SendToAll(new MultiRevisionServerMessage(OutgoingPacketsEnum.AddFloorItemToRoom, new ValueHolder("Item", item)));

            foreach (RoomUnitUser user in this.Room.RoomUserManager.GetRealUsers())
            {
                foreach (AffectedTile tile in tiles)
                {
                    if (user.X == tile.X && user.Y == tile.Y)
                    {
                        user.UpdateState();
                        break;
                    }
                }
            }

            return(true);
        }
Example #3
0
        public bool MoveFloorItemOnRoom(GameClient session, RoomItem item, int x, int y, int rotation, double height = -1.0, bool sendPacket = true, params RoomItem[] ignore)
        {
            int forceRotation = session != null?session.GetHabbo().GetRoomSession().GetRoomUser().ForceRotate : -1;

            if (forceRotation != -1)
            {
                rotation = forceRotation;
            }

            HashSet <AffectedTile> oldTiles = new HashSet <AffectedTile>(item.AffectedTiles)
            {
                new AffectedTile(item.X, item.Y, item.Rot)
            };
            HashSet <AffectedTile> newTiles = new HashSet <AffectedTile>(ItemUtilies.AffectedTiles(item.BaseItem.Lenght, item.BaseItem.Width, x, y, rotation).Values)
            {
                new AffectedTile(x, y, rotation)
            };

            if (height == -1.0)
            {
                foreach (AffectedTile tile in newTiles)
                {
                    if (!this.CanPlaceItemAt(item, tile.X, tile.Y))
                    {
                        return(false);
                    }

                    RoomTile tile_ = this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y);
                    if (ignore.Length <= 0)
                    {
                        if (tile_.HigestRoomItem?.ID != item.ID)
                        {
                            height = tile_.GetZ(true);
                        }
                        else
                        {
                            height = tile_.GetZ(false);
                        }
                    }
                    else
                    {
                        RoomItem higestItem = tile_.GetHigestItem(ignore);
                        if (higestItem != null)
                        {
                            if (higestItem.ID != item.ID)
                            {
                                height = higestItem.ActiveHeight;
                            }
                            else
                            {
                                height = higestItem.Z;
                            }
                        }
                        else
                        {
                            height = tile_.ModelZ;
                        }
                    }
                }
            }

            this.AddedAndMovedRoomItems.AddOrUpdate(item.ID, item, (key, oldValue) => item);
            this.RoomItemStateUpdated.TryRemove(item.ID, out RoomItem item_);

            double forceHeight = session != null?session.GetHabbo().GetRoomSession().GetRoomUser().ForceHeight : -1.0;

            int forceState = session != null?session.GetHabbo().GetRoomSession().GetRoomUser().ForceState : -1;

            if (forceState != -1)
            {
                if (item.GetBaseItem().InteractionType == "default")
                {
                    int mode = forceState;

                    if (mode > item.GetBaseItem().InteractionModeCounts - 1)
                    {
                        mode = 0;
                    }

                    item.ExtraData = mode.ToString();
                }
            }

            item.Rot = rotation;
            if (forceHeight != -1.0)
            {
                item.SetLocation(x, y, forceHeight);
            }
            else
            {
                item.SetLocation(x, y, height);
            }

            foreach (AffectedTile tile in oldTiles)
            {
                this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y).RemoveItemFromTile(item);
            }

            foreach (AffectedTile tile in newTiles)
            {
                this.Room.RoomGamemapManager.GetTile(tile.X, tile.Y).AddItemToTile(item);
            }

            if (sendPacket)
            {
                item.TryChangeUpdateState(RoomItem.UpdateStatus.MOVE);
                this.RequireUpdateClientSide.TryAdd(item.ID, item);
            }

            foreach (RoomUnitUser user in this.Room.RoomUserManager.GetRealUsers())
            {
                foreach (AffectedTile tile in oldTiles.Concat(newTiles))
                {
                    if (user.X == tile.X && user.Y == tile.Y)
                    {
                        user.UpdateState();
                        break;
                    }
                }
            }

            item.OnMove(session);
            return(true);
        }
Example #4
0
        public void CheckItemBasedAchievements(RoomItem latestItem)
        {
            GameClient owner = Skylight.GetGame().GetGameClientManager().GetGameClientById(this.Room.RoomData.OwnerID);

            if (owner != null)
            {
                IEnumerable <RoomItem> items = this.GetItems();
                int itemsCount = items.Count();
                if (itemsCount > owner.GetHabbo().GetUserStats().RoomBuilder)
                {
                    owner.GetHabbo().GetUserStats().RoomBuilder = itemsCount;
                    owner.GetHabbo().GetUserAchievements().CheckAchievement("RoomBuilder");
                }

                int diffItemsCount = items.GroupBy(i => i.GetBaseItem().ID).Count();
                if (diffItemsCount > owner.GetHabbo().GetUserStats().FurniCollector)
                {
                    owner.GetHabbo().GetUserStats().FurniCollector = diffItemsCount;
                    owner.GetHabbo().GetUserAchievements().CheckAchievement("FurniCollector");
                }

                if (latestItem is RoomItemBlackHole)
                {
                    int blackHolesCount = items.Count(i => i is RoomItemBlackHole);
                    if (blackHolesCount > owner.GetHabbo().GetUserStats().RoomArchitect)
                    {
                        owner.GetHabbo().GetUserStats().RoomArchitect = blackHolesCount;
                        owner.GetHabbo().GetUserAchievements().CheckAchievement("RoomArchitect");
                    }
                }
                else if (latestItem is RoomItemIceSkatingPatch)
                {
                    int iceSkatePatchesCount = items.Count(i => i is RoomItemIceSkatingPatch);
                    if (iceSkatePatchesCount > owner.GetHabbo().GetUserStats().IceRinkBuilder)
                    {
                        owner.GetHabbo().GetUserStats().IceRinkBuilder = iceSkatePatchesCount;
                        owner.GetHabbo().GetUserAchievements().CheckAchievement("IceRinkBuilder");
                    }
                }
                else if (latestItem is RoomItemRollerskate)
                {
                    int rollerRinkBuilderPatchesCount = items.Count(i => i is RoomItemRollerskate);
                    if (rollerRinkBuilderPatchesCount > owner.GetHabbo().GetUserStats().RollerRinkBuilder)
                    {
                        owner.GetHabbo().GetUserStats().RollerRinkBuilder = rollerRinkBuilderPatchesCount;
                        owner.GetHabbo().GetUserAchievements().CheckAchievement("RollerRinkBuilder");
                    }
                }
                else if (latestItem.GetBaseItem().ItemName == "easter11_grasspatch")
                {
                    int bunnyRunBuilderPatchesCount = items.Count(i => i.GetBaseItem().ItemName == "easter11_grasspatch");
                    if (bunnyRunBuilderPatchesCount > owner.GetHabbo().GetUserStats().BunnyRunBuilder)
                    {
                        owner.GetHabbo().GetUserStats().BunnyRunBuilder = bunnyRunBuilderPatchesCount;
                        owner.GetHabbo().GetUserAchievements().CheckAchievement("BunnyRunBuilder");
                    }
                }
                else if (latestItem.GetBaseItem().ItemName == "snowb_slope")
                {
                    int snowboardingBuilderPatchesCount = items.Count(i => i.GetBaseItem().ItemName == "snowb_slope");
                    if (snowboardingBuilderPatchesCount > owner.GetHabbo().GetUserStats().SnowboardingBuilder)
                    {
                        owner.GetHabbo().GetUserStats().SnowboardingBuilder = snowboardingBuilderPatchesCount;
                        owner.GetHabbo().GetUserAchievements().CheckAchievement("SnowboardingBuilder");
                    }
                }
            }
        }