예제 #1
0
        public static Value SetCardValue(BoardCard minionBoardCard)
        {
            Value resultingValue;

            float rawValue            = (minionBoardCard.ResultingBoardCard.Atk + minionBoardCard.ResultingBoardCard.Health) / 2;
            float resultingValueFloat = rawValue - minionBoardCard.ResultingBoardCard.Cost;

            if (resultingValueFloat > 0)
            {
                resultingValue = Value.Good;
            }
            else if (resultingValueFloat == 0)
            {
                resultingValue = Value.Medium;
            }
            else
            {
                resultingValue = Value.Bad;
            }

            if (CardEffects.HasBadEffect(minionBoardCard.ResultingBoardCard))
            {
                resultingValue = ReduceCardValue(resultingValue);
            }

            if (CardEffects.HasGoodEffect(minionBoardCard.ResultingBoardCard))
            {
                resultingValue = IncreaseCardValue(resultingValue);
            }

            if (CardEffects.HasInspire(minionBoardCard.ResultingBoardCard))
            {
                resultingValue = Value.Excellent;
            }

            return(resultingValue);
        }
예제 #2
0
        /// <summary>
        /// Additionally organizates neutral minions with the whitelist instead of only the value
        /// 2 Mana or below
        /// </summary>
        private static void LoadGeneralWhiteListEntriesForNeutralMinions()
        {
            List <CardTemplate> HandCards_BoardCards = MainLists.HandCards_BoardCards;

            //Chromatic Dragonkin
            //Lance Bearer
            //Chromatic Prototype
            //Deathcharger

            MainLists.whiteList.Add("EX1_066");  //Acidic Swamp Ooze
            MainLists.whiteList.Add("EX1_393");  //Amani Berserker
            MainLists.whiteList.Add("GVG_085");  //Annoy-o-Tron
            MainLists.whiteList.Add("AT_109");   //Argent Watchman
            MainLists.whiteList.Add("CS2_172");  //Bloodfen Raptor
            MainLists.whiteList.Add("EX1_012");  //Bloodmage Thalnos
            MainLists.whiteList.Add("NEW1_018"); //Bloodsail Raider

            if (Murloc.IsMurlocDeck)
            {
                MainLists.blackList.Add("CS2_173"); //Bluegill Warrior
            }
            else
            {
                MainLists.whiteList.Add("CS2_173"); //Bluegill Warrior
            }

            if (HandCards_BoardCards.Count(x => x.Type == Card.CType.MINION && x.Id.ToString() != "EX1_162" && x.Cost <= 2) >= 2)
            {
                MainLists.whiteList.Add("EX1_162"); //Dire Wolf Alpha
                foreach (var minion in HandCards_BoardCards.Where(x => x.Type == Card.CType.MINION && x.Cost <= 2 &&
                                                                  !CardEffects.HasBadEffect(x)))
                {
                    MainLists.whiteList.Add(minion.Id.ToString());
                }
            }
            else
            {
                MainLists.blackList.Add("EX1_162");                          //Dire Wolf Alpha
            }
            if (HandCards_BoardCards.Any(x => x.Id.ToString() == "CS2_026")) //Frost Nova
            {
                MainLists.whiteList.Add("NEW1_021");                         //Doomsayer
                MainLists.whiteList.Add("CS2_026");                          //Frost Nova
            }
            else
            {
                MainLists.blackList.Add("NEW1_021"); //Doomsayer
            }
            MainLists.whiteList.Add("NEW1_016");     //Captain's Parrot
            MainLists.whiteList.Add("NEW1_023");     //Faerie Dragon
            MainLists.whiteList.Add("CS2_121");      //Frostwolf Grunt
            MainLists.whiteList.Add("GVG_081");      //Gilblin Stalker
            MainLists.whiteList.Add("FP1_002");      //Haunted Creeper
            MainLists.whiteList.Add("NEW1_019");     //Knife Juggler
            MainLists.whiteList.Add("CS2_142");      //Kobold Geomancer
            MainLists.whiteList.Add("EX1_096");      //Loot Hoarder
            MainLists.whiteList.Add("EX1_100");      //Lorewalker Cho
            MainLists.whiteList.Add("EX1_082");      //Mad Bomber

            if (HandCards_BoardCards.Any(x => x.Type == Card.CType.SPELL && x.Cost <= 2 && !CardEffects.HasBadEffect(x)))
            {
                MainLists.whiteList.Add("EX1_055"); //Mana Addict
                foreach (var spell in HandCards_BoardCards.Where(x => x.Type == Card.CType.SPELL && x.Cost <= 2 &&
                                                                 !CardEffects.HasBadEffect(x)))
                {
                    MainLists.whiteList.Add(spell.Id.ToString());
                }
            }
            else
            {
                MainLists.blackList.Add("EX1_055"); //Mana Addict
            }
            if (HandCards_BoardCards.Any(x => x.Type == Card.CType.MINION && x.Cost <= 3 && !CardEffects.HasBadEffect(x)))
            {
                MainLists.whiteList.Add("NEW1_037"); //Master Swordsmith
                MainLists.whiteList.Add(HandCards_BoardCards.OrderBy(x => new NeutralMinion(x).thisCardValue).First(x =>
                                                                                                                    x.Type == Card.CType.MINION && x.Cost <= 3 && !CardEffects.HasBadEffect(x)).Id.ToString());
            }
            else
            {
                MainLists.blackList.Add("NEW1_037"); //Master Swordsmith
            }
            MainLists.whiteList.Add("GVG_006");      //Mechwarper
            MainLists.whiteList.Add("EX1_506");      //Murloc Tidehunter
            MainLists.whiteList.Add("EX1_557");      //Nat Pagle

            if (HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_093" || x.Id.ToString() == "EX1_058" ||
                                         x.Id.ToString() == "GVG_076"))
            //Defender of Argus
            //Sunfury Protector
            //Explosive Sheep
            {
                MainLists.whiteList.Add("FP1_007"); //Nerubian Egg
                bool containsArgus     = HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_093");
                bool containsProtector = HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_058");

                if (containsArgus)
                {
                    MainLists.whiteList.Add(HandCards_BoardCards.First(x => x.Id.ToString() == "EX1_093").
                                            Id.ToString());
                }
                else if (containsProtector)
                {
                    MainLists.whiteList.Add(HandCards_BoardCards.First(x => x.Id.ToString() == "EX1_058").
                                            Id.ToString());
                }
                else //must contain the sheep
                {
                    MainLists.whiteList.Add(HandCards_BoardCards.First(x => x.Id.ToString() == "GVG_076").
                                            Id.ToString());
                }
            }
            else
            {
                MainLists.blackList.Add("FP1_007"); //Nerubian Egg
            }
            MainLists.whiteList.Add("EX1_015");     //Novice Engineer
            MainLists.whiteList.Add("EX1_076");     //Pint-Sized Summoner
            MainLists.whiteList.Add("GVG_064");     //Puddlestomper
            MainLists.whiteList.Add("CS2_120");     //River Crocolisk
            MainLists.whiteList.Add("GVG_075");     //Ship's Cannon
            MainLists.whiteList.Add("GVG_067");     //Stonesplinter Trogg
            MainLists.whiteList.Add("EX1_058");     //Sunfury Protector
            MainLists.whiteList.Add("FP1_024");     //Unstable Ghoul

            MainLists.whiteList.Add("NEW1_020");    //Wild Pyromancer

            if (HandCards_BoardCards.Any(x => x.Type == Card.CType.MINION && x.Cost <= 3 && !CardEffects.HasBadEffect(x)))
            {
                MainLists.whiteList.Add("CS2_188"); //Abusive Sergeant
                MainLists.whiteList.Add(HandCards_BoardCards.OrderBy(x => new NeutralMinion(x).thisCardValue).First(x =>
                                                                                                                    x.Type == Card.CType.MINION && x.Cost <= 3 && !CardEffects.HasBadEffect(x)).Id.ToString());
            }
            //dont force adding to blacklist => calculate minion value later

            MainLists.whiteList.Add("EX1_008"); //Argent Squire
            MainLists.whiteList.Add("GVG_082"); //Clockwork Gnome

            if (HandCards_BoardCards.Any(x => x.Race == Card.CRace.MECH && x.Cost <= 3 && !CardEffects.HasBadEffect(x)))
            {
                MainLists.whiteList.Add("GVG_013"); //Cogmaster
                MainLists.whiteList.Add(HandCards_BoardCards.OrderBy(x => new NeutralMinion(x).thisCardValue).First(
                                            x => x.Race == Card.CRace.MECH &&
                                            x.Cost <= 3 && !CardEffects.HasBadEffect(x)).Id.ToString());
            }
            else
            {
                MainLists.blackList.Add("GVG_013"); //Cogmaster
            }
            MainLists.whiteList.Add("CS2_189");     //Elven Archer

            if (Murloc.IsMurlocDeck)
            {
                MainLists.whiteList.Add("EX1_508");//Grimscale Oracle
            }
            //dont force blacklist
            MainLists.whiteList.Add("EX1_508");  //Grimscale Oracle

            MainLists.whiteList.Add("NEW1_017"); //Hungry Crab
            MainLists.whiteList.Add("EX1_029");  //Leper Gnome
            MainLists.whiteList.Add("EX1_001");  //Lightwarden
            MainLists.whiteList.Add("AT_082");   //Lowly Squire
            MainLists.whiteList.Add("EX1_080");  //Secretkeeper

            if (!Murloc.IsMurlocDeck)
            {
                MainLists.whiteList.Add("CS2_168"); //Murloc Raider
                MainLists.blackList.Add("EX1_509"); //Murloc Tidecaller
            }
            else
            {
                MainLists.blackList.Add("CS2_168"); //Murloc Raider
                MainLists.whiteList.Add("EX1_509"); //Murloc Tidecaller
            }
            MainLists.whiteList.Add("CS2_168");     //Murloc Raider
            MainLists.whiteList.Add("EX1_509");     //Murloc Tidecaller

            MainLists.whiteList.Add("EX1_405");     //Shieldbearer
            MainLists.whiteList.Add("CS2_146");     //Southsea Deckhand
            MainLists.whiteList.Add("CS2_171");     //Stonetusk Boar
            MainLists.whiteList.Add("FP1_028");     //Undertaker
            MainLists.whiteList.Add("EX1_011");     //Voodoo Doctor
            MainLists.whiteList.Add("EX1_010");     //Worgen Infiltrator
            MainLists.whiteList.Add("EX1_004");     //Young Priestess
            MainLists.whiteList.Add("FP1_001");     //Zombie Chow
            MainLists.whiteList.Add("GVG_093");     //Target Dummy
            MainLists.whiteList.Add("EX1_301");     //Felguard
        }
