Пример #1
0
        public ClanBossBattle(ClanBoss.Level level, List <ChampionInBattle> championsInBattle)
        {
            ClanBossInBattle clanBoss = new ClanBossInBattle(ClanBoss.Get(level));

            this.initialState  = new CBBState(new List <ChampionInBattle>(championsInBattle), clanBoss);
            this.GetStunTarget = FindSlowBoi;
        }
Пример #2
0
 static void PrintEffectiveSpeeds(List <Champion.CreateChampion> ccs, ClanBoss.Level level)
 {
     foreach (Champion.CreateChampion cc in ccs)
     {
         Champion c = cc(level).Item1;
         Console.WriteLine("{0}: {1}", c.Name, c.EffectiveSpeed);
     }
 }
Пример #3
0
        static void TestCounterattackTeam(ClanBoss.Level clanBossLevel, List <Champion.CreateChampion> championCreators, ClanBossBattle.StunTargetExtractor getStunTarget)
        {
            List <ChampionInBattle> cibs = new List <ChampionInBattle>();

            foreach (Champion.CreateChampion cc in championCreators)
            {
                Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > tuple = cc(clanBossLevel);
                cibs.Add(new ChampionInBattle(tuple.Item1, tuple.Item2, tuple.Item3));
            }

            ClanBossBattle battle = new ClanBossBattle(clanBossLevel, cibs);

            battle.GetStunTarget = getStunTarget;

            List <ClanBossBattleResult> results = battle.Run();

            ClanBossBattleResultsAnalysis.PrintResults(results, CBBRA.None);
        }
Пример #4
0
        public IEnumerable <List <Champion> > Search(ClanBoss.Level level)
        {
            foreach (List <Champion> cs in this.GetChampionLists())
            {
                List <ChampionInBattle> champions = new List <ChampionInBattle>();
                foreach (Champion champ in cs)
                {
                    Tuple <List <Constants.SkillId>, List <Constants.SkillId> > policies = this.skillPoliciesByChampionName[champ.Name];
                    champions.Add(new ChampionInBattle(champ, policies.Item1, policies.Item2));
                }

                ClanBossBattle battle = new ClanBossBattle(level, champions);
                List <ClanBossBattleResult> results = battle.Run();
                int lastKillableTurn = ClanBossBattleResultsAnalysis.LastClanBossTurnThatHitKillableChampion(results, Utils.FindSlowestChampion(cs));
                if (lastKillableTurn < 10)
                {
                    yield return(cs);
                }
            }
        }
Пример #5
0
            static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateRhazinScarhide(ClanBoss.Level level)
            {
                int effectiveSpeed = 172;

                if (level == ClanBoss.Level.Nightmare)
                {
                    effectiveSpeed = 182;
                }

                return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(RhazinScarhide.Create(effectiveSpeed, 0, 1), RhazinScarhide.AISkills, new List <Constants.SkillId>()));
            }
Пример #6
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateSlowboi(ClanBoss.Level level)
 {
     if (level == ClanBoss.Level.Nightmare)
     {
         return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Bulwark.Create(121, 0, 0), Bulwark.AISkills, new List <Constants.SkillId>()));
     }
     else
     {
         return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Bulwark.Create(112, 0, 0), Bulwark.AISkills, new List <Constants.SkillId>()));
     }
 }
Пример #7
0
            static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreatePainkeeper(ClanBoss.Level level)
            {
                List <Constants.SkillId> startupSkillOrder = new List <Constants.SkillId>()
                {
                    Constants.SkillId.A3,
                    Constants.SkillId.A1,
                };

                return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Painkeeper.Create(213, 2, 0), Painkeeper.AISkills, startupSkillOrder));
            }
Пример #8
0
            static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateTurvold(ClanBoss.Level level)
            {
                List <Constants.SkillId> startupSkillOrder = new List <Constants.SkillId>();

                switch (level)
                {
                case ClanBoss.Level.UltraNightmare:
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    break;

                case ClanBoss.Level.Nightmare:
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    break;

                default:
                    throw new ArgumentException("Only works for Nightmare or UltraNightmare");
                }

                return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Turvold.Create(154, 0, 0), Turvold.AISkills, startupSkillOrder));
            }
