示例#1
0
        /// <summary>
        /// Purchase this instance.
        /// </summary>
        public bool Purchase(Action <IAPPackage> callback = null)
        {
            bool result = false;

            if (fetchFromStore)
            {
//				Debug.Log("purcahse " + _callback);
                _purchaseCallback = callback;
                IAPManager.OnIAPProcessPurchase += handleOnIAPProcessPurchaseInternal;
                IAPManager.OnIAPPurchaseFailed  += handleOnIAPPurchaseFailedInternal;
                IAPManager.PurchaseProduct(uid);
            }
            else
            {
                if (productType == IAPProductType.NonConsumable && amount > 0)
                {
                    //For non-consumable products, only purcahse one
                }
                else
                {
                    // Get the currency
                    IAPCurrency cur = IAPInventoryManager.GetCurrency(this.currency);
                    // Check if enough currency
                    if (cur != null && cur.Consume(this.price))
                    {
                        DeliveryProduct();
                        result = true;
                    }
                }
            }
            return(result);
        }
示例#2
0
        // Use this for initialization
        void Start()
        {
            if (uid != null)
            {
                IAPObject obj = null;

                //
                if (targetType == IAPType.Inventory)
                {
                    obj = IAPInventoryManager.GetInventory(uid);
                }
                else if (targetType == IAPType.Currency)
                {
                    obj = IAPInventoryManager.GetCurrency(uid);
                }

                if (obj != null)
                {
                    UpdateTemplate(obj);

                    // Update text
                    Text[] txts = gameObject.GetComponentsInChildren <Text>();
                    // InAppPurchase
                    foreach (Text txt in txts)
                    {
                        if (txt.name == "amount_consume")
                        {
                            txt.text = amount.ToString();
                        }
                    }

                    IAPUIUtility.AddButtonCallback(
                        gameObject, (GameObject go) => {
                        if (useConfirmDialog)
                        {
                            // Construct confirm msg
                            string msg = IAPInventoryManager.uiSettings.consumeConfirmString.Replace("%title%", obj.title);
                            msg        = msg.Replace("%description%", obj.description);
                            msg        = msg.Replace("%amount_consume%", amount.ToString());
                            // Show confirm diaglog
                            IAPInventoryManager.ShowConfirmDialog(msg,
                                                                  delegate(IAPDialog diag){
                                if (obj.Consume(amount))
                                {
                                    UpdateTemplate(obj);
                                }
                            }
                                                                  );
                        }
                        else
                        {
                            obj.Consume(amount);
                        }
                    }
                        );
                }
            }
        }
示例#3
0
 // Use this for initialization
 void Start()
 {
     if (targetType == IAPType.InAppPurchase)
     {
         IAPPackage obj = IAPInventoryManager.GetPackage(uid);
         if (obj != null)
         {
             handlePackageUpdated(obj);
             IAPInventoryManager.OnIAPInitialized += handleOnIAPInitialized;
         }
     }
     else if (targetType == IAPType.Currency)
     {
         IAPCurrency obj = IAPInventoryManager.GetCurrency(uid);
         if (obj != null)
         {
             int result = 0;
             if (textType == IAPTextType.price)
             {
                 result = obj.price;
             }
             else if (textType == IAPTextType.amount)
             {
                 result = obj.amount;
             }
             _lastNumber = result;
             handleCurrencyUpdated(obj);
             IAPInventoryManager.OnCurrencyUpdated += handleCurrencyUpdated;
         }
     }
     else if (targetType == IAPType.Inventory)
     {
         IAPInventory obj = IAPInventoryManager.GetInventory(uid);
         if (obj != null)
         {
             handleInventoryUpdated(obj);
             IAPInventoryManager.OnInventoryUpdated += handleInventoryUpdated;
         }
     }
     else if (targetType == IAPType.Ability)
     {
         IAPAbility obj = IAPInventoryManager.GetAbility(uid);
         if (obj != null)
         {
             handleAbilityUpdated(obj);
             IAPInventoryManager.OnAbilityUpdated += handleAbilityUpdated;
         }
     }
     else if (targetType == IAPType.GameLevel)
     {
         IAPGameLevel obj = IAPInventoryManager.GetGameLevel(uid);
         if (obj != null)
         {
             UpdateGameLevelTemplate(obj, 0);
         }
     }
 }
