//具体策略 public ProfileParameters GetParameters(Board board) { Card z = board.Hand.Find(x => x.Template.Id > 0); Card y = board.Hand.FindLast(x => x.Template.Id > 0); int 流放牌数 = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsOutCastCard(x, board) == true); int 古尔丹流放牌数 = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsGuldanOutCastCard(x, board) == true); Bot.Log("流放牌数 = " + (int)(流放牌数 + 古尔丹流放牌数)); //Bot.Log("右:是否流放: " + BoardHelper.IsOutCastCard(y, board)); #region 自定义变量 int twoHpMinionsCount = board.MinionEnemy.Count(minion => minion.CurrentHealth <= 2); //对面小于等于2血的随从数量 int threeHpMinionsCount = board.MinionEnemy.Count(minion => minion.CurrentHealth <= 3) - board.MinionFriend.FindAll(x => x.CurrentAtk >= 3).Count; //对面小于等于3血的随从数量 int fiveHpMinionsCount = board.MinionEnemy.Count(minion => minion.CurrentHealth <= 5) - board.MinionFriend.FindAll(x => x.CurrentAtk >= 5).Count; //对面小于等于5血的随从数量 #endregion #region 攻击模式 var p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; int myAttack = 0; int enemyAttack = 0; if (board.MinionFriend != null) { for (int x = 0; x < board.MinionFriend.Count; x++) { myAttack += board.MinionFriend[x].CurrentAtk; } } if (board.MinionEnemy != null) { for (int x = 0; x < board.MinionEnemy.Count; x++) { enemyAttack += board.MinionEnemy[x].CurrentAtk; } } if (board.WeaponEnemy != null) { enemyAttack += board.WeaponEnemy.CurrentAtk; } if ((int)board.EnemyClass == 2 || (int)board.EnemyClass == 7 || (int)board.EnemyClass == 8) { enemyAttack += 1; } else if ((int)board.EnemyClass == 6) { enemyAttack += 2; } if ((board.EnemyAbility.Template.Id == Card.Cards.AT_132_PALADIN || board.EnemyClass == Card.CClass.MAGE || board.EnemyClass == Card.CClass.DRUID) && board.HeroEnemy.CurrentHealth >= 16) { p = new ProfileParameters(BaseProfile.Default) { DiscoverSimulationValueThresholdPercent = -10 }; } if ((board.EnemyAbility.Template.Id == Card.Cards.AT_132_PALADIN || board.EnemyClass == Card.CClass.MAGE || board.EnemyClass == Card.CClass.DRUID) && board.HeroEnemy.CurrentHealth < 16) { p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; } #endregion #region 权重初始化 //技能卡 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_490, new Modifier(40)); //吞噬魔法 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_753, new Modifier(120)); //法力燃烧 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_491, new Modifier(50)); //幽灵视觉 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_035, new Modifier(30)); //混乱打击 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_601, new Modifier(30)); //古尔丹的脑袋 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_187, new Modifier(200, board.HeroEnemy.Id)); //日怒 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.HERO_10p_UP, new Modifier(50, board.HeroEnemy.Id)); //恶魔之咬-奇数瞎 //随从卡 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_323, new Modifier(120)); //盲眼监视者 //武器卡 p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.BT_922, new Modifier(50)); //棕红之翼 p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.BT_921, new Modifier(120)); //奥达奇 //硬币 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.TB_011, new Modifier(50)); #endregion #region 随从权重 if (board.ManaAvailable >= 4 && (board.HasCardInHand(Card.Cards.BT_187)) && board.FriendDeckCount >= 2 || board.EnemyClass == Card.CClass.DEMONHUNTER)//DH内战,日怒直接下 { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_187, new Modifier(100)); } else { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_187, new Modifier(180)); }//日怒权重 if (board.ManaAvailable <= 3 && (board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_351) || board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_323) || board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_922) || board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_066) || board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_352)) && board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_035)) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_035, new Modifier(400)); }//2费卡牌权重 if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.BT_490) == 1 && (board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_351) || board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_480)) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_753)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_490, new Modifier(400)); }//1费卡牌权重 if (board.ManaAvailable <= 2 && board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_323) && board.Hand.Count(card => card.Template.Id == Card.Cards.BT_601) == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_323, new Modifier(40)); }//2费之前没古尔丹脑袋,下盲眼监视者 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_323) && BoardHelper.GetPlayableSpellSequence(board).Count == 0 && board.EnemyClass == Card.CClass.WARLOCK) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_323, new Modifier(40)); }//没可以打的法术,下盲眼监视者 if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_351) && board.MinionEnemy.Count == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(40)); }//1费对面没有随从,下战斗邪犬 else if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.BT_323) == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_922)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_323, new Modifier(2000)); }//1费手里有棕红和盲眼监视者,不跳费下盲眼监视者 else if (board.ManaAvailable >= 4 && !board.Hand.Exists(x => x.Template.Race == Card.CRace.DEMON)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_416, new Modifier(250)); }//手牌没恶魔,降低暴怒权重 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_937) && board.Hand.Count < 2) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_612, new Modifier(300)); }//手里没有能打的流放牌,降低流放者权重(作者还没加卡牌是否流放判断) if (board.ManaAvailable == 2 && board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_066) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Exists(x => x.Template.Cost == 2)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_066, new Modifier(600)); }//2费手里有其他2费随从,不打软泥怪 if (board.Hand.Count >= 7) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_601, new Modifier(300)); }//手牌太多,降低过牌权重 if (BoardHelper.GetPlayableMinionSequence(board).Count < 2 && board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_215)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(40)); }//场上随从少于2个,铺场 if (board.WeaponEnemy != null && board.EnemyClass == Card.CClass.DEMONHUNTER)//软泥怪解武器 { if (board.WeaponEnemy.Template.Id == Card.Cards.BT_921) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_066, new Modifier(50)); } else { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_066, new Modifier(600)); } } else { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_066, new Modifier(50)); } #endregion #region 技能权重 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_514) && twoHpMinionsCount <= 2 && board.MinionEnemy.Sum(x => x.CurrentAtk) <= 4) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_514, new Modifier(200)); }//对面随从少,降低献祭光环权重 if (twoHpMinionsCount >= 3) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_514, new Modifier(190 - 40 * twoHpMinionsCount)); }//对面怪多,提高献祭光环 /* * if (board.MinionFriend.Exists(x => x.Template.Id==Card.Cards.BT_002) * && board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726) * && board.Hand.FindAll(x => x.Template.Id == Card.Cards.CFM_760).Min(x => x.CurrentCost) <= board.ManaAvailable * && board.Hand.FindAll(x => x.Template.Id == Card.Cards.CFM_760).Min(x => x.CurrentCost) > board.ManaAvailable - 2 * && (!board.Secret.Contains(Cards.Counterspell) || board.FriendGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.EX1_287)) * && (!board.Secret.Contains(Cards.ExplosiveRunes)) || board.FriendGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.LOOT_101)) * { * p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_726, new Modifier(-700)); * }//场上有流放随从,释放流放牌(暂时未知流放如何判断) */ if (board.ManaAvailable == 4 && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.BT_514) >= 1 && twoHpMinionsCount >= 3 && board.MinionFriend.Count <= 1) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_801, new Modifier(200)); }//4费对面小于2血的怪多,不打眼棱 if ((board.FriendDeckCount <= 6 && board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_035))) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_035, new Modifier(20)); }//牌库卡不多,提高过牌 if (board.MinionEnemy.Count == 1 && board.MinionEnemy.Exists(x => x.Template.Id == Card.Cards.NEW1_021) && board.MinionFriend.Count == 0 && BoardHelper.GetPlayableSpellSequence(board).Count > 0) { foreach (var card1 in BoardHelper.GetPlayableSpellSequence(board)) { p.CastSpellsModifiers.AddOrUpdate(card1, new Modifier(30)); } }//对面有末日,提高过牌 if (board.ManaAvailable >= 6 && board.Hand.Count <= 5 && board.HasCardInHand(Card.Cards.BT_601)) { p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.BT_601, new Modifier(50)); }//如果当前剩余法力水晶大于等于6,手牌数量小于等于5并且手牌中有古尔丹头颅 if (board.EnemyClass == Card.CClass.MAGE || board.EnemyClass == Card.CClass.PRIEST || board.EnemyClass == Card.CClass.WARLOCK) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_753, new Modifier(50));//法力燃烧 } #endregion #region 敌方权重 //针对一些随从优先解掉 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BRM_002)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BRM_002, new Modifier(400)); }//如果对面场上有火妖,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.ULD_276)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_276, new Modifier(110)); }//如果对面场上有202,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.GVG_069)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_069, new Modifier(150)); }//如果对面场上有533,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.GVG_084)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_084, new Modifier(300)); }//如果对面场上有314,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BOT_103)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_103, new Modifier(120)); }//如果对面场上有露娜,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BOT_407)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_407, new Modifier(120)); }//如果对面场上有雷云元素,提高攻击优先度 if (!BoardHelper.HasPotentialLethalNextTurn(board) && board.MinionEnemy.Count(minion => minion.Template.Id == Card.Cards.GVG_045t) >= 3 && board.EnemyClass == Card.CClass.WARLOCK) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_045t, new Modifier(150)); }//如果对面场上有1-1小鬼,提高攻击优先度 #endregion #region 武器权重 if ((board.Hand.Exists(x => x.Template.Id == Card.Cards.BT_271) || (board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.BT_271)) && board.HeroEnemy.CurrentHealth <= 16) { p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.BT_271, new Modifier(-1000)); }//如果对面血量小于等于16,提高武器攻击优先度 #endregion return(p); }
//具体策略 public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Rush); p.DiscoverSimulationValueThresholdPercent = 10; //卡牌优先度调整 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_295, new Modifier(92)); //降低冰箱优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_287, new Modifier(40)); //提高法反优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_726, new Modifier(200)); //降低远古谜团优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_023, new Modifier(30)); //提高奥术智慧优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.AT_005, new Modifier(280)); //降低变猪优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_239, new Modifier(120)); //降低火焰结界优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_029, new Modifier(80, board.HeroEnemy.Id)); //提高火球打脸优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002t, new Modifier(60, board.HeroEnemy.Id)); //提高火把打脸优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002, new Modifier(50, board.HeroEnemy.Id)); //提高火把打脸优先度 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_020, new Modifier(120)); //降低秘法学家优先度 //p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.CS2_034, new Modifier(120));//降低火铳优先度 p.CastWeaponsModifiers.AddOrUpdate(Cards.Aluneth, new Modifier(120)); //降低提刀优先度 //p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.CS2_034, new Modifier(9999,board.HeroFriend.Id)); //p.CastMinionsModifiers.AddOrUpdate(Card.Cards.KAR_092, new Modifier(9999,board.HeroFriend.Id)); //自定义命名 int twoHpMinionsCount = board.MinionEnemy.Count(minion => minion.CurrentHealth <= 2); //对面小于等于2血的随从数量 int LibraryResidueSecret = 8 - (board.FriendGraveyard.Count(card => CardTemplate.LoadFromId(card).IsSecret) + board.Hand.Count(card => card.Template.IsSecret) + board.Secret.Count); //牌库剩余奥秘 int threeHpMinionsCount = board.MinionEnemy.Count(minion => minion.CurrentHealth <= 3) - board.MinionFriend.FindAll(x => x.CurrentAtk >= 3).Count; //对面小于等于3血的随从数量 int fiveHpMinionsCount = board.MinionEnemy.Count(minion => minion.CurrentHealth <= 5) - board.MinionFriend.FindAll(x => x.CurrentAtk >= 5).Count; //对面小于等于5血的随从数量 //针对一些随从优先解掉 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BRM_002)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BRM_002, new Modifier(400)); }//如果对面场上有火妖,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.ULD_276)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_276, new Modifier(110)); }//如果对面场上有202,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.GVG_069)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_069, new Modifier(150)); }//如果对面场上有533,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.GVG_084)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_084, new Modifier(300)); }//如果对面场上有314,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BOT_103)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_103, new Modifier(120)); }//如果对面场上有露娜,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BOT_407)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_407, new Modifier(120)); }//如果对面场上有雷云元素,提高攻击优先度 if (!BoardHelper.HasPotentialLethalNextTurn(board) && board.MinionEnemy.Count(minion => minion.Template.Id == Card.Cards.GVG_045t) >= 3 && board.EnemyClass == Card.CClass.WARLOCK) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_045t, new Modifier(150)); }//如果对面场上有1-1小鬼,提高攻击优先度 //攻击模式切换 if ((((board.MinionEnemy.FindAll(x => x.IsTaunt && !x.IsSilenced).Sum(x => x.CurrentHealth) + 9 * board.MinionEnemy.Count(x => x.Template.Id == Card.Cards.LOOT_368) - board.MinionFriend.Sum(x => x.CurrentAtk)) >= 8 && BoardHelper.GetEnemyHealthAndArmor(board) <= 15) || BoardHelper.GetSecondTurnLethalRange(board) <= 7) && ((board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - board.MinionEnemy.Sum(x => x.CurrentAtk)) > 7) { //p = new ProfileParameters(BaseProfile.Face); //p.DiscoverSimulationValueThresholdPercent = 10; p.GlobalAggroModifier.Value = 130; //p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.CS2_034, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_029, new Modifier(-40, board.HeroEnemy.Id)); //提高火球打脸优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002t, new Modifier(-40, board.HeroEnemy.Id)); //提高火把打脸优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002, new Modifier(-40, board.HeroEnemy.Id)); //提高火把打脸优先度 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_293, new Modifier(-40, board.HeroEnemy.Id)); //提高云雾王子打脸优先度 p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(0)); }//对面嘲讽太多,抢脸,降低火铳优先度 else if (BoardHelper.GetEnemyHealthAndArmor(board) <= 15 && ((board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - board.MinionEnemy.Sum(x => x.CurrentAtk)) > 7) { //p = new ProfileParameters(BaseProfile.Face); //p.DiscoverSimulationValueThresholdPercent = 10; p.GlobalAggroModifier.Value = 130; //p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.CS2_034, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_029, new Modifier(30, board.HeroEnemy.Id)); //提高火球打脸优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002t, new Modifier(20, board.HeroEnemy.Id)); //提高火把打脸优先度 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002, new Modifier(20, board.HeroEnemy.Id)); //提高火把打脸优先度 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_293, new Modifier(-40, board.HeroEnemy.Id)); //提高云雾王子打脸优先度 p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(0)); }//对面少于15血,抢脸 else if (board.ManaAvailable >= 3) { p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(30)); }//提高硬币优先度 else if (board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.LOOT_108) { p.GlobalAggroModifier.Value = 120; }//有武器,攻击性提高 else if (board.ManaAvailable < 6) { p.GlobalAggroModifier.Value = 100; }//6费前攻击性调整 else if (board.ManaAvailable >= 6) { p.GlobalAggroModifier.Value = 110; }//6费后攻击性调整 if (board.Secret.Contains(Cards.IceBlock) && BoardHelper.HasPotentialLethalNextTurn(board) && !(board.EnemyClass == Card.CClass.MAGE && board.SecretEnemy && !board.EnemyGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.EX1_295))) { p.GlobalAggroModifier.Value = 1000; }//如果有冰箱,下回合斩杀,攻击性提高 else if (BoardHelper.HasPotentialLethalNextTurn(board) && ((board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - board.MinionEnemy.Sum(x => x.CurrentAtk)) > 7) { p.GlobalAggroModifier.Value = 200; }//下回合斩杀,攻击性提高 if (BoardHelper.HasPotentialLethalNextTurn(board) && board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_295)) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_295, new Modifier(50)); }//下回合斩杀,提高冰箱优先度 if (BoardHelper.GetSurvivalMinionEnemy(board).Sum(x => x.CurrentHealth) > 18 && BoardHelper.GetSecondTurnLethalRange(board) <= 7 && board.Secret.Contains(Cards.IceBlock) && !(board.EnemyClass == Card.CClass.MAGE && board.SecretEnemy && !board.EnemyGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.EX1_295))) { p.GlobalAggroModifier.Value = 1000; }//无法挽救场面,第二轮斩杀血线小于等于7,头上有冰箱,抢脸 else if (BoardHelper.GetSurvivalMinionEnemy(board).Sum(x => x.CurrentHealth) > 23 && BoardHelper.GetSecondTurnLethalRange(board) <= 13 && board.Secret.Contains(Cards.IceBlock) && !(board.EnemyClass == Card.CClass.MAGE && board.SecretEnemy && !board.EnemyGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.EX1_295))) { p.GlobalAggroModifier.Value = 1000; }//无法挽救场面,第二轮斩杀血线小于等于12,头上有冰箱,抢脸 else if (BoardHelper.GetSurvivalMinionEnemy(board).Sum(x => x.CurrentHealth) > 23) { p.GlobalAggroModifier.Value = 500; }//无法挽救场面,打脸 //武器调整 if (board.ManaAvailable >= 6 && board.Hand.Count <= 5 && board.HasCardInHand(Cards.Aluneth)) { p.CastWeaponsModifiers.AddOrUpdate(Cards.Aluneth, new Modifier(50)); }//如果当前剩余法力水晶大于等于6,手牌数量小于等于5并且手牌中有艾露尼斯,提高艾露尼斯的优先级 //随从调整 if (board.ManaAvailable >= 4 && (board.HasCardInHand(Card.Cards.ULD_293)) && board.Secret.Count > 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_293, new Modifier(100)); } else { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_293, new Modifier(180)); }//增加云雾王子的优先级 if (board.ManaAvailable <= 3 && (board.Hand.Exists(x => x.Template.Id == Card.Cards.FP1_004) || board.Hand.Exists(x => x.Template.Id == Card.Cards.UNG_020)) && board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726)) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_726, new Modifier(400)); }//2费下科学家或者秘法学家,不打远古谜团 if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.UNG_020) == 1 && (board.Hand.Exists(x => x.Template.Id == Card.Cards.KAR_092) || board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_240)) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_020, new Modifier(400)); }//1费手里有硬币、麦迪文男仆、秘法学家,不打秘法学家 if (board.EnemyClass == Card.CClass.MAGE && board.SecretEnemy && board.EnemyGraveyard.Count(card => CardTemplate.LoadFromId(card).Id == Card.Cards.LOOT_101) < 2 && (board.EnemyGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.EX1_612) || board.EnemyGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.UNG_020) || board.EnemyGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.ULD_293)) && board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_066)) { foreach (var card in board.Hand.FindAll(x => 6 - x.CurrentHealth >= (board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor))) { p.CastMinionsModifiers.AddOrUpdate(card.Template.Id, new Modifier(5000)); }//对阵奥秘法,对面可能有爆炸,防止自己被炸死 } if (LibraryResidueSecret > 0 && board.MinionFriend.Any(minion => minion.Template.Id == Card.Cards.FP1_004)) { p.OnBoardFriendlyMinionsValuesModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(40)); }//牌库有奥秘,提高送掉科学家的优先度 if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_066) && board.Hand.Exists(x => x.Template.Id == Card.Cards.FP1_018) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_287) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.LOOT_101) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_295) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_239) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_620)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.CFM_066, new Modifier(500)); }//1费手里有复制,不下暗金教侍从 if (board.ManaAvailable <= 2 && board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_066) && board.Hand.Count(card => card.Template.IsSecret) == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.CFM_066, new Modifier(200)); }//2费之前手里没奥秘,不打暗金教侍从 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_066) && BoardHelper.GetPlayableSecret(board).Count == 0 && board.EnemyClass == Card.CClass.WARLOCK) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.CFM_066, new Modifier(200)); }//没可以打的奥秘,对面是术士,不打暗金教侍从 if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.KAR_092) && board.Hand.Count(x => x.Template.Id == Card.Cards.FP1_004) == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.UNG_020) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726) && board.MinionEnemy.Count == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(500)); }//1费对面没有随从,不下科学家 else if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.FP1_004) == 1 && !board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.UNG_020) && board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_240)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(2000)); }//1费手里有科学家和对空奥术师,不跳费下科学家 else if (board.ManaAvailable == 1 && board.Hand.Count(x => x.Template.Id == Card.Cards.FP1_004) == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.KAR_092) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.UNG_020) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(300)); }//1费有硬币,不下科学家 if (LibraryResidueSecret == 0) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_726, new Modifier(6000)); p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_020, new Modifier(5000)); }//牌库没奥秘,不打远古谜团,降低秘法学家优先度 else if (board.ManaAvailable >= 3 && !board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_612)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_020, new Modifier(250)); }//降低秘法学家优先度 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_612) && BoardHelper.GetPlayableSecret(board).Count == 0 && board.Hand.Count >= 5 && (board.Hand.Count(x => x.Type == Card.CType.MINION) - board.Hand.Count(x => x.Template.Id == Card.Cards.EX1_612) != board.Hand.Count(x => x.Template.Id == Card.Cards.ULD_240)) && (board.Hand.Count(x => x.Type == Card.CType.MINION) - board.Hand.Count(x => x.Template.Id == Card.Cards.EX1_612) != 0)) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_612, new Modifier(300)); }//手里没有能打的奥秘,降低肯瑞托优先度 if (board.ManaAvailable == 2 && board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_066) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && (board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726) || board.Hand.Exists(x => x.Template.Id == Card.Cards.UNG_020) || board.Hand.Exists(x => x.Template.Id == Card.Cards.FP1_004))) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.CFM_066, new Modifier(600)); }//2费手里有暗金教侍从,秘法学家或者科学家或者远古谜团,不打暗金教侍从 if (board.Hand.Count >= 7) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_023, new Modifier(300)); p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_020, new Modifier(400)); }//手牌太多,降低奥术智慧、秘法学家优先度 //法术调整 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_239) && threeHpMinionsCount <= 2 && board.MinionEnemy.Sum(x => x.CurrentAtk) <= 4) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_239, new Modifier(200)); }//对面随从给少,降低火焰结界优先度 if (threeHpMinionsCount >= 3 || (fiveHpMinionsCount >= 3 && board.MinionFriend.Any(minion => minion.Template.Id == Card.Cards.ULD_240))) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_239, new Modifier(190 - 40 * threeHpMinionsCount)); }//对面3血以下怪多,提高火焰结界优先度 if (board.ManaAvailable <= 2 && board.MinionEnemy.Sum(x => x.CurrentAtk) == 1 && board.MinionFriend.Count == 0) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_239, new Modifier(1000)); }//远古谜团拿到火焰结界对面场功太低,不打 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.LOOT_108) && board.Hand.Count >= 6 && board.Hand.Exists(x => x.Template.Id == Card.Cards.FP1_018)) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.FP1_018, new Modifier(150)); }//有刀,手牌过多,降低复制优先度 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_760) && board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_726) && board.Hand.FindAll(x => x.Template.Id == Card.Cards.CFM_760).Min(x => x.CurrentCost) <= board.ManaAvailable && board.Hand.FindAll(x => x.Template.Id == Card.Cards.CFM_760).Min(x => x.CurrentCost) > board.ManaAvailable - 2 && (LibraryResidueSecret > 0) && (!board.Secret.Contains(Cards.Counterspell) || board.FriendGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.EX1_287)) && (!board.Secret.Contains(Cards.ExplosiveRunes)) || board.FriendGraveyard.Exists(card => CardTemplate.LoadFromId(card).Id == Card.Cards.LOOT_101)) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_726, new Modifier(-700)); }//先打远古谜团再打水晶侍女 if (board.ManaAvailable == 4 && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.ULD_240) == 2 && board.Hand.Count(card => card.Template.IsSecret) == 1 && twoHpMinionsCount >= 3 && board.MinionFriend.Count <= 1) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_287, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOOT_101, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_295, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.FP1_018, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CFM_620, new Modifier(200)); }//4费手里只有一张奥秘和2张对空奥术师,对面小于2血的怪多,不打奥秘 else if (board.ManaAvailable == 4 && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.ULD_240) == 1 && board.Hand.Count(card => card.Template.IsSecret) == 1 && twoHpMinionsCount >= 3 && board.MinionFriend.Count <= 1) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_240, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_287, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOOT_101, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_295, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.FP1_018, new Modifier(200)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CFM_620, new Modifier(200)); }//4费手里只有一个对空奥术师,对面小于2血的怪多,不下对空奥术师,不打奥秘 else if (board.ManaAvailable == 4 && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Count(x => x.Template.Id == Card.Cards.ULD_240) == 1 && board.Hand.Count(card => card.Template.IsSecret) >= 2 && twoHpMinionsCount >= 3 && board.MinionFriend.Count <= 1) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_240, new Modifier(200)); }//4费手里只有一个对空奥术师,对面小于2血的怪多,不下对空奥术师 if (board.ManaAvailable == 4 && board.EnemyAbility.Template.Id == Card.Cards.AT_132_PALADIN && board.Hand.Count(x => x.Template.Id == Card.Cards.ULD_240) == 1 && board.Hand.Count(card => card.Template.IsSecret) >= 1) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_240, new Modifier(200)); }//4费对面奇数骑,只有一个对空奥术师,手里有奥秘,不下对空奥术师 if (board.ManaAvailable == 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.CFM_066) && !board.Hand.Exists(x => x.Template.Id == Card.Cards.GAME_005) && board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_287) && board.Hand.Count(card => card.Template.IsSecret) > 1) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_287, new Modifier(120)); }//1费对面有硬币,奥秘大于1个,降低法反优先度 if (board.ManaAvailable <= 4 && board.MinionEnemy.Count == 0 && board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_287) && board.EnemyClass == Card.CClass.DRUID) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_287, new Modifier(-10)); }//对面德鲁伊,4费前没随从,提高法反优先度 if (board.FriendDeckCount <= 6 && board.Hand.Exists(x => x.Template.Id == Card.Cards.LOE_002)) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002, new Modifier(20)); }//牌库卡不多,提高打火把优先度 if (board.EnemyClass == Card.CClass.WARLOCK && board.Hand.Count(card => card.Template.IsSecret) > 1 && board.Hand.Exists(x => x.Template.Id == Card.Cards.LOOT_101) && board.ManaAvailable <= 6 && board.MinionEnemy.Sum(x => x.CurrentAtk) <= 4) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOOT_101, new Modifier(200)); }//对阵术士,降低爆炸优先度 if (board.MinionEnemy.Count == 1 && board.MinionEnemy.Exists(x => x.Template.Id == Card.Cards.NEW1_021) && board.MinionFriend.Count == 0 && BoardHelper.GetPlayableSecret(board).Count > 0) { foreach (var card1 in BoardHelper.GetPlayableSecret(board)) { p.CastSpellsModifiers.AddOrUpdate(card1, new Modifier(30)); } }//对面有末日,提高奥秘优先度 return(p); }