Пример #9
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateManeater(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Maneater.Create(227, 2, 0), Maneater.AISkills, new List <Constants.SkillId>()));
 }
Пример #10
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateGravechillKiller(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(GravechillKiller.Create(168, 0, 0), GravechillKiller.AISkills, new List <Constants.SkillId>()));
 }
Пример #11
0
            static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateManeater(ClanBoss.Level level)
            {
                List <Constants.SkillId> startupSkillOrder = new List <Constants.SkillId>();

                switch (level)
                {
                case ClanBoss.Level.Brutal:
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    startupSkillOrder.Add(Constants.SkillId.A2);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A2);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    break;

                case ClanBoss.Level.Nightmare:
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A3);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    startupSkillOrder.Add(Constants.SkillId.A1);
                    break;

                case ClanBoss.Level.UltraNightmare:
                    // Nothing special...just works!
                    break;

                default:
                    throw new ArgumentException("Only works for Brutal, Nightmare, or UltraNightmare");
                }

                return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Maneater.Create(241, 2, 0), Maneater.AISkills, startupSkillOrder));
            }
Пример #12
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateOccultBrawler(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(OccultBrawler.Create(98 + 77, 0, 0), OccultBrawler.AISkills, new List <Constants.SkillId>()));
 }
Пример #13
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateAothar(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Aothar.Create(92 + 24, 0, 0), Aothar.AISkills, new List <Constants.SkillId>()));
 }
Пример #14
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateDPS2(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(
                new Champion("DPS2", 102, 175, 2, 0, new List <Skill>()
     {
         new Skill("A1", Constants.SkillId.A1, 0, TurnAction.AttackOneEnemy())
     }),
                new List <Constants.SkillId>()
     {
         Constants.SkillId.A1
     },
                new List <Constants.SkillId>()));
 }
Пример #15
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateSlowboi(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(
                new Champion("Slowboi", 92, 114, 1, 0, new List <Skill>()
     {
         new Skill("A1", Constants.SkillId.A1, 0, TurnAction.AttackOneEnemy())
     }),
                new List <Constants.SkillId>()
     {
         Constants.SkillId.A1
     },
                new List <Constants.SkillId>()));
 }
Пример #16
0
            static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreatePainkeeper(ClanBoss.Level level)
            {
                List <Constants.SkillId> skillsToUse = new List <Constants.SkillId>()
                {
                    Constants.SkillId.A3,
                    Constants.SkillId.A2,
                    Constants.SkillId.A1,
                };

                return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Painkeeper.Create(221, 3, 0), skillsToUse, new List <Constants.SkillId>()));
            }
Пример #17
0
            static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateManeater(ClanBoss.Level level)
            {
                List <Constants.SkillId> skillsToUse = new List <Constants.SkillId>()
                {
                    Constants.SkillId.A3,
                    Constants.SkillId.A1,
                };

                return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Maneater.Create(227, 2, 0), skillsToUse, new List <Constants.SkillId>()));
            }
Пример #18
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateDPS(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Generic.Create("DPS", 0, 175.0d), Generic.AISkills, new List <Constants.SkillId>()));
 }
Пример #19
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateFrozenBanshee(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(FrozenBanshee.Create(169, 0, 0), FrozenBanshee.AISkills, new List <Constants.SkillId>()));
 }
Пример #20
0
        static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreatePainkeeper(ClanBoss.Level level)
        {
            List <Constants.SkillId> startupSkillOrder = new List <Constants.SkillId>();

            switch (level)
            {
            case ClanBoss.Level.Brutal:
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A3);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A2);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A3);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A2);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A3);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A2);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A3);
                break;

            case ClanBoss.Level.Nightmare:
                startupSkillOrder.Add(Constants.SkillId.A3);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A1);
                startupSkillOrder.Add(Constants.SkillId.A2);
                break;

            case ClanBoss.Level.UltraNightmare:
                startupSkillOrder.Add(Constants.SkillId.A3);
                startupSkillOrder.Add(Constants.SkillId.A1);
                break;

            default:
                throw new ArgumentException("Only works for Brutal, Nightmare, or UltraNightmare");
            }

            return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Painkeeper.Create(221, 3, 0), Painkeeper.AISkills, startupSkillOrder));
        }