示例#4
0
        private void handleOnIAPInitialized(Dictionary <string, IAPProduct> products)
        {
//			IAPInventoryManager.OnIAPInitialized-=handleOnIAPInitialized;
            if (products != null)
            {
                if (products.ContainsKey(this.uid))
                {
                    IAPPackage obj = IAPInventoryManager.GetPackage(uid);
                    handlePackageUpdated(obj);
                }
            }
        }
        public IAPFileDatastore(string path) : base()
        {
            _path = Application.persistentDataPath + Path.DirectorySeparatorChar + path;

            IAPInventoryManager.LogFormat("IAPDatastore File Save to: {0}", _path);

            // Check if Directory exists else create it.
            string dir = Path.GetDirectoryName(_path);

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
        }
        /// <summary>
        /// Save this instance.
        /// </summary>
        public bool Save()
        {
            bool result = false;

            if (_batching)
            {
                _batching = false;
                result    = true;
            }
            else
            {
                IAPInventoryManager.Log("WriteToDatastore");
                result = WriteToDatastore();
            }
            return(result);
        }
示例#7
0
 private void handleOnIAPInitialized(Dictionary <string, IAPProduct> products)
 {
     IAPInventoryManager.OnIAPInitialized -= handleOnIAPInitialized;
     if (products != null)
     {
         if (products.ContainsKey(uid))
         {
             IAPPackage package = IAPInventoryManager.GetPackage(uid);
             // IAPUIUtility.AddButtonCallback(gameObject,(GameObject go)=>{
             //  IAPUIUtility.SetButtonEnabled(gameObject,false,"purchase_button");
             //  obj.Purchase(handlePackageUpdated);
             // },"purchase_button");
             handlePackageUpdated(package);
         }
     }
 }
示例#8
0
        // Button callback

        private void handleButtonCallback(IAPObject obj)
        {
            if (useConfirmDialog)
            {
                // Construct confirm msg
                IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                if (currency != null)
                {
                    string msg = IAPInventoryManager.uiSettings.iapConfirmString.Replace("%title%", obj.title);
                    msg = msg.Replace("%description%", obj.description);
                    msg = msg.Replace("%price%", obj.price.ToString());
                    msg = msg.Replace("%currency_title%", currency.title);
                    msg = msg.Replace("%currency_description%", currency.description);
                    // Show confirm diaglog
                    IAPInventoryManager.ShowConfirmDialog(msg,
                                                          delegate(IAPDialog diag){
                        // Debug.Log("available: " + obj.available);
                        // Check if enough currency
                        if ((obj.available != 0) && currency != null && currency.Consume(obj.price))
                        {
                            obj.Refill(1);
                            if (obj is IAPInventory)
                            {
                                obj.Unlock();
                            }
                            UpdateTemplate(obj);
                        }
                    }
                                                          );
                }
            }
            else
            {
                // Get the currency
                IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                // Check if enough currency
                if (currency != null && currency.Consume(obj.price))
                {
                    obj.Refill(1);
                    if (obj is IAPInventory)
                    {
                        obj.Unlock();
                    }
                    UpdateTemplate(obj);
                }
            }
        }
