Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
        }