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"]); } } } }
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); }
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); }
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"); } } } }