Пример #21
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateRhazinScarhide(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(RhazinScarhide.Create(170, 0, 1), RhazinScarhide.AISkills, new List <Constants.SkillId>()));
 }
Пример #22
0
        static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateAothar(ClanBoss.Level level)
        {
            int uiSpeed = 114;

            if (level == ClanBoss.Level.Nightmare)
            {
                uiSpeed = 121;
            }

            return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Aothar.Create(uiSpeed, 1, 0), Aothar.AISkills, new List <Constants.SkillId>()));
        }
Пример #23
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateBulwark(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Bulwark.Create(106, 0, 0), Bulwark.AISkills, new List <Constants.SkillId>()));
 }
Пример #24
0
        static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateAothar(ClanBoss.Level level)
        {
            double effectiveSpeed = 114.04d;

            if (level == ClanBoss.Level.Nightmare)
            {
                effectiveSpeed = 121.04d;
            }

            return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Aothar.Create(effectiveSpeed), Aothar.AISkills, new List <Constants.SkillId>()));
        }
Пример #25
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateSeptimus(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Septimus.Create(171, 0, 0), Septimus.AISkills, new List <Constants.SkillId>()));
 }
Пример #26
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateDracomorph(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Dracomorph.Create(177, 0, 0), Dracomorph.AISkills, new List <Constants.SkillId>()));
 }
