using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Uber.Collections; using Uber.Messages; using Uber.HabboHotel.Pets; using Uber.HabboHotel.GameClients; using Uber.HabboHotel.Items; using Uber.Storage; namespace Uber.HabboHotel.Users.Inventory { class InventoryComponent { private SafeList InventoryItems; private SafeList InventoryPets; public uint UserId; public int ItemCount { get { return InventoryItems.Count; } } public int PetCount { get { return InventoryPets.Count; } } public InventoryComponent(uint mUserId) { this.UserId = mUserId; this.InventoryItems = new SafeList(); this.InventoryPets = new SafeList(); } public void ClearItems() { using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("userid", UserId); dbClient.ExecuteQuery("DELETE FROM items WHERE user_id = @userid AND room_id = '0'"); } UpdateItems(true); } public void ClearPets() { using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("userid", UserId); dbClient.ExecuteQuery("DELETE FROM user_pets WHERE user_id = @userid AND room_id = '0'"); } UpdatePets(true); } public void LoadInventory() { DataTable ItemData = null; using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("userid", UserId); ItemData = dbClient.ReadDataTable("SELECT id,base_item,extra_data FROM items WHERE user_id = @userid AND room_id = '0'"); } if (ItemData != null) { this.InventoryItems = null; this.InventoryItems = new SafeList(); foreach (DataRow Row in ItemData.Rows) { InventoryItems.Add(new UserItem((uint)Row["id"], (uint)Row["base_item"], (string)Row["extra_data"])); } } DataTable PetData = null; using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("userid", UserId); PetData = dbClient.ReadDataTable("SELECT * FROM user_pets WHERE user_id = @userid AND room_id <= 0"); } if (PetData != null) { this.InventoryPets = null; this.InventoryPets = new SafeList(); foreach (DataRow Row in PetData.Rows) { InventoryPets.Add(UberEnvironment.GetGame().GetCatalog().GeneratePetFromRow(Row)); } } } public void UpdateItems(bool FromDatabase) { if (FromDatabase) { LoadInventory(); } GetClient().GetMessageHandler().GetResponse().Init(101); GetClient().GetMessageHandler().SendResponse(); } public void UpdatePets(bool FromDatabase) { if (FromDatabase) { LoadInventory(); } GetClient().SendMessage(SerializePetInventory()); } public Pet GetPet(uint Id) { foreach (Pet Pet in this.InventoryPets) { if (Pet.PetId == Id) { return Pet; } } return null; } public UserItem GetItem(uint Id) { foreach (UserItem Item in this.InventoryItems) { if (Item.Id == Id) { return Item; } } return null; } public void AddItem(uint Id, uint BaseItem, string ExtraData, bool InDatabase) { InventoryItems.Add(new UserItem(Id, BaseItem, ExtraData)); if (InDatabase) { using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("extra_data", ExtraData); dbClient.ExecuteQuery("INSERT INTO items (id,user_id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + Id + "','" + UserId + "','0','" + BaseItem + "',@extra_data,'0','0','0','0','')"); } } } public void AddPet(Pet Pet) { if (Pet == null) { return; } Pet.PlacedInRoom = false; InventoryPets.Add(Pet); using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("botid", Pet.PetId); dbClient.ExecuteQuery("UPDATE user_pets SET room_id = 0, x = 0, y = 0, z = 0 WHERE id = @botid LIMIT 1"); } ServerMessage AddMessage = new ServerMessage(603); Pet.SerializeInventory(AddMessage); GetClient().SendMessage(AddMessage); } public bool RemovePet(uint PetId) { foreach (Pet Pet in this.InventoryPets) { if (Pet.PetId != PetId) { continue; } this.InventoryPets.Remove(Pet); ServerMessage RemoveMessage = new ServerMessage(604); RemoveMessage.AppendUInt(PetId); GetClient().SendMessage(RemoveMessage); return true; } return false; } public void MovePetToRoom(uint PetId, uint RoomId) { if (RemovePet(PetId)) { using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("roomid", RoomId); dbClient.AddParamWithValue("petid", PetId); dbClient.ExecuteQuery("UPDATE user_pets SET room_id = @roomid, x = 0, y = 0, z = 0 WHERE id = @petid LIMIT 1"); } } } public void RemoveItem(uint Id, bool InDatabase) { GetClient().GetMessageHandler().GetResponse().Init(99); GetClient().GetMessageHandler().GetResponse().AppendUInt(Id); GetClient().GetMessageHandler().SendResponse(); InventoryItems.Remove(GetItem(Id)); if (InDatabase) { using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("DELETE FROM items WHERE id = '" + Id + "' LIMIT 1"); } } } /*public ServerMessage SerializeItemInventory() { ServerMessage Message = new ServerMessage(140); Message.AppendInt32(this.ItemCount); foreach (UserItem Item in this.InventoryItems) { Item.Serialize(Message, true); } Message.AppendInt32(this.ItemCount); return Message; }*/ public ServerMessage SerializeItemInventory() // 63 new inventory serialize { ServerMessage Message = new ServerMessage(140); Message.AppendStringWithBreak("S"); Message.AppendBoolean(true); Message.AppendBoolean(true); Message.AppendInt32(this.ItemCount); foreach (UserItem Item in this.InventoryItems) { Item.Serialize(Message, true); } return Message; } public ServerMessage SerializePetInventory() { ServerMessage Message = new ServerMessage(600); Message.AppendInt32(InventoryPets.Count); foreach (Pet Pet in InventoryPets) { Pet.SerializeInventory(Message); } return Message; } private GameClient GetClient() { return UberEnvironment.GetGame().GetClientManager().GetClientByHabbo(UserId); } } }