using System; using System.Collections.Generic; using System.Linq; using System.Text; using DuckEmulator.HabboHotel.Outside.Messages.Types; using DuckEmulator.HabboHotel.Outside.Furniture; using System.Data; using DuckEmulator.HabboHotel.Inside.Storage.MySql.Database.Interfaces; namespace DuckEmulator.HabboHotel.Outside.Habbos.HabStructure { class Inventory { private HabboData Habbo; internal Dictionary Furniture; internal Inventory(HabboData Habbo) { this.Habbo = Habbo; LoadFurni(); } internal List GetFloorItems() { var List = new List(); foreach (Furni Furni in Furniture.Values.ToList()) { if (Furni.IsFloorItem) { List.Add(Furni); } } return List.ToList(); } internal List GetWallItems() { var List = new List(); foreach (Furni Furni in Furniture.Values.ToList()) { if (Furni.IsWallItem) { List.Add(Furni); } } return List.ToList(); } internal void LoadFurni() { Furniture = new Dictionary(); DataTable Data = null; using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.setQuery("SELECT * FROM items WHERE user_id = '" + Habbo.Id + "' AND room_id = '0' ORDER BY base_id DESC"); Data = Adapter.getTable(); } if (Data == null) return; foreach (DataRow Row in Data.Rows) { Furni Furni = new Furni( uint.Parse(Row["id"].ToString()), uint.Parse(Row["user_id"].ToString()), uint.Parse(Row["room_id"].ToString()), uint.Parse(Row["base_id"].ToString()), int.Parse(Row["x"].ToString()), int.Parse(Row["y"].ToString()), int.Parse(Row["rot"].ToString()), double.Parse(Row["z"].ToString()), Row["wall_pos"].ToString(), Row["extra_data"].ToString()); Furniture.Add(Furni.Id, Furni); } } internal ServerMessage SerializeFloorItems() { ServerMessage Message = new ServerMessage(140); Message.AppendStringWithBreak("S"); Message.AppendBoolean(true); Message.AppendBoolean(true); Message.AppendInt32(GetFloorItems().Count); // itemcount foreach (Furni Furni in GetFloorItems()) { Furni.SerializeInventory(Message); } return Message; } internal ServerMessage SerializeWallItems() { ServerMessage Message = new ServerMessage(140); Message.AppendStringWithBreak("I"); Message.AppendBoolean(true); Message.AppendBoolean(true); Message.AppendInt32(GetWallItems().Count); // itemcount foreach (Furni Furni in GetWallItems()) { Furni.SerializeInventory(Message); } return Message; } internal void UpdateInventory() { Habbo.SendResponse(new ServerMessage(101)); Habbo.SendResponse(SerializeFloorItems()); Habbo.SendResponse(SerializeWallItems()); } internal ServerMessage SerializeNewAdded(Furni Furni) { ServerMessage Message = new ServerMessage(832); Message.AppendBoolean(true); Message.AppendInt32((Furni.IsFloorItem) ? 1 : 2); Message.AppendBoolean(true); Message.AppendUInt(Furni.Id); return Message; } internal ServerMessage SerializePets() { ServerMessage Message = new ServerMessage(600); Message.AppendInt32(0); // petcount return Message; } internal void AddnewFurni(Furni Furni, bool Created) { if (!Furniture.ContainsKey(Furni.Id)) { Furniture.Add(Furni.Id, Furni); if (Created) { Habbo.SendResponse(SerializeNewAdded(Furni)); } UpdateInventory(); } } internal void RemoveFurni(uint FurniId) { if (Furniture.ContainsKey(FurniId)) { Furniture.Remove(FurniId); ServerMessage Message = new ServerMessage(99); Message.AppendUInt(FurniId); Habbo.SendResponse(Message); } } internal Furni GetFurni(uint Id) { try { return Furniture[Id]; } catch { return null; } } } }