public void TryAndGrantReward(RewardVO vo, RewardManager.SuccessCallback onSuccess, object cookie, bool checkCurrencyCapacity) { RewardabilityResult rewardabilityResult = RewardUtils.CanPlayerHandleReward(this.cp, vo, checkCurrencyCapacity); int num = ++this.callbackCounter; RewardTag rewardTag = new RewardTag(); rewardTag.Vo = vo; rewardTag.GlobalSuccess = onSuccess; rewardTag.Cookie = cookie; this.rewardTags.Add(num, rewardTag); if (rewardabilityResult.CanAward) { this.GrantReward(num); } else { string message = Service.Lang.Get(rewardabilityResult.Reason, new object[0]); string title = Service.Lang.Get("INVENTORY_NO_ROOM_TITLE", new object[0]); if (rewardabilityResult.Reason == "INVENTORY_NO_ROOM") { YesNoScreen.ShowModal(title, message, false, new OnScreenModalResult(this.ForceCurrencyRewardUsage), rewardTag); } else { AlertScreen.ShowModal(false, null, message, null, null); } } }
public static RewardabilityResult CanPlayerHandleReward(CurrentPlayer cp, RewardVO reward, bool checkCurrencyCapacity) { RewardabilityResult rewardabilityResult = new RewardabilityResult(); IDataController dataController = Service.Get <IDataController>(); if (reward.TroopRewards != null) { int num = 0; int num2 = cp.Inventory.Troop.GetTotalStorageCapacity() - cp.Inventory.Troop.GetTotalStorageAmount(); for (int i = 0; i < reward.TroopRewards.Length; i++) { string[] array = reward.TroopRewards[i].Split(new char[] { ':' }); TroopTypeVO troopTypeVO = dataController.Get <TroopTypeVO>(array[0]); num += troopTypeVO.Size * Convert.ToInt32(array[1], CultureInfo.InvariantCulture); } if (num > num2) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "NOT_ENOUGH_HOUSING"; } } if (reward.HeroRewards != null) { int num = 0; int num2 = cp.Inventory.Hero.GetTotalStorageCapacity() - cp.Inventory.Hero.GetTotalStorageAmount(); for (int i = 0; i < reward.HeroRewards.Length; i++) { string[] array = reward.HeroRewards[i].Split(new char[] { ':' }); TroopTypeVO troopTypeVO2 = dataController.Get <TroopTypeVO>(array[0]); num += troopTypeVO2.Size * Convert.ToInt32(array[1], CultureInfo.InvariantCulture); } if (num > num2) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "NOT_ENOUGH_SPACE"; } } if (reward.SpecialAttackRewards != null) { int num = 0; int num2 = cp.Inventory.SpecialAttack.GetTotalStorageCapacity() - cp.Inventory.SpecialAttack.GetTotalStorageAmount(); for (int i = 0; i < reward.SpecialAttackRewards.Length; i++) { string[] array = reward.SpecialAttackRewards[i].Split(new char[] { ':' }); SpecialAttackTypeVO specialAttackTypeVO = dataController.Get <SpecialAttackTypeVO>(array[0]); num += specialAttackTypeVO.Size * Convert.ToInt32(array[1], CultureInfo.InvariantCulture); } if (num > num2) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "NOT_ENOUGH_SPACE"; } } if (reward.CurrencyRewards != null & checkCurrencyCapacity) { int num3 = cp.CurrentReputationAmount; int maxReputationAmount = cp.MaxReputationAmount; int num4 = cp.CurrentContrabandAmount; int maxContrabandAmount = cp.MaxContrabandAmount; int num5 = cp.CurrentMaterialsAmount; int maxMaterialsAmount = cp.MaxMaterialsAmount; int num6 = cp.CurrentCreditsAmount; int maxCreditsAmount = cp.MaxCreditsAmount; for (int i = 0; i < reward.CurrencyRewards.Length; i++) { string[] array = reward.CurrencyRewards[i].Split(new char[] { ':' }); if (array[0] == "contraband") { num4 += int.Parse(array[1]); if (num4 > maxContrabandAmount) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "INVENTORY_NO_ROOM"; return(rewardabilityResult); } } if (array[0] == "reputation") { num3 += int.Parse(array[1]); if (num3 > maxReputationAmount) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "INVENTORY_NO_ROOM"; return(rewardabilityResult); } } if (array[0] == "materials") { num5 += int.Parse(array[1]); if (num5 > maxMaterialsAmount) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "INVENTORY_NO_ROOM"; return(rewardabilityResult); } } if (array[0] == "credits") { num6 += int.Parse(array[1]); if (num6 > maxCreditsAmount) { rewardabilityResult.CanAward = false; rewardabilityResult.Reason = "INVENTORY_NO_ROOM"; return(rewardabilityResult); } } } } return(rewardabilityResult); }