예제 #3
0
        /// <summary>
        /// If no particular deck type is detected then continue creating the white/blacklists default style
        /// </summary>
        private static void CreateDefaultLists()
        {
            Task t_LoadGeneralWhiteListEntries = Task.Run(() =>
            {
                LoadGeneralWhiteListEntriesForNeutralMinions();
            });

            Task t_Load_TGT_ListEntries = Task.Run(() =>
            {
                TGT.SetTGT_WhiteAndBlackList();
            });

            /*load obvious whitelist first*/
            t_LoadGeneralWhiteListEntries.Wait();
            t_Load_TGT_ListEntries.Wait();

            #region ListManaging
            switch (MainLists.OpponentClass)
            {
            case Card.CClass.DRUID:
                MainLists.whiteList.Add("EX1_591");    //Auchenai Priest
                MainLists.whiteList.Add("EX1_339");    //Thoughtsteal
                MainLists.whiteList.Add("EX1_621");    //Circle of Healing
                break;

            case Card.CClass.WARRIOR:
                MainLists.whiteList.Add("EX1_591");    //Auchenai Priest
                MainLists.whiteList.Add("EX1_339");    //Thoughtsteal
                MainLists.whiteList.Add("EX1_621");    //Circle of Healing
                MainLists.whiteList.Add("CS2_179");    //Sen'jin Shieldmasta
                break;

            case Card.CClass.ROGUE:
                MainLists.whiteList.Add("EX1_591");    //Auchenai Priest
                MainLists.whiteList.Add("EX1_621");    //Circle of Healing
                MainLists.whiteList.Add("EX1_339");    //Thoughtsteal
                MainLists.whiteList.Add("FP1_030");    //Loatheb
                MainLists.whiteList.Add("CS2_179");    //Sen'jin Shieldmasta
                break;

            case Card.CClass.PRIEST:
                MainLists.whiteList.Add("EX1_591");    //Auchenai Priest
                MainLists.whiteList.Add("EX1_339");    //Thoughtsteal
                MainLists.whiteList.Add("EX1_621");    //Circle of Healing
                MainLists.whiteList.Add("FP1_030");    //Loatheb
                break;
            }

            switch (MainLists.OwnClass)
            {
            case Card.CClass.DRUID:
                MainLists.blackList.Add("CS2_012");    //Swipe
                if (MainLists.HandCards_BoardCards.Count(x => x.Type == Card.CType.MINION) >= 2)
                {
                    MainLists.blackList.Add("CS2_011"); //Savage Roar
                }
                MainLists.whiteList.Add("EX1_169");     //Innervate
                MainLists.whiteList.Add("EX1_154");     //Wrath
                MainLists.whiteList.Add("CS2_005");     //Claw

                if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_169" ||  /*already in whitelist*/
                                                       x.Id.ToString() == "CS2_013"))
                {
                    MainLists.whiteList.Add("FP1_005");    //Shade of Naxxramas
                    MainLists.whiteList.Add("CS2_013");    //Wild Growth
                    Druid.rampStructure = true;
                }
                if (Druid.rampStructure)
                {
                    MainLists.whiteList.Add("EX1_085");    //Mind Control Tech
                    MainLists.whiteList.Add("GVG_096");    //Piloted Shredder
                }

                if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "CS2_005" /*already in whitelist*/)) //Claw
                {
                    MainLists.whiteList.Add("EX1_578");                                                             //Savagery
                }
                else
                {
                    MainLists.blackList.Add("EX1_578");     //Savagery
                }
                break;

            case Card.CClass.HUNTER:
                MainLists.whiteList.Add("NEW1_031");   //Animal Companion
                MainLists.whiteList.Add("EX1_617");    //Deadly Shot
                MainLists.whiteList.Add("GVG_043");    //Glaivezooka
                MainLists.whiteList.Add("GVG_087");    //Steamwheedle Sniper
                MainLists.whiteList.Add("BRM_013");    //Quick Shot
                MainLists.whiteList.Add("FP1_011");    //Webspinner
                MainLists.whiteList.Add("DS1_184");    //Tracking
                MainLists.whiteList.Add("DS1_185");    //Arcane Shot
                MainLists.blackList.Add("GVG_026");    //Feign Death
                MainLists.blackList.Add("EX1_544");    //Flare

                if (MainLists.HandCards_BoardCards.Count(x => x.Type == Card.CType.MINION &&
                                                         !CardEffects.HasBadEffect(x) && x.Cost <= 3) >= 2)
                {
                    MainLists.whiteList.Add("EX1_611");     //Freezing Trap
                    MainLists.whiteList.Add(MainLists.HandCards_BoardCards.OrderBy(x => new NeutralMinion(x).thisCardValue).
                                            First(x => x.Type == Card.CType.MINION &&
                                                  !CardEffects.HasBadEffect(x) && x.Cost <= 3).Id.ToString());
                }
                else                                    //better get minions
                {
                    MainLists.blackList.Add("EX1_611"); //Freezing Trap
                }
                if (MainLists.HandCards_BoardCards.Count(x => x.Type == Card.CType.MINION &&
                                                         x.Race == Card.CRace.BEAST &&
                                                         !MainLists.blackList.Contains(x.Id.ToString())) >= 3)
                {
                    MainLists.whiteList.Add("DS1_175");    //Timber Wolf
                }
                else
                {
                    MainLists.blackList.Add("DS1_175");    //Timber Wolf
                }
                if (MainLists.HandCards_BoardCards.Count > 3)
                {
                    MainLists.whiteList.Add("EX1_014");    //Mukla
                }
                break;

            case Card.CClass.MAGE:
                MainLists.whiteList.Add("EX1_608");    //Sorcerer's Apprentice
                MainLists.whiteList.Add("GVG_002");    //Snowchugger
                MainLists.whiteList.Add("CS2_024");    //Frostbolt
                MainLists.whiteList.Add("GVG_001");    //Flamecannon
                MainLists.whiteList.Add("CS2_mirror"); //Mirror Image
                MainLists.whiteList.Add("NEW1_012");   //Mana Wyrm
                MainLists.whiteList.Add("EX1_277");    //Arcane Missiles

                if (Mage.IsHoldingAllSecretsInHand(MainLists.HandCards_BoardCards) && MainLists.HandCards_BoardCards.
                    Any(x => x.Id.ToString() == "FP1_004"))    //Mad Scientist
                {
                    CardTemplate mostExpensiveHandSecret =
                        MainLists.HandCards_BoardCards.Where(x => x.IsSecret).OrderBy(x => x.Cost).Last();

                    MainLists.whiteList.Add("FP1_004");    //Mad Scientist
                    MainLists.blackList.Add(mostExpensiveHandSecret.Id.ToString());
                }
                MainLists.whiteList.Add("FP1_004");    //Mad Scientist
                break;

            case Card.CClass.PALADIN:
                MainLists.whiteList.Add("EX1_366");    //Sword of Justice
                MainLists.whiteList.Add("GVG_061");    //Muster for Battle
                MainLists.whiteList.Add("EX1_382");    //Aldor Peacekeeper
                MainLists.whiteList.Add("GVG_058");    //Shielded Minibot
                MainLists.whiteList.Add("EX1_362");    //Argent Protector
                MainLists.whiteList.Add("EX1_130");    //Noble Sacrifice
                MainLists.whiteList.Add("CS2_091");    //Light's Justice
                MainLists.whiteList.Add("EX1_363");    //Blessing of Wisdom
                MainLists.whiteList.Add("CS2_087");    //Blessing of Might
                MainLists.whiteList.Add("EX1_136");    //Redemption
                MainLists.whiteList.Add("FP1_020");    //Avenges

                if (MainLists.OpponentClass == Card.CClass.DRUID || MainLists.OpponentClass == Card.CClass.WARLOCK)
                {
                    MainLists.whiteList.Add("GVG_101");    //Scarlet Purifier
                }
                break;

            case Card.CClass.PRIEST:
                MainLists.whiteList.Add("EX1_339");    //Thoughtsteal
                MainLists.whiteList.Add("GVG_072");    //Shadowboxer
                MainLists.whiteList.Add("CS2_234");    //Shadow Word: Pain
                MainLists.whiteList.Add("GVG_009");    //Shadowbomber
                MainLists.whiteList.Add("CS2_004");    //Power Word: Shield
                MainLists.whiteList.Add("CS2_235");    //Northshire Cleric
                MainLists.whiteList.Add("EX1_332");    //Silence
                MainLists.whiteList.Add("CS1_130");    //Holy Smite
                MainLists.whiteList.Add("CS1_129");    //Inner Fire
                MainLists.whiteList.Add("CS2_181");    //Injured Blademaster

                if (MainLists.HandCards_BoardCards.Any(x => x.Type == Card.CType.MINION &&
                                                       x.Cost <= 3 && !MainLists.blackList.Contains(x.Id.ToString())))
                {
                    MainLists.whiteList.Add("CS2_236");    //Divine Spirit
                }
                else
                {
                    MainLists.blackList.Add("CS2_236");    //Divine Spirit
                }
                if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "CS2_181"))
                {
                    MainLists.whiteList.Add("EX1_621");     // Circle of Healing
                }
                else
                {
                    MainLists.blackList.Add("EX1_621");
                }

                if (MainLists.HandCards_BoardCards.Count > 3)
                {
                    if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "CS2_235")) //Northshire Cleric
                    {
                        MainLists.whiteList.Add("CS2_004");                                    //Power Word: Shield
                    }
                    if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "CS2_181")) //Injured Blademaster
                    {
                        MainLists.whiteList.Add("EX1_621");                                    //Circle of Healing
                    }
                }

                if (MainLists.OpponentClass == Card.CClass.WARRIOR || MainLists.OpponentClass == Card.CClass.PALADIN)
                {
                    MainLists.whiteList.Add("EX1_588");
                }
                else
                {
                    MainLists.blackList.Add("EX1_588");
                }

                if (MainLists.HandCards_BoardCards.Count(c => c.Id.ToString() == "FP1_001" || c.Id.ToString() == "CS2_235" ||  /*already in whitelist*/
                                                         c.Id.ToString() == "GVG_081" /*already in whitelist*/) > 1)
                {
                    MainLists.whiteList.Add("FP1_001");
                    MainLists.whiteList.Add("CS2_004");    //Power Word: Shield
                    MainLists.whiteList.Add("GVG_010");    //Velen's Chosen
                    MainLists.whiteList.Add("FP1_009");    //Deathlord
                }
                break;

            case Card.CClass.ROGUE:
                MainLists.whiteList.Add("GVG_023");    //Goblinbarbier-o-Mat
                MainLists.whiteList.Add("EX1_522");    //Geduldiger Attentäter
                MainLists.whiteList.Add("EX1_124");    //Ausweiden
                MainLists.whiteList.Add("CS2_074");    //Tödliches Gift
                MainLists.whiteList.Add("CS2_073");    //Kaltblütigkeit
                MainLists.whiteList.Add("CS2_072");    //Meucheln
                MainLists.whiteList.Add("CS2_075");    //Finsterer Stoß
                MainLists.whiteList.Add("EX1_145");    //Vorbereitung
                MainLists.whiteList.Add("EX1_131");    //Defias Ringleader
                MainLists.whiteList.Add("EX1_129");    //Dolchfächer
                MainLists.whiteList.Add("EX1_126");    //Verrat

                if (MainLists.HandCards_BoardCards.Any(x => x.Cost <= 1
                                                       &&
                                                       (x.Type == Card.CType.SPELL || x.Type == Card.CType.WEAPON)
                                                       &&
                                                       !CardEffects.HasBadEffect(x)) &&
                    MainLists.HandCards_BoardCards.All(x => x.Id.ToString() != "EX1_131")) //got no Defias Ringleader
                {
                    MainLists.whiteList.Add("EX1_134");                                    //SI:7-Agent
                    var theOtherCard = MainLists.HandCards_BoardCards.First(x => x.Cost <= 1
                                                                            &&
                                                                            (x.Type == Card.CType.SPELL ||
                                                                             x.Type == Card.CType.WEAPON)
                                                                            &&
                                                                            !CardEffects.HasBadEffect(x));
                    MainLists.whiteList.Add(theOtherCard.Id.ToString());
                }
                //dont force adding to blacklist
                else if (MainLists.HandCards_BoardCards.Any(x => x.Cost <= 1
                                                            &&
                                                            (x.Type == Card.CType.SPELL || x.Type == Card.CType.WEAPON)
                                                            &&
                                                            !CardEffects.HasBadEffect(x)) &&
                         MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_131"))     //got Defias Ringleader
                {
                    var theOtherCard = MainLists.HandCards_BoardCards.First(x => x.Cost <= 1
                                                                            &&
                                                                            (x.Type == Card.CType.SPELL ||
                                                                             x.Type == Card.CType.WEAPON)
                                                                            &&
                                                                            !CardEffects.HasBadEffect(x));
                    MainLists.whiteList.Add(theOtherCard.Id.ToString());
                }

                if (MainLists.HandCards_BoardCards.Any(x => x.Cost <= 1 && (x.Type == Card.CType.SPELL ||
                                                                            x.Type == Card.CType.WEAPON)))
                {
                    MainLists.whiteList.Add("EX1_131");     //Rädelsführer der Defias
                }
                break;

            case Card.CClass.SHAMAN:
                MainLists.whiteList.Add("EX1_248");    //Wildgeist
                MainLists.whiteList.Add("EX1_575");    //Manafluttotem
                MainLists.whiteList.Add("EX1_259");    //Gewittersturm
                MainLists.whiteList.Add("EX1_258");    //Entfesselter Elementar
                MainLists.whiteList.Add("GVG_037");    //Wirbelnder Zapp-o-Mat
                MainLists.whiteList.Add("CS2_039");    //Windzorn
                MainLists.whiteList.Add("EX1_247");    //Stormforged Axe
                MainLists.whiteList.Add("FP1_025");    //Reincarnate
                MainLists.whiteList.Add("EX1_565");    //Flametongue Totem
                MainLists.whiteList.Add("GVG_038");    //Crackle
                MainLists.whiteList.Add("CS2_045");    //Rockbiter Weapon
                MainLists.whiteList.Add("EX1_238");    //Lightning Bolt
                MainLists.whiteList.Add("CS2_037");    //Frost Shock
                MainLists.whiteList.Add("EX1_251");    //Forked Lightning
                MainLists.whiteList.Add("EX1_245");    //Earth Shock
                MainLists.whiteList.Add("EX1_243");    //Dust Devil
                MainLists.whiteList.Add("EX1_244");    //Totemic Might
                MainLists.whiteList.Add("CS2_041");    //Ancestral Healing
                break;

            case Card.CClass.WARLOCK:
                MainLists.whiteList.Add("BRM_005");    //Demonwrath
                MainLists.whiteList.Add("CS2_065");    //Voidwalker
                MainLists.whiteList.Add("EX1_306");    //Succubus
                MainLists.whiteList.Add("EX1_596");    //Demonfire
                MainLists.whiteList.Add("GVG_015");    //Darkbomb
                MainLists.whiteList.Add("EX1_302");    //Mortal Coil
                MainLists.whiteList.Add("EX1_319");    //Flame Imp
                MainLists.whiteList.Add("CS2_059");    //Blood Imp

                if (ValueReader.BlackList.AddSoulFire)
                {
                    MainLists.blackList.Add("EX1_308");    //Soulfire
                }
                else
                {
                    MainLists.whiteList.Add("EX1_308");    //Soulfire
                }
                break;

            case Card.CClass.WARRIOR:
                MainLists.whiteList.Add("EX1_604");    //Frothing Berserker

                if (MainLists.HandCards_BoardCards.Any(x => x.Type == Card.CType.MINION && !CardEffects.HasBadEffect(x) &&
                                                       x.Cost <= 3))
                {
                    MainLists.whiteList.Add("EX1_402");     //Armorsmith
                    MainLists.blackList.Add(MainLists.HandCards_BoardCards.OrderBy(x => new NeutralMinion(x).thisCardValue).
                                            First(x => x.Type == Card.CType.MINION &&
                                                  !CardEffects.HasBadEffect(x) &&
                                                  x.Cost <= 3).Id.ToString());
                }
                else
                {
                    MainLists.blackList.Add("EX1_402");     //Armorsmith
                }
                //INNER RAGE
                if (MainLists.HandCards_BoardCards.Any(x => x.Type == Card.CType.MINION &&
                                                       x.Health > 1 && !CardEffects.HasBadEffect(x) && x.Cost <= 3))
                {
                    MainLists.whiteList.Add("CS2_104");                                    //Rampage
                }
                if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_607")) //Inner Rage
                {
                    if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_007" || x.Id.ToString() == "EX1_393" || x.Id.ToString() ==
                                                           "BRM_019" || x.Id.ToString() == "EX1_412"))
                    {
                        MainLists.whiteList.Add("EX1_007");    //Acolyte
                        MainLists.whiteList.Add("EX1_393");    //Amani Berserker
                        MainLists.whiteList.Add("BRM_019");    //Grim Patron
                        MainLists.whiteList.Add("EX1_412");    //Raging Worgen
                        MainLists.whiteList.Add("EX1_607");    //Inner Rage
                    }
                    else
                    {
                        MainLists.blackList.Add("EX1_607");
                    }
                }

                //WHIRLWIND
                if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_400"))     //Whirlwind
                {
                    if (MainLists.HandCards_BoardCards.Any(x => x.Id.ToString() == "EX1_007" || x.Id.ToString() == "EX1_393" || x.Id.ToString() ==
                                                           "BRM_019" || x.Id.ToString() == "EX1_412"))
                    {
                        MainLists.whiteList.Add("EX1_007");    //Acolyte
                        MainLists.whiteList.Add("EX1_393");    //Amani Berserker
                        MainLists.whiteList.Add("BRM_019");    //Grim Patron
                        MainLists.whiteList.Add("EX1_412");    //Raging Worgen
                        MainLists.whiteList.Add("EX1_400");    //Whirlwind
                    }
                    else
                    {
                        MainLists.blackList.Add("EX1_400");     //Whirlwind
                    }
                }

                float averageMana = MainLists.HandCards_native.Aggregate <Card.Cards, float>(0,
                                                                                             (current, card) => current + new BoardCard(card).ResultingBoardCard.Cost);
                averageMana = averageMana / MainLists.HandCards_BoardCards.Count;
                if (averageMana < 4f)
                {
                    MainLists.whiteList.Add("GVG_050");    //Bouncing Blade
                }
                switch (MainLists.OpponentClass)
                {
                case Card.CClass.WARLOCK:
                    MainLists.whiteList.Add("EX1_402");        //Armorsmith
                    MainLists.whiteList.Add("FP1_021");        //Death's Bite
                    break;

                case Card.CClass.SHAMAN:
                    MainLists.whiteList.Add("EX1_402");        //Armorsmith
                    MainLists.whiteList.Add("FP1_021");        //Death's Bite
                    break;

                case Card.CClass.PRIEST:
                    MainLists.whiteList.Add("EX1_402");        //Armorsmith
                    MainLists.whiteList.Add("EX1_606");        //Shield Block
                    MainLists.whiteList.Add("EX1_410");        //Shield Slam
                    MainLists.whiteList.Add("EX1_007");        //Acolyte of Pain
                    MainLists.whiteList.Add("FP1_021");        //Death's Bite
                    break;

                case Card.CClass.ROGUE:
                    MainLists.whiteList.Add("EX1_606");        //Shield Block
                    MainLists.whiteList.Add("EX1_410");        //Shield Slam
                    MainLists.whiteList.Add("FP1_021");        //Death's Bite
                    break;
                }

                MainLists.whiteList.Add("EX1_391");    //Slam
                MainLists.whiteList.Add("CS2_105");    //Heroic Strike
                MainLists.whiteList.Add("CS2_106");    //Fiery War Axe
                MainLists.whiteList.Add("EX1_603");    //Cruel Taskmaster
                MainLists.whiteList.Add("NEW1_036");   //Commanding Shout
                MainLists.whiteList.Add("CS2_114");    //Cleave
                MainLists.whiteList.Add("GVG_051");    //Warbot
                if (MainLists.HandCards_BoardCards.Any(x => x.Type == Card.CType.WEAPON))
                {
                    MainLists.whiteList.Add("EX1_409");     //Upgrade!
                    MainLists.whiteList.Add(MainLists.HandCards_BoardCards.OrderBy(x => x.Cost).
                                            First(x => x.Type == Card.CType.WEAPON).Id.ToString());
                }
                MainLists.whiteList.Add("EX1_410");    //Shield Slam
                MainLists.whiteList.Add("CS2_108");    //Execute
                break;
            }
            #endregion ListManaging
        }