示例#9
0
        public IAPPackage(string uid, IAPPackageSetting s, IAPObjectData d, Action <IAPObject> callback = null) : base(uid, d, callback)
        {
//			uid=s.productId;
            fetchFromStore = s.fetchFromStore;
            currency       = s.currency;
            price          = s.price;
            content        = new List <IAPPackageContent>();
            icon           = s.icon;
            title          = s.title;
            description    = s.description;
            tags           = s.tags;
            productType    = s.productType;

            // Create the dictionary for finding IAPPackageContent
            _contentDictionary = new Dictionary <string, IAPPackageContent>();

            // Loop and create IAPPackageContent for each setting
            foreach (IAPContentSetting c in s.content)
            {
                IAPPackageContent item = new IAPPackageContent();
                item.amount = c.amount;
                if (c.type == IAPType.Currency)
                {
                    item.obj = IAPInventoryManager.GetCurrency(c.uid);
                }
                else if (c.type == IAPType.Inventory)
                {
                    item.obj = IAPInventoryManager.GetInventory(c.uid);
                }
                else if (c.type == IAPType.GameLevel)
                {
                    item.obj = IAPInventoryManager.GetGameLevel(c.uid);
                }
                content.Add(item);
                _contentDictionary.Add(c.uid, item);
            }

            // Add event for real money purchase
            if (fetchFromStore)
            {
                // Debug.Log("fetchFromStore");
                IAPManager.OnIAPProcessPurchase += handleOnIAPProcessPurchase;
            }
        }
示例#10
0
        // Helper methods

        virtual protected void StringToDictionary(string input)
        {
            if (!string.IsNullOrEmpty(input))
            {
                Dictionary <string, string> result = JsonUtility.FromJson <Serializer <string, string> >(input).ToDictionary();

                foreach (KeyValuePair <string, string> item in result)
                {
                    if (item.Key == "version")
                    {
                        IAPInventoryManager.LogFormat("Datastore Version: {0}", item.Value);
                    }
                    else
                    {
//						Debug.LogFormat("key {0} value {1}",item.Key,item.Value);
                        Dictionary <string, IAPObjectData> res = JsonUtility.FromJson <Serializer <string, IAPObjectData> >(item.Value).ToDictionary();
                        _values.Add(item.Key, res);
                    }
                }
            }
        }
示例#11
0
    public void Coin100Defence()
    {
        AM.PlaySound("Btn");

        IAPCurrency currency = IAPInventoryManager.GetCurrency("coin");
        int         amount   = currency.amount;

        if (stamina == 1)
        {
        }
        else if (amount >= price)
        {
            PlayerPrefs.SetInt("stamina", 1);
            PlayerPrefs.SetString("WaitOneHour", "-1");
            stamina = PlayerPrefs.GetInt("stamina");

            Color();
        }
        else
        {
            NoCoin();
        }
    }
示例#12
0
        /// <summary>
        /// Purchase this instance.
        /// </summary>
        public bool Upgrade()
        {
            bool result = false;
            // Get the currency
            IAPCurrency cur = IAPInventoryManager.GetCurrency(this.currency);
            // Get the Level Object
            IAPAbilityLevel lv = null;

            if (levels != null && level < levels.Count - 1)
            {
                lv = levels[level];
                // Check if enough currency
                // Consume package, delay the save process until next save
                if (cur != null && cur.Consume(lv.price, true))
                {
                    // Upgrade
                    _data.lv += 1;
                    result    = true;
                    //
                    Save();
                }
            }
            return(result);
        }
