Esempio n. 1
0
        public StoreOffer ReadLegacyStoreOffer(Internal.CommunicationStream message)
        {
            bool supportsHighlighting = OpenTibiaUnity.GameManager.GetFeature(GameFeature.GameIngameStoreHighlights);

            uint   offerId          = message.ReadUnsignedInt();
            string offerName        = message.ReadString();
            string offerDescription = message.ReadString();
            var    storeOffer       = new StoreOffer(offerName, offerDescription);

            uint price = message.ReadUnsignedInt();
            var  highlightState = message.ReadEnum <StoreHighlightState>();
            uint saleValidUntil = 0, saleBasePrice = 0;

            if (highlightState == StoreHighlightState.Sale && supportsHighlighting && OpenTibiaUnity.GameManager.ClientVersion >= 1097)
            {
                saleValidUntil = message.ReadUnsignedInt();
                saleBasePrice  = message.ReadUnsignedInt();
            }

            var    disabledState  = message.ReadEnum <StoreOfferDisableState>();
            string disabledReason = string.Empty;

            if (supportsHighlighting && disabledState == StoreOfferDisableState.Disabled)
            {
                disabledReason = message.ReadString();
            }

            var quantityConfiguration = new StoreOfferQuantityConfiguration(offerId, price, 1, highlightState, false);

            quantityConfiguration.DisabledState = disabledState;
            if (disabledState == StoreOfferDisableState.Disabled)
            {
                quantityConfiguration.DisabledReasons.Add(disabledReason);
            }

            if (highlightState == StoreHighlightState.Sale && supportsHighlighting && OpenTibiaUnity.GameManager.ClientVersion >= 1097)
            {
                quantityConfiguration.SetSaleParameters(saleValidUntil, saleBasePrice);
            }

            storeOffer.AddQuantityConfiguration(quantityConfiguration);

            int iconCount = message.ReadUnsignedByte();

            for (int i = 0; i < iconCount; i++)
            {
                storeOffer.AddVisualisation(new Store.Visualisations.StoreIconVisualisation(message.ReadString()));
            }

            int productCount = message.ReadUnsignedShort();

            for (int i = 0; i < productCount; i++)
            {
                storeOffer.AddProduct(ReadStoreProduct(message));
            }

            return(storeOffer);
        }
Esempio n. 2
0
        public StoreOfferQuantityConfiguration ReadStoreOfferQuantityConfiguration(Internal.CommunicationStream message)
        {
            uint   offerId = message.ReadUnsignedInt();
            ushort amount  = message.ReadUnsignedShort();
            uint   price   = message.ReadUnsignedInt();
            bool   useTransferableCoins = message.ReadBoolean();

            bool disabled        = message.ReadBoolean();
            var  disabledReasons = new List <string>();

            if (disabled)
            {
                int errorCount = message.ReadUnsignedByte();
                for (int i = 0; i < errorCount; i++)
                {
                    disabledReasons.Add(message.ReadString());
                }
            }

            var highlightState = message.ReadEnum <StoreHighlightState>();

            if (highlightState == StoreHighlightState.Sale)
            {
                uint saleValidUntilTimestamp = message.ReadUnsignedInt();
                uint basePrice = message.ReadUnsignedInt();
            }

            var quantityConfiguration = new StoreOfferQuantityConfiguration(offerId, price, amount, highlightState, useTransferableCoins);

            quantityConfiguration.DisabledReasons.AddRange(disabledReasons);

            if (disabled)
            {
                quantityConfiguration.DisabledState = StoreOfferDisableState.Disabled;
            }

            return(quantityConfiguration);
        }