// TODO Make extraData optional public bool Purchase(Habbo user, CatalogOffer offer, string extraData, int amount) { if (offer == null) { return(false); } PurchaseStatus purchaseStatus = offer.Purchase(user.Info, amount); switch (purchaseStatus) { case PurchaseStatus.Ok: DeliverOffer(user, offer, extraData); return(true); case PurchaseStatus.LimitedSoldOut: user.Router.GetComposer <CatalogLimitedItemSoldOutMessageComposer>().Compose(user); break; case PurchaseStatus.InvalidSubscription: user.Router.GetComposer <CataloguePurchaseNotAllowed>().Compose(user, CataloguePurchaseNotAllowed.ErrorCode.Not_HC); break; case PurchaseStatus.NotEnoughCredits: default: user.Router.GetComposer <CatalogPurchaseErrorMessageComposer>().Compose(user, CatalogPurchaseErrorMessageComposer.ErrorCode.Generic); break; } return(false); }
public override void Compose(Yupi.Protocol.ISender session, CatalogOffer offer) { using (ServerMessage message = Pool.GetMessageBuffer(Id)) { message.Append(offer); } }
public override void HandleMessage(Yupi.Model.Domain.Habbo session, Yupi.Protocol.Buffers.ClientMessage message, Yupi.Protocol.IRouter router) { // TODO Maximum items int pageId = message.GetInteger(); int itemId = message.GetInteger(); string extraData = message.GetString(); int amount = message.GetInteger(); CatalogOffer item = CatalogController.GetById(pageId, itemId); CatalogController.Purchase(session, item, extraData, amount); }
public void PurchaseGift(Habbo user, CatalogOffer catalogItem, string extraData, UserInfo receiver) { if (!catalogItem.AllowGift) { return; } if (Purchase(user, catalogItem, extraData, 1) && user.Info != receiver) { AchievementManager .ProgressUserAchievement(user, SocialAchievement.GiftGiver); AchievementManager .ProgressUserAchievement(receiver, SocialAchievement.GiftReceiver); } }
public static void Append(this ServerMessage message, CatalogOffer offer) { message.AppendInteger(offer.Id); message.AppendString(offer.Name.Get()); // TODO Localize message.AppendBool(offer.IsRentable); message.AppendInteger(offer.CostCredits); message.AppendInteger(offer.CostActivityPoints); message.AppendInteger((int)offer.ActivityPointsType); message.AppendBool(offer.AllowGift); message.AppendInteger(offer.Products.Count); foreach (CatalogProduct product in offer.Products) { Append(message, product); } message.AppendInteger((int)offer.ClubLevel); message.AppendBool(offer.IsVisible); }
public void Set(CatalogOffer other) { if (other != null) { m_ApiVersion = EcomInterface.CatalogofferApiLatest; ServerIndex = other.ServerIndex; CatalogNamespace = other.CatalogNamespace; Id = other.Id; TitleText = other.TitleText; DescriptionText = other.DescriptionText; LongDescriptionText = other.LongDescriptionText; TechnicalDetailsText_DEPRECATED = other.TechnicalDetailsText_DEPRECATED; CurrencyCode = other.CurrencyCode; PriceResult = other.PriceResult; OriginalPrice = other.OriginalPrice; CurrentPrice = other.CurrentPrice; DiscountPercentage = other.DiscountPercentage; ExpirationTimestamp = other.ExpirationTimestamp; PurchasedCount = other.PurchasedCount; PurchaseLimit = other.PurchaseLimit; AvailableForPurchase = other.AvailableForPurchase; } }
public override void HandleMessage(Yupi.Model.Domain.Habbo session, Yupi.Protocol.Buffers.ClientMessage message, Yupi.Protocol.IRouter router) { int pageId = message.GetInteger(); int itemId = message.GetInteger(); string extraData = message.GetString(); string giftUser = message.GetString(); string giftMessage = message.GetString(); int giftSpriteId = message.GetInteger(); int giftLazo = message.GetInteger(); int giftColor = message.GetInteger(); bool showSender = message.GetBool(); UserInfo info = UserRepository.Find(x => x.Name == giftUser); if (info == null) { router.GetComposer <GiftErrorMessageComposer>().Compose(session, giftUser); } CatalogOffer item = CatalogController.GetById(pageId, itemId); CatalogController.PurchaseGift(session, item, extraData, info); }
private void DeliverOffer(Habbo user, CatalogOffer offer, string extraData) { OfferRepository.Save(offer); user.Router.GetComposer <CreditsBalanceMessageComposer>().Compose(user, user.Info.Wallet.Credits); user.Router.GetComposer <ActivityPointsMessageComposer>().Compose(user, user.Info.Wallet); var items = new Dictionary <ItemType, ICollection <Item> >(); foreach (CatalogProduct product in offer.Products) { Item item = product.Item.CreateNew(); item.Owner = user.Info; item.TryParseExtraData(extraData); if (!items.ContainsKey(product.Item.Type)) { items.Add(product.Item.Type, new List <Item>()); } items[product.Item.Type].Add(item); user.Info.Inventory.Add(item); } user.Router.GetComposer <UpdateInventoryMessageComposer>().Compose(user); user.Router.GetComposer <PurchaseOkComposer>().Compose(user, offer); user.Router.GetComposer <NewInventoryObjectMessageComposer>().Compose(user, items); if (offer.Badge != null) { user.Info.Badges.GiveBadge(offer.Badge); UserRepository.Save(user.Info); } }