using System; using System.Collections.Generic; using System.Linq; using System.Text; using DuckEmulator.HabboHotel.Outside.Messages.Types; using System.Data; using DuckEmulator.HabboHotel.Inside.Storage.MySql.Database.Interfaces; using DuckEmulator.HabboHotel.Outside.Habbos; using DuckEmulator.HabboHotel.Outside.Furniture; namespace DuckEmulator.HabboHotel.Outside.Catalogue { class CatalogueManager { internal Dictionary Pages; internal ItemGenerator ItemGenerator = new ItemGenerator(); internal CatalogueManager() { LoadPages(); } internal void LoadPages() { Pages = new Dictionary(); DataTable Data = null; using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.setQuery("SELECT * FROM catalog_pages ORDER BY order_num ASC"); Data = Adapter.getTable(); } if (Data == null) return; foreach (DataRow Row in Data.Rows) { Pages.Add(Convert.ToInt32(Row["id"]), new CataloguePage( Convert.ToInt32(Row["id"]), Convert.ToInt32(Row["parent_id"]), Convert.ToString(Row["caption"]), (Convert.ToInt32(Row["visible"]) == 1), (Convert.ToInt32(Row["enabled"]) == 1), Convert.ToUInt32(Row["min_rank"]), (Convert.ToInt32(Row["club_only"]) == 1), Convert.ToInt32(Row["icon_color"]), Convert.ToInt32(Row["icon_image"]), Convert.ToString(Row["page_layout"]), Convert.ToString(Row["page_headline"]), Convert.ToString(Row["page_teaser"]), Convert.ToString(Row["page_special"]), Convert.ToString(Row["page_text1"]), Convert.ToString(Row["page_text2"]), Convert.ToString(Row["page_text_details"]), Convert.ToString(Row["page_text_teaser"]), (Convert.ToInt32(Row["vip_only"]) == 1))); } DuckEnvironment.WriteLine("Loaded " + Pages.Count + " catalogue pages.", ConsoleColor.Yellow); } internal int GetTreeCount(int Id, HabboData Habbo) { int i = new int(); foreach (CataloguePage Page in Pages.Values.ToList()) { if (Habbo.Rank >= Page.MinRank) if (Page.ParentId == Id) i++; } return i; } internal CatalogueItem GetCataItem(uint Id) { foreach (CataloguePage Page in Pages.Values.ToList()) { foreach (CatalogueItem Item in Page.Items) { if (Item.Id == Id) return Item; } } return null; } internal ServerMessage SerializePage(int Id) { if (GetPage(Id) == null) return null; if (!GetPage(Id).Enabled) return null; ServerMessage Message = new ServerMessage(127); GetPage(Id).Serialize(Message); return Message; } internal CataloguePage GetPage(int Id) { try { return Pages[Id]; } catch { return null; } } internal ServerMessage SerializeIndex(HabboData Habbo) { ServerMessage Message = new ServerMessage(126); Message.AppendBoolean(true); Message.AppendBoolean(false); Message.AppendBoolean(false); Message.AppendInt32(-1); Message.AppendStringWithBreak("catalog.page.root"); Message.AppendInt32(GetTreeCount(-1,Habbo)); foreach (CataloguePage Page in Pages.Values.ToList()) { if (Page.ParentId == -1) Page.SerializeIndex(Message,Habbo); foreach (CataloguePage _Page in Pages.Values.ToList()) { if (_Page.ParentId == Page.PageId) _Page.SerializeIndex(Message,Habbo); } } return Message; } internal void PurchaseItem(HabboData Habbo, CatalogueItem Item, uint PageId, string ExtraData) { if (Habbo == null || Item == null || (Item.GetBaseItem().Type.ToLower() != "s" && Item.GetBaseItem().Type.ToLower() != "i" && Item.GetBaseItem().Type.ToLower() != "e")) return; Boolean CreditsError = false; Boolean PixelError = false; if (Habbo.Credits < Item.CreditsCost || Habbo.Credits < 0) { CreditsError = true; } if (Habbo.Pixels < Item.PixelsCost || Habbo.Pixels < 0) { PixelError = true; } if (CreditsError || PixelError) { ServerMessage Message = new ServerMessage(68); Message.AppendBoolean(CreditsError); Message.AppendBoolean(PixelError); Habbo.SendResponse(Message); return; } if (Item.CreditsCost > 0) { Habbo.Credits -= Item.CreditsCost; Habbo.UpdateCredits(0, true); } if (Item.PixelsCost > 0) { Habbo.Pixels -= Item.PixelsCost; Habbo.UpdatePixels(0, true); } ServerMessage Ser = new ServerMessage(67); Ser.AppendUInt(Item.GetBaseItem().Id); Ser.AppendStringWithBreak(Item.GetBaseItem().SpriteName); Ser.AppendInt32(Item.CreditsCost); Ser.AppendInt32(Item.PixelsCost); Ser.AppendInt32(0); Ser.AppendBoolean(true); Ser.AppendStringWithBreak(Item.GetBaseItem().Type.ToLower()); Ser.AppendUInt(Item.GetBaseItem().SpriteId); Ser.AppendStringWithBreak(""); Ser.AppendInt32(1); Ser.AppendInt32(-1); Ser.AppendStringWithBreak(""); Habbo.SendResponse(Ser); for (int i = 0; i < Item.Amount; i++) { switch (Item.GetBaseItem().Type.ToLower()) { default: { uint Id = ItemGenerator.GetItemId(); using (IQueryAdapter Adapter = DuckEnvironment.GetAdapter()) { Adapter.runFastQuery("INSERT INTO items (id,user_id,base_id,extra_data) VALUES ('" + Id + "','" + Habbo.Id + "','" + Item.BaseId + "','" + ExtraData + "')"); } Furni newFurni = new Furni(Id, Habbo.Id, 0, Item.BaseId, 0, 0, 0, 0.0, "", ExtraData); Habbo.GetInventory().AddnewFurni(newFurni, true); } break; case "e": { Habbo.GetEffectsTable().AddEffect(Item.GetBaseItem().SpriteId, 3600); } break; } } } } }