Esempio n. 1
0
        /**
         * Equips the current <code>EquippableVG</code>.
         * The equipping is done according to the equipping model ('GLOBAL', 'CATEGORY', or 'LOCAL').
         *
         * @param notify if true post event to bus
         * @throws NotEnoughGoodsException
         */
        public void equip(bool notify)
        {
            // only if the user has bought this EquippableVG, the EquippableVG is equipped.
            if (StorageManager.getVirtualGoodsStorage().getBalance(this) > 0)
            {
                if (mEquippingModel == EquippingModel.CATEGORY)
                {
                    VirtualCategory category = null;
                    try {
                        category = StoreInfo.getCategory(getItemId());
                    } catch (VirtualItemNotFoundException e) {
                        SoomlaUtils.LogError(TAG,
                                             "Tried to unequip all other category VirtualGoods but there was no " +
                                             "associated category. virtual good itemId: " + getItemId() + " " + e.Message);
                        return;
                    }

                    foreach (String goodItemId in category.getGoodsItemIds())
                    {
                        EquippableVG equippableVG = null;
                        try {
                            equippableVG = (EquippableVG)StoreInfo.getVirtualItem(goodItemId);

                            if (equippableVG != null && equippableVG != this)
                            {
                                equippableVG.unequip(notify);
                            }
                        } catch (VirtualItemNotFoundException e) {
                            SoomlaUtils.LogError(TAG, "On equip, couldn't find one of the itemIds "
                                                 + "in the category. Continuing to the next one. itemId: "
                                                 + goodItemId + " " + e.Message);
                        } catch (InvalidCastException ex) {
                            SoomlaUtils.LogDebug(TAG, "On equip, an error occurred. It's a debug "
                                                 + "message b/c the VirtualGood may just not be an EquippableVG. "
                                                 + "itemId: " + goodItemId + " " + ex.Message);
                        }
                    }
                }
                else if (mEquippingModel == EquippingModel.GLOBAL)
                {
                    foreach (VirtualGood good in StoreInfo.getGoods())
                    {
                        if (good != this &&
                            good is EquippableVG)
                        {
                            ((EquippableVG)good).unequip(notify);
                        }
                    }
                }

                StorageManager.getVirtualGoodsStorage().equip(this, notify);
            }
            else
            {
                throw new NotEnoughGoodsException(getItemId());
            }
        }
