Beispiel #1
0
        public void Purchase()
        {
            if (IsPurchased)
            {
                return;
            }

            IsPurchased = true;
            OnPurchase.Invoke();
            EnableChildren();
        }
    private void TryChangePlayerStats(GameObject player)
    {
        Health      playerHealth = player.GetComponent <Health>();
        PlayerStats playerStats  = player.GetComponent <PlayerStats>();

        // Only grant them the stat changes if they can afford the item
        if (playerStats.money + MoneyAmount >= 0)
        {
            if (OnPurchase != null)
            {
                OnPurchase.Invoke(this.gameObject);
            }

            // Apply all stat/health changes if non-zero
            if (MaxHealthBuff != 0)
            {
                playerHealth.ChangeMaxHealth(MaxHealthBuff);
            }
            if (HealthRegained != 0)
            {
                playerHealth.ChangeHealth(HealthRegained);
            }
            if (AttackStatBuff != 0)
            {
                playerStats.ChangeAttackStat(AttackStatBuff);
            }
            if (DefenseStatBuff != 0)
            {
                playerStats.ChangeDefenseStat(DefenseStatBuff);
            }
            if (SpeedStatBuff != 0)
            {
                playerStats.ChangeSpeedStat(SpeedStatBuff);
            }
            if (MoneyAmount != 0)
            {
                playerStats.ChangeMoneySum(MoneyAmount);
            }
            Destroy(this.gameObject);
        }
    }
        public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
        {
            var iapItem = IAPItems.Find(item => item.ID == args.purchasedProduct.definition.id);

            if (iapItem == null)
            {
                OnPurchaseFail?.Invoke();
                Debug.LogError("ProcessPurchase did not find item");
                return(PurchaseProcessingResult.Pending);
            }

            Debug.Log($"ProcessPurchase: PASS. Product: '{args.purchasedProduct.definition.id}'");

            iapItem.OnBuy();

            OnPurchaseSuccess?.Invoke();
            OnPurchaseSuccess = null;

            OnPurchase?.Invoke(args.purchasedProduct.definition.id, args.purchasedProduct.metadata.localizedPrice, args.purchasedProduct.metadata.isoCurrencyCode, args.purchasedProduct.hasReceipt ? args.purchasedProduct.receipt : null);
            return(PurchaseProcessingResult.Complete);
        }
Beispiel #4
0
 public static void PurchaseItem(int price)
 {
     Debug.Log("item purchased for: " + price);
     OnPurchase?.Invoke(price);
 }
Beispiel #5
0
        public async Task <InAppBillingPurchase> PurchaseItemAsync(ItemType itemType, string productId, bool restoreOnly)
        {
            if (isPurchasing)
            {
                return(null);
            }
            isPurchasing = true;
            var billing = CrossInAppBilling.Current;

            try
            {
                var connected = await billing.ConnectAsync();

                if (!connected)
                {
                    //we are offline or can't connect, don't try to purchase
                    Debug.WriteLine("PurchaseItem: Not Connected");
                    isPurchasing = false;
                    return(null);
                }

                //restore purchases
                try
                {
                    var existing = (await billing.GetPurchasesAsync(itemType)).ToList();
                    if (existing != null)
                    {
                        var item = existing.FirstOrDefault(x => x.ProductId == productId);
                        if (item != null &&
                            (item.State == PurchaseState.Purchased ||
                             item.State == PurchaseState.Restored))
                        {
                            isPurchasing = false;
                            return(item);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine($"PurchaseItem: Existing error: {ex}");
                }

                if (restoreOnly)
                {
                    return(null);
                }

                //perform purchase
                var purchase = await billing.PurchaseAsync(productId, itemType);

                //possibility that a null came through.
                if (purchase == null)
                {
                    //did not purchase
                    Debug.WriteLine("PurchaseItem: Did not purchase");
                }
                else if (purchase.State == PurchaseState.Purchased)
                {
                    if (await billing.AcknowledgePurchaseAsync(purchase.PurchaseToken))
                    {
                        //purchased!
                        OnPurchase?.Invoke(this, purchase);

                        Debug.WriteLine("PurchaseItem: True");
                        return(purchase);
                    }
                    else
                    {
                        Debug.WriteLine($"PurchaseItem: OK but didn't acknowledge!");
                    }
                }
            }
            catch (InAppBillingPurchaseException purchaseEx)
            {
                //Billing Exception handle this based on the type
                Debug.WriteLine("Purchase Error: " + purchaseEx);
            }
            catch (Exception ex)
            {
                //Something else has gone wrong, log it
                Debug.WriteLine("Issue connecting: " + ex);
            }
            finally
            {
                await billing.DisconnectAsync();

                isPurchasing = false;
            }

            Debug.WriteLine("PurchaseItem: False");
            return(null);
        }