Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
 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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 8
0
        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);
            }
        }