Esempio n. 2
0
        /** Private functions **/

        /**
         * Transforms given JObject to StoreInfo
         *
         * @param JObject
         * @throws JSONException
         */
        private static void fromJObject(JObject JObject)
        {
            mVirtualItems     = new Dictionary <String, VirtualItem>();
            mPurchasableItems = new Dictionary <String, PurchasableVirtualItem>();
            mGoodsCategories  = new Dictionary <String, VirtualCategory>();
            mGoodsUpgrades    = new Dictionary <String, List <UpgradeVG> >();
            mCurrencyPacks    = new List <VirtualCurrencyPack>();
            mGoods            = new List <VirtualGood>();
            mCategories       = new List <VirtualCategory>();
            mCurrencies       = new List <VirtualCurrency>();
            mNonConsumables   = new List <NonConsumableItem>();

            JToken value;

            if (JObject.TryGetValue(StoreJSONConsts.STORE_CURRENCIES, out value))
            {
                JArray virtualCurrencies = JObject.Value <JArray>(StoreJSONConsts.STORE_CURRENCIES);
                for (int i = 0; i < virtualCurrencies.Count; i++)
                {
                    JObject         o = virtualCurrencies.Value <JObject>(i);
                    VirtualCurrency c = new VirtualCurrency(o);
                    mCurrencies.Add(c);

                    mVirtualItems.Add(c.getItemId(), c);
                }
            }

            if (JObject.TryGetValue(StoreJSONConsts.STORE_CURRENCYPACKS, out value))
            {
                JArray currencyPacks = JObject.Value <JArray>(StoreJSONConsts.STORE_CURRENCYPACKS);
                for (int i = 0; i < currencyPacks.Count; i++)
                {
                    JObject             o    = currencyPacks.Value <JObject>(i);
                    VirtualCurrencyPack pack = new VirtualCurrencyPack(o);
                    mCurrencyPacks.Add(pack);

                    mVirtualItems.Add(pack.getItemId(), pack);

                    PurchaseType purchaseType = pack.GetPurchaseType();
                    if (purchaseType is PurchaseWithMarket)
                    {
                        mPurchasableItems.Add(((PurchaseWithMarket)purchaseType)
                                              .getMarketItem().getProductId(), pack);
                    }
                }
            }

            // The order in which VirtualGoods are created matters!
            // For example: VGU and VGP depend on other VGs
            if (JObject.TryGetValue(StoreJSONConsts.STORE_GOODS, out value))
            {
                JObject virtualGoods = JObject.Value <JObject>(StoreJSONConsts.STORE_GOODS);

                JToken valueVg;
                if (virtualGoods.TryGetValue(StoreJSONConsts.STORE_GOODS_SU, out valueVg))
                {
                    JArray suGoods = virtualGoods.Value <JArray>(StoreJSONConsts.STORE_GOODS_SU);
                    for (int i = 0; i < suGoods.Count; i++)
                    {
                        JObject     o = suGoods.Value <JObject>(i);
                        SingleUseVG g = new SingleUseVG(o);
                        addVG(g);
                    }
                }


                if (virtualGoods.TryGetValue(StoreJSONConsts.STORE_GOODS_LT, out valueVg))
                {
                    JArray ltGoods = virtualGoods.Value <JArray>(StoreJSONConsts.STORE_GOODS_LT);
                    for (int i = 0; i < ltGoods.Count; i++)
                    {
                        JObject    o = ltGoods.Value <JObject>(i);
                        LifetimeVG g = new LifetimeVG(o);
                        addVG(g);
                    }
                }


                if (virtualGoods.TryGetValue(StoreJSONConsts.STORE_GOODS_EQ, out valueVg))
                {
                    JArray eqGoods = virtualGoods.Value <JArray>(StoreJSONConsts.STORE_GOODS_EQ);
                    for (int i = 0; i < eqGoods.Count; i++)
                    {
                        JObject      o = eqGoods.Value <JObject>(i);
                        EquippableVG g = new EquippableVG(o);
                        addVG(g);
                    }
                }

                if (virtualGoods.TryGetValue(StoreJSONConsts.STORE_GOODS_PA, out valueVg))
                {
                    JArray paGoods = virtualGoods.Value <JArray>(StoreJSONConsts.STORE_GOODS_PA);
                    for (int i = 0; i < paGoods.Count; i++)
                    {
                        JObject         o = paGoods.Value <JObject>(i);
                        SingleUsePackVG g = new SingleUsePackVG(o);
                        addVG(g);
                    }
                }


                if (virtualGoods.TryGetValue(StoreJSONConsts.STORE_GOODS_UP, out valueVg))
                {
                    JArray upGoods = virtualGoods.Value <JArray>(StoreJSONConsts.STORE_GOODS_UP);
                    for (int i = 0; i < upGoods.Count; i++)
                    {
                        JObject   o = upGoods.Value <JObject>(i);
                        UpgradeVG g = new UpgradeVG(o);
                        addVG(g);

                        List <UpgradeVG> upgrades = mGoodsUpgrades[g.getGoodItemId()];
                        if (upgrades == null)
                        {
                            upgrades = new List <UpgradeVG>();
                            mGoodsUpgrades.Add(g.getGoodItemId(), upgrades);
                        }
                        upgrades.Add(g);
                    }
                }
            }

            // Categories depend on virtual goods. That's why the have to be initialized after!
            if (JObject.TryGetValue(StoreJSONConsts.STORE_CATEGORIES, out value))
            {
                JArray virtualCategories = JObject.Value <JArray>(StoreJSONConsts.STORE_CATEGORIES);
                for (int i = 0; i < virtualCategories.Count; i++)
                {
                    JObject         o        = virtualCategories.Value <JObject>(i);
                    VirtualCategory category = new VirtualCategory(o);
                    mCategories.Add(category);
                    foreach (String goodItemId in category.getGoodsItemIds())
                    {
                        mGoodsCategories.Add(goodItemId, category);
                    }
                }
            }

            if (JObject.TryGetValue(StoreJSONConsts.STORE_NONCONSUMABLES, out value))
            {
                JArray nonConsumables = JObject.Value <JArray>(StoreJSONConsts.STORE_NONCONSUMABLES);
                for (int i = 0; i < nonConsumables.Count; i++)
                {
                    JObject           o   = nonConsumables.Value <JObject>(i);
                    NonConsumableItem non = new NonConsumableItem(o);
                    mNonConsumables.Add(non);

                    mVirtualItems.Add(non.getItemId(), non);

                    PurchaseType purchaseType = non.GetPurchaseType();
                    if (purchaseType is PurchaseWithMarket)
                    {
                        mPurchasableItems.Add(((PurchaseWithMarket)purchaseType)
                                              .getMarketItem().getProductId(), non);
                    }
                }
            }
        }