Пример #27
0
        private static void RunUnkillableSearcher(ClanBoss.Level clanBossLevel, List <Champion.CreateChampion> championCreators, bool multiLevel)
        {
            Dictionary <string, Champion> initialChampions = new Dictionary <string, Champion>();
            Dictionary <Champion, Tuple <List <Constants.SkillId>, List <Constants.SkillId> > > skillPoliciesByChampionBase = new Dictionary <Champion, Tuple <List <Constants.SkillId>, List <Constants.SkillId> > >();

            foreach (Champion.CreateChampion cc in championCreators)
            {
                Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > tuple = cc(clanBossLevel);
                skillPoliciesByChampionBase[tuple.Item1] = new Tuple <List <Constants.SkillId>, List <Constants.SkillId> >(tuple.Item2, tuple.Item3);
                initialChampions[tuple.Item1.Name]       = tuple.Item1;
            }

            UnkillableSearcher searcher = new UnkillableSearcher(skillPoliciesByChampionBase);
            Dictionary <int, List <List <Champion> > > unkillableTeamsByChangedChampionCount = new Dictionary <int, List <List <Champion> > >();

            foreach (List <Champion> unkillableTeam in searcher.Search(clanBossLevel))
            {
                if (multiLevel)
                {
                    bool isMultiLevelUnkillable = true;

                    foreach (ClanBoss.Level cbl in new List <ClanBoss.Level>()
                    {
                        ClanBoss.Level.Brutal, ClanBoss.Level.Nightmare, ClanBoss.Level.UltraNightmare
                    })
                    {
                        List <ChampionInBattle> cibs = new List <ChampionInBattle>();
                        foreach (Champion champ in unkillableTeam)
                        {
                            Tuple <List <Constants.SkillId>, List <Constants.SkillId> > tuple = skillPoliciesByChampionBase[initialChampions[champ.Name]];
                            cibs.Add(new ChampionInBattle(champ, tuple.Item1, tuple.Item2));
                        }

                        ClanBossBattle baseline = new ClanBossBattle(cbl, cibs);
                        List <ClanBossBattleResult> baselineResult = baseline.Run();
                        int lastKillableTurn = ClanBossBattleResultsAnalysis.LastClanBossTurnThatHitKillableChampion(baselineResult, Utils.FindSlowestChampion(unkillableTeam));
                        if (lastKillableTurn > 10)
                        {
                            isMultiLevelUnkillable = false;
                        }
                    }

                    if (!isMultiLevelUnkillable)
                    {
                        continue;
                    }
                }

                int key = 0;
                foreach (Champion c in unkillableTeam)
                {
                    Champion cBase = initialChampions[c.Name];
                    string   descriptor;
                    if (cBase.EffectiveSpeed != c.EffectiveSpeed)
                    {
                        key++;
                        descriptor = string.Format("{0} (UPDATED)", c.Name);
                    }
                    else
                    {
                        descriptor = c.Name;
                    }

                    Console.WriteLine("{0}", descriptor);
                    Console.WriteLine("  Base Speed:      {0}", c.BaseSpeed);
                    Console.WriteLine("  UI Speed:        {0}", c.UISpeed);
                    Console.WriteLine("  Speed Sets:      {0}", c.SpeedSets);
                    Console.WriteLine("  Perception Sets: {0}", c.PerceptionSets);
                    Console.WriteLine("  Effective Speed: {0}", c.EffectiveSpeed);
                }
                Console.WriteLine();

                List <List <Champion> > teams;
                if (!unkillableTeamsByChangedChampionCount.TryGetValue(key, out teams))
                {
                    teams = new List <List <Champion> >();
                    unkillableTeamsByChangedChampionCount[key] = teams;
                }
                teams.Add(new List <Champion>(unkillableTeam));
            }

            string filename = string.Format("{0}.txt", clanBossLevel);

            using (StreamWriter writer = new StreamWriter(File.OpenWrite(filename)))
            {
                foreach (int key in unkillableTeamsByChangedChampionCount.Keys.OrderBy(k => k))
                {
                    foreach (List <Champion> team in unkillableTeamsByChangedChampionCount[key])
                    {
                        foreach (Champion c in team)
                        {
                            Champion cBase = initialChampions[c.Name];
                            writer.WriteLine("{0}{1}", c.Name, c.EffectiveSpeed == cBase.EffectiveSpeed ? string.Empty : " (UPDATED)");
                            writer.WriteLine("  Base Speed:      {0}", c.BaseSpeed);
                            writer.WriteLine("  UI Speed:        {0}", c.UISpeed);
                            writer.WriteLine("  Speed Sets:      {0}", c.SpeedSets);
                            writer.WriteLine("  Perception Sets: {0}", c.PerceptionSets);
                            writer.WriteLine("  Effective Speed: {0}", c.EffectiveSpeed);
                        }
                        writer.WriteLine();
                    }
                    writer.WriteLine("================");
                }
            }

            System.Diagnostics.Process.Start(filename);
        }
Пример #28
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateCoffinSmasher(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(CoffinSmasher.Create(171, 0, 0), CoffinSmasher.AISkills, new List <Constants.SkillId>()));
 }
