using System; using System.Collections.Generic; using System.Text; using System.Data; using Uber.Collections; using Uber.HabboHotel.GameClients; using Uber.Messages; using Uber.Storage; using Uber.HabboHotel.Items; using Uber.HabboHotel.Pets; using Uber.HabboHotel.Users.Subscriptions; using Uber.HabboHotel.Misc; namespace Uber.HabboHotel.Catalogs { class Catalog { public SafeDictionary Pages; public SafeList EcotronRewards; public SafeList ClubItems; public SafeList ClubGifts; private VoucherHandler VoucherHandler; private Marketplace Marketplace; public Catalog() { this.VoucherHandler = new VoucherHandler(); this.Marketplace = new Marketplace(); } public void Initialize() { this.Pages = null; this.Pages = new SafeDictionary(); this.EcotronRewards = null; this.EcotronRewards = new SafeList(); this.ClubItems = null; this.ClubItems = new SafeList(); this.ClubGifts = null; this.ClubGifts = new SafeList(); DataTable Data = null; DataTable EcoData = null; DataTable ClubData = null; DataTable ClubGiftData = null; using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { Data = dbClient.ReadDataTable("SELECT * FROM catalog_pages ORDER BY order_num ASC"); EcoData = dbClient.ReadDataTable("SELECT * FROM ecotron_rewards ORDER BY item_id"); ClubData = dbClient.ReadDataTable("SELECT * FROM club_deals ORDER BY base_id"); ClubGiftData = dbClient.ReadDataTable("SELECT * FROM club_gifts ORDER BY id"); } if (Data != null) { foreach (DataRow Row in Data.Rows) { Boolean Visible = false; Boolean Enabled = false; Boolean ComingSoon = false; if (Convert.ToString(Row["visible"]) == "1") { Visible = true; } if (Convert.ToString(Row["enabled"]) == "1") { Enabled = true; } if (Convert.ToString(Row["coming_soon"]) == "1") { ComingSoon = true; } // break Convert Pages.Add(Convert.ToInt32(Row["id"]), new CatalogPage(Convert.ToInt32(Row["id"]), Convert.ToInt32(Row["parent_id"]), (string)Row["caption"], Visible, Enabled, ComingSoon, (uint)Row["min_rank"], UberEnvironment.EnumToBool(Row["club_only"].ToString()), (int)Row["icon_color"], (int)Row["icon_image"], (string)Row["page_layout"], (string)Row["page_headline"], (string)Row["page_teaser"], (string)Row["page_special"], (string)Row["page_text1"], (string)Row["page_text2"], (string)Row["page_text_details"], (string)Row["page_text_teaser"])); } } if (EcoData != null) { foreach (DataRow Row in EcoData.Rows) { EcotronRewards.Add(new EcotronReward((uint)Row["id"], (uint)Row["display_id"], (uint)Row["item_id"], (uint)Row["reward_level"])); } } if (ClubData != null) { foreach (DataRow Row in ClubData.Rows) { ClubItems.Add(new ClubItem((int)Row["id"], (int)Row["base_id"], (string)Row["name"], (int)Row["price"], UberEnvironment.EnumToBool((string)Row["is_vip"]), (int)Row["months_length"], (int)Row["days_length"])); } } if (ClubGiftData != null) { foreach (DataRow Row in ClubGiftData.Rows) { ClubGifts.Add(new ClubGift((string)Row["item_name"], (int)Row["id"], (int)Row["sprite_id"], (int)Row["days_need"], UberEnvironment.EnumToBool((string)Row["isvip"]))); } } } public CatalogItem FindItem(uint ItemId) { foreach (CatalogPage Page in Pages.Values) { for(int i = 0; i < Page.Items.Count; i++) { CatalogItem Item = Page.Items[i]; if (Item == null) { continue; } if (Item.Id == ItemId) { return Item; } } } return null; } public ClubGift GetGiftByName(string Name) { foreach (ClubGift Gift in this.ClubGifts) { if (Gift.Name == Name) { return Gift; } } return null; } public List GetHabboClubPageItems() { var HabboClubItems = new List(); foreach (ClubItem Item in ClubItems) { HabboClubItems.Add(Item); } return HabboClubItems; } public List GetHabboGiftPageItems() { var HabboClubItems = new List(); foreach (ClubGift Item in ClubGifts) { HabboClubItems.Add(Item); } return HabboClubItems; } public Boolean IsItemInCatalog(uint BaseId) { foreach (CatalogPage Page in Pages.Values) { for (int i = 0; i < Page.Items.Count; i++) { CatalogItem Item = Page.Items[i]; if (Item == null) { continue; } if (Item.GetBaseItem().ItemId == BaseId) { return true; } } } return false; } public int GetTreeSize(GameClient Session, int TreeId) { int i = 0; foreach (CatalogPage Page in Pages.Values) { if (Page.MinRank > Session.GetHabbo().Rank) { continue; } if (Page.ParentId == TreeId) { i++; } } return i; } public CatalogPage GetPage(int Page) { if (!Pages.ContainsKey(Page)) { return null; } return Pages[Page]; } public void HandlePurchase(GameClient Session, int PageId, uint ItemId, string ExtraData, Boolean IsGift, string GiftUser, string GiftMessage) { CatalogPage Page = GetPage(PageId); if (Page == null || Page.ComingSoon || !Page.Enabled || !Page.Visible || Page.MinRank > Session.GetHabbo().Rank) { return; } if (Page.ClubOnly && Session.GetHabbo().GetSubscriptionManager().GetCurrentSub == null) { return; } CatalogItem Item = Page.GetItem(ItemId); if (Item == null) { return; } uint GiftUserId = 0; if (IsGift) { if (!Item.GetBaseItem().AllowGift) { return; } uint ID = UberEnvironment.GetGame().GetClientManager().GetIdByName(GiftUser); if (ID == 0) { return; } GiftUserId = ID; if (GiftUserId == 0) { Session.GetMessageHandler().GetResponse().Init(76); Session.GetMessageHandler().GetResponse().AppendBoolean(true); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(GiftUser); Session.GetMessageHandler().SendResponse(); return; } } Boolean CreditsError = false; Boolean PixelError = false; if (Session.GetHabbo().Credits < Item.CreditsCost || Session.GetHabbo().Credits < 0) { CreditsError = true; } if (Session.GetHabbo().ActivityPoints < Item.PixelsCost || Session.GetHabbo().ActivityPoints < 0) { PixelError = true; } if (CreditsError || PixelError) { Session.GetMessageHandler().GetResponse().Init(68); Session.GetMessageHandler().GetResponse().AppendBoolean(CreditsError); Session.GetMessageHandler().GetResponse().AppendBoolean(PixelError); Session.GetMessageHandler().SendResponse(); return; } if (IsGift && Item.GetBaseItem().Type.ToLower() == "e") { Session.SendNotif("You can not send this item as a gift."); return; } // Extra Data is _NOT_ filtered at this point and MUST BE VERIFIED BELOW: switch (Item.GetBaseItem().InteractionType.ToLower()) { case "pet": try { string[] Bits = ExtraData.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (!CheckPetName(PetName)) { return; } if (Race.Length < 1) { return; } if (Color == "") { return; } } catch (Exception) { break; } break; case "roomeffect": Double Number = 0; try { Number = Convert.ToDouble(ExtraData); } catch (Exception) { } ExtraData = Convert.ToString(Number).Replace(',', '.'); break; // maintain extra data // todo: validate case "postit": ExtraData = "FFFF33"; break; case "dimmer": ExtraData = "1,1,1,#000000,255"; break; case "trophy": ExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + UberEnvironment.FilterInjectionChars(ExtraData, true); break; default: ExtraData = ""; break; } if (Item.CreditsCost > 0) { Session.GetHabbo().Credits -= Item.CreditsCost; Session.GetHabbo().UpdateCreditsBalance(true); } if (Item.PixelsCost > 0) { Session.GetHabbo().ActivityPoints -= Item.PixelsCost; Session.GetHabbo().UpdateActivityPointsBalance(true); } Session.GetMessageHandler().GetResponse().Init(67); Session.GetMessageHandler().GetResponse().AppendUInt(Item.GetBaseItem().ItemId); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Item.GetBaseItem().Name); Session.GetMessageHandler().GetResponse().AppendInt32(Item.CreditsCost); Session.GetMessageHandler().GetResponse().AppendInt32(Item.PixelsCost); Session.GetMessageHandler().GetResponse().AppendInt32(0); Session.GetMessageHandler().GetResponse().AppendInt32(1); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Item.GetBaseItem().Type.ToLower()); Session.GetMessageHandler().GetResponse().AppendInt32(Item.GetBaseItem().SpriteId); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(""); Session.GetMessageHandler().GetResponse().AppendInt32(1); Session.GetMessageHandler().GetResponse().AppendInt32(-1); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(""); Session.GetMessageHandler().SendResponse(); if (IsGift) { uint GenId = GenerateItemId(); if (GenId <= 0) { return; } Item Present = GeneratePresent(); using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("gift_message", "!" + GiftMessage); 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 ('" + GenId + "','" + GiftUserId + "','0','" + Present.ItemId + "',@gift_message,'0','0','0','0','')"); dbClient.ExecuteQuery("INSERT INTO user_presents (item_id,base_id,amount,extra_data) VALUES ('" + GenId + "','" + Item.GetBaseItem().ItemId + "','" + Item.Amount + "',@extra_data)"); } GameClient Receiver = UberEnvironment.GetGame().GetClientManager().GetClientByHabbo(GiftUserId); if (Receiver != null) { Receiver.SendNotif("You have received a gift! Check your inventory."); ChatCommandHandler.SendChatMessage(Session, "You have received a gift! Check your inventory."); Receiver.GetHabbo().GetInventoryComponent().UpdateItems(true); } ChatCommandHandler.SendChatMessage(Session, "Gift send Successfully!"); } else { DeliverItems(Session, Item.GetBaseItem(), Item.Amount, ExtraData); } } public bool CheckPetName(string PetName) { if (PetName.Length < 1 || PetName.Length > 16) { return false; } if (!UberEnvironment.IsValidAlphaNumeric(PetName)) { return false; } return true; } public void DeliverItems(GameClient Session, Item Item, int Amount, String ExtraData) { switch (Item.Type.ToLower()) { case "i": case "s": for (int i = 0; i < Amount; i++) { uint GeneratedId = GenerateItemId(); switch (Item.InteractionType.ToLower()) { case "pet": string[] PetData = ExtraData.Split('\n'); int PetType = -1; string PetName = ""; string PetColor = ""; string PetRace = ""; PetType = Convert.ToInt32(Item.Name.Substring(6)); PetName = PetData[0]; PetColor = PetData[2]; PetRace = PetData[1]; if (PetType == -1 || PetName == "" || !CheckPetName(PetName) || PetColor == "" || PetRace == "") { UberEnvironment.GetLogging().WriteLine("[Pet-Creating] - Some given details are invalid!", Core.LogLevel.Error); break; } Pet GeneratedPet = CreatePet(Session.GetHabbo().Id, PetName, PetType, PetRace, PetColor); Session.GetHabbo().GetInventoryComponent().AddPet(GeneratedPet); Session.GetHabbo().GetInventoryComponent().AddItem(GeneratedId, 320, "0", true); Session.GetHabbo().CheckPetCount(); // achievements break; case "teleport": uint TeleTwo = GenerateItemId(); using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("INSERT INTO tele_links (tele_one_id,tele_two_id) VALUES ('" + GeneratedId + "','" + TeleTwo + "')"); dbClient.ExecuteQuery("INSERT INTO tele_links (tele_one_id,tele_two_id) VALUES ('" + TeleTwo + "','" + GeneratedId + "')"); } Session.GetHabbo().GetInventoryComponent().AddItem(TeleTwo, Item.ItemId, "0", true); Session.GetHabbo().GetInventoryComponent().AddItem(GeneratedId, Item.ItemId, "0", true); break; case "dimmer": using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.ExecuteQuery("INSERT INTO room_items_moodlight (item_id,enabled,current_preset,preset_one,preset_two,preset_three) VALUES ('" + GeneratedId + "','0','1','#000000,255,0','#000000,255,0','#000000,255,0')"); } Session.GetHabbo().GetInventoryComponent().AddItem(GeneratedId, Item.ItemId, ExtraData, true); break; default: Session.GetHabbo().GetInventoryComponent().AddItem(GeneratedId, Item.ItemId, ExtraData, true); break; } } Session.GetHabbo().GetInventoryComponent().UpdateItems(true); break; case "e": for (int i = 0; i < Amount; i++) { Session.GetHabbo().GetAvatarEffectsInventoryComponent().AddEffect(Item.SpriteId, 3600); } break; default: Session.SendNotif("Something went wrong! The item type could not be processed. Please do not try to buy this item anymore, instead inform support as soon as possible."); break; } } public Item GeneratePresent() { int Random = UberEnvironment.GetRandomNumber(0, 6); switch (Random) { case 1: return UberEnvironment.GetGame().GetItemManager().GetItem(165); // present_gen1 case 2: return UberEnvironment.GetGame().GetItemManager().GetItem(166); // present_gen2 case 3: return UberEnvironment.GetGame().GetItemManager().GetItem(167); // present_gen3 case 4: return UberEnvironment.GetGame().GetItemManager().GetItem(168); // present_gen4 case 5: return UberEnvironment.GetGame().GetItemManager().GetItem(169); // present_gen5 case 6: return UberEnvironment.GetGame().GetItemManager().GetItem(170); // present_gen6 case 0: default: return UberEnvironment.GetGame().GetItemManager().GetItem(164); // present_gen } } public Pet CreatePet(uint UserId, string Name, int Type, string Race, string Color) { DataRow Row = null; using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("id", UberEnvironment.GetGame().GetIdGenerator().GetPetId()); // ultimate double entry fix. dbClient.AddParamWithValue("userid", UserId); dbClient.AddParamWithValue("name", Name); dbClient.AddParamWithValue("type", Type); dbClient.AddParamWithValue("race", Race); dbClient.AddParamWithValue("color", Color); dbClient.AddParamWithValue("createstamp", UberEnvironment.GetUnixTimestamp()); dbClient.ReadDataRow("INSERT INTO user_pets (id,user_id,name,type,race,color,expirience,energy,createstamp) VALUES (@id,@userid,@name,@type,@race,@color,0,100,@createstamp)"); } using (DatabaseClient dbClient = UberEnvironment.GetDatabase().GetClient()) { dbClient.AddParamWithValue("userid", UserId); dbClient.AddParamWithValue("name", Name); Row = dbClient.ReadDataRow("SELECT * FROM user_pets WHERE user_id = @userid AND name = @name LIMIT 1"); } return this.GeneratePetFromRow(Row); } public Pet GeneratePetFromRow(DataRow Row) { if (Row == null) { return null; } return new Pet(Convert.ToUInt32(Row["id"]), Convert.ToUInt32(Row["user_id"]), (uint)Row["room_id"], (string)Row["name"], (uint)Row["type"], (string)Row["race"], (string)Row["color"], (int)Row["expirience"], (int)Row["energy"], (int)Row["nutrition"], (int)Row["respect"], (double)Row["createstamp"], (int)Row["x"], (int)Row["y"], (double)Row["z"]); } public uint GenerateItemId() { return UberEnvironment.GetGame().GetIdGenerator().GetItemId(); } public EcotronReward GetRandomEcotronReward() { uint Level = 1; if (UberEnvironment.GetRandomNumber(1, 2000) == 2000) { Level = 5; } else if (UberEnvironment.GetRandomNumber(1, 200) == 200) { Level = 4; } else if (UberEnvironment.GetRandomNumber(1, 40) == 40) { Level = 3; } else if (UberEnvironment.GetRandomNumber(1, 4) == 4) { Level = 2; } var PossibleRewards = GetEcotronRewardsForLevel(Level); if (PossibleRewards != null && PossibleRewards.Count >= 1) { return PossibleRewards[UberEnvironment.GetRandomNumber(0, (PossibleRewards.Count - 1))]; } else { return new EcotronReward(0, 0, 1479, 0); // eco lamp two :D } } public List GetEcotronRewardsForLevel(uint Level) { var Rewards = new List(); foreach (EcotronReward R in EcotronRewards) { if (R.RewardLevel == Level) { Rewards.Add(R); } } return Rewards; } public ServerMessage SerializeIndex(GameClient Client) { ServerMessage Index = new ServerMessage(126); Index.AppendBoolean(true); Index.AppendInt32(0); Index.AppendInt32(0); Index.AppendInt32(-1); Index.AppendStringWithBreak(""); Index.AppendInt32(GetTreeSize(Client, -1)); foreach (CatalogPage Page in Pages.Values) { if (Page.ParentId != -1) { continue; } Page.Serialize(Client, Index); foreach (CatalogPage _Page in Pages.Values) { if (_Page.ParentId != Page.PageId) { continue; } _Page.Serialize(Client, Index); } } return Index; } public ServerMessage SerializePage(CatalogPage Page) { ServerMessage PageData = new ServerMessage(127); PageData.AppendInt32(Page.PageId); switch (Page.Layout) { case "soundmachine": PageData.AppendStringWithBreak("soundmachine"); PageData.AppendInt32(2); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendStringWithBreak(Page.LayoutTeaser); PageData.AppendInt32(2); PageData.AppendStringWithBreak(Page.Text1); break; case "frontpage": PageData.AppendStringWithBreak("frontpage3"); PageData.AppendInt32(3); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendStringWithBreak(Page.LayoutTeaser); PageData.AppendStringWithBreak(""); PageData.AppendInt32(11); PageData.AppendStringWithBreak(Page.Text1); PageData.AppendStringWithBreak(""); PageData.AppendStringWithBreak(Page.Text2); PageData.AppendStringWithBreak(Page.TextDetails); PageData.AppendStringWithBreak(""); PageData.AppendStringWithBreak("#FAF8CC"); PageData.AppendStringWithBreak("#FAF8CC"); PageData.AppendStringWithBreak("Other ways to get more credits >"); PageData.AppendStringWithBreak("magic.credits"); break; case "recycler_info": PageData.AppendStringWithBreak(Page.Layout); PageData.AppendInt32(2); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendStringWithBreak(Page.LayoutTeaser); PageData.AppendInt32(3); PageData.AppendStringWithBreak(Page.Text1); PageData.AppendStringWithBreak(Page.Text2); PageData.AppendStringWithBreak(Page.TextDetails); break; case "recycler_prizes": // Ac@aArecycler_prizesIcatalog_recycler_headline3IDe Ecotron geeft altijd een van deze beloningen:H PageData.AppendStringWithBreak("recycler_prizes"); PageData.AppendInt32(1); PageData.AppendStringWithBreak("catalog_recycler_headline3"); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.Text1); break; case "club_buy": //aAnFBclub_buyIhc2_clubtitleHH //IqPAYmQHABBO_CLUB_BASIC_1_MONTH{2}SCHHISGZvGSAPG[mQHABBO_CLUB_VIP_1_MONTH{2}QFHIISGZvGSAPGXnQHABBO_CLUB_VIP_3_MONTHS{2}POHIKQWZvGQBPGZmQHABBO_CLUB_BASIC_3_MONTHS{2}QKHHKQWZvGQBPG{1} PageData.AppendStringWithBreak("club_buy"); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.LayoutHeadline); break; case "club_gifts": PageData.AppendStringWithBreak("club_gifts"); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.Text1); break; case "spaces": PageData.AppendStringWithBreak(Page.Layout); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.Text1); break; case "recycler": PageData.AppendStringWithBreak(Page.Layout); PageData.AppendInt32(2); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendStringWithBreak(Page.LayoutTeaser); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.Text1, 10); PageData.AppendStringWithBreak(Page.Text2); PageData.AppendStringWithBreak(Page.TextDetails); break; case "trophies": PageData.AppendStringWithBreak("trophies"); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendInt32(2); PageData.AppendStringWithBreak(Page.Text1); PageData.AppendStringWithBreak(Page.TextDetails); break; case "pets": PageData.AppendStringWithBreak("pets"); PageData.AppendInt32(2); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendStringWithBreak(Page.LayoutTeaser); PageData.AppendInt32(4); PageData.AppendStringWithBreak(Page.Text1); PageData.AppendStringWithBreak("Give a name:"); PageData.AppendStringWithBreak("Pick a color:"); PageData.AppendStringWithBreak("Pick a race:"); break; default: PageData.AppendStringWithBreak(Page.Layout); PageData.AppendInt32(3); PageData.AppendStringWithBreak(Page.LayoutHeadline); PageData.AppendStringWithBreak(Page.LayoutTeaser); PageData.AppendStringWithBreak(Page.LayoutSpecial); PageData.AppendInt32(3); PageData.AppendStringWithBreak(Page.Text1); PageData.AppendStringWithBreak(Page.TextDetails); PageData.AppendStringWithBreak(Page.TextTeaser); // A`jeAdefault_3x3Kctlg_windows_headline1_enctlg_windows_teaser1_encatalog_special_txtbg2KLet some sunshine in! Our windows come in many styles to give an unique look to Your room. Who said Your room does not have a view?Click on an item for more information.Ooh, new view!SC[}HDEV window_tripleQAHIiZpOIMY@IDEV window_basicPAHIiZrOIMX~HDEV window_squareJHIi[pOIMZuIDEV window_skyscraperQAHIi[uOIM[uIdeal_skyscraper1PCHIi[uOQAMXvIdeal_skyscraper2PEHIi[uORBMX@IDEV window_chinese_narrowKHIiYrOIM[HDEV window_chinese_wideQAHIiXrOIMYHDEV window_goldenKHIi[qOIMXHDEV window_grungeQAHIiZqOIMXpIDEV window_holeQAHIiZtOIM[~HDEV window_romantic_narrowKHIiYqOIMZ~HDEV window_romantic_widePAHIiXqOIM[@IDEV window_70s_narrowKHIiXsOIMZ@IDEV window_70s_widePAHIi[rOIM break; } PageData.AppendInt32(Page.Items.Count); foreach (CatalogItem Item in Page.Items) { Item.Serialize(PageData); } return PageData; } public ServerMessage SerializeTestIndex() { ServerMessage Message = new ServerMessage(126); /*sm.AppendBoolean(Visible); sm.AppendInt32(IconColor); sm.AppendInt32(IconImage); sm.AppendInt32(Id); sm.AppendStringWithBreak(Caption); sm.AppendBoolean(ComingSoon); sm.AppendInt32(TreeData);*/ Message.AppendInt32(0); Message.AppendInt32(0); Message.AppendInt32(0); Message.AppendInt32(-1); Message.AppendStringWithBreak(""); Message.AppendInt32(0); Message.AppendInt32(100); for (int i = 1; i <= 150; i++) { Message.AppendInt32(1); Message.AppendInt32(i); Message.AppendInt32(i); Message.AppendInt32(i); Message.AppendStringWithBreak("#" + i); Message.AppendInt32(0); Message.AppendInt32(0); } return Message; // A~HHHMHSBIRAI`ieAFront PageHHHJKaieACollectablesHHIKJMFurni ShopHPJIHSMcieASpacesHHIHSO`jeAWindowsHHIHSEajeAMood LightsHHIHRJbjeATwilightHHIHRNcjeATeleportsHHIHSI`keAModeHHIHSDakeACandyHHIHPLbkeAPuraHHIHRCckeAAreaHHIHQE`leACountryHHIHQIaleALodgeHHIHRKbleAPlasticHHIHPPcleAKitchenHHIHQD`meABathroomHHIHQKameAPlantsHHIHPMbmeARugsHHIHRJcmeARollersHHIHSK`neAPosters and FlagsHHIHPOaneATrophiesHHIHSBbneAExtrasHHHHHcneACameraHHHHRB`oeALimited EditionHHHHPHaoeAUrban Crime SceneHHHHSCboeAOrientalHHHHPNcoeASportHHHQBQL`peARelaxHHHHRLapeARomantique WeddingHHHSBQMbpeASCI FIHHHQBHcpeAHabbo County USHHHHRF`qeAWacky WeekendsHHHHSFaqeAExecutiveHHHHRDbqeABensalemHHHHQCcqeAArcticHHHHPC`reAAlhambraHHHHSNareATiki !HHHHPPbreAChristmasHHHHRMcreAShalimarHHHHRO`seAValentine's LoveHHHHRHaseAHabboweenHHHHQHbseAMoviesHHISAPBMPets ShopHRAHHH`teAPetsHHIHPEateACatsHHIHPFbteADogsHHIHREcteACrocodilesHHIHSJ`ueAPets' AccessoriesHHIHRJaueAPets InfoHHIQAQAMPixel ShopHRAIHPGbweAPixel CollectableHHIHSLcweARentalsHHIHQO`xeASpecial EffectsHHHHPKaxeAPixel DiscountsHHIHSHbxeAHello FurniHHIHPDcxeAAutomobileHHISBRA`yeAHabbo ExchangeHHISAQBayeAHabbo ClubHIIHQBcyeABuy Habbo ClubHHIKSAMEcotronHKIHSAazeAEcotronHHIHRFbzeARewardsHHIHRJczeAInstructionsHHISARB`{eASpecial OffersHHHHHa{eAmagic.creditsHHHHHb{eAmagic.pixelsHH } public VoucherHandler GetVoucherHandler() { return VoucherHandler; } public Marketplace GetMarketplace() { return Marketplace; } } }