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"); } } } } }
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); }