/// <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); }
// 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); } } ); } } }
// 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); } } }
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); }
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); } } }
// 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); } } }
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; } }
// 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); } } } }
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(); } }
/// <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); }
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); } } } }
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); } } } }
// 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"); } } } // } }
// 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"); } } }