public CatalogOfferComposer(CatalogItem Item) : base(ServerPacketHeader.CatalogOfferMessageComposer) { WriteInteger(Item.OfferId); WriteString(Item.Data.ItemName); WriteBoolean(false); //IsRentable WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { WriteInteger(Item.CostDiamonds); WriteInteger(5); // Diamonds } else if (Item.CostGotw > 0) { WriteInteger(Item.CostGotw); WriteInteger(103); // Puntos de fama } else { WriteInteger(Item.CostPixels); WriteInteger(0); // Type of PixelCost } WriteBoolean(ItemUtility.CanGiftItem(Item)); WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2); //Count 1 item if there is no badge, otherwise count as 2. if (!string.IsNullOrEmpty(Item.Badge)) { WriteString("b"); WriteString(Item.Badge); } WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { WriteString(Item.Data.ItemName); //Badge name. } else { WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { WriteString(Item.Name.Split('_')[2]); } else if (Item.PageID == 9)//Bots { CatalogBot CataBot = null; if (!BiosEmuThiago.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CataBot)) { WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { WriteString(CataBot.Figure); } } else if (Item.ExtraData != null) { WriteString(Item.ExtraData ?? string.Empty); } WriteInteger(Item.Amount); WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { WriteInteger(Item.LimitedEditionStack); WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } WriteInteger(0); // club_level WriteBoolean(ItemUtility.CanSelectAmount(Item)); WriteInteger(0); }
public void Parse(GameClient session, ClientPacket packet) { int pageId = packet.PopInt(); int itemId = packet.PopInt(); string data = packet.PopString(); string giftUser = StringCharFilter.Escape(packet.PopString()); string giftMessage = StringCharFilter.Escape(packet.PopString().Replace(Convert.ToChar(5), ' ')); int spriteId = packet.PopInt(); int ribbon = packet.PopInt(); int colour = packet.PopInt(); packet.PopBoolean(); if (PlusEnvironment.GetSettingsManager().TryGetValue("room.item.gifts.enabled") != "1") { session.SendNotification("The hotel managers have disabled gifting"); return; } if (!PlusEnvironment.GetGame().GetCatalog().TryGetPage(pageId, out CatalogPage page)) { return; } if (!page.Enabled || !page.Visible || page.MinimumRank > session.GetHabbo().Rank || page.MinimumVIP > session.GetHabbo().VIPRank&& session.GetHabbo().Rank == 1) { return; } if (!page.Items.TryGetValue(itemId, out CatalogItem item)) { if (page.ItemOffers.ContainsKey(itemId)) { item = page.ItemOffers[itemId]; if (item == null) { return; } } else { return; } } if (!ItemUtility.CanGiftItem(item)) { return; } if (!PlusEnvironment.GetGame().GetItemManager().GetGift(spriteId, out ItemData presentData) || presentData.InteractionType != InteractionType.GIFT) { return; } if (session.GetHabbo().Credits < item.CostCredits) { session.SendPacket(new PresentDeliverErrorMessageComposer(true, false)); return; } if (session.GetHabbo().Duckets < item.CostPixels) { session.SendPacket(new PresentDeliverErrorMessageComposer(false, true)); return; } Habbo habbo = PlusEnvironment.GetHabboByUsername(giftUser); if (habbo == null) { session.SendPacket(new GiftWrappingErrorComposer()); return; } if (!habbo.AllowGifts) { session.SendNotification("Oops, this user doesn't allow gifts to be sent to them!"); return; } if ((DateTime.Now - session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0) { session.SendNotification("You're purchasing gifts too fast! Please wait 15 seconds!"); session.GetHabbo().GiftPurchasingWarnings += 1; if (session.GetHabbo().GiftPurchasingWarnings >= 25) { session.GetHabbo().SessionGiftBlocked = true; } return; } if (session.GetHabbo().SessionGiftBlocked) { return; } string ed = giftUser + Convert.ToChar(5) + giftMessage + Convert.ToChar(5) + session.GetHabbo().Id + Convert.ToChar(5) + item.Data.Id + Convert.ToChar(5) + spriteId + Convert.ToChar(5) + ribbon + Convert.ToChar(5) + colour; int newItemId; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { //Insert the dummy item. dbClient.SetQuery("INSERT INTO `items` (`base_item`,`user_id`,`extra_data`) VALUES (@baseId, @habboId, @extra_data)"); dbClient.AddParameter("baseId", presentData.Id); dbClient.AddParameter("habboId", habbo.Id); dbClient.AddParameter("extra_data", ed); newItemId = Convert.ToInt32(dbClient.InsertQuery()); string itemExtraData = null; switch (item.Data.InteractionType) { case InteractionType.NONE: itemExtraData = ""; break; #region Pet handling case InteractionType.PET: try { string[] bits = data.Split('\n'); string petName = bits[0]; string race = bits[1]; string color = bits[2]; if (PetUtility.CheckPetName(petName)) { return; } if (race.Length > 2) { return; } if (color.Length != 6) { return; } PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(session, "ACH_PetLover", 1); } catch { return; } break; #endregion case InteractionType.FLOOR: case InteractionType.WALLPAPER: case InteractionType.LANDSCAPE: double number = 0; try { number = string.IsNullOrEmpty(data) ? 0 : double.Parse(data, PlusEnvironment.CultureInfo); } catch { //ignored } itemExtraData = number.ToString(CultureInfo.CurrentCulture).Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.POSTIT: itemExtraData = "FFFF33"; break; case InteractionType.MOODLIGHT: itemExtraData = "1,1,1,#000000,255"; break; case InteractionType.TROPHY: itemExtraData = session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + data; break; case InteractionType.MANNEQUIN: itemExtraData = "m" + Convert.ToChar(5) + ".ch-210-1321.lg-285-92" + Convert.ToChar(5) + "Default Mannequin"; break; case InteractionType.BADGE_DISPLAY: if (!session.GetHabbo().GetBadgeComponent().HasBadge(data)) { session.SendPacket(new BroadcastMessageAlertComposer("Oops, it appears that you do not own this badge.")); return; } itemExtraData = data + Convert.ToChar(9) + session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year; break; default: itemExtraData = data; break; } //Insert the present, forever. dbClient.SetQuery("INSERT INTO `user_presents` (`item_id`,`base_id`,`extra_data`) VALUES (@itemId, @baseId, @extra_data)"); dbClient.AddParameter("itemId", newItemId); dbClient.AddParameter("baseId", item.Data.Id); dbClient.AddParameter("extra_data", string.IsNullOrEmpty(itemExtraData) ? "" : itemExtraData); dbClient.RunQuery(); //Here we're clearing up a record, this is dumb, but okay. dbClient.SetQuery("DELETE FROM `items` WHERE `id` = @deleteId LIMIT 1"); dbClient.AddParameter("deleteId", newItemId); dbClient.RunQuery(); } Item giveItem = ItemFactory.CreateGiftItem(presentData, habbo, ed, ed, newItemId); if (giveItem != null) { GameClient receiver = PlusEnvironment.GetGame().GetClientManager().GetClientByUserId(habbo.Id); if (receiver != null) { receiver.GetHabbo().GetInventoryComponent().TryAddItem(giveItem); receiver.SendPacket(new FurniListNotificationComposer(giveItem.Id, 1)); receiver.SendPacket(new PurchaseOKComposer()); receiver.SendPacket(new FurniListAddComposer(giveItem)); receiver.SendPacket(new FurniListUpdateComposer()); } if (habbo.Id != session.GetHabbo().Id&& !string.IsNullOrWhiteSpace(giftMessage)) { PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(session, "ACH_GiftGiver", 1); if (receiver != null) { PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(receiver, "ACH_GiftReceiver", 1); } PlusEnvironment.GetGame().GetQuestManager().ProgressUserQuest(session, QuestType.GiftOthers); } } session.SendPacket(new PurchaseOKComposer(item, presentData)); if (item.CostCredits > 0) { session.GetHabbo().Credits -= item.CostCredits; session.SendPacket(new CreditBalanceComposer(session.GetHabbo().Credits)); } if (item.CostPixels > 0) { session.GetHabbo().Duckets -= item.CostPixels; session.SendPacket(new HabboActivityPointNotificationComposer(session.GetHabbo().Duckets, session.GetHabbo().Duckets)); } session.GetHabbo().LastGiftPurchaseTime = DateTime.Now; }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { int PageId = Packet.PopInt(); int ItemId = Packet.PopInt(); string Data = Packet.PopString(); string GiftUser = StringCharFilter.Escape(Packet.PopString()); string GiftMessage = StringCharFilter.Escape(Packet.PopString().Replace(Convert.ToChar(5), ' ')); int SpriteId = Packet.PopInt(); int Ribbon = Packet.PopInt(); int Colour = Packet.PopInt(); bool dnow = Packet.PopBoolean(); if (PlusEnvironment.GetSettingsManager().TryGetValue("room.item.gifts.enabled") != "1") { Session.SendNotification("The hotel managers have disabled gifting"); return; } /*if (PlusEnvironment.GetGame().GetCatalog().CatalogFlatOffers.ContainsKey(ItemId) && PageId < 0) * { * PageId = PlusEnvironment.GetGame().GetCatalog().CatalogFlatOffers[ItemId]; * * CatalogPage P = null; * if (!PlusEnvironment.GetGame().GetCatalog().Pages.TryGetValue(PageId, out P)) * PageId = 0; * }*/ CatalogPage Page = null; if (!PlusEnvironment.GetGame().GetCatalog().TryGetPage(PageId, out Page)) { return; } if (!Page.Enabled || !Page.Visible || Page.MinimumRank > Session.GetHabbo().Rank || (Page.MinimumVIP > Session.GetHabbo().VIPRank&& Session.GetHabbo().Rank == 1)) { return; } CatalogItem Item = null; if (!Page.Items.TryGetValue(ItemId, out Item)) { if (Page.ItemOffers.ContainsKey(ItemId)) { Item = (CatalogItem)Page.ItemOffers[ItemId]; if (Item == null) { return; } } else { return; } } if (!ItemUtility.CanGiftItem(Item)) { return; } ItemData PresentData = null; if (!PlusEnvironment.GetGame().GetItemManager().GetGift(SpriteId, out PresentData) || PresentData.InteractionType != InteractionType.GIFT) { return; } if (Session.GetHabbo().Credits < Item.CostCredits) { Session.SendPacket(new PresentDeliverErrorMessageComposer(true, false)); return; } if (Session.GetHabbo().Duckets < Item.CostPixels) { Session.SendPacket(new PresentDeliverErrorMessageComposer(false, true)); return; } Habbo Habbo = PlusEnvironment.GetHabboByUsername(GiftUser); if (Habbo == null) { Session.SendPacket(new GiftWrappingErrorComposer()); return; } if (!Habbo.AllowGifts) { Session.SendNotification("Oops, this user doesn't allow gifts to be sent to them!"); return; } if ((DateTime.Now - Session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0) { Session.SendNotification("You're purchasing gifts too fast! Please wait 15 seconds!"); Session.GetHabbo().GiftPurchasingWarnings += 1; if (Session.GetHabbo().GiftPurchasingWarnings >= 25) { Session.GetHabbo().SessionGiftBlocked = true; } return; } if (Session.GetHabbo().SessionGiftBlocked) { return; } string ED = GiftUser + Convert.ToChar(5) + GiftMessage + Convert.ToChar(5) + Session.GetHabbo().Id + Convert.ToChar(5) + Item.Data.Id + Convert.ToChar(5) + SpriteId + Convert.ToChar(5) + Ribbon + Convert.ToChar(5) + Colour; int NewItemId = 0; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { //Insert the dummy item. dbClient.SetQuery("INSERT INTO `items` (`base_item`,`user_id`,`extra_data`) VALUES (@baseId, @habboId, @extra_data)"); dbClient.AddParameter("baseId", PresentData.Id); dbClient.AddParameter("habboId", Habbo.Id); dbClient.AddParameter("extra_data", ED); NewItemId = Convert.ToInt32(dbClient.InsertQuery()); string ItemExtraData = null; switch (Item.Data.InteractionType) { case InteractionType.NONE: ItemExtraData = ""; break; #region Pet handling case InteractionType.PET: try { string[] Bits = Data.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (PetUtility.CheckPetName(PetName)) { return; } if (Race.Length > 2) { return; } if (Color.Length != 6) { return; } PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PetLover", 1); } catch { return; } break; #endregion case InteractionType.FLOOR: case InteractionType.WALLPAPER: case InteractionType.LANDSCAPE: Double Number = 0; try { if (string.IsNullOrEmpty(Data)) { Number = 0; } else { Number = Double.Parse(Data, PlusEnvironment.CultureInfo); } } catch { } ItemExtraData = Number.ToString().Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.POSTIT: ItemExtraData = "FFFF33"; break; case InteractionType.MOODLIGHT: ItemExtraData = "1,1,1,#000000,255"; break; case InteractionType.TROPHY: ItemExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + Data; break; case InteractionType.MANNEQUIN: ItemExtraData = "m" + Convert.ToChar(5) + ".ch-210-1321.lg-285-92" + Convert.ToChar(5) + "Default Mannequin"; break; case InteractionType.BADGE_DISPLAY: if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Data)) { Session.SendPacket(new BroadcastMessageAlertComposer("Oops, it appears that you do not own this badge.")); return; } ItemExtraData = Data + Convert.ToChar(9) + Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year; break; default: ItemExtraData = Data; break; } //Insert the present, forever. dbClient.SetQuery("INSERT INTO `user_presents` (`item_id`,`base_id`,`extra_data`) VALUES (@itemId, @baseId, @extra_data)"); dbClient.AddParameter("itemId", NewItemId); dbClient.AddParameter("baseId", Item.Data.Id); dbClient.AddParameter("extra_data", (string.IsNullOrEmpty(ItemExtraData) ? "" : ItemExtraData)); dbClient.RunQuery(); //Here we're clearing up a record, this is dumb, but okay. dbClient.SetQuery("DELETE FROM `items` WHERE `id` = @deleteId LIMIT 1"); dbClient.AddParameter("deleteId", NewItemId); dbClient.RunQuery(); } Item GiveItem = ItemFactory.CreateGiftItem(PresentData, Habbo, ED, ED, NewItemId, 0, 0); if (GiveItem != null) { GameClient Receiver = PlusEnvironment.GetGame().GetClientManager().GetClientByUserID(Habbo.Id); if (Receiver != null) { Receiver.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem); Receiver.SendPacket(new FurniListNotificationComposer(GiveItem.Id, 1)); Receiver.SendPacket(new PurchaseOKComposer()); Receiver.SendPacket(new FurniListAddComposer(GiveItem)); Receiver.SendPacket(new FurniListUpdateComposer()); } if (Habbo.Id != Session.GetHabbo().Id&& !string.IsNullOrWhiteSpace(GiftMessage)) { PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_GiftGiver", 1); if (Receiver != null) { PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Receiver, "ACH_GiftReceiver", 1); } PlusEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.GIFT_OTHERS); } } Session.SendPacket(new PurchaseOKComposer(Item, PresentData)); if (Item.CostCredits > 0) { Session.GetHabbo().Credits -= Item.CostCredits; Session.SendPacket(new CreditBalanceComposer(Session.GetHabbo().Credits)); } if (Item.CostPixels > 0) { Session.GetHabbo().Duckets -= Item.CostPixels; Session.SendPacket(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, Session.GetHabbo().Duckets)); } Session.GetHabbo().LastGiftPurchaseTime = DateTime.Now; }
public CatalogPageComposer(CatalogPage Page, string CataMode, Language Langue) : base(ServerPacketHeader.CatalogPageMessageComposer) { WriteInteger(Page.Id); WriteString(CataMode); WriteString(Page.Template); WriteInteger(Page.PageStrings1.Count); foreach (string s in Page.PageStrings1) { WriteString(s); } if (Page.GetPageStrings2ByLangue(Langue).Count == 1 && (Page.Template == "default_3x3" || Page.Template == "default_3x3_color_grouping") && string.IsNullOrEmpty(Page.GetPageStrings2ByLangue(Langue)[0])) { WriteInteger(1); WriteString(string.Format(ButterflyEnvironment.GetLanguageManager().TryGetValue("catalog.desc.default", Langue), Page.GetCaptionByLangue(Langue))); } else { WriteInteger(Page.GetPageStrings2ByLangue(Langue).Count); foreach (string s in Page.GetPageStrings2ByLangue(Langue)) { WriteString(s); } } if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("club_buy")) { WriteInteger(Page.Items.Count); foreach (CatalogItem Item in Page.Items.Values) { WriteInteger(Item.Id); WriteString(Item.Name); WriteBoolean(false);//IsRentable WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { WriteInteger(Item.CostDiamonds); WriteInteger(105); // Diamonds } else { WriteInteger(Item.CostDuckets); WriteInteger(0); } WriteBoolean(ItemUtility.CanGiftItem(Item)); WriteInteger(string.IsNullOrEmpty(Item.Badge) || Item.Data.Type.ToString() == "b" ? 1 : 2); if (!string.IsNullOrEmpty(Item.Badge)) { WriteString("b"); WriteString(Item.Badge); } if (Item.Data.Type.ToString().ToLower() != "b") { WriteString(Item.Data.Type.ToString()); WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.bot)//Bots { CatalogBot CatalogBot = null; if (!ButterflyEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { WriteString(CatalogBot.Figure); } } else { WriteString(""); } WriteInteger(Item.Amount); WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { WriteInteger(Item.LimitedEditionStack); WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } WriteInteger(0); //club_level WriteBoolean(ItemUtility.CanSelectAmount(Item)); WriteBoolean(false); // TODO: Figure out WriteString(""); //previewImage -> e.g; catalogue/pet_lion.png } } else { WriteInteger(0); } WriteInteger(-1); WriteBoolean(false); WriteInteger(ButterflyEnvironment.GetGame().GetCatalog().GetPromotions().ToList().Count);//Count foreach (CatalogPromotion Promotion in ButterflyEnvironment.GetGame().GetCatalog().GetPromotions().ToList()) { WriteInteger(Promotion.Id); WriteString(Promotion.GetTitleByLangue(Langue)); WriteString(Promotion.Image); WriteInteger(Promotion.Unknown); WriteString(Promotion.PageLink); WriteInteger(Promotion.ParentId); } }
public CatalogPageComposer(CatalogPage Page, string CataMode) : base(ServerPacketHeader.CatalogPageMessageComposer) { WriteInteger(Page.Id); WriteString(CataMode); WriteString(Page.Template); WriteInteger(Page.PageStrings1.Count); foreach (string s in Page.PageStrings1) { WriteString(s); } WriteInteger(Page.PageStrings2.Count); foreach (string s in Page.PageStrings2) { WriteString(s); } if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("loyalty_vip_buy")) { WriteInteger(Page.Items.Count); foreach (CatalogItem Item in Page.Items.Values) { WriteInteger(Item.Id); WriteString(Item.Name); WriteBoolean(false); //IsRentable WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { WriteInteger(Item.CostDiamonds); WriteInteger(5); // Diamonds } else if (Item.CostPixels > 0) { WriteInteger(Item.CostPixels); WriteInteger(0); // Type of PixelCost } else { WriteInteger(Item.CostGotw); WriteInteger(103); // Gotw } WriteBoolean(Item.PredesignedId > 0 ? false : ItemUtility.CanGiftItem(Item)); if (Item.PredesignedId > 0) { WriteInteger(Page.PredesignedItems.Items.Count); foreach (var predesigned in Page.PredesignedItems.Items.ToList()) { ItemData Data = null; if (CloudServer.GetGame().GetItemManager().GetItem(predesigned.Key, out Data)) { } WriteString(Data.Type.ToString()); WriteInteger(Data.SpriteId); WriteString(string.Empty); WriteInteger(predesigned.Value); WriteBoolean(false); } WriteInteger(0); WriteBoolean(false); WriteBoolean(true); // Niu Rilí WriteString(""); // Niu Rilí } else if (Page.Deals.Count > 0) { foreach (var Deal in Page.Deals.Values) { WriteInteger(Deal.ItemDataList.Count); foreach (var DealItem in Deal.ItemDataList.ToList()) { WriteString(DealItem.Data.Type.ToString()); WriteInteger(DealItem.Data.SpriteId); WriteString(string.Empty); WriteInteger(DealItem.Amount); WriteBoolean(false); } WriteInteger(0); WriteBoolean(false); } } else { WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2); //Count 1 item if there is no badge, otherwise count as 2. { if (!string.IsNullOrEmpty(Item.Badge)) { WriteString("b"); WriteString(Item.Badge); } WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { //This is just a badge, append the name. WriteString(Item.Data.ItemName); } else { WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.BOT)//Bots { CatalogBot CatalogBot = null; if (!CloudServer.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { WriteString(CatalogBot.Figure); } } else if (Item.ExtraData != null) { WriteString(Item.ExtraData ?? string.Empty); } WriteInteger(Item.Amount); WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { WriteInteger(Item.LimitedEditionStack); WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } WriteInteger(0); //club_level WriteBoolean(ItemUtility.CanSelectAmount(Item)); WriteBoolean(true); // Niu Rilí WriteString(""); // Niu Rilí } } } /*}*/ } else { WriteInteger(0); } WriteInteger(-1); WriteBoolean(false); if (Page.Template.Equals("frontpage4")) { WriteInteger(4); // count //New Rare Jellyfish Lamp! WriteInteger(1); // id WriteString(CatalogSettings.CATALOG_NOTICE_1); // name WriteString(CatalogSettings.CATALOG_IMG_NOTICE_1); // image WriteInteger(0); WriteString(CatalogSettings.CATALOG_URL_NOTICE_1); // page link? WriteInteger(-1); // page id? WriteInteger(2); WriteString(CatalogSettings.CATALOG_NOTICE_2); // name WriteString(CatalogSettings.CATALOG_IMG_NOTICE_2); // image WriteInteger(0); WriteString(CatalogSettings.CATALOG_URL_NOTICE_2); // page link? WriteInteger(-1); WriteInteger(3); WriteString(CatalogSettings.CATALOG_NOTICE_3); // name WriteString(CatalogSettings.CATALOG_IMG_NOTICE_3); // image WriteInteger(0); WriteString(CatalogSettings.CATALOG_URL_NOTICE_3); // page link? WriteInteger(-1); WriteInteger(4); WriteString(CatalogSettings.CATALOG_NOTICE_4); // name WriteString(CatalogSettings.CATALOG_IMG_NOTICE_4); // image WriteInteger(0); WriteString(CatalogSettings.CATALOG_URL_NOTICE_4); // page link? WriteInteger(-1); if (Page.Template.Equals("loyalty_vip_buy")) { WriteInteger(0); //Page ID WriteString("NORMAL"); WriteString("loyalty_vip_buy"); WriteInteger(2); WriteString("hc2_clubtitle"); WriteString("clubcat_pic"); WriteInteger(0); // Nueva Release WriteInteger(0); WriteInteger(-1); WriteBoolean(false); if (Page.Template.Equals("club_gifts")) { WriteString("club_gifts"); WriteInteger(1); WriteString(Convert.ToString(Page.PageStrings2)); WriteInteger(1); WriteString(Convert.ToString(Page.PageStrings2)); } } } }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { int PageId = Packet.PopInt(); int ItemId = Packet.PopInt(); string Data = Packet.PopString(); string GiftUser = StringCharFilter.Escape(Packet.PopString()); string GiftMessage = StringCharFilter.Escape(Packet.PopString().Replace(Convert.ToChar(5), ' ')); int SpriteId = Packet.PopInt(); int Ribbon = Packet.PopInt(); int Colour = Packet.PopInt(); bool dnow = Packet.PopBoolean(); if (QuasarEnvironment.GetDBConfig().DBData["gifts_enabled"] != "1") { Session.SendNotification("Het sturen van cadeau's is tijdelijk uitgeschakeld door het Hotel Management."); return; } /*if (QuasarEnvironment.GetGame().GetCatalog().CatalogFlatOffers.ContainsKey(ItemId) && PageId < 0) * { * PageId = QuasarEnvironment.GetGame().GetCatalog().CatalogFlatOffers[ItemId]; * * CatalogPage P = null; * if (!QuasarEnvironment.GetGame().GetCatalog().Pages.TryGetValue(PageId, out P)) * PageId = 0; * }*/ CatalogPage Page = null; if (!QuasarEnvironment.GetGame().GetCatalog().TryGetPage(PageId, out Page)) { return; } if (!Page.Enabled || !Page.Visible || Page.MinimumRank > Session.GetHabbo().Rank) /*|| (Page.MinimumVIP > Session.GetHabbo().VIPRank && Session.GetHabbo().Rank == 1))*/ { return; } CatalogItem Item = null; if (!Page.Items.TryGetValue(ItemId, out Item)) { if (Page.ItemOffers.ContainsKey(ItemId)) { Item = (CatalogItem)Page.ItemOffers[ItemId]; if (Item == null) { return; } } else { return; } } if (!ItemUtility.CanGiftItem(Item)) { return; } ItemData PresentData = null; if (!QuasarEnvironment.GetGame().GetItemManager().GetGift(SpriteId, out PresentData) || PresentData.InteractionType != InteractionType.GIFT) { return; } if (Session.GetHabbo().Credits < Item.CostCredits) { Session.SendMessage(new PresentDeliverErrorMessageComposer(true, false)); return; } if (Session.GetHabbo().Duckets < Item.CostPixels) { Session.SendMessage(new PresentDeliverErrorMessageComposer(false, true)); return; } Habbo Habbo = QuasarEnvironment.GetHabboByUsername(GiftUser); if (Habbo == null) { Session.SendMessage(new GiftWrappingErrorComposer()); return; } if (!Habbo.AllowGifts) { Session.SendNotification("Oeps! Je kan geen cadeau's sturen naar deze Habbis."); return; } if (Session.GetHabbo().Rank < 4) { if ((DateTime.Now - Session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 10.0) { Session.SendNotification("Oeps! Wacht minstens 10 seconden tussen het kopen van cadeau's."); return; } } if (Session.GetHabbo().SessionGiftBlocked) { return; } string ED = GiftUser + Convert.ToChar(5) + GiftMessage + Convert.ToChar(5) + Session.GetHabbo().Id + Convert.ToChar(5) + Item.Data.Id + Convert.ToChar(5) + SpriteId + Convert.ToChar(5) + Ribbon + Convert.ToChar(5) + Colour; int NewItemId = 0; using (IQueryAdapter dbClient = QuasarEnvironment.GetDatabaseManager().GetQueryReactor()) { //Insert the dummy item. dbClient.SetQuery("INSERT INTO `items` (`base_item`,`user_id`,`extra_data`) VALUES ('" + PresentData.Id + "', '" + Habbo.Id + "', @extra_data)"); dbClient.AddParameter("extra_data", ED); NewItemId = Convert.ToInt32(dbClient.InsertQuery()); string ItemExtraData = null; switch (Item.Data.InteractionType) { case InteractionType.NONE: ItemExtraData = ""; break; #region Pet handling case InteractionType.pet0: // Hond case InteractionType.pet1: // Kat case InteractionType.pet2: // Krokodillen case InteractionType.pet3: // Terriers case InteractionType.pet4: // Beren case InteractionType.pet5: // Varkens case InteractionType.pet6: // Leeuwen case InteractionType.pet7: // Neushoorns case InteractionType.pet8: // Spinnen case InteractionType.pet9: // Schildpadden case InteractionType.pet10: // Kuikens case InteractionType.pet11: // Kikkers case InteractionType.pet12: // Draken case InteractionType.pet13: // Slenderman case InteractionType.pet14: // Apen case InteractionType.pet15: // Paarden case InteractionType.pet16: // Monsterplanten case InteractionType.pet17: // Konijnen case InteractionType.pet18: // Evil Konijnen case InteractionType.pet19: // Depressieve Konijnen case InteractionType.pet20: // Liefdes Konijnen case InteractionType.pet21: // Witte Duiven case InteractionType.pet22: // Zwarte Duiven case InteractionType.pet23: // Rode Aap case InteractionType.pet24: // Baby Beertjes case InteractionType.pet25: // Baby Terriers case InteractionType.pet26: // Kabouters case InteractionType.pet27: // Baby's case InteractionType.pet28: // Baby Beertjes case InteractionType.pet29: // Baby Terriers case InteractionType.pet30: // Kabouters case InteractionType.pet31: // Oempa Loempa's case InteractionType.pet32: // Stenen case InteractionType.pet33: // Pterodactylussen case InteractionType.pet34: // Velociraptors case InteractionType.pet35: // Wolven case InteractionType.pet36: // Monster Konijnen case InteractionType.pet37: // Pickachu case InteractionType.pet38: // Pinguins case InteractionType.pet39: // Mario case InteractionType.pet40: // Olifanten case InteractionType.pet41: // Alien Konijnen case InteractionType.pet42: // Gouden Konijnen case InteractionType.pet43: // Roze Mewtwo case InteractionType.pet44: // Entei case InteractionType.pet45: // Blauwe Mewtwo case InteractionType.pet46: // Cavia case InteractionType.pet47: // Uil case InteractionType.pet48: // Goude Mewtwo case InteractionType.pet49: // Eend case InteractionType.pet50: // Baby Bruin case InteractionType.pet51: // Baby Wit case InteractionType.pet52: // Dino case InteractionType.pet53: // Yoshi case InteractionType.pet54: // Koe case InteractionType.pet55: // Pokémon: Gengar case InteractionType.pet56: // Pokémon: Gengar case InteractionType.pet57: // Pokémon: Gengar case InteractionType.pet58: // Pokémon: Gengar case InteractionType.pet59: // Pokémon: Gengar case InteractionType.pet60: // Pokémon: Gengar case InteractionType.pet61: // Pokémon: Gengar case InteractionType.pet62: // Pokémon: Gengar case InteractionType.pet63: // Pokémon: Gengar case InteractionType.pet64: // Pokémon: Gengar case InteractionType.pet65: // Pokémon: Gengar case InteractionType.pet66: // Pokémon: Gengar case InteractionType.pet67: // Pokémon: Gengar case InteractionType.pet68: // Pokémon: Gengar case InteractionType.pet69: // Pokémon: Gengar case InteractionType.pet70: // Pokémon: Gengar try { string[] Bits = Data.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (PetUtility.CheckPetName(PetName)) { return; } if (Race.Length > 2) { return; } if (Color.Length != 6) { return; } QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PetLover", 1); } catch { return; } break; #endregion case InteractionType.FLOOR: case InteractionType.WALLPAPER: case InteractionType.LANDSCAPE: Double Number = 0; try { if (string.IsNullOrEmpty(Data)) { Number = 0; } else { Number = Double.Parse(Data, QuasarEnvironment.CultureInfo); } } catch { } ItemExtraData = Number.ToString().Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.POSTIT: ItemExtraData = "FFFF33"; break; case InteractionType.MOODLIGHT: ItemExtraData = "1,1,1,#000000,255"; break; case InteractionType.TROPHY: ItemExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + Data; break; case InteractionType.MANNEQUIN: ItemExtraData = "m" + Convert.ToChar(5) + ".ch-210-1321.lg-285-92" + Convert.ToChar(5) + "Default Maniqui"; break; case InteractionType.BADGE_DISPLAY: if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Data)) { Session.SendMessage(new BroadcastMessageAlertComposer("Oeps! Je kan deze badge niet in een vitrine zetteno omdat je deze badge niet in je bezit hebt.")); return; } ItemExtraData = Data + Convert.ToChar(9) + Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year; break; default: ItemExtraData = Data; break; } //Insert the present, forever. dbClient.SetQuery("INSERT INTO `user_presents` (`item_id`,`base_id`,`extra_data`) VALUES ('" + NewItemId + "', '" + Item.Data.Id + "', @extra_data)"); dbClient.AddParameter("extra_data", (string.IsNullOrEmpty(ItemExtraData) ? "" : ItemExtraData)); dbClient.RunQuery(); //Here we're clearing up a record, this is dumb, but okay. dbClient.RunQuery("DELETE FROM `items` WHERE `id` = " + NewItemId + " LIMIT 1;"); } Item GiveItem = ItemFactory.CreateGiftItem(PresentData, Habbo, ED, ED, NewItemId, 0, 0); if (GiveItem != null) { GameClient Receiver = QuasarEnvironment.GetGame().GetClientManager().GetClientByUserID(Habbo.Id); if (Receiver != null) { if (Receiver.GetHabbo().Rank <= 5) { Session.SendMessage(new RoomCustomizedAlertComposer("Je hebt een cadeau ontvangen van " + Session.GetHabbo().Username + ".")); } { Receiver.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem); Receiver.SendMessage(new FurniListNotificationComposer(GiveItem.Id, 1)); Receiver.SendMessage(new PurchaseOKComposer()); Receiver.SendMessage(new FurniListAddComposer(GiveItem)); Receiver.SendMessage(new FurniListUpdateComposer()); } } QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_GiftGiver", 1); QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Receiver, "ACH_GiftReceiver", 1); QuasarEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.GIFT_OTHERS); Session.SendMessage(new RoomCustomizedAlertComposer("Je cadeau is ingepakt en verzonden!")); } Session.SendMessage(new PurchaseOKComposer(Item, PresentData)); if (Item.CostCredits > 0) { Session.GetHabbo().Credits -= Item.CostCredits; Session.SendMessage(new CreditBalanceComposer(Session.GetHabbo().Credits)); } if (Item.CostPixels > 0) { Session.GetHabbo().Duckets -= Item.CostPixels; Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, Session.GetHabbo().Duckets)); } Session.GetHabbo().LastGiftPurchaseTime = DateTime.Now; }
public CatalogPageComposer(CatalogPage Page, string CataMode) : base(ServerPacketHeader.CatalogPageMessageComposer) { WriteInteger(Page.Id); WriteString(CataMode); WriteString(Page.Template); WriteInteger(Page.PageStrings1.Count); foreach (string s in Page.PageStrings1) { WriteString(s); } WriteInteger(Page.PageStrings2.Count); foreach (string s in Page.PageStrings2) { WriteString(s); } if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("club_buy")) { WriteInteger(Page.Items.Count); foreach (CatalogItem Item in Page.Items.Values) { WriteInteger(Item.Id); WriteString(Item.Name); WriteBoolean(false);//IsRentable WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { WriteInteger(Item.CostDiamonds); WriteInteger(5); // Diamonds } else { WriteInteger(Item.CostPixels); WriteInteger(0); // Type of PixelCost } WriteBoolean(ItemUtility.CanGiftItem(Item)); if (Item.Data.InteractionType == InteractionType.DEAL || Item.Data.InteractionType == InteractionType.ROOMDEAL) { CatalogDeal deal = null; if (!PlusEnvironment.GetGame().GetCatalog().TryGetDeal(Item.Data.BehaviourData, out deal)) { WriteInteger(0);//Count } else { WriteInteger(deal.ItemDataList.Count); foreach (CatalogItem dealItem in deal.ItemDataList.ToList()) { WriteString(dealItem.Data.Type.ToString()); WriteInteger(dealItem.Data.SpriteId); WriteString(""); WriteInteger(dealItem.Amount); WriteBoolean(false); } } } else { WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2);//Count 1 item if there is no badge, otherwise count as 2. if (!string.IsNullOrEmpty(Item.Badge)) { WriteString("b"); WriteString(Item.Badge); } WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { //This is just a badge, append the name. WriteString(Item.Data.ItemName); } else { WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.BOT)//Bots { CatalogBot CatalogBot = null; if (!PlusEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { WriteString(CatalogBot.Figure); } } else if (Item.ExtraData != null) { WriteString(Item.ExtraData != null ? Item.ExtraData : string.Empty); } WriteInteger(Item.Amount); WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { WriteInteger(Item.LimitedEditionStack); WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } } WriteInteger(0); //club_level WriteBoolean(ItemUtility.CanSelectAmount(Item)); WriteBoolean(false); // TODO: Figure out WriteString(""); //previewImage -> e.g; catalogue/pet_lion.png } } else { WriteInteger(0); } WriteInteger(-1); WriteBoolean(false); WriteInteger(PlusEnvironment.GetGame().GetCatalog().GetPromotions().ToList().Count);//Count foreach (CatalogPromotion Promotion in PlusEnvironment.GetGame().GetCatalog().GetPromotions().ToList()) { WriteInteger(Promotion.Id); WriteString(Promotion.Title); WriteString(Promotion.Image); WriteInteger(Promotion.Unknown); WriteString(Promotion.PageLink); WriteInteger(Promotion.ParentId); } }
public override void Compose(ServerPacket packet) { packet.WriteInteger(Item.OfferId); packet.WriteString(Item.Data.ItemName); packet.WriteBoolean(false);//IsRentable packet.WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { packet.WriteInteger(Item.CostDiamonds); packet.WriteInteger(5); // Diamonds } else { packet.WriteInteger(Item.CostPixels); packet.WriteInteger(0); // Type of PixelCost } packet.WriteBoolean(ItemUtility.CanGiftItem(Item)); packet.WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2);//Count 1 item if there is no badge, otherwise count as 2. if (!string.IsNullOrEmpty(Item.Badge)) { packet.WriteString("b"); packet.WriteString(Item.Badge); } packet.WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { packet.WriteString(Item.Data.ItemName);//Badge name. } else { packet.WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { packet.WriteString(Item.Name.Split('_')[2]); } else if (Item.PageID == 9)//Bots { CatalogBot CataBot = null; if (!PlusEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CataBot)) { packet.WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { packet.WriteString(CataBot.Figure); } } else if (Item.ExtraData != null) { packet.WriteString(Item.ExtraData != null ? Item.ExtraData : string.Empty); } packet.WriteInteger(Item.Amount); packet.WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { packet.WriteInteger(Item.LimitedEditionStack); packet.WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } packet.WriteInteger(0); // club_level packet.WriteBoolean(ItemUtility.CanSelectAmount(Item)); packet.WriteBoolean(false); // TODO: Figure out packet.WriteString(""); //previewImage -> e.g; catalogue/pet_lion.png }
public CatalogPageComposer(CatalogPage Page, string CataMode) : base(ServerPacketHeader.CatalogPageMessageComposer) { if (Page.Template.Equals("frontpage") || Page.Template.Equals("frontpage4")) { WriteFrontPage(Page, CataMode); return; } base.WriteInteger(Page.Id); base.WriteString(CataMode); base.WriteString(Page.Template); base.WriteInteger(Page.PageStrings1.Count); foreach (string s in Page.PageStrings1) { base.WriteString(s); } base.WriteInteger(Page.PageStrings2.Count); foreach (string s in Page.PageStrings2) { base.WriteString(s); } if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("club_buy") && !Page.Template.Equals("frontpage4")) { base.WriteInteger(Page.Items.Count); foreach (CatalogItem Item in Page.Items.Values) { base.WriteInteger(Item.Id); base.WriteString(Item.Name); base.WriteBoolean(false);//IsRentable base.WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { base.WriteInteger(Item.CostDiamonds); base.WriteInteger(5); // Diamonds } else { base.WriteInteger(Item.CostPixels); base.WriteInteger(0); // Type of PixelCost } base.WriteBoolean(ItemUtility.CanGiftItem(Item)); if (Item.Data.InteractionType == InteractionType.DEAL) { foreach (CatalogDeal Deal in Page.Deals.Values) { base.WriteInteger(Deal.ItemDataList.Count);//Count foreach (CatalogItem DealItem in Deal.ItemDataList.ToList()) { base.WriteString(DealItem.Data.Type.ToString()); base.WriteInteger(DealItem.Data.SpriteId); base.WriteString(""); base.WriteInteger(1); base.WriteBoolean(false); } base.WriteInteger(0);//club_level base.WriteBoolean(ItemUtility.CanSelectAmount(Item)); base.WriteBoolean(false); base.WriteString(String.Empty); } } else { base.WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2);//Count 1 item if there is no badge, otherwise count as 2. { if (!string.IsNullOrEmpty(Item.Badge)) { base.WriteString("b"); base.WriteString(Item.Badge); } base.WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { //This is just a badge, append the name. base.WriteString(Item.Data.ItemName); } else { base.WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { base.WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.BOT)//Bots { CatalogBot CatalogBot = null; if (!PlusEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { base.WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { base.WriteString(CatalogBot.Figure); } } else if (Item.ExtraData != null) { base.WriteString(Item.ExtraData != null ? Item.ExtraData : string.Empty); } base.WriteInteger(Item.Amount); base.WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { base.WriteInteger(Item.LimitedEditionStack); base.WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } base.WriteInteger(0); //club_level base.WriteBoolean(ItemUtility.CanSelectAmount(Item)); base.WriteBoolean(false); base.WriteString(String.Empty); } } } } else { base.WriteInteger(0); } base.WriteInteger(-1); base.WriteBoolean(false); }
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet) { int PageId = Packet.PopInt(); int ItemId = Packet.PopInt(); string Data = Packet.PopString(); string GiftUser = StringCharFilter.Escape(Packet.PopString()); string GiftMessage = StringCharFilter.Escape(Packet.PopString().Replace(Convert.ToChar(5), ' ')); int SpriteId = Packet.PopInt(); int Ribbon = Packet.PopInt(); int Colour = Packet.PopInt(); bool dnow = Packet.PopBoolean(); if (PlusEnvironment.GetDBConfig().DBData["gifts_enabled"] != "1") { Session.SendNotification("Os gerentes do hotel desativou esta função!"); return; } /*if (PlusEnvironment.GetGame().GetCatalog().CatalogFlatOffers.ContainsKey(ItemId) && PageId < 0) * { * PageId = PlusEnvironment.GetGame().GetCatalog().CatalogFlatOffers[ItemId]; * * CatalogPage P = null; * if (!PlusEnvironment.GetGame().GetCatalog().Pages.TryGetValue(PageId, out P)) * PageId = 0; * }*/ CatalogPage Page = null; if (!PlusEnvironment.GetGame().GetCatalog().TryGetPage(PageId, out Page)) { return; } if (!Page.Enabled || !Page.Visible || Page.MinimumRank > Session.GetHabbo().Rank || (Page.MinimumVIP > Session.GetHabbo().VIPRank&& Session.GetHabbo().Rank == 1)) { return; } CatalogItem Item = null; if (!Page.Items.TryGetValue(ItemId, out Item)) { if (Page.ItemOffers.ContainsKey(ItemId)) { Item = (CatalogItem)Page.ItemOffers[ItemId]; if (Item == null) { return; } } else { return; } } if (!ItemUtility.CanGiftItem(Item)) { return; } ItemData PresentData = null; if (!PlusEnvironment.GetGame().GetItemManager().GetGift(SpriteId, out PresentData) || PresentData.InteractionType != InteractionType.GIFT) { return; } if (Session.GetHabbo().Credits < Item.CostCredits) { Session.SendMessage(new PresentDeliverErrorMessageComposer(true, false)); return; } if (Session.GetHabbo().Duckets < Item.CostPixels) { Session.SendMessage(new PresentDeliverErrorMessageComposer(false, true)); return; } Habbo Habbo = PlusEnvironment.GetHabboByUsername(GiftUser); if (Habbo == null) { Session.SendMessage(new GiftWrappingErrorComposer()); return; } if (!Habbo.AllowGifts) { Session.SendNotification("Opa, este usuário não permite que os presentes sejam enviados para ele!"); return; } if ((DateTime.Now - Session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0) { Session.SendNotification("Você está comprando presentes muito rápido! Aguarde 15 segundos!"); Session.GetHabbo().GiftPurchasingWarnings += 1; if (Session.GetHabbo().GiftPurchasingWarnings >= 25) { Session.GetHabbo().SessionGiftBlocked = true; } return; } if (Session.GetHabbo().SessionGiftBlocked) { return; } string ED = GiftUser + Convert.ToChar(5) + GiftMessage + Convert.ToChar(5) + Session.GetHabbo().Id + Convert.ToChar(5) + Item.Data.Id + Convert.ToChar(5) + SpriteId + Convert.ToChar(5) + Ribbon + Convert.ToChar(5) + Colour; int NewItemId = 0; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { //Insert the dummy item. dbClient.SetQuery("INSERT INTO `items` (`base_item`,`user_id`,`extra_data`) VALUES ('" + PresentData.Id + "', '" + Habbo.Id + "', @extra_data)"); dbClient.AddParameter("extra_data", ED); NewItemId = Convert.ToInt32(dbClient.InsertQuery()); string ItemExtraData = null; switch (Item.Data.InteractionType) { case InteractionType.NONE: ItemExtraData = ""; break; #region Pet handling case InteractionType.pet0: case InteractionType.pet1: case InteractionType.pet2: case InteractionType.pet3: case InteractionType.pet4: case InteractionType.pet5: case InteractionType.pet6: case InteractionType.pet7: case InteractionType.pet8: case InteractionType.pet9: case InteractionType.pet10: case InteractionType.pet11: case InteractionType.pet12: case InteractionType.pet13: //Caballo case InteractionType.pet14: case InteractionType.pet15: case InteractionType.pet16: //Mascota agregada case InteractionType.pet17: //Mascota agregada case InteractionType.pet18: //Mascota agregada case InteractionType.pet19: //Mascota agregada case InteractionType.pet20: //Mascota agregada case InteractionType.pet21: //Mascota agregada case InteractionType.pet22: //Mascota agregada case InteractionType.pet28: case InteractionType.pet29: case InteractionType.pet30: try { string[] Bits = Data.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (PetUtility.CheckPetName(PetName)) { return; } if (Race.Length > 2) { return; } if (Color.Length != 6) { return; } //PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PetLover", 1); } catch { return; } break; #endregion case InteractionType.FLOOR: case InteractionType.WALLPAPER: case InteractionType.LANDSCAPE: Double Number = 0; try { if (string.IsNullOrEmpty(Data)) { Number = 0; } else { Number = Double.Parse(Data, PlusEnvironment.CultureInfo); } } catch { } ItemExtraData = Number.ToString().Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.POSTIT: ItemExtraData = "FFFF33"; break; case InteractionType.MOODLIGHT: ItemExtraData = "1,1,1,#000000,255"; break; case InteractionType.TROPHY: ItemExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + Data; break; case InteractionType.MANNEQUIN: ItemExtraData = "m" + Convert.ToChar(5) + ".ch-210-1321.lg-285-92" + Convert.ToChar(5) + "Manequim padrão"; break; case InteractionType.BADGE_DISPLAY: if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Data)) { Session.SendMessage(new BroadcastMessageAlertComposer("Opa, parece que você não possui este emblema.")); return; } ItemExtraData = Data + Convert.ToChar(9) + Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year; break; default: ItemExtraData = Data; break; } //Insert the present, forever. dbClient.SetQuery("INSERT INTO `user_presents` (`item_id`,`base_id`,`extra_data`) VALUES ('" + NewItemId + "', '" + Item.Data.Id + "', @extra_data)"); dbClient.AddParameter("extra_data", (string.IsNullOrEmpty(ItemExtraData) ? "" : ItemExtraData)); dbClient.RunQuery(); //Here we're clearing up a record, this is dumb, but okay. dbClient.RunQuery("DELETE FROM `items` WHERE `id` = " + NewItemId + " LIMIT 1;"); } Item GiveItem = ItemFactory.CreateGiftItem(PresentData, Habbo, ED, ED, NewItemId, 0, 0); if (GiveItem != null) { GameClient Receiver = PlusEnvironment.GetGame().GetClientManager().GetClientByUserID(Habbo.Id); if (Receiver != null) { Receiver.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem); Receiver.SendMessage(new FurniListNotificationComposer(GiveItem.Id, 1)); Receiver.SendMessage(new PurchaseOKComposer()); Receiver.SendMessage(new FurniListAddComposer(GiveItem)); Receiver.SendMessage(new FurniListUpdateComposer()); } if (Habbo.Id != Session.GetHabbo().Id&& !string.IsNullOrWhiteSpace(GiftMessage)) { //PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_GiftGiver", 1); //if (Receiver != null) // PlusEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Receiver, "ACH_GiftReceiver", 1); //PlusEnvironment.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.GIFT_OTHERS); } } Session.SendMessage(new PurchaseOKComposer(Item, PresentData)); if (Item.CostCredits > 0) { Session.GetHabbo().Credits -= Item.CostCredits; Session.SendMessage(new CreditBalanceComposer(Session.GetHabbo().Credits)); } if (Item.CostPixels > 0) { Session.GetHabbo().Duckets -= Item.CostPixels; Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, Session.GetHabbo().Duckets)); } Session.GetHabbo().LastGiftPurchaseTime = DateTime.Now; }
public CatalogOfferComposer(CatalogItem Item) : base(ServerPacketHeader.CatalogOfferMessageComposer) { WriteInteger(Item.Id); WriteString(Item.Name); WriteBoolean(false);//IsRentable WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { WriteInteger(Item.CostDiamonds); WriteInteger(105); // Diamonds } else { WriteInteger(Item.CostDuckets); WriteInteger(0); } WriteBoolean(ItemUtility.CanGiftItem(Item)); WriteInteger(string.IsNullOrEmpty(Item.Badge) || Item.Data.Type.ToString() == "b" ? 1 : 2); if (!string.IsNullOrEmpty(Item.Badge)) { WriteString("b"); WriteString(Item.Badge); } if (Item.Data.Type.ToString().ToLower() != "b") { WriteString(Item.Data.Type.ToString()); WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.bot)//Bots { CatalogBot CatalogBot = null; if (!ButterflyEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { WriteString(CatalogBot.Figure); } } else { WriteString(""); } WriteInteger(Item.Amount); WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { WriteInteger(Item.LimitedEditionStack); WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } WriteInteger(0); //club_level WriteBoolean(ItemUtility.CanSelectAmount(Item)); WriteBoolean(false); // TODO: Figure out WriteString(""); //previewImage -> e.g; catalogue/pet_lion.png }
public CatalogPageComposer(CatalogPage Page, string CataMode, GameClient Session) : base(ServerPacketHeader.CatalogPageMessageComposer) { base.WriteInteger(Page.Id); base.WriteString(CataMode); base.WriteString(Page.Template); base.WriteInteger(Page.PageStrings1.Count); foreach (string s in Page.PageStrings1) { base.WriteString(s); } base.WriteInteger(Page.PageStrings2.Count); foreach (string s in Page.PageStrings2) { base.WriteString(s); } if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("club_buy") && Page.PageLink != "last_purchases") { base.WriteInteger(Page.Items.Count); foreach (var Item in Page.Items.Values) { base.WriteInteger(Item.Id); base.WriteString(Item.Name); base.WriteBoolean(false);//IsRentable base.WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { base.WriteInteger(Item.CostDiamonds); base.WriteInteger(5); // Diamonds } else if (Item.CostGOTWPoints > 0) { base.WriteInteger(Item.CostGOTWPoints); base.WriteInteger(103); // Pixeles } else { base.WriteInteger(Item.CostPixels); base.WriteInteger(0); // Type of PixelCost } base.WriteBoolean(Item.PredesignedId > 0 ? false : ItemUtility.CanGiftItem(Item)); if (Item.Data.InteractionType == InteractionType.DEAL) { foreach (CatalogDeal Deal in Page.Deals.Values) { base.WriteInteger(Deal.ItemDataList.Count);//Count foreach (CatalogItem DealItem in Deal.ItemDataList.ToList()) { base.WriteString(DealItem.Data.Type.ToString()); base.WriteInteger(DealItem.Data.SpriteId); base.WriteString(""); base.WriteInteger(DealItem.Amount); base.WriteBoolean(false); } base.WriteInteger(0);//club_level base.WriteBoolean(ItemUtility.CanSelectAmount(Item)); base.WriteBoolean(true); base.WriteString(""); } } else { if (Item.PredesignedId > 0) { base.WriteInteger(Page.PredesignedItems.Items.Count); foreach (var predesigned in Page.PredesignedItems.Items.ToList()) { ItemData Data = null; if (RavenEnvironment.GetGame().GetItemManager().GetItem(predesigned.Key, out Data)) { } base.WriteString(Data.Type.ToString()); base.WriteInteger(Data.SpriteId); base.WriteString(string.Empty); base.WriteInteger(predesigned.Value); base.WriteBoolean(false); } base.WriteInteger(0); base.WriteBoolean(false); base.WriteBoolean(true); // Niu Rilí base.WriteString(""); // Niu Rilí } else { base.WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2);//Count 1 item if there is no badge, otherwise count as 2. if (!string.IsNullOrEmpty(Item.Badge)) { base.WriteString("b"); base.WriteString(Item.Badge); } base.WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { //This is just a badge, append the name. base.WriteString(Item.Data.ItemName); } else { base.WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { base.WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.BOT)//Bots { CatalogBot CatalogBot = null; if (!RavenEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { base.WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { base.WriteString(CatalogBot.Figure); } } else if (Item.ExtraData != null) { base.WriteString(Item.ExtraData != null ? Item.ExtraData : string.Empty); } base.WriteInteger(Item.Amount); base.WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { base.WriteInteger(Item.LimitedEditionStack); base.WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } base.WriteInteger(0); //club_level base.WriteBoolean(ItemUtility.CanSelectAmount(Item)); base.WriteBoolean(true); // Niu Rilí base.WriteString(""); // Niu Rilí } } } } else if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("club_buy") && Page.PageLink == "last_purchases") { } else { base.WriteInteger(0); } base.WriteInteger(-1); base.WriteBoolean(false); if (Page.Template == "frontpage4" && CataMode == "NORMAL") { ICollection <Frontpage> FrontPage = RavenEnvironment.GetGame().GetCatalogFrontPageManager().GetCatalogFrontPage(); base.WriteInteger(FrontPage.Count); // count foreach (Frontpage front in FrontPage.ToList <Frontpage>()) { base.WriteInteger(front.Id()); base.WriteString(front.FrontName()); base.WriteString(front.FrontImage()); base.WriteInteger(0); base.WriteString(front.FrontLink()); base.WriteInteger(-1); } } else if (Page.Template == "frontpage4" && CataMode == "BUILDERS_CLUB") { ICollection <Frontpage> FrontPage = RavenEnvironment.GetGame().GetCatalogFrontPageManager().GetBCCatalogFrontPage(); base.WriteInteger(FrontPage.Count); // count foreach (Frontpage front in FrontPage.ToList <Frontpage>()) { base.WriteInteger(front.Id()); base.WriteString(front.FrontName()); base.WriteString(front.FrontImage()); base.WriteInteger(0); base.WriteString(front.FrontLink()); base.WriteInteger(-1); } } }
public CatalogPageComposer(CatalogPage Page, string CataMode) : base(ServerPacketHeader.CatalogPageMessageComposer) { base.WriteInteger(Page.Id); base.WriteString(CataMode); base.WriteString(Page.Template); base.WriteInteger(Page.PageStrings1.Count); foreach (string s in Page.PageStrings1) { base.WriteString(s); } base.WriteInteger(Page.PageStrings2.Count); foreach (string s in Page.PageStrings2) { base.WriteString(s); } if (!Page.Template.Equals("frontpage") && !Page.Template.Equals("club_buy")) { /*if (Page.PredesignedItems != null) * { * base.WriteInteger(Page.PredesignedItems.Items.Count); * foreach (var predesignedII in Page.PredesignedItems.Items) * { * var Item = Page.GetItem(Page.PredesignedItems.CatalogId); * base.WriteInteger(Item.Id); * base.WriteString(Item.Name); * base.WriteBoolean(false); * base.WriteInteger(Item.CostCredits); * if (Item.CostDiamonds > 0) * { * base.WriteInteger(Item.CostDiamonds); * base.WriteInteger(5); // Diamonds * } * else if (Item.CostGOTWPoints > 0) * { * base.WriteInteger(Item.CostGOTWPoints); * base.WriteInteger(103); // Puntos de Honor * } * else * { * base.WriteInteger(Item.CostPixels); * base.WriteInteger(0); // Type of PixelCost * } * * base.WriteBoolean(false); * base.WriteInteger(Page.PredesignedItems.Items.Count); * Console.WriteLine("cnt: " + Page.PredesignedItems.Items.Count); * foreach (var predesigned in Page.PredesignedItems.Items) * { * var predesignedItem = Page.GetItem(predesigned.Key); * Console.WriteLine("ide: " + predesigned.Key); * base.WriteString(predesignedItem.Data.Type.ToString()); * base.WriteInteger(predesignedItem.Data.SpriteId); * base.WriteString(string.Empty); * base.WriteInteger(predesigned.Value);//amount * base.WriteBoolean(false); * } * * base.WriteInteger(0); * base.WriteBoolean(false); * } * }*/ /*else * {*/ base.WriteInteger(Page.Items.Count); foreach (var Item in Page.Items.Values) { base.WriteInteger(Item.Id); base.WriteString(Item.Name); base.WriteBoolean(false);//IsRentable base.WriteInteger(Item.CostCredits); if (Item.CostDiamonds > 0) { base.WriteInteger(Item.CostDiamonds); base.WriteInteger(5); // Diamonds } else if (Item.CostGOTWPoints > 0) { base.WriteInteger(Item.CostGOTWPoints); base.WriteInteger(103); // Puntos de Honor } else if (Item.CostPumpkins > 0) { base.WriteInteger(Item.CostPumpkins); base.WriteInteger(104); // Calabazas } else { base.WriteInteger(Item.CostPixels); base.WriteInteger(0); // Type of PixelCost } base.WriteBoolean(Item.PredesignedId > 0 ? false : ItemUtility.CanGiftItem(Item)); if (Item.PredesignedId > 0) { base.WriteInteger(Page.PredesignedItems.Items.Count); foreach (var predesigned in Page.PredesignedItems.Items.ToList()) { ItemData Data = null; if (QuasarEnvironment.GetGame().GetItemManager().GetItem(predesigned.Key, out Data)) { } base.WriteString(Data.Type.ToString()); base.WriteInteger(Data.SpriteId); base.WriteString(string.Empty); base.WriteInteger(predesigned.Value); base.WriteBoolean(false); } base.WriteInteger(0); base.WriteBoolean(false); base.WriteBoolean(true); // Niu Rilí base.WriteString(""); // Niu Rilí } else if (Page.Deals.Count > 0) { foreach (var Deal in Page.Deals.Values) { base.WriteInteger(Deal.ItemDataList.Count); foreach (var DealItem in Deal.ItemDataList.ToList()) { base.WriteString(DealItem.Data.Type.ToString()); base.WriteInteger(DealItem.Data.SpriteId); base.WriteString(string.Empty); base.WriteInteger(DealItem.Amount); base.WriteBoolean(false); } base.WriteInteger(0); base.WriteBoolean(false); } } else { base.WriteInteger(string.IsNullOrEmpty(Item.Badge) ? 1 : 2);//Count 1 item if there is no badge, otherwise count as 2. { if (!string.IsNullOrEmpty(Item.Badge)) { base.WriteString("b"); base.WriteString(Item.Badge); } base.WriteString(Item.Data.Type.ToString()); if (Item.Data.Type.ToString().ToLower() == "b") { //This is just a badge, append the name. base.WriteString(Item.Data.ItemName); } else { base.WriteInteger(Item.Data.SpriteId); if (Item.Data.InteractionType == InteractionType.WALLPAPER || Item.Data.InteractionType == InteractionType.FLOOR || Item.Data.InteractionType == InteractionType.LANDSCAPE) { base.WriteString(Item.Name.Split('_')[2]); } else if (Item.Data.InteractionType == InteractionType.BOT)//Bots { CatalogBot CatalogBot = null; if (!QuasarEnvironment.GetGame().GetCatalog().TryGetBot(Item.ItemId, out CatalogBot)) { base.WriteString("hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92"); } else { base.WriteString(CatalogBot.Figure); } } else if (Item.ExtraData != null) { base.WriteString(Item.ExtraData != null ? Item.ExtraData : string.Empty); } base.WriteInteger(Item.Amount); base.WriteBoolean(Item.IsLimited); // IsLimited if (Item.IsLimited) { base.WriteInteger(Item.LimitedEditionStack); base.WriteInteger(Item.LimitedEditionStack - Item.LimitedEditionSells); } } base.WriteInteger(0); //club_level base.WriteBoolean(ItemUtility.CanSelectAmount(Item)); base.WriteBoolean(true); // Niu Rilí base.WriteString(""); // Niu Rilí } } } /*}*/ } else { base.WriteInteger(0); } base.WriteInteger(-1); base.WriteBoolean(false); if (Page.Template.Equals("frontpage4")) { ILog log = LogManager.GetLogger("Quasar.Core.ConsoleCommandHandler"); try { CatalogFrontPage frontpage = QuasarEnvironment.GetGame().getCatalogFrontPage(); var oneN = frontpage._oneN; var twoN = frontpage._twoN; var threeN = frontpage._threeN; var fourN = frontpage._fourN; var oneI = frontpage._oneI; var twoI = frontpage._twoI; var threeI = frontpage._threeI; var fourI = frontpage._fourI; var onePL = frontpage._onePL; var twoPL = frontpage._twoPL; var threePL = frontpage._threePL; var fourPL = frontpage._fourPL; base.WriteInteger(4); base.WriteInteger(1); base.WriteString(oneN); base.WriteString(oneI); base.WriteInteger(0); base.WriteString(onePL); base.WriteInteger(0); base.WriteInteger(2); base.WriteString(twoN); base.WriteString(twoI); base.WriteInteger(0); base.WriteString(twoPL); base.WriteInteger(0); base.WriteInteger(3); base.WriteString(threeN); base.WriteString(threeI); base.WriteInteger(0); base.WriteString(threePL); base.WriteInteger(0); base.WriteInteger(4); base.WriteString(fourN); base.WriteString(fourI); base.WriteInteger(0); base.WriteString(fourPL); base.WriteInteger(0); } catch (Exception e) { string CurrentTime = DateTime.Now.ToString("HH:mm:ss" + " | "); Console.WriteLine(CurrentTime + e.Message); if (Page.Template.Equals("vip_buy")) { base.WriteInteger(0); //Page ID base.WriteString("NORMAL"); base.WriteString("vip_buy"); base.WriteInteger(2); base.WriteString("hc2_clubtitle"); base.WriteString("clubcat_pic"); base.WriteInteger(0); // Nueva Release base.WriteInteger(0); base.WriteInteger(-1); base.WriteBoolean(false); if (Page.Template.Equals("club_gifts")) { base.WriteString("club_gifts"); base.WriteInteger(1); base.WriteString(Page.PageStrings2); base.WriteInteger(1); base.WriteString(Page.PageStrings2); } } } } }
public CatalogOfferComposer(CatalogItem item) : base(ServerPacketHeader.CatalogOfferMessageComposer) { WriteInteger(item.OfferId); WriteString(item.Data.ItemName); WriteBoolean(false); //IsRentable WriteInteger(item.CostCredits); if (item.CostDiamonds > 0) { WriteInteger(item.CostDiamonds); WriteInteger(5); // Diamonds } else { WriteInteger(item.CostPixels); WriteInteger(0); // Type of PixelCost } WriteBoolean(ItemUtility.CanGiftItem(item)); WriteInteger(string.IsNullOrEmpty(item.Badge) ? 1 : 2); //Count 1 item if there is no badge, otherwise count as 2. if (!string.IsNullOrEmpty(item.Badge)) { WriteString("b"); WriteString(item.Badge); } WriteString(item.Data.Type.ToString()); if (item.Data.Type.ToString().ToLower() == "b") { WriteString(item.Data.ItemName); //Badge name. } else { WriteInteger(item.Data.SpriteId); if (item.Data.InteractionType == InteractionType.Wallpaper || item.Data.InteractionType == InteractionType.Floor || item.Data.InteractionType == InteractionType.Landscape) { WriteString(item.Name.Split('_')[2]); } else if (item.PageID == 9) //Bots { WriteString(!PlusEnvironment.GetGame().GetCatalog().TryGetBot(item.ItemId, out var cataBot) ? "hd-180-7.ea-1406-62.ch-210-1321.hr-831-49.ca-1813-62.sh-295-1321.lg-285-92" : cataBot.Figure); } else if (item.ExtraData != null) { WriteString(item.ExtraData != null ? item.ExtraData : string.Empty); } WriteInteger(item.Amount); WriteBoolean(item.IsLimited); // IsLimited if (item.IsLimited) { WriteInteger(item.LimitedEditionStack); WriteInteger(item.LimitedEditionStack - item.LimitedEditionSells); } } WriteInteger(0); // club_level WriteBoolean(ItemUtility.CanSelectAmount(item)); WriteBoolean(false); // TODO: Figure out WriteString(""); //previewImage -> e.g; catalogue/pet_lion.png }
public void Parse(GameClient Session, ClientPacket Packet) { int PageId = Packet.PopInt(); int ItemId = Packet.PopInt(); string Data = Packet.PopString(); string GiftUser = StringCharFilter.Escape(Packet.PopString()); string GiftMessage = StringCharFilter.Escape(Packet.PopString().Replace(Convert.ToChar(5), ' ')); int SpriteId = Packet.PopInt(); int Ribbon = Packet.PopInt(); int Colour = Packet.PopInt(); bool dnow = Packet.PopBoolean(); CatalogPage Page = null; if (!ButterflyEnvironment.GetGame().GetCatalog().TryGetPage(PageId, out Page)) { return; } if (!Page.Enabled || Page.MinimumRank > Session.GetHabbo().Rank) { return; } CatalogItem Item = null; if (!Page.Items.TryGetValue(ItemId, out Item)) { return; } if (!ItemUtility.CanGiftItem(Item)) { return; } ItemData PresentData = null; if (!ButterflyEnvironment.GetGame().GetItemManager().GetGift(SpriteId, out PresentData) || PresentData.InteractionType != InteractionType.GIFT) { return; } if (Session.GetHabbo().Credits < Item.CostCredits) { //Session.SendPacket(new PresentDeliverErrorMessageComposer(true, false)); return; } if (Session.GetHabbo().Duckets < Item.CostDuckets) { //Session.SendPacket(new PresentDeliverErrorMessageComposer(false, true)); return; } Habbo Habbo = ButterflyEnvironment.GetHabboByUsername(GiftUser); if (Habbo == null) { //Session.SendPacket(new GiftWrappingErrorComposer()); return; } if ((DateTime.Now - Session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0) { Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("notif.buygift.flood", Session.Langue)); Session.GetHabbo().GiftPurchasingWarnings += 1; if (Session.GetHabbo().GiftPurchasingWarnings >= 25) { Session.GetHabbo().SessionGiftBlocked = true; } return; } if (Session.GetHabbo().SessionGiftBlocked) { return; } string ED = Session.GetHabbo().Id + ";" + GiftMessage + Convert.ToChar(5) + Ribbon + Convert.ToChar(5) + Colour; int NewItemId = 0; using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().GetQueryReactor()) { //Insert the dummy item. dbClient.SetQuery("INSERT INTO `items` (`base_item`,`user_id`,`extra_data`) VALUES (@baseId, @habboId, @extra_data)"); dbClient.AddParameter("baseId", PresentData.Id); dbClient.AddParameter("habboId", Habbo.Id); dbClient.AddParameter("extra_data", ED); NewItemId = Convert.ToInt32(dbClient.InsertQuery()); string ItemExtraData = null; switch (Item.Data.InteractionType) { case InteractionType.none: ItemExtraData = ""; break; case InteractionType.GUILD_ITEM: case InteractionType.GUILD_GATE: int Groupid = 0; if (!int.TryParse(Data, out Groupid)) { return; } if (Groupid == 0) { return; } Group groupItem; if (ButterflyEnvironment.GetGame().GetGroupManager().TryGetGroup(Groupid, out groupItem)) { ItemExtraData = "0;" + groupItem.Id; } break; #region Pet handling case InteractionType.pet: try { string[] Bits = Data.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (PetUtility.CheckPetName(PetName)) { return; } if (Race.Length > 2) { return; } if (Color.Length != 6) { return; } ButterflyEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PetLover", 1); } catch { return; } break; #endregion case InteractionType.FLOOR: case InteractionType.WALLPAPER: case InteractionType.LANDSCAPE: Double Number = 0; try { if (string.IsNullOrEmpty(Data)) { Number = 0; } else { Number = Double.Parse(Data); } } catch { } ItemExtraData = Number.ToString().Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.POSTIT: ItemExtraData = "FFFF33"; break; case InteractionType.MOODLIGHT: ItemExtraData = "1,1,1,#000000,255"; break; case InteractionType.TROPHY: ItemExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + Data; break; case InteractionType.MANNEQUIN: ItemExtraData = "m" + Convert.ToChar(5) + ".ch-210-1321.lg-285-92" + Convert.ToChar(5) + "Default Mannequin"; break; case InteractionType.BADGE_TROC: { string[] BadgeNotAllowed = { "ADM", "GPHWIB", "wibbo.helpeur", "WIBARC", "CRPOFFI", "ZEERSWS", "PRWRD1", "WBI1", "WBI2", "WBI3", "WBI4", "WBI5", "WBI6", "WBI7", "CASINOB", "WPREMIUM", "VIPFREE" }; if (BadgeNotAllowed.Any(x => x == Data)) { Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("notif.buybadgedisplay.error", Session.Langue)); return; } if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Data)) { Session.SendNotification(ButterflyEnvironment.GetLanguageManager().TryGetValue("notif.buybadgedisplay.error", Session.Langue)); return; } Session.GetHabbo().GetBadgeComponent().RemoveBadge(Data); Session.SendPacket(Session.GetHabbo().GetBadgeComponent().Serialize()); ItemExtraData = Data; break; } case InteractionType.BADGE_DISPLAY: if (!Session.GetHabbo().GetBadgeComponent().HasBadge(Data)) { return; } ItemExtraData = Data + Convert.ToChar(9) + Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year; break; default: ItemExtraData = Data; break; } //Insert the present, forever. dbClient.SetQuery("INSERT INTO `user_presents` (`item_id`,`base_id`,`extra_data`) VALUES (@itemId, @baseId, @extra_data)"); dbClient.AddParameter("itemId", NewItemId); dbClient.AddParameter("baseId", Item.Data.Id); dbClient.AddParameter("extra_data", (string.IsNullOrEmpty(ItemExtraData) ? "" : ItemExtraData)); dbClient.RunQuery(); //Here we're clearing up a record, this is dumb, but okay. dbClient.SetQuery("DELETE FROM `items` WHERE `id` = @deleteId LIMIT 1"); dbClient.AddParameter("deleteId", NewItemId); dbClient.RunQuery(); } Item GiveItem = ItemFactory.CreateSingleItem(PresentData, Habbo, ED, NewItemId); if (GiveItem != null) { GameClient Receiver = ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(Habbo.Id); if (Receiver != null) { Receiver.GetHabbo().GetInventoryComponent().TryAddItem(GiveItem); Receiver.SendPacket(new FurniListNotificationComposer(GiveItem.Id, 1)); Receiver.SendPacket(new PurchaseOKComposer()); //Receiver.SendPacket(new FurniListUpdateComposer()); } if (Habbo.Id != Session.GetHabbo().Id&& !string.IsNullOrWhiteSpace(GiftMessage)) { ButterflyEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_GiftGiver", 1); if (Receiver != null) { ButterflyEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Receiver, "ACH_GiftReceiver", 1); } } } Session.SendPacket(new PurchaseOKComposer(Item, PresentData)); if (Item.CostCredits > 0) { Session.GetHabbo().Credits -= Item.CostCredits; Session.SendPacket(new CreditBalanceComposer(Session.GetHabbo().Credits)); } if (Item.CostDuckets > 0) { Session.GetHabbo().Duckets -= Item.CostDuckets; Session.SendPacket(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, Session.GetHabbo().Duckets)); } Session.GetHabbo().LastGiftPurchaseTime = DateTime.Now; }