Пример #1
0
        private void ExecuteAfterAttackAdditionalEffects(IPokemon pokemon, IAttack attack, IPokemon target)
        {
            if (AdditionalEffectAvailability.ContainsEffectType(attack.AdditionalEffects, typeof(CritBoosting)))
            {
                if (attack.AdditionalEffects.Any(e => e.ID == (int)AdditionalEffectEnum.BoostCriticalSelf))
                {
                    CritBoosting critBoosting = attack.AdditionalEffects.First(e => e.ID == (int)AdditionalEffectEnum.BoostCriticalSelf) as CritBoosting;
                    if (pokemon.IsEnergyFocused == false)
                    {
                        pokemon.IsEnergyFocused = true;
                    }
                    else
                    {
                        _battleLogController.SetText($"{pokemon.Name} is already focused");
                    }
                }
                else if (attack.AdditionalEffects.Any(e => e.ID == (int)AdditionalEffectEnum.BoostCriticalTarget))
                {
                    CritBoosting critBoosting = attack.AdditionalEffects.First(e => e.ID == (int)AdditionalEffectEnum.BoostCriticalTarget) as CritBoosting;
                    if (target.IsEnergyFocused == false)
                    {
                        target.IsEnergyFocused = true;
                    }
                    else
                    {
                        _battleLogController.SetText($"{target.Name} is already focused");
                    }
                }
            }

            if (AdditionalEffectAvailability.ContainsEffectType(attack.AdditionalEffects, typeof(StatusChanger)))
            {
                var statusChanger = attack.AdditionalEffects.First();


                if (attack.AdditionalEffects.Any(e => e.ID == (int)AdditionalEffectEnum.PoisonWeak ||
                                                 e.ID == (int)AdditionalEffectEnum.PoisonMid ||
                                                 e.ID == (int)AdditionalEffectEnum.PoisonHigh ||
                                                 e.ID == (int)AdditionalEffectEnum.PoisonMax))
                {
                    if (ChanceCalculator.CalculateChance((int)statusChanger.PrimaryParameter, 100))
                    {
                        _battleLogController.SetText($"{target.Name} is now poisoned");
                        target.Condition = Condition.PSN;
                    }
                }

                if (attack.AdditionalEffects.Any(e => e.ID == (int)AdditionalEffectEnum.BurnWeak ||
                                                 e.ID == (int)AdditionalEffectEnum.BurnMaxSelf))
                {
                    if (ChanceCalculator.CalculateChance((int)statusChanger.PrimaryParameter, 100))
                    {
                        if (statusChanger.IsOnSelf)
                        {
                            pokemon.Condition = Condition.BRN;
                            _battleLogController.SetText($"{pokemon.Name} is now burning");
                        }
                        else
                        {
                            pokemon.Condition = Condition.BRN;
                            _battleLogController.SetText($"{pokemon.Name} is now burning");
                        }
                    }
                }

                if (attack.AdditionalEffects.Any(e => e.ID == (int)AdditionalEffectEnum.ConfusionWeak ||
                                                 e.ID == (int)AdditionalEffectEnum.ConfusionMax))
                {
                    if (ChanceCalculator.CalculateChance((int)statusChanger.PrimaryParameter, 100))
                    {
                        if (statusChanger.IsOnSelf)
                        {
                            pokemon.IsConfused = true;
                            _battleLogController.SetText($"{pokemon} is now confused");
                        }
                        else
                        {
                            target.IsConfused = true;
                            _battleLogController.SetText($"{target} is now confused");
                        }
                    }
                }
            }
        }
Пример #2
0
        public static IAdditionalEffect CreateAdditionalEffect(AdditionalEffect additionalEffectRow)
        {
            IAdditionalEffect additionalEffect = null;
            int id = additionalEffectRow.ID;

            switch (id)
            {
            case (int)AdditionalEffectEnum.SameDamageLow:
                additionalEffect = new AlwaysSameDamage();
                break;

            case (int)AdditionalEffectEnum.SameDamageHigh:
                additionalEffect = new AlwaysSameDamage();
                break;

            case (int)AdditionalEffectEnum.SameDamageLevel:
                additionalEffect = new AlwaysSameDamage();
                break;

            case (int)AdditionalEffectEnum.DrainLife:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.LeechLife:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.Fast:
                additionalEffect = new FastAttack();
                break;

            case (int)AdditionalEffectEnum.AlwaysHits:
                additionalEffect = new AlwaysHits();
                break;

            case (int)AdditionalEffectEnum.HighCriticalChance:
                additionalEffect = new HighCriticalRatio();
                break;

            case (int)AdditionalEffectEnum.BoostCriticalSelf:
                additionalEffect = new CritBoosting();
                break;

            case (int)AdditionalEffectEnum.BoostCriticalTarget:
                additionalEffect = new CritBoosting();
                break;

            case (int)AdditionalEffectEnum.ChargeLow:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.ChargeHigh:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.RechargeLow:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.RechargeHigh:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.TwoToFiveHits:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.SwapPokemonMax:
                additionalEffect = new AdditionalEffect();
                break;

            case (int)AdditionalEffectEnum.PoisonWeak:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.PoisonMid:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.PoisonHigh:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.PoisonMax:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.BurnWeak:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.BurnMaxSelf:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.ParalysisWeak:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.ParalysisMax:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.ParalysisMaxWeak:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.ParalysisMaxSelf:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.SleepMax:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.SleepMaxSelf:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.FlinchWeak:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.ConfusionWeak:
                additionalEffect = new StatusChanger();
                break;

            case (int)AdditionalEffectEnum.ConfusionMax:
                additionalEffect = new StatusChanger();
                break;

            default:
                additionalEffect = new AdditionalEffect();
                break;
            }

            additionalEffect.SetAdditionalEffectProperties(additionalEffectRow);

            return(additionalEffect);
        }