Пример #29
0
        static void TestUnkillableClanBossRun(ClanBoss.Level clanBossLevel, List <Champion.CreateChampion> championCreators, bool startupSequenceSearch, string allyAttackChampionToExclude = "")
        {
            List <Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > > champTuples = new List <Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > >();

            foreach (Champion.CreateChampion cc in championCreators)
            {
                champTuples.Add(cc(clanBossLevel));
            }

            List <Champion>         champions = new List <Champion>();
            List <ChampionInBattle> cibs      = new List <ChampionInBattle>();

            foreach (Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > tuple in champTuples)
            {
                champions.Add(tuple.Item1);
                ChampionInBattle cib = new ChampionInBattle(tuple.Item1, tuple.Item2, tuple.Item3);
                if (cib.Name == allyAttackChampionToExclude)
                {
                    cib.LeaveOutOfAllyAttack = true;
                }
                cibs.Add(cib);
            }

            ClanBossBattle baseline = new ClanBossBattle(clanBossLevel, cibs);
            List <ClanBossBattleResult> baselineResult = baseline.Run();

            Console.WriteLine("Baseline Results:");
            ClanBossBattleResultsAnalysis.PrintSummary(baselineResult, Utils.FindSlowestChampion(champions), CBBRA.None);
            ClanBossBattleResultsAnalysis.PrintFrozenBansheeA1WithPoisonSensitivityOn(baselineResult);

            if (startupSequenceSearch)
            {
                cibs = new List <ChampionInBattle>();
                foreach (Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > tuple in champTuples)
                {
                    cibs.Add(new ChampionInBattle(tuple.Item1, tuple.Item2, tuple.Item3));
                }

                ClanBossBattle battle = new ClanBossBattle(clanBossLevel, cibs);
                IEnumerable <List <ClanBossBattleResult> > resultSet;
                if (startupSequenceSearch)
                {
                    resultSet = battle.FindUnkillableStartupSequences();
                }
                else
                {
                    resultSet = new List <List <ClanBossBattleResult> >()
                    {
                        battle.Run()
                    };
                }

                List <ClanBossBattleResult> optimalResults = null;
                int optimalAutoAfterCBTurn = int.MaxValue;
                foreach (List <ClanBossBattleResult> results in resultSet)
                {
                    int autoAfterCBTurn = 0;
                    Console.WriteLine();
                    Console.WriteLine("Run is over!");
                    ClanBossBattleResultsAnalysis.PrintResults(results, CBBRA.IncludeUnkillable);

                    foreach (ClanBossBattleResult result in results)
                    {
                        if (result.AttackDetails.ActorName != Constants.Names.ClanBoss)
                        {
                            if (result.AttackDetails.ExpectedAISkill != result.AttackDetails.Skill)
                            {
                                autoAfterCBTurn = result.ClanBossTurn;
                            }
                        }
                    }

                    int lastKillableTurn = ClanBossBattleResultsAnalysis.LastClanBossTurnThatHitKillableChampion(results, Utils.FindSlowestChampion(champions));

                    Console.WriteLine("Last turn where there was a hit on a champion that wasn't unkillable:  {0}", lastKillableTurn);
                    Console.WriteLine("This setup runs on auto after turn {0}", autoAfterCBTurn);
                    Console.WriteLine();
                    if (optimalAutoAfterCBTurn > autoAfterCBTurn)
                    {
                        optimalAutoAfterCBTurn = autoAfterCBTurn;
                        optimalResults         = results;
                    }
                }

                if (optimalResults != null)
                {
                    Console.WriteLine("Optimal Result:");
                    ClanBossBattleResultsAnalysis.PrintResults(optimalResults, CBBRA.IncludeUnkillable);

                    Console.WriteLine("This setup runs on auto after turn {0}", optimalAutoAfterCBTurn);

                    Console.WriteLine();
                    Console.WriteLine("Maneater setup");
                    foreach (ClanBossBattleResult result in optimalResults.Where(r => r.AttackDetails.ActorName == "Maneater"))
                    {
                        if (result.ClanBossTurn > optimalAutoAfterCBTurn)
                        {
                            break;
                        }

                        Console.WriteLine("Turn {0,2}, Skill {1} ({2})", result.AttackDetails.ActorTurn, result.AttackDetails.Skill, result.AttackDetails.SkillName);
                    }

                    Console.WriteLine();
                    Console.WriteLine("Painkeeper setup");
                    foreach (ClanBossBattleResult result in optimalResults.Where(r => r.AttackDetails.ActorName == "Painkeeper"))
                    {
                        if (result.ClanBossTurn > optimalAutoAfterCBTurn)
                        {
                            break;
                        }

                        Console.WriteLine("Turn {0,2}, Skill {1} ({2})", result.AttackDetails.ActorTurn, result.AttackDetails.Skill, result.AttackDetails.SkillName);
                    }
                }
                else
                {
                    Console.WriteLine("No results!");
                }
            }
        }
Пример #30
0
 static Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> > CreateSkullcrusher(ClanBoss.Level level)
 {
     return(new Tuple <Champion, List <Constants.SkillId>, List <Constants.SkillId> >(Skullcrusher.Create(170, 0, 0), Skullcrusher.AISkills, new List <Constants.SkillId>()));
 }