public static IEnumerable <int> AirAttack(int customOrder) { Log.Info($"[{AllInOnePushDeploy.AttackName}] 'Air Attack' has been activated"); DeploymentMethods.wallbreaker = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.WallBreaker); DeploymentMethods.balloon = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Balloon); DeploymentMethods.minion = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Minion); DeploymentMethods.babyDragon = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.BabyDragon); DeploymentMethods.dragon = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Dragon); DeploymentMethods.lava = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.LavaHound); DeploymentMethods.spells = AllInOnePushDeploy.deployElements.Extract(DeployElementType.Spell); DeploymentMethods.lightingSpell = DeploymentMethods.spells.ExtractOne(DeployId.Lightning); DeploymentMethods.eq = DeploymentMethods.spells.Extract(u => u.Id == DeployId.Earthquake); DeploymentMethods.hasteSpell = DeploymentMethods.spells.Extract(u => u.Id == DeployId.Haste); DeploymentMethods.rageSpell = DeploymentMethods.spells.Extract(u => u.Id == DeployId.Rage); DeploymentMethods.freezeSpell = DeploymentMethods.spells.ExtractOne(DeployId.Freeze); DeploymentMethods.clanCastle = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.ClanCastle); DeploymentMethods.heroes = AllInOnePushDeploy.deployElements.Extract(x => x.IsHero); DeploymentMethods.warden = DeploymentMethods.heroes.ExtractOne(u => u.ElementType == DeployElementType.HeroWarden); DeploymentMethods.queen = DeploymentMethods.heroes.ExtractOne(DeployId.Queen); DeploymentMethods.dragonAttack = DeploymentMethods.dragon?.Count >= 5 ? true : false; DeploymentMethods.babyLoon = DeploymentMethods.babyDragon?.Count >= 7 ? true : false; DeploymentMethods.lavaloonion = DeploymentMethods.balloon?.Count >= 15 ? true : false; if (DeploymentMethods.lightingSpell?.Count >= 2) { foreach (var t in DeploymentMethods.ZapAirDefense()) { yield return(t); } } if (DeploymentMethods.lightingSpell?.Count >= 2) { foreach (var t in DeploymentMethods.ZapAirDefense()) { yield return(t); } } if (customOrder == 1) { foreach (var t in DeploymentMethods.DeployInCustomOrderAir(AllInOnePushDeploy.CustomOrderList)) { yield return(t); } } else { if (DeploymentMethods.babyLoon) { foreach (var t in DeploymentMethods.AirFunnelling()) { yield return(t); } foreach (var t in DeploymentMethods.DeployBabyDragons()) { yield return(t); } foreach (var t in DeploymentMethods.DeployBalloons()) { yield return(t); } foreach (var t in DeploymentMethods.DeployLava()) { yield return(t); } } else if (DeploymentMethods.dragonAttack) { foreach (var t in DeploymentMethods.AirFunnelling()) { yield return(t); } foreach (var t in DeploymentMethods.DeployLava()) { yield return(t); } foreach (var t in DeploymentMethods.DeployDragons()) { yield return(t); } foreach (var t in DeploymentMethods.DeployBalloons()) { yield return(t); } } else if (DeploymentMethods.lavaloonion) { foreach (var t in DeploymentMethods.DeployBalloons()) { yield return(t); } foreach (var t in DeploymentMethods.DeployLava()) { yield return(t); } if (DeploymentMethods.clanCastle?.Count > 0) { foreach (var t in Deploy.AtPoint(DeploymentMethods.clanCastle, AllInOnePushDeploy.Origin)) { yield return(t); } } foreach (var t in DeploymentMethods.DeployDragons()) { yield return(t); } foreach (var t in DeploymentMethods.DeployBabyDragons()) { yield return(t); } } } if (DeploymentMethods.clanCastle?.Count > 0) { foreach (var t in Deploy.AtPoint(DeploymentMethods.clanCastle, AllInOnePushDeploy.Origin)) { yield return(t); } } if (DeploymentMethods.warden?.Count > 0) { foreach (var t in Deploy.AtPoint(DeploymentMethods.warden, AllInOnePushDeploy.Origin)) { yield return(t); } DeploymentMethods.isWarden = true; } else { DeploymentMethods.isWarden = false; } // Start with haste <IF> it's more than or equal rages count <ELSE> start with rages. var firstSpell = DeploymentMethods.hasteSpell?.Sum(u => u.Count) >= DeploymentMethods.rageSpell?.Sum(u => u.Count) ? DeploymentMethods.hasteSpell : DeploymentMethods.rageSpell; var secondSpell = firstSpell == DeploymentMethods.hasteSpell ? DeploymentMethods.rageSpell : DeploymentMethods.hasteSpell; var firstSpellUnit = firstSpell.FirstOrDefault()?.Count > 0 ? firstSpell.FirstOrDefault() : firstSpell.LastOrDefault(); var secondSpellUnit = secondSpell.FirstOrDefault()?.Count > 0 ? secondSpell.FirstOrDefault() : secondSpell.LastOrDefault(); var line = AllInOnePushDeploy.FirstHasteLine; // Todo: deploy rages for TH8, 2 on the first line then 1 on the second line. if (firstSpellUnit?.Count > 0) { var count = firstSpellUnit.Count >= 3 ? 3 : firstSpellUnit.Count; foreach (var t in Deploy.AlongLine(firstSpellUnit, line.Item1, line.Item2, count, count, 250)) { yield return(t); } line = AllInOnePushDeploy.FirstRageLine; } foreach (var t in DeploymentMethods.DeployMinions()) { yield return(t); } yield return(4500); if (secondSpellUnit?.Count > 0) { var count = secondSpellUnit.Count >= 3 ? 3 : secondSpellUnit.Count; foreach (var t in Deploy.AlongLine(secondSpellUnit, line.Item1, line.Item2, count, count, 250)) { yield return(t); } line = AllInOnePushDeploy.SecondHasteLine; } else { if (firstSpell?.Sum(u => u.Count) > 0) { firstSpellUnit = firstSpell.FirstOrDefault().Count > 0 ? firstSpell.FirstOrDefault() : firstSpell.LastOrDefault(); var count = firstSpellUnit.Count >= 3 ? 3 : firstSpellUnit.Count; foreach (var t in Deploy.AlongLine(firstSpellUnit, line.Item1, line.Item2, count, count, 250)) { yield return(t); } line = AllInOnePushDeploy.SecondHasteLine; } } // Use freeze if inferno is found if (DeploymentMethods.freezeSpell?.Count > 0) { var infernos = InfernoTower.Find(); // Find and watch inferno towers if (infernos != null) { foreach (var inferno in infernos) { inferno.FirstActivated += DropFreeze; inferno.StartWatching(); } } } if (DeploymentMethods.isWarden) { DeploymentMethods.warden.Select(); DeploymentMethods.warden.Select(); } yield return(4000); if (firstSpell?.Sum(u => u.Count) > 0) { foreach (var unit in firstSpell) { var count = unit.Count >= 3 ? 3 : unit.Count; foreach (var t in Deploy.AlongLine(unit, line.Item1, line.Item2, count, count, 250)) { yield return(t); } } line = AllInOnePushDeploy.SecondRageLine; } if (secondSpell?.Sum(u => u.Count) > 0) { secondSpellUnit = secondSpell.FirstOrDefault().Count > 0 ? secondSpell.FirstOrDefault() : secondSpell.LastOrDefault(); foreach (var unit in secondSpell) { var count = unit.Count >= 3 ? 3 : unit.Count; foreach (var t in Deploy.AlongLine(unit, line.Item1, line.Item2, count, count, 250)) { yield return(t); } } } foreach (var t in DeploymentMethods.DeployWB()) { yield return(t); } yield return(4000); if (DeploymentMethods.heroes.Any()) { foreach (var hero in DeploymentMethods.heroes.Where(u => u.Count > 0)) { foreach (var t in Deploy.AtPoint(hero, AllInOnePushDeploy.Origin)) { yield return(t); } } Deploy.WatchHeroes(DeploymentMethods.heroes); } if (DeploymentMethods.queen?.Count > 0) { foreach (var t in Deploy.AtPoint(DeploymentMethods.queen, AllInOnePushDeploy.Origin)) { yield return(t); } Deploy.WatchHeroes(new List <DeployElement> { DeploymentMethods.queen }); } foreach (var w in DeploymentMethods.DeployUnusedTroops()) { yield return(w); } }
public static IEnumerable <int> GroundAttack(int customOrder) { DeploymentMethods.clanCastle = AllInOnePushDeploy.deployElements.ExtractOne(u => u.ElementType == DeployElementType.ClanTroops); DeploymentMethods.eq = AllInOnePushDeploy.deployElements.Extract(u => u.Id == DeployId.Earthquake); DeploymentMethods.rageSpell = AllInOnePushDeploy.deployElements.Extract(u => u.Id == DeployId.Rage); DeploymentMethods.healSpell = AllInOnePushDeploy.deployElements.Extract(u => u.Id == DeployId.Heal); DeploymentMethods.freezeSpell = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Freeze); DeploymentMethods.jumpSpell = AllInOnePushDeploy.deployElements.Extract(u => u.Id == DeployId.Jump); DeploymentMethods.hasteSpell = AllInOnePushDeploy.deployElements.Extract(u => u.Id == DeployId.Haste); DeploymentMethods.poison = AllInOnePushDeploy.deployElements.Extract(u => u.Id == DeployId.Poison); //tanks DeploymentMethods.giant = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Giant); DeploymentMethods.golem = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Golem); //main troops DeploymentMethods.wallbreaker = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.WallBreaker); DeploymentMethods.bowler = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Bowler); DeploymentMethods.witch = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Witch); DeploymentMethods.healer = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Healer); DeploymentMethods.wizard = AllInOnePushDeploy.deployElements.ExtractOne(DeployId.Wizard); DeploymentMethods.spells = AllInOnePushDeploy.deployElements.Extract(DeployElementType.Spell); DeploymentMethods.heroes = AllInOnePushDeploy.deployElements.Extract(x => x.IsHero); DeploymentMethods.warden = DeploymentMethods.heroes.ExtractOne(u => u.ElementType == DeployElementType.HeroWarden); DeploymentMethods.queen = DeploymentMethods.heroes.ExtractOne(DeployId.Queen); // Drop earthquake foreach (var t in DeploymentMethods.DropEQ()) { yield return(t); } if (customOrder == 1) { foreach (var t in DeploymentMethods.DeployInCustomOrder(AllInOnePushDeploy.CustomOrderList)) { yield return(t); } } else { // Check if queen walk is active var QW = AllInOnePushDeploy.QWSettings == 1 && DeploymentMethods.queen?.Count > 0 && DeploymentMethods.healer?.Count >= AllInOnePushDeploy.HealerOnQWSettings ? true : false; if (QW) { foreach (var s in DeploymentMethods.DeployFunnlling()) { yield return(s); } foreach (var s in DeploymentMethods.DeployGolems()) { yield return(s); } } else { foreach (var s in DeploymentMethods.DeployGolems()) { yield return(s); } foreach (var s in DeploymentMethods.DeployFunnlling()) { yield return(s); } } foreach (var s in DeploymentMethods.DeployGiants()) { yield return(s); } foreach (var s in DeploymentMethods.DeployHeroes()) { yield return(s); } foreach (var s in DeploymentMethods.DeployWB()) { yield return(s); } foreach (var s in DeploymentMethods.DeployNormalTroops()) { yield return(s); } } // Screen Shots for spells if debug mode is on if (AllInOnePushDeploy.Debug) { AllInOnePushHelper.DebugEQpells(); AllInOnePushHelper.DebugSpells(); } // Deploy spells foreach (var s in DeploymentMethods.DeployJump()) { yield return(s); } foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.rageSpell, AllInOnePushDeploy.FirstRagePoint)) { yield return(s); } yield return(2000); if (DeploymentMethods.hasteSpell.Sum(u => u.Count) > 0) { foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.hasteSpell, AllInOnePushDeploy.FirstHealPoint)) { yield return(s); } } else { foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.healSpell, AllInOnePushDeploy.FirstHealPoint)) { yield return(s); } } if (DeploymentMethods.poison?.Count > 0) { foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.poison, AllInOnePushDeploy.FirstHealPoint)) { yield return(s); } } // Use freeze if inferno is found if (DeploymentMethods.freezeSpell?.Count > 0) { var infernos = InfernoTower.Find(); // find and watch inferno towers if (infernos != null) { foreach (var inferno in infernos) { inferno.FirstActivated += DropFreeze; inferno.StartWatching(); } } } yield return(4000); // activate Grand Warden apility if (DeploymentMethods.isWarden) { DeploymentMethods.warden.Select(); DeploymentMethods.warden.Select(); } foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.rageSpell, AllInOnePushDeploy.SecondRagePoint)) { yield return(s); } foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.healSpell, AllInOnePushDeploy.SecondRagePoint)) { yield return(s); } yield return(1000); foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.rageSpell, AllInOnePushDeploy.FirstHastePoint)) { yield return(s); } foreach (var s in DeploymentMethods.DeploySpell(DeploymentMethods.hasteSpell, AllInOnePushDeploy.FirstHastePoint)) { yield return(s); } // Start watching heroes if (DeploymentMethods.watchHeroes == true) { Deploy.WatchHeroes(DeploymentMethods.heroes); } if (DeploymentMethods.watchQueen == true) { Deploy.WatchHeroes(new List <DeployElement> { DeploymentMethods.queen }); } }