using System; using System.Collections.Generic; using System.Linq; using System.Text; using Blizzard.Connections; using Blizzard.HabboHotel.Users; namespace Blizzard.HabboHotel.Catalog { class Catalog { internal Habbo User; internal Catalog(Habbo cUser) { User = cUser; } internal void InitTheCatalog() { ServerMessage GetPages = new ServerMessage("A~"); GetPages.AddStringWithBreak("IHHM"); GetPages.AddInt(CatalogData.Categories.Count); // Process categorys foreach (CatalogData PageData in CatalogData.Categories) { GetPages.AddBoolean(PageData.OpenPage); GetPages.AddInt(PageData.IconColor); GetPages.AddInt(PageData.IconImage); GetPages.AddInt(PageData.Id); GetPages.AddStringWithBreak(PageData.Name); // Now pages List PrivatePages = CatalogData.GetPagesForId(PageData.Id); GetPages.AddInt(PrivatePages.Count); foreach (CatalogData SubpageData in PrivatePages) { GetPages.AddBoolean(SubpageData.OpenPage); GetPages.AddInt(SubpageData.IconColor); GetPages.AddInt(SubpageData.IconImage); GetPages.AddInt(SubpageData.Id); GetPages.AddStringWithBreak(SubpageData.Name); GetPages.AddInt(0); } } GetPages.AddBoolean(true); User.SendMessage(GetPages); } internal void GetPage() { int PageId = HabboEncode.decodeVL64(User.ActualPacket.Substring(2)); CatalogData CPages = CatalogData.Page[PageId]; if (CPages.EnabledPage) { if (CPages.MinRank > User.Rank) { return; } BuildMessage BuildCatalog = new BuildMessage(); // Process Page ServerMessage CatalogPage = new ServerMessage(127); CatalogPage.AddInt(PageId); switch (CPages.Extra) { case "frontpage": // A`xJCfrontpage3{2}Kcatalog_frontpage_headline2_it{2}topStory_val11_blingbling_3{2}{2}SBEntre Corazones{2}¡Echa un vistazo a las novedades!{2}Echa un vistazo >>{2}¿Cómo conseguir Créditos?{2}1. Pide siempre primero permiso a quien vaya a pagar. 2. Si te conectas desde España, te recomendamos Paysafe, un método de lo más rentable. 3. Elige la cantidad de Créditos que prefieras y canjea tu código. 4. Para más info, haz clic en el link 'Lograr Créditos'.{2}Canjea tu código aquí:{2}Bling{2}#FAF8CC{2}#FAF8CC{2}Lograr Créditos>>{2}magic.credits{2}HM{1} CatalogPage.AddStringWithBreak("frontpage3"); CatalogPage.AddInt(3); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddStringWithBreak(CPages.PageTeaser); CatalogPage.AddStringWithBreak(""); CatalogPage.AddInt(11); CatalogPage.AddStringWithBreak(CPages.Text); CatalogPage.AddStringWithBreak(CPages.AnotherText); CatalogPage.AddStringWithBreak("Saber más >>"); CatalogPage.AddStringWithBreak("¿Cómo consigo créditos?"); CatalogPage.AddStringWithBreak("No hace falta conseguirlos, en este hotel se regalan por el hecho de estar registrado, ¡así que olvídate de ellos y disfruta!"); CatalogPage.AddStringWithBreak("Canjea tu código aquí:"); CatalogPage.AddStringWithBreak("Yeah?"); CatalogPage.AddStringWithBreak("#FEFEFE"); CatalogPage.AddStringWithBreak("#FEFEFE"); CatalogPage.AddStringWithBreak("Echa un vistazo >>"); CatalogPage.AddStringWithBreak("magic.credits"); break; case "club_buy": // There is a interessant page :D CatalogPage.AddStringWithBreak("club_buy"); CatalogPage.AddInt(1); CatalogPage.AddStringWithBreak("hc2_clubtitle"); break; case "club_gifts": // AcgaCclub_gifts{2}Ihc2_clubtitle{2}IEcha un vistazo a los regalos HC y VIP. Si eres HC, podrás elegir entre una selección de regalos HC. Si eres VIP, entre una selección de regalos VIP.{2}HM{1} CatalogPage.AddStringWithBreak("club_gifts"); CatalogPage.AddBoolean(true); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddBoolean(true); CatalogPage.AddStringWithBreak(CPages.Text); CatalogPage.AddBoolean(false); CatalogPage.AddInt(-1); break; case "spacepage": CatalogPage.AddStringWithBreak("spaces_new"); CatalogPage.AddInt(1); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddInt(1); CatalogPage.AddStringWithBreak(CPages.Text); break; case "petpage": CatalogPage.AddStringWithBreak("pets"); CatalogPage.AddInt(2); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddStringWithBreak(CPages.PageTeaser); CatalogPage.AddInt(4); CatalogPage.AddStringWithBreak(CPages.Text); CatalogPage.AddStringWithBreak("Dale un nombre:"); if (CPages.Name.Contains("Pollit")) { CatalogPage.AddStringWithBreak(""); CatalogPage.AddStringWithBreak(""); } else { if (CPages.Name.Contains("Tortug") || CPages.Name.Contains("Arañ") || CPages.Name.Contains("Rana") || CPages.Name.Contains("Drag") || CPages.Name.Contains("Mono")) { CatalogPage.AddStringWithBreak("Dale un nombre:"); CatalogPage.AddStringWithBreak("Selecciona una raza:"); } else { CatalogPage.AddStringWithBreak("Escoje un color:"); CatalogPage.AddStringWithBreak("Selecciona una raza:"); } } break; case "instructions": CatalogPage.AddStringWithBreak("pets2"); CatalogPage.AddInt(2); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddStringWithBreak(CPages.PageTeaser); // Icon! CatalogPage.AddInt(4); CatalogPage.AddStringWithBreak(CPages.Text); // Introduction CatalogPage.AddStringWithBreak((CPages.TextDetails.Replace("{separe}", Convert.ToChar(2).ToString())).Replace('|', '\n')); // Instructions CatalogPage.AddStringWithBreak(CPages.AnotherText); CatalogPage.AddBoolean(false); CatalogPage.AddInt(-1); break; case "musicshop": CatalogPage.AddStringWithBreak("soundmachine"); CatalogPage.AddInt(2); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddStringWithBreak(CPages.PageTeaser); CatalogPage.AddInt(2); CatalogPage.AddStringWithBreak(CPages.Text); CatalogPage.AddStringWithBreak(CPages.TextDetails); break; default: case "defaultpage": // Normal pages, bah CatalogPage.AddStringWithBreak("default_3x3"); CatalogPage.AddInt(3); CatalogPage.AddStringWithBreak(CPages.HeadLine); CatalogPage.AddStringWithBreak(CPages.PageTeaser); CatalogPage.AddStringWithBreak(CPages.TextSpecial); CatalogPage.AddInt(3); CatalogPage.AddStringWithBreak(CPages.Text); CatalogPage.AddStringWithBreak(CPages.TextDetails); if (!CatalogItemData.HaveDeals(CPages.Id)) CatalogPage.AddStringWithBreak(CPages.TextTeaser); break; } // now, serialize the items if (CPages.Id == 2) { CatalogPage.AddInt(0); } else if (CPages.Extra == "news") { List ActualItems = CatalogItemData.GetLast25Ids(); CatalogPage.AddInt(ActualItems.Count); foreach (CatalogItemData eItem in ActualItems) { // YBAZ|ewallpaper_single_101{{2}}KHHIi{{2}}YnK101{{2}}IM[|e this.SerializeCatalogItem(CatalogPage, CPages, eItem); } } else if (CPages.Extra == "bestsellers") { } else if (CPages.Extra == "categorized") { List ActualItems = CatalogItemData.SelectItemsForCategory(CPages.Name, User.Rank); CatalogPage.AddInt(ActualItems.Count); foreach (CatalogItemData eItem in ActualItems) { this.SerializeCatalogItem(CatalogPage, CPages, eItem); } } else { List ActualItems = CatalogItemData.GetItemsForPageId(CPages.Id); CatalogPage.AddInt(ActualItems.Count); // IMHYRganna_chair_red{2}KHHIs{2}YYO{2}IMHZRganna_chair_green{2}KHHIs{2}ZYO{2}IMH[Rganna_chair_blue{2}KHHIs{2}[YO{2}IMHXSganna_chair_purple{2}KHHIs{2}XZO{2}IMHXWganna_sofa_yellow{2} foreach (CatalogItemData eItem in ActualItems) { // YBAZ|ewallpaper_single_101{{2}}KHHIi{{2}}YnK101{{2}}IM[|e this.SerializeCatalogItem(CatalogPage, CPages, eItem); } } BuildCatalog.AddPacket(CatalogPage); //Extra packets #region Extra Packets if (CPages.Extra == "club_buy") { #region HabboClub Packet ServerMessage HabboClubPage = new ServerMessage(625); // HABBO_CLUB_BASIC_3_MONTHSQKHHKQW[vGIPF Subscription Sub = new Subscription(User); DateTime NextMonth; DateTime NextThreeMonth; DateTime NextMonth2 = DateTime.Now.AddSeconds(60 * 60 * 24 * 31); DateTime NextThreeMonth2 = DateTime.Now.AddSeconds((60 * 60 * 24 * 31) * 3); int DaysLeft1; int DaysLeft2; if (Sub.HasSubscription("habbo_club") || Sub.HasSubscription("habbo_vip")) { Sub.GetData(Sub.LoadMySubscription()); Double Expire = Sub.ExpireTime; Double TimeLeft = Expire - BlizzardSystem.GetUnixTimeStamp(); int TotalDaysLeft = (int)Math.Ceiling(TimeLeft / 86400); DaysLeft1 = TotalDaysLeft + 31; DaysLeft2 = TotalDaysLeft + 93; NextMonth = DateTime.Now.AddSeconds(((60 * 60 * 24 * 31) + (60 * 60 * 24 * TotalDaysLeft))); NextThreeMonth = DateTime.Now.AddSeconds((((60 * 60 * 24 * 31) * 3) + (60 * 60 * 24 * TotalDaysLeft))); } else { DaysLeft1 = 31; DaysLeft2 = 93; NextMonth = DateTime.Now.AddSeconds(60 * 60 * 24 * 31); NextThreeMonth = DateTime.Now.AddSeconds((60 * 60 * 24 * 31) * 3); } List Items = CatalogItemData.GetItemsForPageId(2); if (!Sub.HasSubscription("habbo_club") && !Sub.HasSubscription("habbo_vip")) { // BUY HC OR VIP+ // IqPA[RAHABBO_CLUB_BASIC_1_MONTH{char2}SCHHSG[vGSBSCYSAHABBO_CLUB_VIP_1_MONTH{char2}QFHISG[vGSBSCZSAHABBO_CLUB_VIP_3_MONTHS{char2}POHIQWXwGIPDXTAHABBO_CLUB_BASIC_3_MONTHS{char2}QKHHQWXwGIPD{char1} // IqPAYmQHABBO_CLUB_BASIC_1_MONTH{2}SCHHISG[vGQASB[mQHABBO_CLUB_VIP_1_MONTH{2}QFHIISG[vGQASBXnQHABBO_CLUB_VIP_3_MONTHS{2}POHIKQW[vGSAPCZmQHABBO_CLUB_BASIC_3_MONTHS{2}QKHHKQW[vGSAPC HabboClubPage.AddInt((Items.Count - 2)); foreach (CatalogItemData Item in Items) { if (Item.Name.Contains("UPGRADE")) continue; HabboClubPage.AddInt(Item.Id); // ItemId HabboClubPage.AddStringWithBreak(Item.Name); // ItemName HabboClubPage.AddInt(Item.Cost_Credits); // Cost Credits HabboClubPage.AddBoolean(false); HabboClubPage.AddBoolean(Item.Name.Contains("VIP") ? true : false); HabboClubPage.AddInt(Item.Name.Contains("1") ? 1 : 3); #region Date if (Item.Name.Contains("1")) { HabboClubPage.AddInt(31); // Total days HabboClubPage.AddInt(NextMonth.Year); // Year HabboClubPage.AddInt(NextMonth.Month); // Month HabboClubPage.AddInt(NextMonth.Day); // Day } else if (Item.Name.Contains("3")) { HabboClubPage.AddInt(93); // Total days HabboClubPage.AddInt(NextThreeMonth.Year); // Year HabboClubPage.AddInt(NextThreeMonth.Month); // Month HabboClubPage.AddInt(NextThreeMonth.Day); // Day } #endregion } } else if (Sub.HasSubscription("habbo_club")) { // UPGRADE HC TO VIP HabboClubPage.AddInt((Items.Count - 2)); foreach (CatalogItemData Item in Items) { if (Item.Name.Contains("VIP")) continue; HabboClubPage.AddInt(Item.Id); // ItemId HabboClubPage.AddStringWithBreak(Item.Name); // ItemName HabboClubPage.AddInt(Item.Cost_Credits); // Cost Credits HabboClubPage.AddBoolean(false); HabboClubPage.AddBoolean(Item.Name.Contains("VIP") ? true : false); HabboClubPage.AddInt(Item.Name.Contains("1") ? 1 : 3); #region Date if (Item.Name.Contains("1")) { HabboClubPage.AddInt(1); HabboClubPage.AddInt(31); // Total days HabboClubPage.AddInt(NextMonth.Year); // Year HabboClubPage.AddInt(NextMonth.Month); // Month HabboClubPage.AddInt(NextMonth.Day); // Day } else if (Item.Name.Contains("3")) { HabboClubPage.AddInt(3); HabboClubPage.AddInt(93); // Total days HabboClubPage.AddInt(NextThreeMonth.Year); // Year HabboClubPage.AddInt(NextThreeMonth.Month); // Month HabboClubPage.AddInt(NextThreeMonth.Day); // Day } #endregion } } else if (Sub.HasSubscription("habbo_vip")) { // UPGRADE VIP // J[mQHABBO_CLUB_VIP_1_MONTH{2}QFHIIPf[vGQBRAXnQHABBO_CLUB_VIP_3_MONTHS{2}POHIKRu[vGSBSA{1} HabboClubPage.AddInt((Items.Count - 4)); foreach (CatalogItemData Item in Items) { if (!Item.Name.Contains("VIP")) continue; HabboClubPage.AddInt(Item.Id); // ItemId HabboClubPage.AddStringWithBreak(Item.Name); // ItemName HabboClubPage.AddInt(Item.Cost_Credits); // Cost Credits HabboClubPage.AddBoolean(false); HabboClubPage.AddBoolean(Item.Name.Contains("VIP") ? true : false); HabboClubPage.AddInt(Item.Name.Contains("1") ? 1 : 3); #region Date if (Item.Name.Contains("1")) { HabboClubPage.AddInt(1); // Total Months HabboClubPage.AddInt(31); // Total days HabboClubPage.AddInt(NextMonth.Year); // Year HabboClubPage.AddInt(NextMonth.Month); // Month HabboClubPage.AddInt(NextMonth.Day); // Day } else if (Item.Name.Contains("3")) { HabboClubPage.AddInt(3); // Total Months HabboClubPage.AddInt(93); // Total days HabboClubPage.AddInt(NextThreeMonth.Year); // Year HabboClubPage.AddInt(NextThreeMonth.Month); // Month HabboClubPage.AddInt(NextThreeMonth.Day); // Day } #endregion } } BuildCatalog.AddPacket(HabboClubPage); #endregion } else if (CPages.Extra == "club_gifts") { #region Gift Packet // IoISAPF[dQhc2_sofa{2}IHHIs{2}XXL{2}IMZdQhc3_sofa{2}IHHIs{2}[WL{2}IM[eQhc2_sofatbl{2}IHHIs{2}XYL{2}IMZfQhc3_table{2}IHHIs{2}[YL{2}IMXbQhc2_biglamp{2}IHHIs{2}YUL{2}IMY^Qhc3_bard{2}IHHIs{2}ZQL{2}IMX_Qhc2_cart{2}IHHIs{2}YRL{2}IMXaQhc3_light{2}IHHIs{2}YTL{2}IMXdQhc2_vase{2}IHHIs{2}YWL{2}IMYbQhc3_dc{2}IHHIs{2}ZUL{2}IMZ]Qhc2_divider{2}IHHIs{2}[PL{2}IMYfQhc3_shelf{2}IHHIs{2}ZYL{2}IMZ_Qhc2_carpet{2}IHHIs{2}[RL{2}IMYdQhc3_stool{2}IHHIs{2}ZWL{2}IMXeQhc2_dvn{2}IHHIs{2}YXL{2}IMY]Qhc3_divider{2}IHHIs{2}ZPL{2}IM[cQhc2_coffee{2}IHHIs{2}XWL{2}IMY`Qhc3_hugelamp{2}IHHIs{2}ZSL{2}IM[bQhc2_frplc{2}IHHIs{2}XVL{2}IMXhQhc3_walldeco{2}IHHIi{2}YP{2}IM[_Qhc2_barchair{2}IHHIs{2}XSL{2}IMXrQhc3_stereo{2}IHHIs{2}[\L{2}IMX`Qhc2_armchair{2}IHHIs{2}YSL{2}IMYoQhc3_vase{2}IHHIs{2}XZL{2}IMPF[dQHIIZdQIII[eQHPHIZfQIPHIXbQHSOIY^QISOIX_QHRWIXaQIRWIXdQHQ_IYbQIQ_IZ]QHPgIYfQIPgIZ_QHSnIYdQISnIXeQHRvIY]QIRvI[cQHQ~IY`QIQ~I[bQHXFAIXhQIXFAI[_QH[MAIXrQI[MAIX`QHZUAIYoQIZUAH{1} ServerMessage ClubPage = new ServerMessage("Io"); Subscription Subs = new Subscription(User); int Months = 0; int TotalDaysLeft = 0; if (Subs.LoadMySubscription() != null) { Subs.GetData(Subs.LoadMySubscription()); Double Initial = Subs.InitialTime; Double TimeLeft = BlizzardSystem.GetUnixTimeStamp() - Initial; TotalDaysLeft = (int)Math.Ceiling(TimeLeft / 86400); int MonthsLeft = TotalDaysLeft / 31; Months = (MonthsLeft - Subs.Gifts) + Subs.Days; } ClubPage.AddInt(-1); ClubPage.AddInt(Months); // PM [dQ ClubPage.AddInt(GiftData.Gifts.Count); // Count Items foreach (GiftData Data in GiftData.Gifts) { ClubPage.AddInt(Data.Id); // Item Id (no important what) ClubPage.AddStringWithBreak(Data.Name); // Item Name ClubPage.AddBoolean(true); // some value ClubPage.AddBoolean(false); // some value ClubPage.AddBoolean(false); // some value ClubPage.AddBoolean(true); // some value ClubPage.AddStringWithBreak(Data.Type); // Type ClubPage.AddInt(Data.SpriteId); // SpriteID ClubPage.AddChar(2); // Char ClubPage.AddInt(1); // Boolean true (no important) ClubPage.AddInt(-1); // Negative M Value ClubPage.AddBoolean(Data.IsVIP); // Is VIP Item? } // Sistem of evaluate ClubPage.AddInt(GiftData.Gifts.Count); // Count Again foreach (GiftData Data in GiftData.Gifts) { ClubPage.AddInt(Data.Id); // Item Id (no important what) ClubPage.AddBoolean(Data.IsVIP); // Is VIP Item? ClubPage.AddInt(Data.Days); // Days to get if (TotalDaysLeft >= Data.Days) { if (Data.IsVIP && Subs.HasSubscription("habbo_vip")) ClubPage.AddBoolean(true); // Enable else if (!Data.IsVIP && Subs.HasSubscription("habbo_club") || !Data.IsVIP && Subs.HasSubscription("habbo_vip")) ClubPage.AddBoolean(true); // Enable else ClubPage.AddBoolean(false); // Disable } else ClubPage.AddBoolean(false); // Disable } BuildCatalog.AddPacket(ClubPage); #endregion } #endregion User.SendBuilder(BuildCatalog); } else { return; } } internal void SerializeCatalogItem(ServerMessage CatalogPage, CatalogData CPages, CatalogItemData eItem) { if (eItem.Name.Contains("wallpaper") || eItem.Name.Contains("floor") || eItem.Name.Contains("landscape")) { // Z|ewallpaper_single_101{{2}}KHHIi{{2}}YnK101{{2}}IM[|e try { string[] WallPaperPart = eItem.Name.Split('_'); CatalogPage.AddInt(eItem.Id); // Item Id CatalogPage.AddStringWithBreak(eItem.Name); // Item Name CatalogPage.AddInt(eItem.Cost_Credits); // Cost (Credits) CatalogPage.AddInt(eItem.Cost_Pixels); // Cost (Pixels, SnowFlakes or maybe Hearts) CatalogPage.AddInt(CPages.PageQuest); // Page Type; 0 = nothing, 1 = Snowflakes, 2 = hearts, 3 = ? CatalogPage.AddInt(eItem.ItemIds.Count); // Count of Furnis of the deal foreach (int FurniId in eItem.ItemIds) { ItemsData fItem = ItemsData.RegisteredFurnis[FurniId]; CatalogPage.AddStringWithBreak(fItem.Type); // Special type of furni? CatalogPage.AddInt(fItem.SpriteId); // SpriteID CatalogPage.AddStringWithBreak(WallPaperPart[2]); // Separe if (eItem.ExtraAmounts.ContainsKey(FurniId)) CatalogPage.AddInt(eItem.ExtraAmounts[FurniId]); else CatalogPage.AddInt(eItem.Amount); CatalogPage.AddInt(-1); // Separe } CatalogPage.AddInt(eItem.IsClub); // Is HC Button? } catch { return; } } else { try { // Yggdng_cube{2}JHHIs{2}YiO{2}IM // QB[RSwf_deal9{char2}QFHHKs{char2}YPM{char2}IMs{char2}ZPM{char2}PAMs{char2}[LM{char2}IMHXRSwf_deal6{char2}RBHHKs{char2}ZMM{char2}IMs{char2}[MM{char2}IMs{char2}ZKM{char2}IMHYRSwf_deal7{char2}SHHHPAs{char2}YQM{char2}IMs{char2}YRM{char2}PAMs{char2}[TM{char2}PAMs{char2}[JM{char2}PAMHZRSwf_deal8{char2}RBHHPAs{char2}YRM{char2}IMs{char2}[TM{char2}IMs{char2}[JM{char2}IMs{char2}YQM{char2}IMH[PSwf_deal1{char2}PBHHKs{char2}[MM{char2}IMs{char2}YPM{char2}IMs{char2}[SM{char2}IMHXQSwf_deal2{char2}RBHHPAs{char2}[SM{char2}IMs{char2}YTM{char2}IMs{char2}XLM{char2}IMs{char2}YPM{char2}IMHYQSwf_deal3{char2}RCHHQAs{char2}XQM{char2}IMs{char2}[SM{char2}IMs{char2}YPM{char2}IMs{char2}[TM{char2}IMs{char2}ZNM{char2}IMHZQSwf_deal4{char2}RBHHPAs{char2}[TM{char2}IMs{char2}[SM{char2}IMs{char2}XQM{char2}IMs{char2}YPM{char2}IMH[QSwf_deal5{char2}PBHHJs{char2}YOM{char2}IMs{char2}[OM{char2}IMHM{char1} CatalogPage.AddInt(eItem.Id); // Item Id CatalogPage.AddStringWithBreak(eItem.Name); // Item Name CatalogPage.AddInt(eItem.Cost_Credits); // Cost (Credits) CatalogPage.AddInt(eItem.Cost_Pixels); // Cost (Pixels, SnowFlakes or maybe Hearts) CatalogPage.AddInt(CPages.PageQuest); // Page Type; 0 = nothing, 1 = Snowflakes, 2 = hearts, 3 = ? CatalogPage.AddInt(eItem.ItemIds.Count); // Count of Furnis of the deal foreach (int FurniId in eItem.ItemIds) { ItemsData fItem = ItemsData.RegisteredFurnis[FurniId]; CatalogPage.AddStringWithBreak(fItem.Type); // Type ("i","s",etc) CatalogPage.AddInt(fItem.SpriteId); // SpriteID CatalogPage.AddStringWithBreak(eItem.ExtraInformation); // Separe Char (like a AddStringWithBreak("")) if (eItem.ExtraAmounts.ContainsKey(FurniId)) CatalogPage.AddInt(eItem.ExtraAmounts[FurniId]); // Amount else CatalogPage.AddInt(eItem.Amount); // Amount CatalogPage.AddInt(-1); // Separe } CatalogPage.AddInt(eItem.IsClub); // Is HC(1)/VIP(2) Item? } catch { return; } } } internal void GetAPage(int Id) { RequestMessages Messages = new RequestMessages(User.ActualGame.ConnectionID); Messages.GetClasses(User); Messages.ProcessPackets("Af" + HabboEncode.encodeVL64(Id)); } internal void CanGift() { int ItemId = HabboEncode.decodeVL64(User.ActualPacket.Substring(2)); CatalogItemData Cat = CatalogItemData.CatalogItemsForId[ItemId]; bool CanG = true; foreach (int sItemId in Cat.ItemIds) { ItemsData D = ItemsData.RegisteredFurnis[sItemId]; if (!D.CanGift) CanG = false; } ServerMessage CanGift = new ServerMessage("In"); CanGift.AddInt(ItemId); CanGift.AddBoolean(CanG); User.SendMessage(CanGift); } internal void InitialData() { // IdIIIRBIXDgPLSA ServerMessage CatalogData = new ServerMessage("Id"); CatalogData.AddString("IIIRBIXDgPLSA"); /* CatalogData.AddInt(1); CatalogData.AddInt(1); CatalogData.AddInt(1); CatalogData.AddInt(5); CatalogData.AddInt(1); CatalogData.AddInt(10000); CatalogData.AddInt(48); CatalogData.AddInt(7); */ User.SendMessage(CatalogData); } internal void GetGiftData() { // Thank you for this code, LittleJ // IlIIRBXBLYBLZBL[BLXCLYCLZCL[CLXDLYDLSAHIJKPAQARASBHIJKPAQARASAPBQBRB ServerMessage CatalogData = new ServerMessage("Il"); CatalogData.AddString("IIRBXBLYBLZBL[BLXCLYCLZCL[CLXDLYDLSAHIJKPAQARASBHIJKPAQARASAPBQBRB"); /* CatalogData.AddInt(1); CatalogData.AddInt(1); CatalogData.AddInt(10); if (Gs.GetLanguage() != "es") { for (int i = 3372; i < 3381; i++) { CatalogData.AddInt(i); } } else { for (int i = 3080; i < 3089; i++) { CatalogData.AddInt(i); } } CatalogData.AddInt(7); CatalogData.AddInt(0); CatalogData.AddInt(1); CatalogData.AddInt(2); CatalogData.AddInt(3); CatalogData.AddInt(4); CatalogData.AddInt(5); CatalogData.AddInt(6); CatalogData.AddInt(11); CatalogData.AddInt(0); CatalogData.AddInt(1); CatalogData.AddInt(2); CatalogData.AddInt(3); CatalogData.AddInt(4); CatalogData.AddInt(5); CatalogData.AddInt(6); CatalogData.AddInt(7); CatalogData.AddInt(8); CatalogData.AddInt(9); CatalogData.AddInt(10); CatalogData.AddInt(1); */ User.SendMessage(CatalogData); } internal void BuyItem() { // ADKQG@C101 // ADRASC@@ // ADQAYmQ@@ try { string Content = User.ActualPacket.Substring(2); string[] Separe = Content.Split('@'); AnalyzeMessages Mess = new AnalyzeMessages(); string[] Packet = Mess.SepareOnVL64Vars(Separe[0]); int PageId = HabboEncode.decodeVL64(Packet[0]); int ItemId = HabboEncode.decodeVL64(Packet[1]); CatalogItemData uItems = CatalogItemData.CatalogItemsForId[ItemId]; // Extra HC /* IDS: * 1 month HC = 4533 * 3 month HC = 4534 * 1 month VIP = 4535 * 3 month VIP = 4536 * Others [1 extra VIP = 4537 | 3 Extra VIP 4539] */ //Console.WriteLine("Request to purchase: " + ItemId); if (uItems.Name.Contains("HABBO_CLUB")) { #region Purchase Club! // PAYmQHABBO_CLUB_BASIC_1_MONTHSCHHISGZvGSBSE[mQHABBO_CLUB_VIP_1_MONTHQFHIISGZvGSBSEXnQHABBO_CLUB_VIP_3_MONTHSPOHIKQW[vGIPFZmQHABBO_CLUB_BASIC_3_MONTHSQKHHKQW[vGIPF int TypeOfClub = 0; int Months = 1; int Days = 31; bool Upgrade = false; Subscription Sub = new Subscription(User); if (uItems.Name == "HABBO_CLUB_BASIC_1_MONTH") { TypeOfClub = 1; Months = 1; Days = 31; } else if (uItems.Name.Contains("HABBO_CLUB_BASIC_3")) { TypeOfClub = 2; Months = 3; Days = 93; } else if (uItems.Name == "HABBO_CLUB_VIP_1_MONTH") { TypeOfClub = 3; Months = 1; Days = 31; } else if (uItems.Name.Contains("HABBO_CLUB_VIP_3")) { TypeOfClub = 4; Months = 3; Days = 93; } else if (uItems.Name == "HABBO_CLUB_UPGRADE_1") { TypeOfClub = 5; Months = 1; Days = 31; Upgrade = true; } else if (uItems.Name == "HABBO_CLUB_UPGRADE_3") { TypeOfClub = 6; Months = 3; Days = 93; Upgrade = true; } if (TypeOfClub == 1) { Sub.AddOrExtendSubscription("habbo_club", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage("@B"); FuseRight.AddInt(1); User.SendMessage(FuseRight); User.SerializeClub(); } else if (TypeOfClub == 2) { Sub.AddOrExtendSubscription("habbo_club", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage("@B"); FuseRight.AddInt(1); User.SendMessage(FuseRight); User.SerializeClub(); } else if (TypeOfClub == 3) { Sub.AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage("@B"); FuseRight.AddInt(2); User.SendMessage(FuseRight); User.SerializeClub(); } else if (TypeOfClub == 4) { Sub.AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage("@B"); FuseRight.AddInt(2); User.SendMessage(FuseRight); User.SerializeClub(); } else if (TypeOfClub == 5) { Sub.UpdateSubscription("habbo_vip", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage("@B"); FuseRight.AddInt(2); User.SendMessage(FuseRight); User.SerializeClub(); } else if (TypeOfClub == 6) { Sub.UpdateSubscription("habbo_vip", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage("@B"); FuseRight.AddInt(2); User.SendMessage(FuseRight); User.SerializeClub(); } bool CreditsFail = false; bool PixelsFail = false; if (User.Credits < uItems.Cost_Credits) { CreditsFail = true; } if (CreditsFail || PixelsFail) { ServerMessage Failed = new ServerMessage("AD"); Failed.AddBoolean(CreditsFail); Failed.AddBoolean(PixelsFail); User.SendMessage(Failed); return; } if (uItems.Cost_Credits > 0) { int NewCredits = User.Credits - uItems.Cost_Credits; User.UpdateCredits(NewCredits, true); } if (uItems.Name.Contains("_VIP")) Sub.GetData("habbo_vip"); else Sub.GetData("habbo_club"); int ExpireTime = Sub.ExpireTime; Double Expire = Sub.ExpireTime; Double TimeLeft = Expire - BlizzardSystem.GetUnixTimeStamp(); int TotalDaysLeft = (int)Math.Ceiling(TimeLeft / 86400); Double Initial = Sub.InitialTime; Double TimeLeft2 = BlizzardSystem.GetUnixTimeStamp() - Initial; int TotalDaysLeft2 = (int)Math.Ceiling(TimeLeft2 / 86400); ServerMessage PurchaseClub = new ServerMessage("@G"); PurchaseClub.AddStringWithBreak("habbo_club"); int SMonths = TotalDaysLeft % 31; PurchaseClub.AddInt(TotalDaysLeft - (SMonths * 31)); // Days left PurchaseClub.AddInt(1); // int - no se usa PurchaseClub.AddInt(TotalDaysLeft % 31); // Months Left PurchaseClub.AddInt(2); // TYPE PurchaseClub.AddBoolean(true); // clubHasEverBeenMember PurchaseClub.AddBoolean(uItems.Name.Contains("_VIP")); PurchaseClub.AddInt(0); PurchaseClub.AddInt(TotalDaysLeft2); User.SendMessage(PurchaseClub); /*ServerMessage PurchaseClub = new ServerMessage("Io"); //AC[mQHABBO_CLUB_VIP_1_MONTH{2}QFHHH{1} PurchaseClub.AddInt(uItems.Id); PurchaseClub.AddStringWithBreak(uItems.Name); PurchaseClub.AddInt(uItems.Cost_Credits); PurchaseClub.AddBoolean(Upgrade); // Upgrade or buy if(uItems.Name.Contains("_VIP")) PurchaseClub.AddBoolean(true); // VIP else PurchaseClub.AddBoolean(false); // HC PurchaseClub.AddInt(Months); // Months PurchaseClub.AddInt(Days); // Days if (uItems.Name.Contains("_VIP")) { Sub.GetData("habbo_vip"); } else { Sub.GetData("habbo_club"); } DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddHours(2); DateTime T = epoch.AddSeconds(Sub.ExpireTime); PurchaseClub.AddInt(T.Year); // Final year PurchaseClub.AddInt(T.Month); // Final month PurchaseClub.AddInt(T.Day); // Final day User.SendMessage(PurchaseClub);*/ this.GetAPage(2); return; #endregion } else if (uItems.Name.Contains("avatar_effect")) { /* CatalogPages cPages = new CatalogPages(); cPages.GetPageDataFromId(PageId); CatalogItems cItems = new CatalogItems(); cItems.GetDataForId(ItemId, cPages.PageQuest); UserData cUser = new UserData(User.Id); items_information fItem = new items_information(); fItem.GetDataForId(cItems.FurniId); int ItemCost = cItems.Cost_Credits; int PixelCost = cItems.Cost_Pixels; bool CreditsFail = false; bool PixelsFail = false; if (int.Parse(uItems.Name.Replace("avatar_effect", "")) <= 18) { EffectsInventory Effs = new EffectsInventory(); Effs.GetEffects(User); Effs.AddEffect(int.Parse(uItems.Name.Replace("avatar_effect", "")), 3600, User); } else { EffectsInventory Effs = new EffectsInventory(); Effs.GetEffects(User); Effs.AddEffect(int.Parse(uItems.Name.Replace("avatar_effect", "")), (3600 * 24), User); } if (cUser.Credits < ItemCost) { CreditsFail = true; } if (cUser.Pixels < PixelCost) { PixelsFail = true; } if (CreditsFail || PixelsFail) { ServerMessage Failed = new ServerMessage("AD"); Failed.AddBoolean(CreditsFail); Failed.AddBoolean(PixelsFail); User.SendMessage(Failed); return; } if (ItemCost > 0) { int NewCredits = cUser.Credits - ItemCost; User.UpdateCredits(NewCredits, true); } else if (PixelCost > 0) { int NewPixels = cUser.Pixels - PixelCost; User.UpdatePixels(NewPixels, PixelCost, true); } */ } else { string ExtraData = ""; if (!Content.Contains("@@")) { ExtraData = Separe[1].Substring(1); } CatalogItemData cItems = CatalogItemData.CatalogItemsForId[ItemId]; bool CreditsFail = false; bool PixelsFail = false; if (User.Credits < cItems.Cost_Credits) { CreditsFail = true; } if (User.Credits < cItems.Cost_Pixels) { PixelsFail = true; } if (CreditsFail || PixelsFail) { ServerMessage Failed = new ServerMessage("AD"); Failed.AddBoolean(CreditsFail); Failed.AddBoolean(PixelsFail); User.SendMessage(Failed); return; } if (cItems.Cost_Credits > 0) { int NewCredits = User.Credits - cItems.Cost_Credits; User.UpdateCredits(NewCredits, true); } if (cItems.Cost_Pixels > 0) { int NewPixels = User.Pixels - cItems.Cost_Pixels; User.UpdatePixels(NewPixels, 0, true); } if (cItems.Name.Contains("SONG")) ExtraData = cItems.ExtraInformation; foreach (int sItemId in cItems.ItemIds) { ItemsData fItem = ItemsData.RegisteredFurnis[sItemId]; int Amount = cItems.Amount; if (cItems.ExtraAmounts.ContainsKey(sItemId)) Amount = cItems.ExtraAmounts[sItemId]; // M@IIIrLOMYC // Structura int Type = 2; if (fItem.Type == "s") { if (fItem.FurniInteractor.ToLower() == "pet") Type = 3; else Type = 1; } ServerMessage AddItem = new ServerMessage("AC"); AddItem.AddInt(fItem.Id); AddItem.AddStringWithBreak(fItem.Name); AddItem.AddInt(cItems.Cost_Credits); AddItem.AddInt(cItems.Cost_Pixels); AddItem.AddInt(0); AddItem.AddInt(1); AddItem.AddStringWithBreak(fItem.Type); AddItem.AddInt(fItem.SpriteId); AddItem.AddStringWithBreak(""); AddItem.AddInt(1); AddItem.AddInt(-1); AddItem.AddStringWithBreak(""); User.SendMessage(AddItem); /*if (fItem.FurniInteractor.ToLower() == "pet") { int PetRace = Convert.ToInt32(fItem.Name.Substring(fItem.Name.Length - 2).Replace("t", "")); string[] SeparePets = ExtraData.Split('\n'); string Name = SeparePets[0]; int PetType = Convert.ToInt32(SeparePets[1]); string Color = SeparePets[2]; MySQL.ExecuteQuery("INSERT INTO users_pets (id, userid, race, petname, type, color, experience, eat, sleep, level, createdstamp) VALUES (NULL, '" + User.Id + "', '" + PetRace + "', '" + Name + "', '" + PetType + "', '" + Color + "', '0', '150', '100', '1', '" + BlizzardSystem.GetUnixTimeStamp() + "');"); User.SerializePetInventory(); } else {*/ ServerMessage AlertItem = new ServerMessage("M@"); AlertItem.AddInt(1); // Count AlertItem.AddInt(Type); // Type (WallItems (2), FloorItems (1), Pets (3) or Badges (4)) AlertItem.AddInt(Amount); // Amount of furnis for (int i = 0; i != Amount; i++) { Updater.SQLStoExecute.Add("INSERT INTO users_items (id, userid, itemid, extradata) VALUES (NULL, '" + User.Id + "', '" + sItemId + "', '" + ExtraData + "');"); UserItemsData Us = new UserItemsData(); Us.Id = UserItemsData.CalculateLastId() + 1; Us.UserId = User.Id; Us.FurniId = sItemId; Us.ExtraData = ExtraData; UserItemsData.UserItems.Add(Us); UserItemsData.UserItemsbyId.Add(Us.Id, Us); AlertItem.AddInt(Us.Id); // InventoryItem ID } User.SerializeMyInventory(); User.SendMessage(AlertItem); } // } } } catch (Exception e) { Console.WriteLine("Exception:" + e.ToString()); } } internal void GetPetRace() { //n~@Ga0 pet0 string Race1 = User.ActualPacket; /* * Créditos a LittleJ * Credits to Littlej */ Dictionary Races = new Dictionary(); int Race = Convert.ToInt32(Race1.Substring(Race1.Length - 2).Replace("t", "")); //Console.WriteLine(Race); #region Races Info Races.Add(0, "QFHHIHHIIHHJIHHKIHHPAIHHQAIHHRAIHHSAIHHPBIHHQBIHHRBIHHSBIHHPCIHHQCIHHRCIHHSCIHHPDIHHQDIHHRDIHHSDIHHPEIHHQEIHHREIHHSEIHHPFIH"); Races.Add(1, "QFIHIHIIIHIJIHIKIHIPAIHIQAIHIRAIHISAIHIPBIHIQBIHIRBIHISBIHIPCIHIQCIHIRCIHISCIHIPDIHIQDIHIRDIHISDIHIPEIHIQEIHIREIHISEIHIPFIH"); Races.Add(2, "PCJHIHJIIHJJIHJKIHJPAIHJQAIHJRAIHJSAIHJPBIHJQBIHJRBIHJSBIH"); Races.Add(3, "SAKHIHKIIHKJIHKKIHKPAIHKQAIHKRAIH"); Races.Add(4, "PAPAHIHPAIIHPAJIHPAKIH"); Races.Add(5, "SAQAHIHQAIIHQAJIHQAKIHQAQAIHQASAIHQAPBIH"); Races.Add(6, "QCRAHIHRAIIHRAJIHRAKIHRAPAIHRAQAIHRARAHIRASAHIRAPBHIRAQBHIRARBHIRASBIHRAPCHI"); Races.Add(7, "PBSAHIHSAIIHSAJIHSAKHISAPAIHSAQAIHSARAIHSASAIH"); Races.Add(8, "QCPBHIHPBIIHPBJIHPBKIHPBPAIHPBQAIHPBRAIHPBSAIHPBPBIHPBQBIHPBRBIHPBSBIHPBRCIH"); Races.Add(9, "QBQBHIHQBIIHQBJIHQBKIHQBPAIHQBQAIHQBRAIHQBSAIHQBPBIH"); Races.Add(10, "IRBHIH"); Races.Add(11, "RCSBIIHSBJIHSBKIHSBPAIHSBQAIHSBRAIHSBPBHHSBQBIHSBRBIHSBSBIHSBPCIHSBQCIHSBSCIHSBRDIH"); Races.Add(12, "RAPCHIHPCIIHPCJIHPCKIHPCPAIHPCQAIH"); Races.Add(14, "PBRCHIHRCIIHRCJIHRCKHIRCPAIHRCQAIHRCRAIHRCSAIH"); #endregion if (!Races.ContainsKey(Race)) { User.SendAlert(Race + " Esta raza no está disponible", 1); Races.Clear(); return; } ServerMessage r = new ServerMessage("L{"); r.AddStringWithBreak("a0 pet" + Race); r.AddStringWithBreak(Races[Race]); User.SendMessage(r); Races.Clear(); } internal void CheckPetName() { //@J@F[Name]I string Name = User.ActualPacket.Substring(4, User.ActualPacket.Length - 5); int IsNameValid = 0; if (Name.Length < 1) IsNameValid = 2; else if (Name.Length > 16) IsNameValid = 1; else if (!BlizzardSystem.IsValidAlphaNumeric(Name)) IsNameValid = 1; ServerMessage IsValid = new ServerMessage("@d"); IsValid.AddInt(IsNameValid); User.SendMessage(IsValid); } internal void UseVoucher() { string CodeVoucher = User.ActualPacket.Substring(4); bool VoucherExist = false; VoucherData V = null; foreach (VoucherData W in VoucherData.Voucher) { if (W.Code == CodeVoucher) { VoucherExist = true; V = W; } else continue; } if (VoucherExist) { BuildMessage VoucherCollector = new BuildMessage(); int CodeValue = V.Credits; if (CodeValue >= 1) { int NewCredits = User.Credits + CodeValue; VoucherCollector.AddPacket(User.MUpdateCredits(NewCredits, true)); } VoucherData.Voucher.Remove(V); Updater.SQLStoExecute.Add("DELETE FROM system_vouchers WHERE code = '" + CodeVoucher + "' LIMIT 1"); ServerMessage FinalPacket = new ServerMessage("CT"); VoucherCollector.AddPacket(FinalPacket); User.SendBuilder(VoucherCollector); } else { ServerMessage InvalidCode = new ServerMessage("CU"); InvalidCode.AddNormalInt(1); User.SendMessage(InvalidCode); } } } }