internal void LoadFurniture() { //this.Items.Clear(); this.mFloorItems.Clear(); this.mWallItems.Clear(); DataTable Data; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("CALL getroomitems(@roomid)"); dbClient.addParameter("roomid", room.RoomId); Data = dbClient.getTable(); uint itemID; decimal x; decimal y; sbyte n; uint baseID; int dataType; string extradata; WallCoordinate wallCoord; int extra; foreach (DataRow dRow in Data.Rows) { itemID = Convert.ToUInt32(dRow[0]); x = Convert.ToDecimal(dRow[1]); y = Convert.ToDecimal(dRow[2]); n = Convert.ToSByte(dRow[3]); baseID = Convert.ToUInt32(dRow[4]); IRoomItemData data; if (DBNull.Value.Equals(dRow[5])) { data = new StringData(""); extra = 0; } else { dataType = Convert.ToInt32(dRow[5]); extradata = (string)dRow[6]; extra = Convert.ToInt32(dRow[7]); switch (dataType) { case 0: data = new StringData(extradata); break; case 1: data = new MapStuffData(); break; case 2: data = new StringArrayStuffData(); break; case 3: data = new StringIntData(); break; default: data = new StringData(extradata); break; } try { data.Parse(extradata); } catch { Logging.LogException(string.Format("Error in furni data! Item ID: \"{0}\" and data: \"{1}\"", itemID, extradata.Replace(Convert.ToChar(1).ToString(), "[1]"))); dbClient.runFastQuery(string.Format("DELETE FROM items_extradata WHERE item_id = {0}", itemID)); } } if (FirewindEnvironment.GetGame().GetItemManager().GetItem(baseID).Type == 'i') // Is wallitem { wallCoord = new WallCoordinate((double)x, (double)y, n); RoomItem item = new RoomItem(itemID, room.RoomId, baseID, data, extra, wallCoord, room); if (!mWallItems.ContainsKey(itemID)) mWallItems.Inner.Add(itemID, item); } else //Is flooritem { int coordX, coordY; TextHandling.Split((double)x, out coordX, out coordY); RoomItem item = new RoomItem(itemID, room.RoomId, baseID, data, extra, coordX, coordY, (double)y, n, room); if (!mFloorItems.ContainsKey(itemID)) mFloorItems.Inner.Add(itemID, item); } } foreach (RoomItem Item in mFloorItems.Values) { if (Item.IsRoller) mGotRollers = true; else if (Item.GetBaseItem().InteractionType == Firewind.HabboHotel.Items.InteractionType.dimmer) { if (room.MoodlightData == null) room.MoodlightData = new MoodlightData(Item.Id); } else if (WiredUtillity.TypeIsWired(Item.GetBaseItem().InteractionType)) { WiredLoader.LoadWiredItem(Item, room, dbClient); room.GetWiredHandler().AddWire(Item, Item.Coordinate, Item.Rot, Item.GetBaseItem().InteractionType); } } } }
internal void PlaceItem() { // AZ@J16 10 10 0 Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId); if (Room == null || !Room.CheckRights(Session)) { return; } string PlacementData = Request.ReadString(); string[] DataBits = PlacementData.Split(' '); uint ItemId = uint.Parse(DataBits[0].Replace("-","")); UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null) { return; } //bool UpdateNeeded = false; switch (Item.GetBaseItem().InteractionType) { case Firewind.HabboHotel.Items.InteractionType.dimmer: { MoodlightData moodData = Room.MoodlightData; if (moodData != null && Room.GetRoomItemHandler().GetItem(moodData.ItemId) != null) Session.SendNotif(LanguageLocale.GetValue("user.maxmoodlightsreached")); break; } } // Wall Item if (DataBits[1].StartsWith(":")) { try { WallCoordinate coordinate = new WallCoordinate(":" + PlacementData.Split(':')[1]); RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.Data, Item.Extra, coordinate, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true); } } catch { // Invalid wallitem /* Response.Init(516); Response.AppendInt32(11); SendResponse();*/ return; } } // Floor Item else { int X = int.Parse(DataBits[1]); int Y = int.Parse(DataBits[2]); int Rot = int.Parse(DataBits[3]); if (Session.GetHabbo().forceRot > -1) Rot = Session.GetHabbo().forceRot; RoomItem RoomItem = new RoomItem(Item.Id, Room.RoomId, Item.BaseItem, Item.Data, Item.Extra, X, Y, 0, Rot, Room); if (Room.GetRoomItemHandler().SetFloorItem(Session, RoomItem, X, Y, Rot, true, false, true)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, true); } else // Placing failed, tell client to put item back { Response.Init(Outgoing.ObjectUpdate); RoomItem.Serialize(Response, Room.OwnerId); SendResponse(); return; } if (WiredUtillity.TypeIsWired(Item.GetBaseItem().InteractionType)) { WiredSaver.HandleDefaultSave(Item.Id, Room); } FirewindEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, HabboHotel.Quests.QuestType.FURNI_PLACE); } //if (UpdateNeeded) // Room.SaveFurniture(); }
internal void PlacePostIt() { Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId); if (Room == null || !Room.CheckRights(Session)) { return; } uint itemId = Request.ReadUInt32(); string locationData = Request.ReadString(); UserItem item = Session.GetHabbo().GetInventoryComponent().GetItem(itemId); if (item == null || Room == null) return; try { WallCoordinate coordinate = new WallCoordinate(":" + locationData.Split(':')[1]); RoomItem RoomItem = new RoomItem(item.Id, Room.RoomId, item.BaseItem, item.Data, item.Extra, coordinate, Room); if (Room.GetRoomItemHandler().SetWallItem(Session, RoomItem)) { Session.GetHabbo().GetInventoryComponent().RemoveItem(itemId, true); } } catch { Response.Init(516); Response.AppendInt32(11); SendResponse(); return; } }
internal void MoveWallItem() { Room Room = FirewindEnvironment.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId); if (Room == null || !Room.CheckRights(Session)) { return; } uint itemID = Request.ReadUInt32(); string wallPositionData = Request.ReadString(); RoomItem Item = Room.GetRoomItemHandler().GetItem(itemID); if (Item == null) return; try { WallCoordinate coordinate = new WallCoordinate(":" + wallPositionData.Split(':')[1]); Item.wallCoord = coordinate; } catch { // invalid pos /* Response.Init(516); Response.AppendInt32(11); SendResponse();*/ return; } Room.GetRoomItemHandler().UpdateItem(Item); /*ServerMessage LeaveMessage = new ServerMessage(); LeaveMessage.AppendRawUInt(Item.Id); LeaveMessage.AppendStringWithBreak(string.Empty); LeaveMessage.AppendBoolean(false); Room.SendMessage(LeaveMessage);*/ ServerMessage Message = new ServerMessage(Outgoing.UpdateWallItemOnRoom); Item.Serialize(Message, Room.OwnerId); Room.SendMessage(Message); }