示例#13
0
        protected void UpdateGameLevelTemplate(IAPGameLevel obj, int subLevelIndex)
        {
            if (obj != null && obj.levels != null && subLevelIndex < obj.levels.Count)
            {
                IAPGameSubLevel lv = obj.levels[subLevelIndex];
                // Update images
                Image[] imgs = gameObject.GetComponentsInChildren <Image>();
                foreach (Image img in imgs)
                {
                    if (img.gameObject == gameObject || img.name == "icon")
                    {
                        // check if level locked
                        bool islocked = false;
                        if (obj.isLocked())
                        {
                            islocked = (obj.GetPropertyValue("locked", subLevelIndex) > 0);
                        }
                        if (islocked)
                        {
                            if (obj.lockedIcon != null)
                            {
                                img.sprite = obj.lockedIcon;
                            }
                        }
                        else
                        {
                            if (obj.icon != null)
                            {
                                img.sprite = obj.icon;
                            }
                        }
                    }
                    else if (img.name == "currency_icon")
                    {
                        IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                        if (currency != null && currency.icon != null)
                        {
                            img.sprite = currency.icon;
                        }
                    }
                    else if (img.name == "level")
                    {
                        if (lv != null && lv.icon != null)
                        {
                            img.sprite = lv.icon;
                        }
                    }
                }

                // Update Property Image
                IAPPropertyImage[] propImgs = gameObject.GetComponentsInChildren <IAPPropertyImage>();
                foreach (IAPPropertyImage propImg in propImgs)
                {
                    propImg.level = subLevelIndex;
                    propImg.obj   = obj;
                    propImg.UpdateImage();
                }

                // Update text
                Text[] txts = gameObject.GetComponentsInChildren <Text>();
                foreach (Text txt in txts)
                {
                    string name = txt.name.ToLower();
                    if (name == "level")
                    {
                        txt.text = (subLevelIndex + 1).ToString();
                    }
                    else
                    {
                        UpdateTextWithObject(txt, obj, name);
                    }
                }
            }
        }
