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); }
public static void PurchaseItem(int price) { Debug.Log("item purchased for: " + price); OnPurchase?.Invoke(price); }
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); }