public static TierProfile TierProfile(ProfileParameters parameters, Point lastPointPrevTier) { if (parameters == null) { BH.Engine.Reflection.Compute.RecordError("Cannot create a tier profile from a null set of profile parameters."); return(null); } if (lastPointPrevTier == null) { BH.Engine.Reflection.Compute.RecordError("Cannot create a tier profile from a null spectator eye point from a previous tier."); return(null); } TierProfile tierProfile = new TierProfile(); SetEyePoints(ref tierProfile, parameters, lastPointPrevTier.X, lastPointPrevTier.Z); SectionSurfPoints(ref tierProfile, parameters); tierProfile.SectionOrigin = DefineTierOrigin(tierProfile.FloorPoints); tierProfile.Profile = Geometry.Create.Polyline(tierProfile.FloorPoints); return(tierProfile); }
private void OverrideSpellsValuesOnThreats(ref ProfileParameters parameters) { foreach (var card in _threatsModifiersTable) { parameters.SpellsModifiers.AddOrUpdate(card.Key.Key, new Modifier(card.Value, card.Key.Value)); } }
private void OverrideOverloadMinionsModifiers(ref ProfileParameters parameters) { foreach (var i in _minionsOverloadTable) { parameters.MinionsModifiers.AddOrUpdate(i.Key, new Modifier(600)); } }
private void HandleTurnTwoSpecifics(Board board, ref ProfileParameters parameters) { //Please shredder if (board.ManaAvailable == 2 && Hasinnervate(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-150)); return; } if (board.ManaAvailable == 3 && HasCoin(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-600)); return; } //We choose darnassus over wild growth if (HasWildGrowth(board) && HasDarnassus(board)) { if (board.EnemyClass != Card.CClass.WARRIOR && (board.HasWeapon(false) ? board.WeaponEnemy.CurrentAtk < 3 : board.WeaponEnemy == null)) { parameters.MinionsModifiers.AddOrUpdate(Cards.DarnassusAspirant, new Modifier(-100)); } else { parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(10)); } } }
public ProfileParameters GetParameters(Board board) { var profileparams = new ProfileParameters(BaseProfile.Rush); profileparams.DiscoverSimulationValueThresholdPercent = 10; return(profileparams); }
/// <summary> /// Regenerate the profile given the parameters. /// </summary> /// <param name="parameters"></param> /// <param name="pathIsOpen"></param> /// <param name="lod"></param> /// <param name="split"></param> /// <param name="isSculpted"></param> /// <param name="sculptSize"></param> /// <returns>true if the profile has actually changed</returns> public bool Generate(ProfileParameters parameters, bool pathIsOpen, float lod = 1f, int split = 0, bool isSculpted = false, int sculptSize = 1) { if (lod < Volume.MIN_LOD) { Debug.LogWarning("Generating profile with LOD < MIN_LOD. CLAMPING"); lod = Volume.MIN_LOD; } Points.Clear(); Faces.Clear(); switch (parameters.ProfileType) { case ProfileType.Square: GenerateSquare(parameters, pathIsOpen, lod, split, isSculpted, sculptSize); break; case ProfileType.IsoTri: case ProfileType.RightTri: case ProfileType.EqualTri: GenerateTriangle(parameters, pathIsOpen, lod, split, isSculpted, sculptSize); break; case ProfileType.Circle: GenerateCircle(parameters, pathIsOpen, lod, split, isSculpted, sculptSize); break; case ProfileType.CircleHalf: GenerateCircleHalf(parameters, pathIsOpen, lod, split, isSculpted, sculptSize); break; default: Debug.LogError($"Unknown profile: {parameters.ProfileType}"); break; } if (pathIsOpen) { AddCap(FaceId.PathEnd); // bottom } if (IsOpen) // interior edge caps { AddFace(PointCount - 1, 2, 0.5f, FaceId.ProfileBegin, true); if (parameters.Hollow > 0f) { AddFace(PointCountOutside - 1, 2, 0.5f, FaceId.ProfileEnd, true); } else { AddFace(PointCount - 2, 2, 0.5f, FaceId.ProfileEnd, true); } } return(true); }
private void OverrideSilenceSpellsValueOnTauntMinions(ref ProfileParameters parameters) { foreach (var card in _tauntMinionsTable) { if (CardTemplate.LoadFromId(card).Cost >= 2) { parameters.SpellsModifiers.AddOrUpdate(Cards.EarthShock, new Modifier(20, card)); parameters.MinionsModifiers.AddOrUpdate(Cards.IronbeakOwl, new Modifier(20, card)); } } }
/***************************************************/ private static void SetEyePoints(ref TierProfile tierProfile, ProfileParameters parameters, double lastX, double lastZ) { double prevX, prevZ; for (int i = 0; i < parameters.NumRows; i++) { double x = 0; double y = 0; double z = 0; if (parameters.SuperRiserParameters.SuperRiser && i == parameters.SuperRiserParameters.SuperRiserStartRow) { double deltaSHoriz = parameters.EyePositionParameters.StandingEyePositionX - parameters.EyePositionParameters.EyePositionX;//differences between standing and seated eye posiitons double deltaSVert = parameters.EyePositionParameters.StandingEyePositionZ - parameters.EyePositionParameters.EyePositionZ; //shift the previous positions to give standing eye position and add in the super riser specific horiznotal prevX = tierProfile.EyePoints[i - 1].X - (deltaSHoriz); prevZ = tierProfile.EyePoints[i - 1].Z + (deltaSVert); x = prevX + parameters.EyePositionParameters.StandingEyePositionX + parameters.SuperRiserParameters.SuperRiserKerbWidth + parameters.EyePositionParameters.WheelChairEyePositionX; z = prevZ + parameters.TargetCValue + parameters.RowWidth * ((prevZ + parameters.TargetCValue) / prevX); } else { if (parameters.SuperRiserParameters.SuperRiser && i == parameters.SuperRiserParameters.SuperRiserStartRow + 1)//row after the super riser { //x shifts to include 3 rows for super platform back nib wall nib and row less horiz position //also a wider row is required double widthSp = (2 * parameters.RowWidth) + parameters.SuperRiserParameters.SuperRiserKerbWidth + parameters.RowWidth - parameters.EyePositionParameters.EyePositionX; x = tierProfile.EyePoints[i - 1].X + widthSp; //z is with standard c over the wheel chair posiiton but could be over the handrail z = tierProfile.EyePoints[i - 1].Z + parameters.TargetCValue + widthSp * ((tierProfile.EyePoints[i - 1].Z + parameters.TargetCValue) / tierProfile.EyePoints[i - 1].X); } else { if (i == 0) { x = parameters.StartX + lastX; z = parameters.StartZ + lastZ; } else { x = tierProfile.EyePoints[i - 1].X + parameters.RowWidth; z = tierProfile.EyePoints[i - 1].Z + parameters.TargetCValue + parameters.RowWidth * ((tierProfile.EyePoints[i - 1].Z + parameters.TargetCValue) / tierProfile.EyePoints[i - 1].X); } } } if (parameters.RiserHeightRounding > 0) { z = Math.Round(z / parameters.RiserHeightRounding) * parameters.RiserHeightRounding; } var p = Geometry.Create.Point(x, y, z); tierProfile.EyePoints.Add(p); } }
//防止法术被使用 private void PreventSpellFromBeingPlayedOnMinions(ref ProfileParameters parameters, Board board) { //遍历场上不是嘲讽的敌方随从 foreach (var card in board.MinionEnemy.FindAll(x => !x.IsTaunt)) { //修改火球的修正值为“Rush”配置文件中定义的基值的500% parameters.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_029, new Modifier(1000, card.Id)); //修改炽热的火把的修正值为“Rush”配置文件中定义的基值的500% parameters.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOE_002t, new Modifier(500, card.Id)); } }
public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Face); double inHand = board.Hand.Sum(x => x.CurrentCost); inHand = inHand < 1 ? 1 : inHand; double value = (board.ManaAvailable + board.MaxMana) / inHand; p.DiscoverSimulationValueThresholdPercent = (float)((value > 1 ? Math.Sqrt(value) : value) * 15) + 3; return(p); }
public static TierProfile TierProfile(ProfileParameters parameters, Point lastPointPrevTier) { TierProfile tierProfile = new TierProfile(); SetEyePoints(ref tierProfile, parameters, lastPointPrevTier.X, lastPointPrevTier.Z); SectionSurfPoints(ref tierProfile, parameters); tierProfile.SectionOrigin = DefineTierOrigin(tierProfile.FloorPoints); tierProfile.Profile = Geometry.Create.Polyline(tierProfile.FloorPoints); return(tierProfile); }
private void HandleTurnThreeSpecifics(Board board, ref ProfileParameters parameters) { //Please shredder if (board.ManaAvailable == 3 && HasCoin(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-600)); } //DruidoftheClaw if (board.ManaAvailable == 3 && Hasinnervate(board) && board.HasCardInHand(Cards.DruidoftheClaw)) { parameters.MinionsModifiers.AddOrUpdate(Cards.DruidoftheClaw, new Modifier(-600)); } }
protected void GenerateSquare(ProfileParameters parameters, bool pathIsOpen, float lod, int split, bool isSculpted, int sculptSize) { int nFaces = 0; GenNGon(parameters, 4, -0.375f, 0, 1, split); if (pathIsOpen) { AddCap(FaceId.PathBegin); } for (int i = Mathf.FloorToInt(parameters.Begin * 4f); i < Mathf.FloorToInt(parameters.End * 4f + .999f); i++) { AddFace((nFaces++) * (split + 1), split + 2, 1, (FaceId)((int)FaceId.Outer0 << i), true); } for (int i = 0; i < Points.Count; i++) { // Scale by 4 to generate proper tex coords. Points[i] = new Vector3(Points[i].x, Points[i].y, Points[i].z * 4f); } if (parameters.Hollow > 0f) { switch (parameters.HoleType) { case HoleType.HoleTriangle: // This offset is not correct, but we can't change it now... DK 11/17/04 AddHole(parameters, true, 3, -0.375f, parameters.Hollow, 1f, split); break; case HoleType.HoleCircle: // TODO: Compute actual detail levels for cubes AddHole(parameters, false, Volume.MIN_DETAIL_FACES * lod, -0.375f, parameters.Hollow, 1f); break; case HoleType.HoleSame: case HoleType.HoleSquare: default: AddHole(parameters, true, 4, -0.375f, parameters.Hollow, 1f, split); break; } } if (pathIsOpen) { Faces[0].Count = Points.Count; } }
protected void GenerateTriangle(ProfileParameters parameters, bool pathIsOpen, float lod, int split, bool isSculpted, int sculptSize) { int nFaces = 0; GenNGon(parameters, 3, 0, 0, 1, split); for (int i = 0; i < PointCount; i++) { // Scale by 3 to generate proper tex coords. Points[i] = new Vector3(Points[i].x, Points[i].y, Points[i].z * 3f); } if (pathIsOpen) { AddCap(FaceId.PathBegin); } for (int i = Mathf.FloorToInt(parameters.Begin * 3f); i < Mathf.FloorToInt(parameters.End * 3f + .999f); i++) { AddFace((nFaces++) * (split + 1), split + 2, 1, (FaceId)((int)FaceId.Outer0 << i), true); } if (parameters.Hollow > 0f) { // Swept triangles need smaller hollowness values, // because the triangle doesn't fill the bounding box. float triangleHollow = parameters.Hollow / 2f; switch (parameters.HoleType) { case HoleType.HoleCircle: // TODO: Actually generate level of detail for triangles AddHole(parameters, false, Volume.MIN_DETAIL_FACES * lod, 0, triangleHollow, 1f); break; case HoleType.HoleSquare: AddHole(parameters, true, 4, 0, triangleHollow, 1f, split); break; case HoleType.HoleSame: case HoleType.HoleTriangle: default: AddHole(parameters, true, 3, 0, triangleHollow, 1f, split); break; } } }
private void HandleTurnOneSpecifics(Board board, ref ProfileParameters parameters) { //We want shade turn one if (Hasinnervate(board) && board.HasCardInHand(Cards.ShadeofNaxxramas)) { parameters.MinionsModifiers.AddOrUpdate(Cards.ShadeofNaxxramas, new Modifier(-600)); return; } //We want shredder on turn one if possible if (HasCoin(board) && Hasinnervate(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-600)); return; } //else we wanna keep innervate parameters.SpellsModifiers.AddOrUpdate(Cards.Innervate, new Modifier(500)); if (HasCoin(board)) { if (HasDarnassus(board) && !HasWildGrowth(board) && board.MinionEnemy.Count > 0 && board.MinionEnemy.Sum(x => x.CurrentAtk) < 3) { parameters.MinionsModifiers.AddOrUpdate(Cards.DarnassusAspirant, new Modifier(-300)); } //We choose to coin out darnassus over wild growth if (HasDarnassus(board) && (HasWildGrowth(board) || board.HasCardInHand(Cards.ShadeofNaxxramas)) && board.MinionEnemy.All(x => x.Template.Id != Cards.NorthshireCleric)) { parameters.MinionsModifiers.AddOrUpdate(Cards.DarnassusAspirant, new Modifier(-300)); } if (HasWildGrowth(board) && !HasDarnassus(board) && board.HasCardInHand(Cards.ShadeofNaxxramas)) { parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(-300)); } if (board.Hand.Count(x => x.Template.Id == Cards.WildGrowth) == 2) { parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(-100)); } } }
public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; /* In the seed below, Life tap is played first, then Shattered Sun Cleric (VAN_EX1_019) * The following rule increases the play order priority of Shattered Sun Cleric to be played first */ p.PlayOrderModifiers.AddOrUpdate(Card.Cards.VAN_EX1_019, new Modifier(500)); /* Most cards have the default value "1" in the AI * The bot will try to play cards with higher value first, so here we put VAN_EX1_019 value to 500 to make sure it's higher than anything else hardcoded in the base profiles */ //You can also make a card to be played last using negative values : //p.PlayOrderModifiers.AddOrUpdate(Card.Cards.VAN_EX1_019, new Modifier(-500)); return(p); }
/// <summary> /// Hollow is percent of the original bounding box, not of this particular /// profile's geometry. Thus, a swept triangle needs lower hollow values than /// a swept square. /// </summary> /// <param name="parameters"></param> /// <param name="flat"></param> /// <param name="sides"></param> /// <param name="offset"></param> /// <param name="boxHollow"></param> /// <param name="angScale"></param> /// <param name="split"></param> protected void AddHole(ProfileParameters parameters, bool flat, float sides, float offset, float boxHollow, float angScale, int split = 0) { // Note that addHole will NOT work for non-"circular" profiles, if we ever decide to use them. // Total add has number of vertices on outside. PointCountOutside = PointCount; // Why is the "bevel" parameter -1? DJS 04/05/02 GenNGon(parameters, Mathf.FloorToInt(sides), offset, -1, angScale, split); AddFace(PointCountOutside, PointCount - PointCountOutside, 0, FaceId.InnerSide, flat); // Scale the hole: List <Vector3> tmp = new List <Vector3>(); for (int i = PointCountOutside; i < PointCount; i++) { tmp.Add(new Vector3(Points[i].x * boxHollow, Points[i].y * boxHollow, Points[i].z * boxHollow)); } // Reverse the order of the inner points: int j = PointCount - PointCountOutside - 1; for (int i = PointCountOutside; i < PointCount; i++) { Points[i] = tmp[j--]; } foreach (var face in Faces) { if (face.Cap) { face.Count *= 2; } } }
//具体策略 public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Rush); p.DiscoverSimulationValueThresholdPercent = 10; p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_313, new Modifier(40)); //翡翠龙 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_774, new Modifier(20)); //翡翠龙 if (board.MaxMana == 1) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.DRG_318, new Modifier(1220)); //翡翠梦境 } p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_273, new Modifier(50)); //激流 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_132, new Modifier(75)); //铁木树皮 return(p); }
//具体策略 public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Face); p.DiscoverSimulationValueThresholdPercent = 10; //降低升级蓝龙威胁值 没必要解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_270, new Modifier(70)); //降低猎人113威胁值 没必要硬币解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_253, new Modifier(95)); //降低毒龙优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_254, new Modifier(20)); //降低精灵龙优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_023, new Modifier(100)); return(p); }
private void HandleTurnOneSpecifics(Board board, ref ProfileParameters parameters) { if ( board.Hand.Count( x => x.CurrentCost == 1 && x.Type == Card.CType.MINION && x.Template.Id != Cards.AbusiveSergeant) == 1) { parameters.SpellsModifiers.AddOrUpdate(Card.Cards.GAME_005, new Modifier(200)); } //Prefer sirfinley over trogg if (board.HasCardInHand(Cards.TunnelTrogg) && board.HasCardInHand(Cards.SirFinleyMrrgglton)) { parameters.MinionsModifiers.AddOrUpdate(Cards.SirFinleyMrrgglton, new Modifier(-500)); } else { //Set TunnelTrogg modifier to -100% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.TunnelTrogg, new Modifier(-100)); } //Set LeperGnome modifier to -100% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.LeperGnome, new Modifier(-100)); }
private void OverrideSpellsValuesOnThreats(ref ProfileParameters parameters) { foreach (var card in _threatsModifiersTable) { parameters.SpellsModifiers.AddOrUpdate(card.Key.Key, new Modifier(card.Value, card.Key.Value)); } }
private void HandleTurnOneSpecifics(Board board, ref ProfileParameters parameters) { //Prefer sirfinley over trogg if (board.HasCardInHand(Cards.TunnelTrogg) && board.HasCardInHand(Cards.SirFinleyMrrgglton)) { parameters.MinionsModifiers.AddOrUpdate(Cards.SirFinleyMrrgglton, new Modifier(-500)); } else { //Set TunnelTrogg modifier to -100% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.TunnelTrogg, new Modifier(-100)); } //Set LeperGnome modifier to -100% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.LeperGnome, new Modifier(-100)); }
public void HandleMinions(ref ProfileParameters parameters, Board board) { //Set KnifeJuggler modifier to 0% of the base value defined in "Rush" profile, the AI has more chances to play it parameters.MinionsModifiers.AddOrUpdate(Cards.KnifeJuggler, new Modifier(0)); parameters.MinionsModifiers.AddOrUpdate(Cards.FlametongueTotem, new Modifier(250)); foreach (var card in board.MinionFriend.FindAll(x => x.CanAttack)) { if ( board.MinionEnemy.Any( x => x.CurrentHealth <= card.CurrentAtk + 2 && x.CurrentHealth > card.CurrentAtk && !x.IsDivineShield)) { parameters.MinionsModifiers.AddOrUpdate(Cards.AbusiveSergeant, new Modifier(100)); } } //Use abusive to kill minions foreach (var card in board.MinionFriend.FindAll(x => x.CanAttack)) { if ( board.MinionEnemy.Any( x => x.CurrentHealth <= card.CurrentAtk + 2 && x.CurrentHealth > card.CurrentAtk && !x.IsDivineShield)) { parameters.MinionsModifiers.AddOrUpdate(Cards.AbusiveSergeant, new Modifier(0)); if (board.ManaAvailable == 0) parameters.SpellsModifiers.AddOrUpdate(TheCoin, new Modifier(0)); } } if (!BoardHelper.HasEnemyTauntOnBoard(board)) { //Set silence to 150% of its base value to try to keep it in hand if there's no enemy taunt on board parameters.MinionsModifiers.AddOrUpdate(Cards.IronbeakOwl, new Modifier(150)); } else { //Set silence to 60% of its base value to make it easier to play if theres a taunt on board parameters.MinionsModifiers.AddOrUpdate(Cards.IronbeakOwl, new Modifier(60)); } }
public ProfileParameters GetParameters(Board board) { //Init profile parameter based on rush profile var parameters = new ProfileParameters(BaseProfile.Default); /* ------------------------------------------------------------------------------ */ /* ---------------------------- Global cards modifiers ------------------------- */ /* ------------------------------------------------------------------------------ */ //The coin parameters.SpellsModifiers.AddOrUpdate(Card.Cards.GAME_005, new Modifier(150)); //Innervate parameters.SpellsModifiers.AddOrUpdate(Cards.Innervate, new Modifier(180)); //Swipe parameters.SpellsModifiers.AddOrUpdate(Cards.Swipe, new Modifier(75)); //Silence specifics parameters.MinionsModifiers.AddOrUpdate(Cards.KeeperoftheGrove, new Modifier(30, Cards.TwilightDrake)); parameters.MinionsModifiers.AddOrUpdate(Cards.KeeperoftheGrove, new Modifier(20, Cards.SludgeBelcher)); parameters.MinionsModifiers.AddOrUpdate(Cards.KeeperoftheGrove, new Modifier(1, Cards.TunnelTrogg)); parameters.MinionsModifiers.AddOrUpdate(Cards.KeeperoftheGrove, new Modifier(1, Cards.KnifeJuggler)); parameters.MinionsModifiers.AddOrUpdate(Cards.KeeperoftheGrove, new Modifier(1, Cards.NorthshireCleric)); //Dr.Boom parameters.MinionsModifiers.AddOrUpdate(Cards.DrBoom, new Modifier(-100)); //AzureDrake parameters.MinionsModifiers.AddOrUpdate(Cards.AzureDrake, new Modifier(0)); //Thaurissan if (HasSimpleComboInHand(board) || board.HasCardInHand(Cards.ForceofNature) && board.Hand.Count > 4 && board.MinionEnemy.Sum(x => x.CurrentAtk) < 5) parameters.MinionsModifiers.AddOrUpdate(Cards.EmperorThaurissan, new Modifier(-30)); //Force of nature parameters.SpellsModifiers.AddOrUpdate(Cards.ForceofNature, new Modifier(HasDoubleForceOfNature(board) ? 60 : 130)); //Wild growth end game if (board.MaxMana == 7 && HasSimpleComboInHand(board)) parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(1)); else if (board.MaxMana >= 10) parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(1)); /* ------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------ */ /* --------------------- Aggro modifiers ---------------------------- */ /* ------------------------------------------------------------------------------ */ parameters.GlobalAggroModifier = new Modifier(175); //If we cant put down enemy's life at topdeck lethal range if (HasPotentialLethalNextTurn(board)) { Bot.Log("Detected potential lethal next turn, aggro, aggro, aggro !!!"); //Bot.Log("Detected potential lethal next turn !!!!"); parameters.GlobalAggroModifier = new Modifier(500); if (board.Hand.Count(x => x.Template.Id == Cards.SavageRoar) == 1) parameters.SpellsModifiers.AddOrUpdate(Cards.SavageRoar, new Modifier(150)); } /* ------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------ */ /* --------------------- Draw modifiers ---------------------------- */ /* ------------------------------------------------------------------------------ */ if (ShouldDrawCards(board)) //If we need to draw cards { parameters.MinionsModifiers.AddOrUpdate(Cards.AncientofLore, new Modifier(40)); parameters.GlobalDrawModifier = new Modifier(110); } else { parameters.GlobalDrawModifier = new Modifier(50); } /* ------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------ */ if (board.TurnCount < 5) { //Turn specific handlers switch (board.ManaAvailable) { case 1: HandleTurnOneSpecifics(board, ref parameters); break; case 2: HandleTurnTwoSpecifics(board, ref parameters); break; case 3: HandleTurnThreeSpecifics(board, ref parameters); break; } } return parameters; }
//具体策略 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); }
private void OverrideSilenceSpellsValueOnTauntMinions(ref ProfileParameters parameters) { foreach (var card in _tauntMinionsTable) { if (CardTemplate.LoadFromId(card).Cost >= 2) { parameters.SpellsModifiers.AddOrUpdate(Cards.EarthShock, new Modifier(20, card)); parameters.MinionsModifiers.AddOrUpdate(Cards.IronbeakOwl, new Modifier(20, card)); } } }
private void HandleTurnTwoSpecifics(Board board, ref ProfileParameters parameters) { //Set UnboundElemental modifier to -500% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.UnboundElemental, new Modifier(-500)); }
//具体策略 public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Default); p.DiscoverSimulationValueThresholdPercent = 10; //法术 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.DRG_307, new Modifier(134)); //永恒吐息 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.DRG_204, new Modifier(134)); //黑暗天际 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_198, new Modifier(134)); //灵魂之镜 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.ULD_718, new Modifier(135)); //死亡之灾祸 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_252, new Modifier(-5)); //复苏 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_257, new Modifier(-5)); //神圣化身 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.DRG_660, new Modifier(-9999)); //讳言巨龙迦拉克隆优先级提高 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.DRG_660t2, new Modifier(-9999)); //讳言巨龙迦拉克隆优先级提高 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.DRG_660t3, new Modifier(-9999)); //讳言巨龙迦拉克隆优先级提高 p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.DRG_238p5, new Modifier(55)); //迦拉克隆的智识 //敌方 //螃蟹应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_700, new Modifier(200)); //炸弹牛仔应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_024, new Modifier(200)); //提高相位威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_252, new Modifier(200)); //提高热气球威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_057, new Modifier(200)); //提高空中私掠者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_016, new Modifier(200)); //提高搬水工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_270, new Modifier(200)); //提高凶恶的废钢猎犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_759, new Modifier(200)); //提高神殿狂战士威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_185, new Modifier(200)); //大法师瓦格斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_558, new Modifier(200)); //提高厄运信天翁 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_071, new Modifier(200)); //提高高级跟班厄尔克 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_035, new Modifier(200)); //提高狂奔的魔刃豹 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_006, new Modifier(200)); //提高卡雷苟斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_609, new Modifier(200)); //提高希亚玛特 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_178, new Modifier(200)); //提高齐恩瓦拉 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_104, new Modifier(200)); //提高机械袋鼠 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_445, new Modifier(200)); //提高机械袋鼠宝宝 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_445t, new Modifier(300)); //提高雏龙 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_116t, new Modifier(200)); //提高铸甲师 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_402, new Modifier(200)); //提高无面渗透者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_039, new Modifier(200)); //提高鲨鱼之灵威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.TRL_092, new Modifier(200)); //提高灭龙弩炮威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_256, new Modifier(200)); //提高飞刺威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_037, new Modifier(200)); //提高奇利亚斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_548, new Modifier(200)); //提高流放者奥图里斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_937, new Modifier(200)); //提高暗影珠宝师汉纳尔威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_188, new Modifier(200)); //提高萨特监工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(200)); //提高怒鳞纳迦威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_355, new Modifier(200)); //提高特殊坐骑商人威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_774, new Modifier(200)); //提高凯恩·日怒威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_187, new Modifier(200)); //提高龙喉监工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_256, new Modifier(200)); //提高邪能领主贝图格威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_607, new Modifier(200)); //我方送 //厄运信天翁 p.OnBoardFriendlyMinionsValuesModifiers.AddOrUpdate(Card.Cards.DRG_071, new Modifier(10)); return(p); }
/***************************************************/ private static void SetBlockFloor(ref SeatingBlock block, ProfileParameters parameters)//include gaps for vomitories { bool vomitory = parameters.VomitoryParameters.Vomitory; bool superR = parameters.SuperRiserParameters.SuperRiser; int vomStart = parameters.VomitoryParameters.VomitoryStartRow; int superStart = parameters.SuperRiserParameters.SuperRiserStartRow; double aisleW = parameters.VomitoryParameters.VomitoryWidth; if (!vomitory && !superR) { SetBlockFloorBasic(ref block); return; } if (vomitory && superR) { vomStart = superStart; } if (superR) { vomStart = superStart; } Vector rightShift = Geometry.Query.CrossProduct(Vector.ZAxis, block.Vomitory.Direction); rightShift = rightShift.Normalise(); //half a 1.2 width vom rightShift = rightShift * -aisleW / 2; Vector leftShift = rightShift.DeepClone(); leftShift = leftShift.Reverse(); List <Point> temp = new List <Point>(); //add the points to the mesh List <Point> vertices = new List <Point>(); for (int j = 0; j < block.Sections.Count; j++) { temp = block.Sections[j].FloorPoints.Select(item => item.Clone()).ToList(); if (j == 1)//on the vom { //transfrom right for (int p = 0; p < temp.Count; p++) { temp[p] = temp[p] + rightShift; } vertices.AddRange(temp); temp = block.Sections[j].FloorPoints.Select(item => item.Clone()).ToList(); //transfrom left for (int p = 0; p < temp.Count; p++) { temp[p] = temp[p] + leftShift; } } vertices.AddRange(temp); } int pointsPerSect = block.Sections[0].FloorPoints.Count; int row = 0; //make the faces List <Face> faces = new List <Face>(); for (int j = 0; j < block.Sections.Count; j++) //not the last section { int firstIndex = j * pointsPerSect; //first point index block section int nextFirstIndex = (j + 1) * pointsPerSect; //first point next section for (int i = 0; i < block.Sections[j].FloorPoints.Count - 1; i++) //not the last points { if (j == 1 && i % 2 == 0) { row++; } if (row < vomStart || row > vomStart + 8) { faces.Add(Geometry.Create.Face(firstIndex + i, firstIndex + i + 1, nextFirstIndex + i + 1, nextFirstIndex + i)); } } } block.Floor = Geometry.Create.Mesh(vertices, faces); }
//具体策略 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 OutcastCards = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsOutCastCard(x, board) == true); int GuldanOutcastCards = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsGuldanOutCastCard(x, board) == true); Bot.Log("OutcastCards: " + (int)(OutcastCards + GuldanOutcastCards)); //Bot.Log("玩家信息: " + rank+"/n"+Legend); var p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(85)); //自定义命名 int a = (board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - BoardHelper.GetEnemyHealthAndArmor(board);//敌我血量差 //攻击模式切换 if (board.EnemyClass == Card.CClass.DEMONHUNTER || board.EnemyClass == Card.CClass.HUNTER || board.EnemyClass == Card.CClass.ROGUE || board.EnemyClass == Card.CClass.SHAMAN || board.EnemyClass == Card.CClass.PALADIN || board.EnemyClass == Card.CClass.WARRIOR) { p.GlobalAggroModifier = (int)(a * 0.625 + 96.5); } else { p.GlobalAggroModifier = (int)(a * 0.625 + 103.5); } Bot.Log("攻击性:" + p.GlobalAggroModifier.Value); //手上火炮,提高火炮优先级,降低其他一切一费优先值 if (board.HasCardInHand(Card.Cards.GVG_075) &&//Card.Cards.GVG_075,//船载火炮 board.HasCardInHand(Card.Cards.GAME_005) &&//Card.Cards.GAME_005幸运币 board.HasCardInHand(Card.Cards.CS2_146) ||//Card.Cards.CS2_146,//南海船工 board.HasCardInHand(Card.Cards.OG_312) ||//Card.Cards.OG_312,//恩佐斯的副官 board.HasCardInHand(Card.Cards.DRG_024) //Card.Cards.DRG_024,//空中悍匪 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.GVG_075, new Modifier(-9999)); //Card.Cards.GVG_075,船载火炮 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.CS2_146, new Modifier(200)); //Card.Cards.CS2_146,南海船工 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_312, new Modifier(200)); //Card.Cards.OG_312,恩佐斯的副官 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_024, new Modifier(200)); //Card.Cards.DRG_024,//空中悍匪 } //当手上有圣剑扳手 Wrenchcalibur ID:DAL_063时,提高升级和334优先级 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.DAL_063) &&//圣剑扳手 Wrenchcalibur ID:DAL_063 board.HasCardInHand(Card.Cards.EX1_409) ||//升级 Upgrade! ID:EX1_409 board.HasCardInHand(Card.Cards.OG_315) ||//血帆教徒 Bloodsail Cultist ID:OG_315 board.HasCardInHand(Card.Cards.NEW1_024) //绿皮船长 Captain Greenskin ID:NEW1_024 ) { ; } { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_409, new Modifier(-999)); //升级 Upgrade! ID:EX1_409 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_315, new Modifier(-999)); //血帆教徒 Bloodsail Cultist ID:OG_315 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_024, new Modifier(-999)); //绿皮船长 Captain Greenskin ID:NEW1_024 } //当手上有海盗之锚 Ancharrr ID:DRG_025时,提高升级和334优先级 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.DRG_025) &&//海盗之锚 Ancharrr ID:DRG_025 board.HasCardInHand(Card.Cards.EX1_409) ||//升级 Upgrade! ID:EX1_409 board.HasCardInHand(Card.Cards.OG_315) ||//血帆教徒 Bloodsail Cultist ID:OG_315 board.HasCardInHand(Card.Cards.NEW1_024) //绿皮船长 Captain Greenskin ID:NEW1_024 ) { ; } { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_409, new Modifier(-999)); //升级 Upgrade! ID:EX1_409 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_315, new Modifier(-999)); //血帆教徒 Bloodsail Cultist ID:OG_315 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_024, new Modifier(-999)); //绿皮船长 Captain Greenskin ID:NEW1_024 } //当手上有海盗之锚 Ancharrr ID:DRG_025时,降低炸弹刀优先值,降低波力优先值 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.DRG_025) &&//海盗之锚 Ancharrr ID:DRG_025 board.HasCardInHand(Card.Cards.OG_312) ||// Card.Cards.OG_312,//恩佐斯的副官 board.HasCardInHand(Card.Cards.DAL_063) ||//Card.Cards.DAL_063,//圣剑扳手 board.HasCardInHand(Card.Cards.DRG_055) //藏宝匪贼 Hoard Pillager ID:DRG_055 ) { ; } { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_312, new Modifier(200)); //Card.Cards.OG_312,//恩佐斯的副官 p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DAL_063, new Modifier(200)); //Card.Cards.DAL_063,//圣剑扳手 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_055, new Modifier(200)); //藏宝匪贼 Hoard Pillager ID:DRG_055 } //当手上有Card.Cards.DAL_063,//圣剑扳手时,降低海盗刀优先值,降低波力优先值 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.DAL_063) &&//Card.Cards.DAL_063,//圣剑扳手 board.HasCardInHand(Card.Cards.OG_312) ||// Card.Cards.OG_312,//恩佐斯的副官 board.HasCardInHand(Card.Cards.DRG_025) ||//海盗之锚 Ancharrr ID:DRG_025 board.HasCardInHand(Card.Cards.DRG_055) //藏宝匪贼 Hoard Pillager ID:DRG_055 ) { ; } { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_312, new Modifier(200)); //Card.Cards.OG_312,//恩佐斯的副官 p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DRG_025, new Modifier(200)); //海盗之锚 Ancharrr ID:DRG_025 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_055, new Modifier(200)); //藏宝匪贼 Hoard Pillager ID:DRG_055 } //当手上有锈蚀铁钩 Rusty Hook ID:OG_058时,降低升级和334优先级 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.OG_058) &&//锈蚀铁钩 Rusty Hook ID:OG_058 board.HasCardInHand(Card.Cards.EX1_409) ||//升级 Upgrade! ID:EX1_409 board.HasCardInHand(Card.Cards.OG_315) ||//血帆教徒 Bloodsail Cultist ID:OG_315 board.HasCardInHand(Card.Cards.NEW1_024) //绿皮船长 Captain Greenskin ID:NEW1_024 ) { ; } { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_409, new Modifier(300)); //升级 Upgrade! ID:EX1_409 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_315, new Modifier(300)); //血帆教徒 Bloodsail Cultist ID:OG_315 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_024, new Modifier(300)); //绿皮船长 Captain Greenskin ID:NEW1_024 } //当手上有重斧 Heavy Axe ID:EX1_409t时,降低升级和334优先级 if ((board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.EX1_409t) &&//重斧 Heavy Axe ID:EX1_409t board.HasCardInHand(Card.Cards.EX1_409) ||//升级 Upgrade! ID:EX1_409 board.HasCardInHand(Card.Cards.OG_315) ||//血帆教徒 Bloodsail Cultist ID:OG_315 board.HasCardInHand(Card.Cards.NEW1_024) //绿皮船长 Captain Greenskin ID:NEW1_024 ) { ; } { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_409, new Modifier(300)); //升级 Upgrade! ID:EX1_409 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_315, new Modifier(300)); //血帆教徒 Bloodsail Cultist ID:OG_315 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_024, new Modifier(300)); //绿皮船长 Captain Greenskin ID:NEW1_024 } if (board.ManaAvailable < 7 && board.Hand.Exists(x => x.Template.Id == Card.Cards.DRG_025)) { p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DRG_025, new Modifier(-50));//7费前优先挂海盗之锚 } if (board.Hand.Exists(x => x.Template.Id == Card.Cards.DAL_063) &&//Card.Cards.DAL_063,//圣剑扳手 board.EnemyClass == Card.CClass.PRIEST || //对方是牧师 board.EnemyClass == Card.CClass.MAGE || //对方是法师 board.EnemyClass == Card.CClass.HUNTER || //对方是法师 board.EnemyClass == Card.CClass.WARLOCK //对方是法师 ) { p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DAL_063, new Modifier(-50));//牧师优先挂扳手 } //武器优先值 p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DRG_025, new Modifier(-80)); //海盗之锚 Ancharrr ID:DRG_025 p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DAL_063, new Modifier(-80)); ///圣剑扳手 Wrenchcalibur ID:DAL_063 //武器攻击保守性 p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.OG_058, new Modifier(-20)); //锈蚀铁钩 Rusty Hook ID:OG_058 p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.DRG_025, new Modifier(-50)); //海盗之锚 Ancharrr ID:DRG_025 p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.EX1_409t, new Modifier(-50)); //重斧 Heavy Axe ID:EX1_409t p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.DAL_063, new Modifier(-60)); //Card.Cards.DAL_063,//圣剑扳手 //法术 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.TB_011, new Modifier(50)); //硬币 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.EX1_409, new Modifier(50)); //升级 Upgrade! ID:EX1_409 //随从优先值 // Card.Cards.LOE_076,//芬利·莫格顿爵士 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.LOE_076, new Modifier(-80)); //船载火炮 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.GVG_075, new Modifier(-999)); //空中炮艇 Skybarge ID:DRG_023 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_023, new Modifier(-200)); //降低空降歹徒优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_056, new Modifier(200)); //降低 Card.Cards.DRG_024,//空中悍匪优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_024, new Modifier(130)); //降低 绿皮船长 Captain Greenskin ID:NEW1_024优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_024, new Modifier(130)); //南海船长提高优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_027, new Modifier(-20)); //发条地精 Clockwork Goblin ID:DAL_060提高优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_060, new Modifier(-30)); //爆盐投弹手 Seaforium Bomber ID:BOT_511提高优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BOT_511, new Modifier(-60)); //随从优先解 //提高战斗邪犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_351, new Modifier(200)); //螃蟹应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_700, new Modifier(200)); //炸弹牛仔应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_024, new Modifier(200)); //提高相位威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_252, new Modifier(200)); //提高热气球威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_057, new Modifier(200)); //提高空中私掠者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_016, new Modifier(200)); //提高搬水工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_270, new Modifier(200)); //提高凶恶的废钢猎犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_759, new Modifier(200)); //提高神殿狂战士威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_185, new Modifier(200)); //大法师瓦格斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_558, new Modifier(200)); //提高厄运信天翁 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_071, new Modifier(200)); //提高高级跟班厄尔克 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_035, new Modifier(200)); //提高狂奔的魔刃豹 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_006, new Modifier(200)); //提高卡雷苟斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_609, new Modifier(200)); //提高希亚玛特 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_178, new Modifier(200)); //提高齐恩瓦拉 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_104, new Modifier(200)); //提高机械袋鼠 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_445, new Modifier(200)); //提高机械袋鼠宝宝 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_445t, new Modifier(300)); //提高雏龙 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_116t, new Modifier(200)); //提高铸甲师 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_402, new Modifier(200)); //提高无面渗透者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_039, new Modifier(200)); //提高鲨鱼之灵威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.TRL_092, new Modifier(200)); //提高灭龙弩炮威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_256, new Modifier(200)); //提高飞刺威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_037, new Modifier(200)); //提高奇利亚斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_548, new Modifier(200)); //提高流放者奥图里斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_937, new Modifier(200)); //提高暗影珠宝师汉纳尔威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_188, new Modifier(200)); //提高萨特监工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(200)); //提高怒鳞纳迦威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_355, new Modifier(200)); //提高特殊坐骑商人威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_774, new Modifier(200)); //降低龙裔小鬼威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_238t12t2, new Modifier(-20)); //降低空灵召唤者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_022, new Modifier(-20)); //提高鲨鳍后援威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.TRL_507, new Modifier(200)); //提高小鬼骑士 Tiny Knight of Evil ID:AT_021威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.AT_021, new Modifier(200)); //降低恩佐斯的副官 威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.OG_312, new Modifier(-20)); //降低疯狂的科学家 Mad Scientist ID:FP1_004 威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(-20)); return(p); }
private void HandleTurnTwoSpecifics(Board board, ref ProfileParameters parameters) { //Please shredder if (board.ManaAvailable == 2 && Hasinnervate(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-150)); return; } if (board.ManaAvailable == 3 && HasCoin(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-600)); return; } //We choose darnassus over wild growth if (HasWildGrowth(board) && HasDarnassus(board)) { if (board.EnemyClass != Card.CClass.WARRIOR && (board.HasWeapon(false) ? board.WeaponEnemy.CurrentAtk < 3 : board.WeaponEnemy == null)) parameters.MinionsModifiers.AddOrUpdate(Cards.DarnassusAspirant, new Modifier(-100)); else { parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(10)); } } }
protected void Page_Init(object sender, EventArgs e) { if (!Utilities.ValidateUserLogin()) return; if (!_siteApi.IsARoleMember(EkEnumeration.CmsRoleIds.SyncAdmin) && !_siteApi.IsARoleMember(EkEnumeration.CmsRoleIds.SyncUser)) { Response.Redirect(_siteApi.AppPath + "login.aspx?fromLnkPg=1", true); } // Process the request parameters. _parameters = new ProfileParameters(Request); RegisterResources(); // Load labels and assorted static UI elements from // the relevent resource files, etc. PopulateLabels(); // Clear any pre-existing error messages. ClearErrors(); // Direct the presenter to initialize the display. _presenter.InitializeView(_parameters.Id, _parameters.Action); // Set display mode for client scripts. hdnDisplayMode.Value = _parameters.Action.ToString(); }
//具体策略 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 OutcastCards = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsOutCastCard(x, board) == true); int GuldanOutcastCards = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsGuldanOutCastCard(x, board) == true); Bot.Log("OutcastCards: " + (int)(OutcastCards + GuldanOutcastCards)); //Bot.Log("玩家信息: " + rank+"/n"+Legend); var p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(85)); //自定义命名 int a = (board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - BoardHelper.GetEnemyHealthAndArmor(board);//敌我血量差 //攻击模式切换 if (board.EnemyClass == Card.CClass.DEMONHUNTER || board.EnemyClass == Card.CClass.HUNTER || board.EnemyClass == Card.CClass.ROGUE || board.EnemyClass == Card.CClass.SHAMAN || board.EnemyClass == Card.CClass.PALADIN || board.EnemyClass == Card.CClass.WARRIOR) { p.GlobalAggroModifier = (int)(a * 0.625 + 96.5); } else { p.GlobalAggroModifier = (int)(a * 0.625 + 103.5); } Bot.Log("攻击性:" + p.GlobalAggroModifier.Value); //如果手上有古尔丹之手,提高过期任务商贩优先值 if (board.HasCardInHand(Card.Cards.BT_300) &&//古尔丹之手 board.HasCardInHand(Card.Cards.ULD_163) //过期货物专卖商 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_163, new Modifier(-200));//过期货物专卖商 } //如果手上有古尔丹之手,提高夜影主母优先值 if (board.HasCardInHand(Card.Cards.BT_300) &&//古尔丹之手 board.HasCardInHand(Card.Cards.BT_301) //夜影主母 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_301, new Modifier(-200));//夜影主母 } //技能卡 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_490, new Modifier(40));//吞噬魔法 //武器优先值 //棕红之翼 p.WeaponsAttackModifiers.AddOrUpdate(Cards.Umberwing, new Modifier(134)); p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.BT_921, new Modifier(120)); //奥达奇 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.TB_011, new Modifier(50)); //硬币 //法术优先值 //古尔丹之手 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_300, new Modifier(250)); //大灾变 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOOT_417, new Modifier(134)); //加拉克苏斯之拳 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.AT_022, new Modifier(250)); //莫瑞甘的灵界 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BOT_568, new Modifier(-20)); //生命分流 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.CS2_056_H1, new Modifier(50, board.HeroEnemy.Id)); //随从优先值 //降低萨瓦丝女王优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_836, new Modifier(250)); //降低镀银魔像优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.KAR_205, new Modifier(500)); //降低高阶祭司耶克里克优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.TRL_252, new Modifier(200)); //提高小鬼骑士优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.AT_021, new Modifier(-60)); //提高过期货物专卖商优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_163, new Modifier(-40)); //提高末日守卫优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_310, new Modifier(-40)); //提高坎雷萨德·埃伯洛克优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_309, new Modifier(-80)); //随从优先解 //降低空灵召唤者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_022, new Modifier(-20)); return(p); }
public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; //Bot.Log("玩家信息: " + rank+"/n"+Legend); int a = (board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - BoardHelper.GetEnemyHealthAndArmor(board); //攻击模式切换 if (board.HeroFriend.CurrentHealth >= 15) { if (board.EnemyClass == Card.CClass.SHAMAN || board.EnemyClass == Card.CClass.PALADIN || board.EnemyClass == Card.CClass.WARRIOR || board.EnemyClass == Card.CClass.MAGE || board.EnemyClass == Card.CClass.ROGUE ) { p.GlobalAggroModifier = (int)(a * 0.625 + 96.5); Bot.Log("攻击值" + (a * 0.625 + 96.5)); } else { p.GlobalAggroModifier = (int)(a * 0.625 + 113.5); Bot.Log("攻击值" + (a * 0.625 + 103.5)); } } { 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; } //定义场攻 用法 myAttack <= 5 自己场攻大于小于5 enemyAttack <= 5 对面场攻大于小于5 已计算武器伤害 int myMinionHealth = 0; int enemyMinionHealth = 0; if (board.MinionFriend != null) { for (int x = 0; x < board.MinionFriend.Count; x++) { myMinionHealth += board.MinionFriend[x].CurrentHealth; } } if (board.MinionEnemy != null) { for (int x = 0; x < board.MinionEnemy.Count; x++) { enemyMinionHealth += board.MinionEnemy[x].CurrentHealth; } } // 友方随从数量 int friendCount = board.MinionFriend.Count; #endregion #region 武器优先级 // p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.SW_025, new Modifier(-50));//拍卖行木槌 Auctionhouse Gavel SW_025 #endregion #region 随从优先级 // p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DMF_062, new Modifier(-20)); //提高旋岩虫 Gyreworm DMF_062 优先级 #endregion #region 法术优先级 // p.CastSpellsModifiers.AddOrUpdate(Card.Cards.GAME_005, new Modifier(55)); #endregion #region 送怪的逻辑 // p.OnBoardFriendlyMinionsValuesModifiers.AddOrUpdate(Card.Cards.SW_080, new Modifier(250));// 考内留斯·罗姆 Cornelius Roame SW_080 #endregion #region 增加随从威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_709, new Modifier(200)); // 增加巨型图腾埃索尔 Grand Totem Eys'or DMF_709 的攻击优先值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SW_419, new Modifier(200)); // 增加艾露恩神谕者 SW_419 的攻击优先值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SW_319, new Modifier(200)); // 增加农夫 的攻击优先值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.WC_006, new Modifier(200)); p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SW_033, new Modifier(200)); //运河慢步者 Canal Slogger SW_033 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_007, new Modifier(200)); //电击学徒 Novice Zapper CS3_007 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_074, new Modifier(200)); //前沿哨所 BAR_074 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_918, new Modifier(200)); //塔姆辛·罗姆 Tamsin Roame BAR_918 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_230, new Modifier(200)); //伊格诺斯 Il'gynoth DMF_230 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_733, new Modifier(200)); //莫尔葛工匠 Mo'arg Artificer BT_733 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_734, new Modifier(200)); //格雷布 DMF_734 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOP_035, new Modifier(200)); //月牙 Moon方 YOP_035 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_040, new Modifier(200)); //沙鳞灵魂行者 Siltfin Spiritwalker ID:GVG_040 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_304, new Modifier(200)); //改进型恐惧魔王 Enhanced Dreadlord ID:BT_304 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SW_068, new Modifier(200)); //莫尔葛熔魔 Mo'arg Forgefiend ID:SW_068 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_860, new Modifier(200)); //火焰术士弗洛格尔 Firemancer Flurgl ID:BAR_860 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SW_063, new Modifier(200)); //战场军官 Battleground Battlemaster ID:SW_063 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SW_030, new Modifier(200)); // 货物保镖 SW_030 #endregion #region 魔钢处决者 DMF_248 if (board.HasCardInHand(Card.Cards.DMF_248) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DMF_248, new Modifier(150)); Bot.Log("魔钢处决者 150"); } #endregion #region 前沿哨所 BAR_074 if (board.HasCardInHand(Card.Cards.BAR_074) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BAR_074, new Modifier(-88)); Bot.Log("前沿哨所 -88"); } #endregion #region 剃刀野猪 BAR_325 if (board.HasCardInHand(Card.Cards.BAR_325) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BAR_325, new Modifier(-999)); Bot.Log("剃刀野猪 -999"); } #endregion #region 剃刀沼泽兽王 BAR_326 if (board.HasCardInHand(Card.Cards.BAR_326) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BAR_326, new Modifier(-999)); Bot.Log("剃刀沼泽兽王 -999"); } #endregion #region 亡语者布莱克松 BAR_329 if (board.HasCardInHand(Card.Cards.BAR_329) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BAR_329, new Modifier(-99)); Bot.Log("亡语者布莱克松 -99"); } #endregion #region 异教低阶牧师 SCH_713 if (board.HasCardInHand(Card.Cards.SCH_713) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.SCH_713, new Modifier(130)); Bot.Log("异教低阶牧师 130"); } #endregion #region 凯恩·日怒 BT_187 if (board.HasCardInHand(Card.Cards.BT_187) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_187, new Modifier(150)); Bot.Log("凯恩·日怒 150"); } #endregion #region 攻击优先 卡牌威胁(通用) 更新到贫瘠之地 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.ULD_231)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_231, new Modifier(200)); }//连环腿大师 Whirlkick Master ULD_231 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_237)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_237, new Modifier(200)); }//狂欢报幕员 Carnival Barker DMF_237 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_217)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_217, new Modifier(200)); }//越线的游客 Line Hopper DMF_217 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_120)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_120, new Modifier(200)); }//纳兹曼尼织血者 Nazmani Bloodweaver DMF_120 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_707)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_707, new Modifier(200)); }//鱼人魔术师 Magicfin DMF_707 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_709)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_709, new Modifier(200)); }//巨型图腾埃索尔 Grand Totem Eys'or DMF_709 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_082)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_082, new Modifier(200)); }//暗月雕像 Darkmoon Statue DMF_082 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_082t)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_082t, new Modifier(200)); }//暗月雕像 Darkmoon Statue DMF_082t if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_708)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_708, new Modifier(200)); }//伊纳拉·碎雷 Inara Stormcrash DMF_708 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_102)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_102, new Modifier(200)); }//游戏管理员 Game Master DMF_102 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_222)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_222, new Modifier(200)); }//获救的流民 Redeemed Pariah DMF_222 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.ULD_003)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_003, new Modifier(200)); }//了不起的杰弗里斯 Zephrys the Great ULD_003 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.GVG_104)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_104, new Modifier(200)); }//大胖 Hobgoblin GVG_104 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.UNG_900)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.UNG_900, new Modifier(250)); }//如果对面场上有灵魂歌者安布拉,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.ULD_240)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_240, new Modifier(250)); }//如果对面场上有对空奥术法师 Arcane Flakmage ULD_240,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.FP1_022 && minion.IsTaunt == false)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_022, new Modifier(50)); }//如果对面场上有空灵,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.FP1_004)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(50)); }//如果对面场上有疯狂的科学家,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BRM_002)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BRM_002, new Modifier(500)); }//如果对面场上有火妖,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CFM_020)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CFM_020, new Modifier(0)); }//如果对面场上有缚链者拉兹 Raza the Chained CFM_020,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.EX1_608)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_608, new Modifier(250)); }//如果对面场上有巫师学徒 Sorcerer's Apprentice X1_608,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.VAN_EX1_608)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.VAN_EX1_608, new Modifier(250)); }//如果对面场上有巫师学徒 Sorcerer's Apprentice VAN_EX1_608,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BOT_447)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_447, new Modifier(-10)); }//如果对面场上有晶化师,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.SCH_600t3)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_600t3, new Modifier(250)); }//如果对面场上有加攻击的恶魔伙伴,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DRG_320)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_320, new Modifier(0)); }//如果对面场上有新伊瑟拉,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CS2_237)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS2_237, new Modifier(300)); }//如果对面场上有饥饿的秃鹫 Starving Buzzard CS2_237,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.VAN_CS2_237)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.VAN_CS2_237, new Modifier(300)); }//如果对面场上有饥饿的秃鹫 Starving Buzzard VAN_CS2_237,提高攻击优先度 //核心系列和贫瘠之地 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.YOP_031)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOP_031, new Modifier(250)); }//如果对面场上有螃蟹骑士 Crabrider YOP_031,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_537)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_537, new Modifier(200)); }//如果对面场上有钢鬃卫兵 BAR_537,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_033)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_033, new Modifier(210)); }//如果对面场上有勘探者车队 Prospector's Caravan BAR_033,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_035)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_035, new Modifier(200)); }//如果对面场上有科卡尔驯犬者 Kolkar Pack Runner BAR_035,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_871)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_871, new Modifier(250)); }//如果对面场上有士兵车队 Soldier's Caravan BAR_871 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_312)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_312, new Modifier(200)); }//如果对面场上有占卜者车队 Soothsayer's Caravan BAR_312,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_043)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_043, new Modifier(250)); }//如果对面场上有鱼人宝宝车队 Tinyfin's Caravan BAR_043 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_860)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_860, new Modifier(250)); }//如果对面场上有火焰术士弗洛格尔 Firemancer Flurgl BAR_860 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_063)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_063, new Modifier(250)); }//如果对面场上有甜水鱼人斥候 Lushwater Scout BAR_063,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_074)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_074, new Modifier(200)); }//如果对面场上有前沿哨所 BAR_074 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_720)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_720, new Modifier(230)); }//如果对面场上有古夫·符文图腾 Guff Runetotem BAR_720 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_038)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_038, new Modifier(200)); }//如果对面场上有塔维什·雷矛 Tavish Stormpike BAR_038 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_545)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_545, new Modifier(200)); }//如果对面场上有奥术发光体 Arcane Luminary BAR_545,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_888)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_888, new Modifier(200)); }//如果对面场上有霜舌半人马 Rimetongue BAR_888 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_317)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_317, new Modifier(200)); }//如果对面场上有原野联络人 Field Contact BAR_317,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_918)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_918, new Modifier(250)); }//如果对面场上有塔姆辛·罗姆 Tamsin Roame BAR_918,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_076)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_076, new Modifier(200)); }//如果对面场上有莫尔杉哨所 Mor'shan Watch Post BAR_076 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_890)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_890, new Modifier(200)); }//如果对面场上有十字路口大嘴巴 Crossroads Gossiper BAR_890 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_082)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_082, new Modifier(200)); }//如果对面场上有贫瘠之地诱捕者 Barrens Trapper BAR_082,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_540)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_540, new Modifier(200)); }//如果对面场上有腐烂的普雷莫尔 Plaguemaw the Rotting BAR_540 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_878)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_878, new Modifier(200)); }//如果对面场上有战地医师老兵 Veteran Warmedic BAR_878,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_048)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_048, new Modifier(200)); }//如果对面场上有布鲁坎 Bru'kan BAR_048,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_075)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_075, new Modifier(200)); }//如果对面场上有十字路口哨所 BAR_075,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_744)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_744, new Modifier(200)); }//如果对面场上有灵魂医者 Spirit Healer BAR_744 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.FP1_028)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_028, new Modifier(200)); }//如果对面场上有送葬者 Undertaker FP1_028 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CS3_019)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_019, new Modifier(200)); }//如果对面场上有考瓦斯·血棘 Kor'vas Bloodthorn CS3_019 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CORE_FP1_031)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CORE_FP1_031, new Modifier(200)); }//如果对面场上有瑞文戴尔男爵 Baron Rivendare CORE_FP1_031 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CS3_032)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_032, new Modifier(200)); }//如果对面场上有龙巢之母奥妮克希亚 Onyxia the Broodmother CS3_032 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.SCH_317)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_317, new Modifier(200)); }//如果对面场上有团伙核心 Playmaker SCH_317 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_847)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_847, new Modifier(200)); }//如果对面场上有洛卡拉 Rokara BAR_847 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CS3_025)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_025, new Modifier(200)); }//如果对面场上有伦萨克大王 Overlord Runthak CS3_025 ,提高攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.YOP_021)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOP_021, new Modifier(200)); }//如果对面场上有被禁锢的凤凰 Imprisoned Phoenix YOP_021 ,提高攻击优先度 // if ((board.HeroEnemy.CurrentHealth + board.HeroEnemy.CurrentArmor)>= 20 // && board.MinionEnemy.Count(x=>x.IsLifeSteal==true && x.Template.Id==Card.Cards.CS3_031)>=1 // ) // { // p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_031, new Modifier(200)); // }//如果对面场上有生命的缚誓者阿莱克丝塔萨 Alexstrasza the Life-Binder CS3_031 有吸血属性,提高攻击优先度 // else // { // p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_031, new Modifier(0)); // }//如果对面场上有生命的缚誓者阿莱克丝塔萨 Alexstrasza the Life-Binder CS3_031 没吸血属性,降低攻击优先度 if ((board.HeroEnemy.CurrentHealth + board.HeroEnemy.CurrentArmor) >= 20 && board.MinionEnemy.Count(x => x.IsLifeSteal == true && x.Template.Id == Card.Cards.CS3_033) >= 1 ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_033, new Modifier(200)); }//如果对面场上有沉睡者伊瑟拉 Ysera the Dreamer CS3_033 有吸血属性,提高攻击优先度 else { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_033, new Modifier(0)); }//如果对面场上有沉睡者伊瑟拉 Ysera the Dreamer CS3_033 没吸血属性,降低攻击优先度 if ((board.HeroEnemy.CurrentHealth + board.HeroEnemy.CurrentArmor) >= 20 && board.MinionEnemy.Count(x => x.IsLifeSteal == true && x.Template.Id == Card.Cards.CS3_034) >= 1 ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_034, new Modifier(200)); }//如果对面场上有织法者玛里苟斯 Malygos the Spellweaver CS3_034 有吸血属性,提高攻击优先度 else { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS3_034, new Modifier(0)); }//如果对面场上有织法者玛里苟斯 Malygos the Spellweaver CS3_034 没吸血属性,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CORE_EX1_110)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CORE_EX1_110, new Modifier(0)); }//如果对面场上有凯恩·血蹄 Cairne Bloodhoof CORE_EX1_110 ,降低攻击优先度 //对面如果是盗贼 巴罗夫拉出来的怪威胁值优先(主要防止战吼怪被回手重新使用) if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.BAR_072)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_072, new Modifier(0)); }//如果对面场上有火刃侍僧 Burning Blade Acolyte BAR_072 ,降低攻击优先度 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.SCH_351)) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_351, new Modifier(200)); }//如果对面场上有詹迪斯·巴罗夫 Jandice Barov SCH_351 ,提高攻击优先度 #endregion //德:DRUID 猎:HUNTER 法:MAGE 骑:PALADIN 牧:PRIEST 贼:ROGUE 萨:SHAMAN 术:WARLOCK 战:WARRIOR 瞎:DEMONHUNTER return(p); } }
private void HandleTurnOneSpecifics(Board board, ref ProfileParameters parameters) { //Set TunnelTrogg modifier to -100% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.TunnelTrogg, new Modifier(-100)); //Set LeperGnome modifier to -100% of the base value defined in "Rush" profile, the bot will try as much as possible to play the card parameters.MinionsModifiers.AddOrUpdate(Cards.LeperGnome, new Modifier(-100)); }
//具体策略 public ProfileParameters GetParameters(Board board) { var p = new ProfileParameters(BaseProfile.Rush); p.DiscoverSimulationValueThresholdPercent = 10; // p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(0)); //降低升级蓝龙威胁值 没必要解 p.OnBoardFriendlyMinionsValuesModifiers.AddOrUpdate(Card.Cards.ULD_185, new Modifier(120)); if (board.MinionFriend.Count(card => card.Race == Card.CRace.TOTEM) >= 2) //如果场上有图腾种族随从 { p.CastSpellsModifiers.AddOrUpdate(Cards.TotemicMight, new Modifier(55));//提高图腾之力优先级 } //跳图腾 if (board.MaxMana == 1 && board.MinionEnemy.Count == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_276, new Modifier(-580)); } //如果三费有刀 提高马桶优先级 if (board.Hand.Exists(x => x.Template.Id == Card.Cards.ULD_413) && board.MaxMana == 3 && board.MinionEnemy.Count == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_575, new Modifier(-470)); } else { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_575, new Modifier(-200)); } //图腾少于2 降低武器 if (board.MinionFriend.Count(card => card.Race == Card.CRace.TOTEM) < 2 && (!board.MinionFriend.Any(minion => minion.Template.Id == Card.Cards.EX1_575)) && (!board.MinionFriend.Any(minion => minion.Template.Id == Card.Cards.EX1_565)) && (!board.MinionFriend.Any(minion => minion.Template.Id == Card.Cards.ULD_276)) && board.HeroEnemy.CurrentHealth >= 10) { p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.ULD_413, new Modifier(570)); } //手上有闪电箭,场上无加法术图腾,提高摇图腾 if (!(board.MinionFriend.Exists(minion => minion.Template.Id == Card.Cards.CS2_052)) && board.ManaAvailable >= 3 && (board.Hand.Exists(minion => minion.Template.Id == Card.Cards.EX1_238))) { p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.CS2_049, new Modifier(55)); } //防护改装师 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_722, new Modifier(120)); //淤泥逻辑 if (board.MaxMana == 1 && (board.Hand.Exists(x => x.Template.Id == Card.Cards.DRG_216) || board.Hand.Exists(x => x.Template.Id == Card.Cards.DRG_239))) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_433, new Modifier(270)); } else { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_433, new Modifier(300)); //待定 } p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_113, new Modifier(40, Card.Cards.NEW1_009)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_113, new Modifier(40, Card.Cards.CS2_050)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_113, new Modifier(40, Card.Cards.CS2_051)); p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_113, new Modifier(40, Card.Cards.CS2_052)); //魔毯 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_773, new Modifier(50)); // 八爪巨怪 八爪鱼 if (board.ManaAvailable >= 8 && board.HasCardInHand(Cards.Octosari) && (board.Hand.Count >= 4 || (board.MinionFriend.Count(minion => minion.Template.Id == Card.Cards.EX1_575) >= 2))) { p.CastMinionsModifiers.AddOrUpdate(Cards.Octosari, new Modifier(500)); } //如果手牌数大于4张或者场上有2个马桶,降级八爪鱼优先级 //重新定义图腾保守度 //怪盗 p.OnBoardFriendlyMinionsValuesModifiers.AddOrUpdate(Card.Cards.ULD_276, new Modifier(125)); //马桶 p.OnBoardFriendlyMinionsValuesModifiers.AddOrUpdate(Card.Cards.EX1_575, new Modifier(126)); //维西纳优先级降低 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_173, new Modifier(200)); //火舌图腾优先级提高 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_565, new Modifier(150)); //不打的怪 //塔隆·血魔 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_126, new Modifier(-326)); return(p); }
private void OverrideOverloadMinionsModifiers(ref ProfileParameters parameters) { foreach (var i in _minionsOverloadTable) { parameters.MinionsModifiers.AddOrUpdate(i.Key, new Modifier(600)); } }
private void HandleTurnOneSpecifics(Board board, ref ProfileParameters parameters) { //We want shade turn one if (Hasinnervate(board) && board.HasCardInHand(Cards.ShadeofNaxxramas)) { parameters.MinionsModifiers.AddOrUpdate(Cards.ShadeofNaxxramas, new Modifier(-600)); return; } //We want shredder on turn one if possible if (HasCoin(board) && Hasinnervate(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-600)); return; } //else we wanna keep innervate parameters.SpellsModifiers.AddOrUpdate(Cards.Innervate, new Modifier(500)); if (HasCoin(board)) { if (HasDarnassus(board) && !HasWildGrowth(board) && board.MinionEnemy.Count > 0 && board.MinionEnemy.Sum(x => x.CurrentAtk) < 3) parameters.MinionsModifiers.AddOrUpdate(Cards.DarnassusAspirant, new Modifier(-300)); //We choose to coin out darnassus over wild growth if (HasDarnassus(board) && (HasWildGrowth(board) || board.HasCardInHand(Cards.ShadeofNaxxramas)) && board.MinionEnemy.All(x => x.Template.Id != Cards.NorthshireCleric)) parameters.MinionsModifiers.AddOrUpdate(Cards.DarnassusAspirant, new Modifier(-300)); if (HasWildGrowth(board) && !HasDarnassus(board) && board.HasCardInHand(Cards.ShadeofNaxxramas)) parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(-300)); if (board.Hand.Count(x => x.Template.Id == Cards.WildGrowth) == 2) parameters.SpellsModifiers.AddOrUpdate(Cards.WildGrowth, new Modifier(-100)); } }
public ProfileParameters GetParameters(Board board) { //Init profile parameter based on rush profile var parameters = new ProfileParameters(BaseProfile.Rush); //300% of default "Rush" profile value -> the bot will be more aggressive parameters.GlobalAggroModifier.Value = AggroModifier; //Set FeralSpirit spell modifier to 20% of the base spell value defined in "Rush" profile, the AI has more chances to play this spell parameters.SpellsModifiers.AddOrUpdate(Cards.FeralSpirit, new Modifier(20)); //Set lava shock spell modifier to 200% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand without any overloaded mana parameters.SpellsModifiers.AddOrUpdate(Cards.LavaShock, new Modifier(200)); //Lower TheCoin modifier parameters.SpellsModifiers.AddOrUpdate(TheCoin, new Modifier(70)); //Lower earthshock modifier on Sludge belcher //parameters.SpellsModifiers.AddOrUpdate(EarthShock, new Modifier(20, SludgeBelcher)); OverrideSilenceSpellsValueOnTauntMinions(ref parameters); //Lower silences values on taunts //Set KnifeJuggler modifier to 30% of the base value defined in "Rush" profile, the AI has more chances to play it parameters.MinionsModifiers.AddOrUpdate(Cards.KnifeJuggler, new Modifier(0)); //If we cant put down enemy's life at topdeck lethal range if (!HasPotentialLethalNextTurn(board)) { //Set lightning bolt spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand before turn 6 parameters.SpellsModifiers.AddOrUpdate(Cards.LightningBolt, new Modifier(GetOverloadSpellConservativeModifier(board))); //Set crackle spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand before turn 6 parameters.SpellsModifiers.AddOrUpdate(Cards.Crackle, new Modifier(GetOverloadSpellConservativeModifier(board))); //Set lava burst spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand for lethal parameters.SpellsModifiers.AddOrUpdate(Cards.LavaBurst, new Modifier(GetOverloadSpellConservativeModifier(board))); //Set lava burst spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand for lethal parameters.MinionsModifiers.AddOrUpdate(Cards.ArcaneGolem, new Modifier(400)); } if (!HasEnemyTauntOnBoard(board)) { //Set silence to 150% of its base value to try to keep it in hand if there's no enemy taunt on board parameters.MinionsModifiers.AddOrUpdate(Cards.IronbeakOwl, new Modifier(150)); } else { //Set silence to 60% of its base value to make it easier to play if theres a taunt on board parameters.MinionsModifiers.AddOrUpdate(Cards.IronbeakOwl, new Modifier(60)); } if (!HasDoomhammerOnBoard(board)) //If we don't have doomhammer this turn { //Set rockbiter spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand until we get doomhammer parameters.SpellsModifiers.AddOrUpdate(Cards.RockbiterWeapon, new Modifier(400)); } if (ShouldDrawCards(board)) //If we need to draw cards { //Set AncestralKnowledge spell modifier to 0% of the base spell value defined in "Rush" profile, the bot will play the spell more easily parameters.SpellsModifiers.AddOrUpdate(Cards.AncestralKnowledge, new Modifier(0)); parameters.GlobalDrawModifier = new Modifier(150); } else { parameters.GlobalDrawModifier = new Modifier(50); } if (board.TurnCount < 5) { //Turn specific handlers switch (board.ManaAvailable) { case 1: HandleTurnOneSpecifics(board, ref parameters); break; case 2: HandleTurnTwoSpecifics(board, ref parameters); break; } } //If we can play doomhammer next turn we don't want to overload if (!HasDoomhammerOnBoard(board) && CanPlayDoomhammerNextTurn(board)) { if (board.MinionFriend.Count > 0) OverrideOverloadMinionsModifiers(ref parameters); OverrideOverloadSpellsModifiers(ref parameters); } return parameters; }
public void HandleSpells(ref ProfileParameters parameters, Board board) { //Set FeralSpirit spell modifier to 20% of the base spell value defined in "Rush" profile, the AI has more chances to play this spell parameters.SpellsModifiers.AddOrUpdate(Cards.FeralSpirit, new Modifier(100)); //Set lava shock spell modifier to 200% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand without any overloaded mana parameters.SpellsModifiers.AddOrUpdate(Cards.LavaShock, new Modifier(200)); parameters.SpellsModifiers.AddOrUpdate(Cards.EarthShock, new Modifier(250)); parameters.SpellsModifiers.AddOrUpdate(Cards.LightningBolt, new Modifier(300, board.HeroEnemy.Id)); //Lower TheCoin modifier parameters.SpellsModifiers.AddOrUpdate(TheCoin, new Modifier(50)); }
public ProfileParameters GetParameters(Board board) { //Init profile parameter based on rush profile var parameters = new ProfileParameters(BaseProfile.Rush); //300% of default "Rush" profile value -> the bot will be more aggressive if (board.TurnCount <= 4 || board.HeroEnemy.CurrentHealth > 18) { parameters.GlobalAggroModifier.Value = 150; foreach (var card in board.MinionFriend) { parameters.BoardFriendlyMinionsModifiers.AddOrUpdate(card.Template.Id, new Modifier(200)); } } else parameters.GlobalAggroModifier.Value = 300; HandleSpells(ref parameters, board); HandleMinions(ref parameters, board); //Lower earthshock modifier on Sludge belcher //parameters.SpellsModifiers.AddOrUpdate(EarthShock, new Modifier(20, SludgeBelcher)); OverrideSilenceSpellsValueOnTauntMinions(ref parameters); //Lower silences values on taunts Log("Potential Damages in hand : " + BoardHelper.GetTotalBlastDamagesInHand(board)); Log("Potential Weapon: " + BoardHelper.GetPotentialWeaponDamages(board)); Log("Potential minions: " + board.MinionFriend.Sum(x => x.CurrentAtk)); Log("Lethal next turn : " + BoardHelper.HasPotentialLethalNextTurn(board)); Log("Lethal next turn without spells : " + BoardHelper.HasPotentialLethalNextTurnWithoutSpells(board)); Log("Next turn attackers from hand : " + string.Join(" - ", BoardHelper.GetPlayableMinionSequenceAttacker(BoardHelper.GetPlayableMinionSequence(board), board))); Log("Next turn attackers from board : " + string.Join(" - ", BoardHelper.GetPotentialMinionAttacker(board))); //If we cant put down enemy's life at topdeck lethal range if (!BoardHelper.HasPotentialLethalNextTurn(board) || (BoardHelper.HasPotentialLethalNextTurn(board) && BoardHelper.HasPotentialLethalNextTurnWithoutSpells(board))) { if (BoardHelper.HasPotentialLethalNextTurnWithoutSpells(board)) parameters.GlobalAggroModifier.Value = 100; //Set crackle spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand before turn 6 parameters.SpellsModifiers.AddOrUpdate(Cards.Crackle, new Modifier(GetOverloadSpellConservativeModifier(board, Cards.Crackle))); parameters.SpellsModifiers.AddOrUpdate(Cards.Crackle, new Modifier(GetOverloadSpellConservativeModifier(board, Cards.Crackle), board.HeroEnemy.Id)); //Set lava burst spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand for lethal parameters.SpellsModifiers.AddOrUpdate(Cards.LavaBurst, new Modifier(GetOverloadSpellConservativeModifier(board, Cards.LavaBurst))); parameters.SpellsModifiers.AddOrUpdate(Cards.LavaBurst, new Modifier(GetOverloadSpellConservativeModifier(board, Cards.LavaBurst), board.HeroEnemy.Id)); //Set lava burst spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand for lethal parameters.MinionsModifiers.AddOrUpdate(Cards.ArcaneGolem, new Modifier(400)); } if (BoardHelper.HasPotentialLethalNextTurn(board) && !BoardHelper.HasPotentialLethalNextTurnWithoutSpells(board)) { PreventSpellFromBeingPlayedOnMinions(ref parameters, board); parameters.GlobalAggroModifier.Value = 400; } if (BoardHelper.HasDoomhammerOnBoard(board) || (board.TurnCount <= 5 && !board.HasCardInHand(Cards.LightningBolt))) //If we don't have doomhammer this turn { //Set rockbiter spell modifier to 400% of the base spell value defined in "Rush" profile, the bot will try to keep this spell in hand until we get doomhammer parameters.SpellsModifiers.AddOrUpdate(Cards.RockbiterWeapon, new Modifier(board.TurnCount > 4 ? 200 : 100)); } else { parameters.SpellsModifiers.AddOrUpdate(Cards.RockbiterWeapon, new Modifier(400)); } if (BoardHelper.ShouldDrawCards(board)) //If we need to draw cards { //Set AncestralKnowledge spell modifier to 0% of the base spell value defined in "Rush" profile, the bot will play the spell more easily parameters.SpellsModifiers.AddOrUpdate(Cards.AncestralKnowledge, new Modifier(0)); parameters.GlobalDrawModifier = new Modifier(150); } else { parameters.GlobalDrawModifier = new Modifier(50); } if (board.TurnCount < 5) { //Turn specific handlers switch (board.ManaAvailable) { case 1: HandleTurnOneSpecifics(board, ref parameters); break; case 2: HandleTurnTwoSpecifics(board, ref parameters); break; } } //If we can play doomhammer next turn we don't want to overload /* if (!BoardHelper.HasDoomhammerOnBoard(board) && BoardHelper.CanPlayDoomhammerNextTurn(board)) { if (board.MinionFriend.Count > 0) OverrideOverloadMinionsModifiers(ref parameters); OverrideOverloadSpellsModifiers(ref parameters); }*/ //Reduce spells values over threatening minions OverrideSpellsValuesOnThreats(ref parameters); Log("AggroMod : " + parameters.GlobalAggroModifier.Value); return parameters; }
private void HandleTurnThreeSpecifics(Board board, ref ProfileParameters parameters) { //Please shredder if (board.ManaAvailable == 3 && HasCoin(board) && board.HasCardInHand(Cards.PilotedShredder)) { parameters.MinionsModifiers.AddOrUpdate(Cards.PilotedShredder, new Modifier(-600)); } //DruidoftheClaw if (board.ManaAvailable == 3 && Hasinnervate(board) && board.HasCardInHand(Cards.DruidoftheClaw)) { parameters.MinionsModifiers.AddOrUpdate(Cards.DruidoftheClaw, new Modifier(-600)); } }
//具体策略 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 OutcastCards = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsOutCastCard(x, board) == true); int GuldanOutcastCards = board.Hand.Count(x => x.CurrentCost > 0 && BoardHelper.IsGuldanOutCastCard(x, board) == true); Bot.Log("OutcastCards: " + (int)(OutcastCards + GuldanOutcastCards)); //Bot.Log("玩家信息: " + rank+"/n"+Legend); var p = new ProfileParameters(BaseProfile.Rush) { DiscoverSimulationValueThresholdPercent = -10 }; p.CastSpellsModifiers.AddOrUpdate(TheCoin, new Modifier(85)); //自定义命名 int a = (board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - BoardHelper.GetEnemyHealthAndArmor(board);//敌我血量差 //攻击模式切换 if (board.EnemyClass == Card.CClass.DEMONHUNTER || board.EnemyClass == Card.CClass.HUNTER || board.EnemyClass == Card.CClass.ROGUE || board.EnemyClass == Card.CClass.SHAMAN || board.EnemyClass == Card.CClass.PALADIN || board.EnemyClass == Card.CClass.WARRIOR) { p.GlobalAggroModifier = (int)(a * 0.625 + 96.5); } else { p.GlobalAggroModifier = (int)(a * 0.625 + 103.5); } Bot.Log("攻击性:" + p.GlobalAggroModifier.Value); //假如对面场上有奥秘并且剩余费用大于五,提高总督察的优先级 if (board.SecretEnemy && board.ManaAvailable >= 5) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.GIL_648, new Modifier(-200)); } //假如费用大于5,手牌小于2,提高沉默优先级 if (board.FriendDeckCount <= 2 && board.ManaAvailable >= 5) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_490, new Modifier(-99));//吞噬魔法 } //假如对面有科学家,提高沉默优先级 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.FP1_004)) //疯狂的科学家 { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_490, new Modifier(-99)); //吞噬魔法 } //假如对面有空灵,提高沉默优先级 if (board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.FP1_022)) //空灵召唤者 { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_490, new Modifier(-99)); //吞噬魔法 } //费用大于等于3且耐久值为1,手上有战刃,提高棕红优先值 if (board.ManaAvailable >= 3 && board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.BT_922 &&//棕红之翼 board.WeaponFriend.CurrentDurability == 1 && board.HasCardInHand(Card.Cards.BT_430)) //埃辛诺斯战刃 { p.GlobalWeaponsAttackModifier = 100; } //如果棕红之刃耐久值为1,费用=4手上有双刃斩击,提高棕红之刃攻击优先值 if (board.ManaAvailable >= 3 && board.WeaponFriend != null && board.WeaponFriend.Template.Id == Card.Cards.BT_922 &&//棕红之翼 board.WeaponFriend.CurrentDurability == 1 && board.HasCardInHand(Card.Cards.BT_430)) //埃辛诺斯战刃 { p.GlobalWeaponsAttackModifier = 100; } //如果费用等于3,手上没有硬币或者手上有双刃斩击,降低任务达人优先级 if (board.ManaAvailable == 3 && board.HasCardInHand(Card.Cards.EX1_044) && //任务达人 !board.HasCardInHand(Card.Cards.GAME_005) || //幸运币 !board.HasCardInHand(Card.Cards.BT_175) ||//双刃斩击 !board.HasCardInHand(Card.Cards.BT_175t)//二次斩击 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_044, new Modifier(500)); //任务达人 } //如果费用等于2,降低任务达人优先级 if (board.ManaAvailable == 2 && board.HasCardInHand(Card.Cards.EX1_044) && //任务达人 board.HasCardInHand(Card.Cards.GAME_005) //幸运币 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_044, new Modifier(9999)); //任务达人 } //费用大于等于4,提高暴徒优先级 if (board.ManaAvailable >= 4 && board.HasCardInHand(Card.Cards.GIL_534) //荆棘帮暴徒 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.GIL_534, new Modifier(-200)); //荆棘帮暴徒 } //费用大于等于5,提高洛欧塞布 优先级 if (board.ManaAvailable >= 5 && board.HasCardInHand(Card.Cards.FP1_030) //荆棘帮暴徒 ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.FP1_030, new Modifier(-200)); //洛欧塞布 } //费用等于5,手上有刃缚精锐和双刃斩击,提高双刃和二次斩击斩击优先级 if (board.ManaAvailable == 5 &&//费用等于5 board.HasCardInHand(Card.Cards.BT_495) && //刃缚精锐 board.HasCardInHand(Card.Cards.BT_175) && //双刃斩击 board.HasCardInHand(Card.Cards.BT_175t) //二次斩击 ) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_175, new Modifier(-300)); //双刃斩击 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_175t, new Modifier(-300)); //二次斩击 } if (board.ManaAvailable >= 6 && board.Hand.Count <= 7 && board.HasCardInHand(Card.Cards.BT_601)) { p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.BT_601, new Modifier(-70)); }//如果当前剩余法力水晶大于等于6,手牌数量小于等于7并且手牌中有古尔丹头颅 //技能卡 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.WeaponsAttackModifiers.AddOrUpdate(Cards.Umberwing, new Modifier(134)); p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.BT_921, new Modifier(120)); //奥达奇 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.TB_011, new Modifier(50)); //硬币 //法术优先值 //恶魔变形 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_429, new Modifier(-35)); //幽灵视觉 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_491, new Modifier(-5)); //混乱打击 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.BT_035, new Modifier(-10)); //随从优先值 //降低玛维优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_737, new Modifier(80)); //任务达人 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_044, new Modifier(-40)); //盲眼监视者 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_323, new Modifier(-30)); //愤怒的女祭司 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_493, new Modifier(-70)); //暴怒邪吼者 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_416, new Modifier(-80)); //焦油爬行者 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_928, new Modifier(-40)); //萨特监工 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(-20)); //荆棘帮暴徒 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.GIL_534, new Modifier(-60)); //喷灯破坏者 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DRG_403, new Modifier(-80)); //异种群居蝎 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.OG_034, new Modifier(-40)); //南海船工 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.CS2_146, new Modifier(-90)); //南海船长 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.NEW1_027, new Modifier(-80)); //随从优先解 //提高战斗邪犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_351, new Modifier(200)); //螃蟹应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_700, new Modifier(200)); //炸弹牛仔应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_024, new Modifier(200)); //提高相位威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_252, new Modifier(200)); //提高热气球威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_057, new Modifier(200)); //提高空中私掠者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_016, new Modifier(200)); //提高搬水工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_270, new Modifier(200)); //提高凶恶的废钢猎犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_759, new Modifier(200)); //提高神殿狂战士威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_185, new Modifier(200)); //大法师瓦格斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_558, new Modifier(200)); //提高厄运信天翁 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_071, new Modifier(200)); //提高高级跟班厄尔克 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_035, new Modifier(200)); //提高狂奔的魔刃豹 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_006, new Modifier(200)); //提高卡雷苟斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_609, new Modifier(200)); //提高希亚玛特 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_178, new Modifier(200)); //提高齐恩瓦拉 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_104, new Modifier(200)); //提高机械袋鼠 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_445, new Modifier(200)); //提高机械袋鼠宝宝 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_445t, new Modifier(300)); //提高雏龙 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_116t, new Modifier(200)); //提高铸甲师 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_402, new Modifier(200)); //提高无面渗透者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_039, new Modifier(200)); //提高鲨鱼之灵威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.TRL_092, new Modifier(200)); //提高灭龙弩炮威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_256, new Modifier(200)); //提高飞刺威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_037, new Modifier(200)); //提高奇利亚斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_548, new Modifier(200)); //提高流放者奥图里斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_937, new Modifier(200)); //提高暗影珠宝师汉纳尔威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_188, new Modifier(200)); //提高萨特监工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(200)); //提高怒鳞纳迦威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_355, new Modifier(200)); //提高特殊坐骑商人威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_774, new Modifier(200)); //降低龙裔小鬼威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_238t12t2, new Modifier(-20)); //降低空灵召唤者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_022, new Modifier(-20)); return(p); }
private void PreventSpellFromBeingPlayedOnMinions(ref ProfileParameters parameters, Board board) { foreach (var card in board.MinionEnemy.FindAll(x => !x.IsTaunt)) { parameters.SpellsModifiers.AddOrUpdate(Cards.LightningBolt, new Modifier(500, card.Id)); parameters.SpellsModifiers.AddOrUpdate(Cards.LavaBurst, new Modifier(500, card.Id)); } }
//攻击模式 public ProfileParameters GetParameters(Board board) { 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.EnemyClass == Card.CClass.PALADIN) || (board.EnemyClass == Card.CClass.SHAMAN)) //如果敌人是骑士或萨满 { p = new ProfileParameters(BaseProfile.Default); //则切换为控场模式 } if (board.EnemyClass == Card.CClass.PRIEST) //如果敌人是牧师 { p = new ProfileParameters(BaseProfile.Face); //则切换为打脸模式 } //具体策略 if (board.Hand.Exists(x => x.Template.Id == Cards.VilespineSlayer) && (board.EnemyClass != Card.CClass.PALADIN) || board.Hand.Exists(x => x.Template.Id == Cards.SI7Agent && board.EnemyClass != Card.CClass.PALADIN)) { ; } //如果你的手牌有军7刺杀花。.且敌人不是骑士 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.UNG_809t1, new Modifier(200)); //火羽衍生物价值等于200 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_415, new Modifier(150)); if (board.MaxMana == 2 && (board.EnemyClass != Card.CClass.PALADIN)) { //如果你的水晶=2 p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.HERO_03bp, new Modifier(-60)); } //武器优先级=-60 if ((board.Hand.Exists(x => x.Template.Id == Card.Cards.DAL_747)) && (board.EnemyClass == Card.CClass.PRIEST) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.DAL_747, new Modifier(-150)); } //如果对面是牧师,提高飞行管理员的优先级 if ((board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_085)) && (board.MinionEnemy.Count <= 3) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_085, new Modifier(300)); } //130 if ((board.Hand.Exists(x => x.Template.Id == Card.Cards.EX1_085)) && (board.MinionEnemy.Count >= 4) ) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_085, new Modifier(-300)); } //130 if ((board.MinionFriend.Count >= 4) && (board.ManaAvailable >= 5) && (board.Hand.Exists(x => x.Template.Id == Cards.Loatheb)) ) { p.CastMinionsModifiers.AddOrUpdate(Cards.Loatheb, new Modifier(-50)); } //如果场上多过4个怪,而且手上有洛欧塞布,提高洛欧塞布的优先级 if ((myAttack >= 5) && (board.ManaAvailable >= 6) && (board.Hand.Exists(x => x.Template.Id == Cards.Loatheb)) && (board.MinionEnemy.Count <= 0) && (board.HeroEnemy.CurrentHealth - myAttack <= 12) && (board.EnemyClass == Card.CClass.PRIEST) ) { p.CastMinionsModifiers.AddOrUpdate(Cards.Loatheb, new Modifier(-50)); } //如果场攻大于5,而且对面是牧师,提高洛欧塞布的优先级 if ((board.ManaAvailable >= 9) && (board.Hand.Exists(x => x.Template.Id == Cards.Loatheb)) && (board.EnemyClass == Card.CClass.DRUID) ) { p.CastMinionsModifiers.AddOrUpdate(Cards.Loatheb, new Modifier(-50)); } //如果费用大于9,而且对面是德鲁伊,提高洛欧塞布的优先级 if ((myAttack >= 2) && (board.ManaAvailable >= 5) && (board.Hand.Exists(x => x.Template.Id == Cards.Loatheb)) && (board.HeroEnemy.CurrentHealth - myAttack <= 12) && (board.EnemyClass == Card.CClass.MAGE) ) { p.CastMinionsModifiers.AddOrUpdate(Cards.Loatheb, new Modifier(-50)); } //如果场攻大于2,而且对面是法师,提高洛欧塞布的优先级 if ((myAttack >= 5) && (board.ManaAvailable >= 5) && (board.Hand.Exists(x => x.Template.Id == Cards.Loatheb)) && (board.HeroEnemy.CurrentHealth - myAttack <= 12) && (board.EnemyClass == Card.CClass.WARLOCK) ) { p.CastMinionsModifiers.AddOrUpdate(Cards.Loatheb, new Modifier(-50)); } //如果场攻大于5,而且对面是术士,提高洛欧塞布的优先级 if ((board.EnemyClass == Card.CClass.MAGE) && !(board.WeaponEnemy != null && board.WeaponEnemy.Template.Id == Cards.Aluneth) && board.HasCardInHand(Cards.HarrisonJones) ) { p.CastMinionsModifiers.AddOrUpdate(Cards.HarrisonJones, new Modifier(500)); } //打法师对面不下刀我方不下哈里森 int ClanThugCount = board.Hand.Count(card => card.Template.Id == Card.Cards.GIL_534); //2费 刀是否砍脸 if (board.MaxMana == 2 && ClanThugCount < 2) { p.GlobalWeaponsAttackModifier = 80; p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.HERO_03bp, new Modifier(60)); } if (board.MaxMana == 2 && (!(board.HasCardInHand(Card.Cards.AT_029) || board.HasCardInHand(Card.Cards.DAL_415)))) { p.CastSpellsModifiers.AddOrUpdate(Card.Cards.GAME_005, new Modifier(150)); } //军七可裸下 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.EX1_134, new Modifier(45)); //武器优先值 // p.CastWeaponsModifiers.AddOrUpdate(Card.Cards.DRG_025, new Modifier(-80));//海盗之锚 Ancharrr ID:DRG_025 //武器攻击保守性 // p.WeaponsAttackModifiers.AddOrUpdate(Card.Cards.OG_058, new Modifier(-20));//锈蚀铁钩 Rusty Hook ID:OG_058 //法术 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.GAME_005, new Modifier(50));//幸运币 The Coin ID:GAME_005 // p.CastSpellsModifiers.AddOrUpdate(Card.Cards.GVG_038, new Modifier(134));//连环爆裂 Crackle ID:GVG_038 // p.CastSpellsModifiers.AddOrUpdate(Card.Cards.LOOT_541t, new Modifier(-200));//国王的赎金 King's Ransom ID:LOOT_541t //随从优先值 //p.CastMinionsModifiers.AddOrUpdate(Card.Cards.ULD_177, new Modifier(-60)); //八爪巨怪 Octosari ID:ULD_177提高优先级 //送掉怪 //随从优先解 //提高战斗邪犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_351, new Modifier(200)); //螃蟹应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_700, new Modifier(200)); //炸弹牛仔应该解 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_024, new Modifier(200)); //提高相位威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_252, new Modifier(200)); //提高热气球威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_057, new Modifier(200)); //提高空中私掠者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_016, new Modifier(200)); //提高搬水工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_270, new Modifier(200)); //提高凶恶的废钢猎犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_759, new Modifier(200)); //提高神殿狂战士威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_185, new Modifier(200)); //大法师瓦格斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_558, new Modifier(200)); //提高厄运信天翁 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_071, new Modifier(200)); //提高高级跟班厄尔克 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_035, new Modifier(200)); //提高狂奔的魔刃豹 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_006, new Modifier(200)); //提高卡雷苟斯 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_609, new Modifier(200)); //提高希亚玛特 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_178, new Modifier(200)); //提高齐恩瓦拉 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_104, new Modifier(200)); //提高雏龙 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_116t, new Modifier(200)); //提高铸甲师 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_402, new Modifier(200)); //提高无面渗透者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_039, new Modifier(200)); //提高鲨鱼之灵威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.TRL_092, new Modifier(200)); //提高灭龙弩炮威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_256, new Modifier(200)); //提高奇利亚斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BOT_548, new Modifier(200)); //提高流放者奥图里斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_937, new Modifier(200)); //提高暗影珠宝师汉纳尔威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_188, new Modifier(200)); //提高萨特监工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(200)); //提高怒鳞纳迦威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_355, new Modifier(200)); //提高特殊坐骑商人威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DAL_774, new Modifier(200)); //提高鲨鳍后援威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.TRL_507, new Modifier(200)); //提高小鬼骑士 Tiny Knight of Evil ID:AT_021威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.AT_021, new Modifier(200)); //提高对空奥术法师 Arcane Flakmage ID:ULD_240威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.ULD_240, new Modifier(200)); //提高火妖 Flamewaker ID:BRM_002威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BRM_002, new Modifier(200)); //提高巫师学徒 Sorcerer's Apprentice ID:EX1_608威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_608, new Modifier(200)); //提高银色神官帕尔崔丝 Confessor Paletress ID:AT_018威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.AT_018, new Modifier(200)); //提高索瑞森大帝 Emperor Thaurissan ID:WE1_039威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.WE1_039, new Modifier(200)); //提高空中炮艇 Skybarge ID:DRG_023威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_023, new Modifier(200)); //降低攻击优先值 //降低麦迪文的男仆 Medivh's Valet ID:KAR_092威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.KAR_092, new Modifier(50)); //降低资深探险者 Licensed Adventurer ID:YOD_030威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.GVG_051, new Modifier(50)); //降低恩佐斯的副官 威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.OG_312, new Modifier(50)); //降低疯狂的科学家 Mad Scientist ID:FP1_004 威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_004, new Modifier(50)); //降低资深探险者 Licensed Adventurer ID:YOD_030威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOD_030, new Modifier(50)); //降低空灵召唤者威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.FP1_022, new Modifier(50)); //降低龙裔小鬼威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_238t12t2, new Modifier(50)); //降低卡扎库斯 Kazakus ID:CFM_621威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CFM_621, new Modifier(50)); //降低玛克扎尔的小鬼 Malchezaar's Imp ID:KAR_089威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.KAR_089, new Modifier(50)); return(p); }
//version 1.2 (2021-09-17) //攻击模式 public ProfileParameters GetParameters(Board board) { //用BaseProfile函数调用加载云端的Rush策略 var p = new ProfileParameters(BaseProfile.Rush); p.DiscoverSimulationValueThresholdPercent = 10; //贫瘠之地默认优先级-BAR //贫瘠之地铁匠 Barrens Blacksmith ID:BAR_073 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_073, new Modifier(200)); //十字路口哨所 Crossroads Watch Post ID:BAR_075 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_075, new Modifier(200)); //布鲁坎 Bru'kan ID:BAR_048 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_048, new Modifier(200)); //凯瑞尔·罗姆 Cariel Roame ID:BAR_902 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_902, new Modifier(200)); //战地医师老兵 Veteran Warmedic ID:BAR_878 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_878, new Modifier(200)); //腐烂的普雷莫尔 Plaguemaw the Rotting ID:BAR_540 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_540, new Modifier(200)); //钢鬃卫兵 Razormane Battleguard ID:BAR_537 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_537, new Modifier(200)); //勘探者车队 Prospector's Caravan ID:BAR_033 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_033, new Modifier(200)); //科卡尔驯犬者 Kolkar Pack Runner ID:BAR_035 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_035, new Modifier(200)); //士兵车队 Soldier's Caravan ID:BAR_871 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_871, new Modifier(200)); //占卜者车队 Soothsayer's Caravan ID:BAR_312 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_312, new Modifier(200)); //高效八爪机器人 Efficient Octo-bot ID:BAR_320 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_320, new Modifier(200)); //鱼人宝宝车队 Tinyfin's Caravan ID:BAR_043 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_043, new Modifier(200)); //火焰术士弗洛格尔 Firemancer Flurgl ID:BAR_860 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_860, new Modifier(200)); //剂师车队 Apothecary's Caravan ID:BAR_912 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_912, new Modifier(200)); //甜水鱼人斥候 Lushwater Scout ID:BAR_063 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_063, new Modifier(200)); //前沿哨所 Far Watch Post ID:BAR_074 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_074, new Modifier(200)); //古夫·符文图腾 Guff Runetotem ID:BAR_720 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_720, new Modifier(200)); //塔维什·雷矛 Tavish Stormpike ID:BAR_038 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_038, new Modifier(200)); //奥术发光体 Arcane Luminary ID:BAR_545 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_545, new Modifier(200)); //霜舌半人马 Rimetongue ID:BAR_888 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_888, new Modifier(200)); //原野联络人 Field Contact ID:BAR_317 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_317, new Modifier(200)); //莫尔杉哨所 Mor'shan Watch Post ID:BAR_076 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_076, new Modifier(200)); //十字路口大嘴巴 Crossroads Gossiper ID:BAR_890 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_890, new Modifier(200)); //贫瘠之地诱捕者 Barrens Trapper ID:BAR_082 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_082, new Modifier(200)); //自定义命名 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.GAME_005, new Modifier(50)); //幸运币 The Coin ID:GAME_005 int a = (board.HeroFriend.CurrentHealth + board.HeroFriend.CurrentArmor) - BoardHelper.GetEnemyHealthAndArmor(board); //敌我血量差 //随从优先解 //核心 //提高雏龙(暂定) p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.EX1_116t, new Modifier(200)); //提高铸甲师 Armorsmith ID:CORE_EX1_402 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CORE_EX1_402, new Modifier(200)); //加基森拍卖师 Gadgetzan Auctioneer ID:CORE_EX1_095 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CORE_EX1_095, new Modifier(200)); //外域的灰烬-BT //灵魂之匣 Reliquary of Souls ID:BT_197 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_197, new Modifier(200)); //星术师索兰莉安 Astromancer Solarian ID:BT_028 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_028, new Modifier(200)); //莫戈尔·莫戈尔格 Murgur Murgurgle ID:BT_019 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_019, new Modifier(200)); //坎雷萨德·埃伯洛克 Kanrethad Ebonlocke ID:BT_309 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_309, new Modifier(200)); //孢子首领姆希菲 Archspore Msshi'fn ID:BT_136 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_136, new Modifier(200)); //莫顶级捕食者兹克索尔 Zixor, Apex Predator ID:BT_210 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_210, new Modifier(200)); //阿卡玛 Akama ID:BT_713 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_713, new Modifier(200)); //瓦丝琪女士 Lady Vashj ID:BT_109 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_109, new Modifier(200)); //卡加斯·刃拳 Kargath Bladefist ID:BT_123 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_123, new Modifier(200)); //终极卡加斯 Kargath Prime ID:BT_123t p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_123t, new Modifier(200)); //提高战斗邪犬威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_351, new Modifier(200)); //提高流放者奥图里斯威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_937, new Modifier(200)); //提高暗影珠宝师汉纳尔威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_188, new Modifier(200)); //提高萨特监工威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_352, new Modifier(200)); //提高怒鳞纳迦威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_355, new Modifier(200)); //强能箭猪 Augmented Porcupine ID:BT_201 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_201, new Modifier(200)); //提高黑眼 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_307, new Modifier(200)); //提高废料场巨像 Scrapyard Colossus ID:BT_155 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_155, new Modifier(200)); //改进型恐惧魔王 Enhanced Dreadlord ID:BT_304 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_304, new Modifier(200)); //塞泰克织巢者 Sethekk Veilweaver ID:BT_254 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_254, new Modifier(200)); //通灵学院-SCH //决斗大师莫扎奇 Mozaki, Master Duelist ID:SCH_400 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_400, new Modifier(200)); //狐人淬毒师 Vulpera Toxinblade ID:SCH_519 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_519, new Modifier(200)); //贪婪的书虫 Voracious Reader ID:SCH_142 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_142, new Modifier(200)); //暗月马戏团-DMF //伊格诺斯 Il'gynoth ID:DMF_230 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_230, new Modifier(200)); //纳兹曼尼织血者 Nazmani Bloodweaver ID:DMF_120 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_120, new Modifier(200)); //暗月竞速赛-YOP //死亡守望者 Deathwarden ID:YOP_012 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOP_012, new Modifier(200)); //铁锈特使拉斯维克斯 Envoy Rustwix ID:YOP_004 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOP_004, new Modifier(200)); //贫瘠之地的锤炼-BAR //塔姆辛·罗姆 Tamsin Roame ID:BAR_918 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_918, new Modifier(200)); //火焰术士弗洛格尔 Firemancer Flurgl ID:BAR_860 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_860, new Modifier(200)); //古夫·符文图腾 Guff Runetotem ID:BAR_720 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_720, new Modifier(200)); //塔维什·雷矛 Tavish Stormpike ID:BAR_038 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_038, new Modifier(200)); //洛卡拉 Rokara ID:BAR_847 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_847, new Modifier(200)); //腐烂的普雷莫尔 Plaguemaw the Rotting ID:BAR_540 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_540, new Modifier(200)); //凯瑞尔·罗姆 Cariel Roame ID:BAR_902 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BAR_902, new Modifier(200)); //针对职业 //如果对面是贼,需要提高魔杖窃贼的威胁值 if (board.EnemyClass == Card.CClass.ROGUE && board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.SCH_350) ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_350, new Modifier(199)); //魔杖窃贼 Wand Thief ID:SCH_350 //Bot.Log("对面是潜行者要优先解掉魔杖窃贼"); } //如果对面是贼,需要提高狐人老千的威胁值 if (board.EnemyClass == Card.CClass.ROGUE && board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_511) ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_511, new Modifier(199)); //狐人老千 Foxy Fraud ID:DMF_511 //Bot.Log("对面是潜行者要优先解掉狐人老千"); } //如果对面是萨满,需要提高沙漠野兔的威胁值 if (board.EnemyClass == Card.CClass.SHAMAN && board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_703) || board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_703t) || board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_706t) ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_703, new Modifier(200)); //死斗场管理者 Pit Master ID:DMF_703 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_703t, new Modifier(200)); //死斗场管理者(已腐蚀) Pit Master ID:DMF_703t p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_706t, new Modifier(200)); //大帐决斗者 Pavilion Duelist ID:DMF_706t //Bot.Log("对面是萨满要优先解掉野兔、死斗场决斗者"); } //如果对面是萨满,需要优先解掉大眼睛 if (board.EnemyClass == Card.CClass.SHAMAN && board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.DMF_709) ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DMF_709, new Modifier(200)); //巨型图腾埃索尔 Grand Totem Eys'or ID:DMF_709 //Bot.Log("对面是萨满优先解掉大眼睛"); } //如果对面是瞎子提高血法师威胁值 if (board.EnemyClass == Card.CClass.DEMONHUNTER && board.MinionEnemy.Any(minion => minion.Template.Id == Card.Cards.CORE_EX1_012) ) { p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CORE_EX1_012, new Modifier(199)); //血法师萨尔诺斯 Bloodmage Thalnos ID:CORE_EX1_012 //Bot.Log("对面是瞎子提高血法师威胁值"); } //如果对面是法师提高法强随从威胁值 if (board.EnemyClass == Card.CClass.MAGE) { //p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_245, new Modifier(200));//卷轴管理者 Steward of Scrolls ID:SCH_245 //p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.BT_028, new Modifier(200));//星术师索兰莉安 Astromancer Solarian ID:BT_028 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_273, new Modifier(200)); //莱斯·霜语 Ras Frostwhisper ID:SCH_273 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.YOP_021, new Modifier(200)); //被禁锢的凤凰 Imprisoned Phoenix ID:YOP_021 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.SCH_310, new Modifier(200)); //研究伙伴 Lab Partner ID:SCH_310 //Bot.Log("对面是法师提高法强随从威胁值"); } //降低攻击优先值 //降低龙裔小鬼威胁值 //p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.DRG_238t12t2, new Modifier(60)); //手工策略 //牌库数量大于10张的时候,提高过牌的优先级,降低333优先级 Bot.Log("我方牌库剩余牌数" + board.FriendDeckCount); if (board.FriendDeckCount > 10) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BAR_916, new Modifier(150)); //血岩碎片刺背野猪人 Blood Shard Bristleback ID:BAR_916 p.CastSpellsModifiers.AddOrUpdate(Card.Cards.YOP_033, new Modifier(-200)); //赛车回火 Backfire ID:YOP_033 p.CastHeroPowerModifier.AddOrUpdate(Card.Cards.CS2_056_H1, new Modifier(-100)); //生命分流 Life Tap ID:HERO_07bp } //对方没有随从降低333优先级 if (board.MinionEnemy.Count == 0) { p.CastMinionsModifiers.AddOrUpdate(Card.Cards.BAR_916, new Modifier(150)); //血岩碎片刺背野猪人 Blood Shard Bristleback ID:BAR_916 } //提高闪金镇狼人的优先级 p.CastMinionsModifiers.AddOrUpdate(Card.Cards.SW_062, new Modifier(-200)); //闪金镇豺狼人 Goldshire Gnoll ID:SW_062 //提高术士技能优先级 //提高力量图腾、团队领袖的威胁值 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CS2_058, new Modifier(200)); //力量图腾 Strength Totem ID:CS2_058 p.OnBoardBoardEnemyMinionsModifiers.AddOrUpdate(Card.Cards.CORE_CS2_122, new Modifier(200)); //团队领袖 Raid Leader ID:CORE_CS2_122 return(p); }