示例#14
0
        protected void UpdateTemplate(IAPObject obj)
        {
            if (obj != null)
            {
                // Update images
                Image[] imgs = gameObject.GetComponentsInChildren <Image>();
                foreach (Image img in imgs)
                {
                    if (img.name == "icon" && obj.icon != null)
                    {
                        img.sprite = obj.icon;
                    }
                    else if (obj is IAPInventory && img.name == "lock_icon")
                    {
                        IAPInventory obji = (IAPInventory)obj;
                        img.gameObject.SetActive(obji.isLocked());
                    }
                    else if (obj is IAPInventory && img.name == "unlock_icon")
                    {
                        IAPInventory obji = (IAPInventory)obj;
                        img.gameObject.SetActive(!obji.isLocked());
                    }
                    else if (img.name == "currency_icon")
                    {
                        IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                        if (currency != null && currency.icon != null)
                        {
                            img.sprite = currency.icon;
                        }
                    }
                    else if (img.name == "level")
                    {
                        if (targetType == IAPType.Ability)
                        {
                            IAPAbilityLevel lv = (obj as IAPAbility).GetCurrentLevel();
                            if (lv != null && lv.icon != null)
                            {
                                img.sprite = lv.icon;
                            }
                        }
                    }
                }

                // For inventory
                if (obj is IAPInventory)
                {
                    IAPInventory inventory = obj as IAPInventory;
                    bool         locked    = inventory.isLocked();

                    Text[] inventoryText = gameObject.GetComponentsInChildren <Text>();
                    Debug.Log("UPDATE Tempate: " + uid + " obj: " + inventoryText.Length);
                    foreach (Text txt in inventoryText)
                    {
                        string name = txt.name.ToLower();
                        Debug.Log("UPDATE Text: " + name + " locked: " + locked);
                        if (name.StartsWith("locked"))
                        {
                            txt.enabled = locked;
                        }
                        else if (name.StartsWith("unlocked"))
                        {
                            txt.enabled = !locked;
                        }
                    }

                    Button[] inventoryBtns = gameObject.GetComponentsInChildren <Button>();
                    foreach (Button btn in inventoryBtns)
                    {
                        string name = btn.name.ToLower();
                        Debug.Log("UPDATE button: " + name + " locked: " + locked);
                        if (name.StartsWith("locked"))
                        {
                            btn.enabled = locked;
                        }
                        else if (name.StartsWith("unlocked"))
                        {
                            btn.enabled = !locked;
                        }
                    }

                    if (inventory.isLocked())
                    {
                        IAPUIUtility.SetButtonActive(true, gameObject, "locked_button");
                        IAPUIUtility.SetButtonActive(false, gameObject, "unlocked_button");
                    }
                    else
                    {
                        IAPUIUtility.SetButtonActive(false, gameObject, "locked_button");
                        IAPUIUtility.SetButtonActive(true, gameObject, "unlocked_button");
                    }
                }

                // Update text
                Text[] txts = gameObject.GetComponentsInChildren <Text>();
                // InAppPurchase
                if (targetType == IAPType.InAppPurchase)
                {
                    IAPPackage package = (obj as IAPPackage);
                    foreach (Text txt in txts)
                    {
                        string name = txt.name.ToLower();
                        if (name.StartsWith("content_"))
                        {
                            string[] ss = name.Split('_');
                            if (ss.Length == 3)
                            {
                                IAPPackageContent cc = package.GetContent(ss[1]);
                                if (cc != null)
                                {
                                    if (ss[2] == "amount")
                                    {
                                        txt.text = cc.amount.ToString();
                                    }
                                    else
                                    {
                                        UpdateTextWithObject(txt, cc.obj, ss[2]);
                                    }
                                }
                            }
                        }
                        else if (package.fetchFromStore)
                        {
                            UpdateTextWithPackage(txt, package);
                        }
                        else
                        {
                            UpdateTextWithObject(txt, obj, name);
                        }
                    }
                    // Ability
                }
                else if (targetType == IAPType.Ability)
                {
                    IAPAbility ability = (obj as IAPAbility);
                    foreach (Text txt in txts)
                    {
                        string name = txt.name.ToLower();
                        if (name == "price")
                        {
                            if (ability.isLocked() && ability.lockedString != null && ability.lockedString != "")
                            {
                                txt.text = ability.lockedString;
                            }
                            else
                            {
                                IAPAbilityLevel lv = ability.GetCurrentLevel();
                                if (lv != null)
                                {
                                    if (ability.level == ability.levels.Count - 1 && ability.maxString != null && ability.maxString != "")
                                    {
                                        txt.text = ability.maxString;
                                    }
                                    else
                                    {
                                        txt.text = lv.price.ToString();
                                    }
                                }
                            }
                        }
                        else
                        {
//							Debug.Log("text " + txt + " name: " + name);
                            UpdateTextWithObject(txt, obj, name);
                        }
                    }
                }
                else
                {
                    foreach (Text txt in txts)
                    {
                        UpdateTextWithObject(txt, obj, txt.name);
                    }
                }
            }
        }
示例#15
0
        // Use this for initialization
        void Start()
        {
            // hide the background
            Image background = gameObject.GetComponent <Image>();

            if (background != null)
            {
                background.enabled = false;
            }

            // Add item to viewport content
//			if(searchTag != null && searchTag != "")
//			if(searchTag != 0)
//			{
            if (itemType == IAPType.Inventory)
            {
                List <IAPInventory> inventoryList = IAPInventoryManager.GetInventoryListByTags(searchTag);

                if (inventoryList != null && itemTemplate != null)
                {
                    DoLayout(inventoryList.Count);
                    foreach (IAPInventory inventory in inventoryList)
                    {
                        GameObject  obj = Instantiate(itemTemplate);
                        IAPTemplate btn = obj.GetComponent <IAPTemplate>();
                        if (btn == null)
                        {
                            btn = obj.AddComponent <IAPTemplate>();
                        }

                        btn.targetType       = IAPType.Inventory;
                        btn.uid              = inventory.uid;
                        btn.useConfirmDialog = useConfirmDialog;
                        obj.transform.SetParent(_listView.transform);
                        obj.transform.localScale = new Vector3(1, 1, 1);
                    }
                }
            }
            else if (itemType == IAPType.InAppPurchase)
            {
                List <IAPPackage> packageList = IAPInventoryManager.GetPackageListByTags(searchTag);

                if (packageList != null && itemTemplate != null)
                {
                    DoLayout(packageList.Count);
                    foreach (IAPPackage package in packageList)
                    {
//							Debug.Log("package " + package.uid + " type: ");
                        GameObject  obj = Instantiate(itemTemplate);
                        IAPTemplate btn = obj.GetComponent <IAPTemplate>();
                        if (btn == null)
                        {
                            btn = obj.AddComponent <IAPTemplate>();
                        }

                        btn.targetType       = IAPType.InAppPurchase;
                        btn.uid              = package.uid;
                        btn.useConfirmDialog = useConfirmDialog;
                        obj.transform.SetParent(_listView.transform);
                        obj.transform.localScale = new Vector3(1, 1, 1);
                    }
                }
            }
            else if (itemType == IAPType.Ability)
            {
                List <IAPAbility> abilityList = IAPInventoryManager.GetAbilityListByTags(searchTag);
//					Debug.Log("abilityList: " + abilityList + " count : " + abilityList.Count);
                if (abilityList != null && itemTemplate != null)
                {
                    DoLayout(abilityList.Count);
                    foreach (IAPAbility ability in abilityList)
                    {
                        GameObject  obj = Instantiate(itemTemplate);
                        IAPTemplate btn = obj.GetComponent <IAPTemplate>();
                        if (btn == null)
                        {
                            btn = obj.AddComponent <IAPTemplate>();
                        }

                        btn.targetType       = IAPType.Ability;
                        btn.uid              = ability.uid;
                        btn.useConfirmDialog = useConfirmDialog;
                        obj.transform.SetParent(_listView.transform);
                        obj.transform.localScale = new Vector3(1, 1, 1);
                    }
                }
            }
            else if (itemType == IAPType.GameLevel)
            {
                IAPGameLevel gameLevel = IAPInventoryManager.GetGameLevel(uid);
                Debug.Log("GameLevel " + uid);
                if (gameLevel != null && itemTemplate != null)
                {
                    Debug.Log("GameLevel " + gameLevel.levels.Count);
                    DoLayout(gameLevel.levels.Count);
                    for (int i = 0; i < gameLevel.levels.Count; i++)
                    {
                        GameObject  obj = Instantiate(itemTemplate);
                        IAPTemplate btn = obj.GetComponent <IAPTemplate>();
                        if (btn == null)
                        {
                            btn = obj.AddComponent <IAPTemplate>();
                        }

                        btn.targetType       = IAPType.GameLevel;
                        btn.uid              = gameLevel.uid;
                        btn.level            = i;
                        btn.useConfirmDialog = useConfirmDialog;
                        obj.transform.SetParent(_listView.transform);
                        obj.transform.localScale = new Vector3(1, 1, 1);

                        // Add Events
                        IAPUIUtility.AddButtonCallback(obj, (GameObject go) => {
                            IAPGameSubLevel lv = gameLevel.levels[btn.level];
                            bool islocked      = false;
                            islocked           = (gameLevel.GetPropertyValue("locked", btn.level) > 0);
                            Debug.LogFormat("Lock {0}", islocked);
                            // if(gameLevel.isLocked()){
                            islocked = (gameLevel.GetPropertyValue("locked", btn.level) > 0);
                            // }
                            lv.locked = islocked;
                            // if(islocked&&lv.price>0){

                            // } else {
                            if (OnGameLevelSelect != null)
                            {
                                OnGameLevelSelect.Invoke(gameLevel, btn.level);
                            }
                            // }
                        }, "self,select_button");
                    }
                }
            }
//			}
        }
示例#16
0
        // Use this for initialization
        void Start()
        {
            if (uid != null)
            {
                // Purchase button action
                System.Action <GameObject> purchaseButtonCallback = null;

                //
                if (targetType == IAPType.Currency)
                {
                    IAPCurrency obj = IAPInventoryManager.GetCurrency(uid);

                    if (obj != null)
                    {
                        UpdateTemplate(obj);
                        IAPInventoryManager.OnCurrencyUpdated += handleCurrencyUpdated;
                        purchaseButtonCallback = (GameObject go) => {
                            handleButtonCallback(obj);
                        };
                    }
                }
                else if (targetType == IAPType.Inventory)
                {
                    IAPInventory obj = IAPInventoryManager.GetInventory(uid);

                    if (obj != null)
                    {
                        Debug.Log("UpdateTemplate " + obj.uid);
                        UpdateTemplate(obj);

                        IAPInventoryManager.OnInventoryUpdated += handleInventoryUpdated;
                        // Debug.Log("obj.available: " + obj.available);
                        // Check if inventory available
                        // if(obj.available==0){
                        //  IAPUIUtility.SetButtonActive(false,gameObject,"purchase_button");
                        // } else {
                        purchaseButtonCallback = (GameObject go) => {
                            // Debug.Log("213123");
                            handleButtonCallback(obj);
                        };
                        // }
                    }
                }
                else if (targetType == IAPType.Ability)
                {
                    IAPAbility obj = IAPInventoryManager.GetAbility(uid);

                    if (obj != null)
                    {
                        UpdateTemplate(obj);

                        IAPInventoryManager.OnAbilityUpdated += handleAbilityUpdated;
                        IAPAbility ability = (obj as IAPAbility);
                        if (ability.level < ability.levels.Count - 1)
                        {
                            // Get the currency
                            IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                            purchaseButtonCallback = (GameObject go) => {
                                if (useConfirmDialog)
                                {
                                    if (currency != null)
                                    {
                                        // Construct confirm msg
                                        IAPAbilityLevel lv  = ability.GetCurrentLevel();
                                        string          msg = IAPInventoryManager.uiSettings.abilityConfirmString.Replace("%title%", obj.title);
                                        msg = msg.Replace("%description%", lv.description.ToString());
                                        msg = msg.Replace("%price%", lv.price.ToString());
                                        msg = msg.Replace("%currency_title%", currency.title);
                                        msg = msg.Replace("%currency_description%", currency.description);
                                        // Show confirm diaglog
                                        IAPInventoryManager.ShowConfirmDialog(msg,
                                                                              delegate(IAPDialog diag){
                                            ability.Upgrade();
                                        }
                                                                              );
                                    }
                                }
                                else
                                {
                                    // Purchase the package
                                    ability.Upgrade();
                                }
                            };
                        }
                        else
                        {
                            // Disable the button
                            IAPUIUtility.SetButtonEnabled(gameObject, false);
                        }
                    }
                }
                else if (targetType == IAPType.InAppPurchase)
                {
                    IAPPackage obj = IAPInventoryManager.GetPackage(uid);

                    if (obj != null)
                    {
                        // UpdateTemplate(obj);

                        // if((obj.productType==IAPProductType.NonConsumable || obj.productType==IAPProductType.Subscription) && obj.amount>0)
                        // {
                        //  IAPUIUtility.SetButtonEnabled(gameObject,false,"purchase_button");

                        // } else {

                        if (obj.fetchFromStore)
                        {
                            // For Real Money IAP

                            IAPInventoryManager.OnIAPInitialized += handleOnIAPInitialized;

                            // Check if IAP initialized
                            if (IAPManager.IsInitialized())
                            {
                                Debug.LogFormat("uid: {0} type: {1}  amount: {2}", uid, obj.productType, obj.amount);

                                if ((obj.productType == IAPProductType.NonConsumable || obj.productType == IAPProductType.Subscription) && obj.amount > 0)
                                {
                                    IAPUIUtility.SetButtonEnabled(gameObject, false, "purchase_button");
                                }
                                else
                                {
                                    purchaseButtonCallback = (GameObject go) => {
                                        IAPUIUtility.SetButtonEnabled(gameObject, false, "purchase_button");
                                        obj.Purchase(handlePackageUpdated);
                                    };
                                }
                            }
                            else
                            {
                                IAPUIUtility.SetButtonEnabled(gameObject, false, "purchase_button");
                                IAPInventoryManager.InitIAPManager();
                            }
                        }
                        else
                        {
                            // For Virtual Currency IAP

                            purchaseButtonCallback = (GameObject go) => {
                                if (useConfirmDialog)
                                {
                                    // Construct confirm msg
                                    IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                                    if (currency != null)
                                    {
                                        string msg = IAPInventoryManager.uiSettings.iapConfirmString.Replace("%title%", obj.title);
                                        msg = msg.Replace("%description%", obj.description);
                                        msg = msg.Replace("%price%", obj.price.ToString());
                                        msg = msg.Replace("%currency_title%", currency.title);
                                        msg = msg.Replace("%currency_description%", currency.description);
                                        // Show confirm diaglog
                                        IAPInventoryManager.ShowConfirmDialog(msg,
                                                                              delegate(IAPDialog diag){
                                            // Purchase the package
                                            obj.Purchase();
                                        }
                                                                              );
                                    }
                                }
                                else
                                {
                                    // Purchase the package
                                    obj.Purchase();
                                }
                            };
                        }
                        // }

                        UpdateTemplate(obj);
                    }
                }
                else if (targetType == IAPType.GameLevel && level != -1)
                {
                    IAPGameLevel obj = IAPInventoryManager.GetGameLevel(uid);
                    IAPInventoryManager.OnGameLevelUpdated += handleGameLevelUpdated;

                    if (obj != null)
                    {
                        UpdateGameLevelTemplate(obj, level);

                        // IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
// Debug.LogFormat("obj {0}",level);

                        // purchaseButtonCallback=(GameObject go)=>{
                        IAPUIUtility.AddButtonCallback(gameObject, (GameObject go) => {
                            IAPGameSubLevel subLevel = obj.levels[level];
                            bool islocked            = (obj.GetPropertyValue("locked", level) > 0);
                            // Debug.LogFormat("obj {0} {1} {2}", level, useConfirmDialog, obj.currency);

                            // Check if price valid and
                            if (subLevel.price > 0 && islocked)
                            {
                                if (useConfirmDialog)
                                {
                                    // Construct confirm msg
                                    IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                                    if (currency != null)
                                    {
                                        string msg = IAPInventoryManager.uiSettings.iapConfirmString.Replace("%title%", obj.title);
                                        msg        = msg.Replace("%description%", obj.description + " Level " + level.ToString());
                                        msg        = msg.Replace("%price%", subLevel.price.ToString());
                                        msg        = msg.Replace("%currency_title%", currency.title);
                                        msg        = msg.Replace("%currency_description%", currency.description);
                                        // Show confirm diaglog
                                        IAPInventoryManager.ShowConfirmDialog(msg,
                                                                              delegate(IAPDialog diag){
                                            // Check if enough currency
                                            if (currency != null && currency.Consume(subLevel.price))
                                            {
                                                // obj.SetPropertyValue("locked",level,1);
                                                obj.UnlockLevel(level);
                                            }
                                        }
                                                                              );
                                    }
                                }
                                else
                                {
                                    // Get the currency
                                    IAPCurrency currency = IAPInventoryManager.GetCurrency(obj.currency);
                                    // Check if enough currency
                                    if (currency != null && currency.Consume(subLevel.price))
                                    {
                                        obj.UnlockLevel(level);
                                    }
                                }
                            }
                        }, "self,select_button");
                    }
                }

                // Add the button callback to purchase_button
                if (purchaseButtonCallback != null)
                {
                    IAPUIUtility.AddButtonCallback(gameObject, purchaseButtonCallback, "purchase_button");
                }
            }
        }