Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 private void OverrideSpellsValuesOnThreats(ref ProfileParameters parameters)
 {
     foreach (var card in _threatsModifiersTable)
     {
         parameters.SpellsModifiers.AddOrUpdate(card.Key.Key, new Modifier(card.Value, card.Key.Value));
     }
 }
Exemplo n.º 3
0
 private void OverrideOverloadMinionsModifiers(ref ProfileParameters parameters)
 {
     foreach (var i in _minionsOverloadTable)
     {
         parameters.MinionsModifiers.AddOrUpdate(i.Key, new Modifier(600));
     }
 }
Exemplo n.º 4
0
        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));
                }
            }
        }
Exemplo n.º 5
0
        public ProfileParameters GetParameters(Board board)
        {
            var profileparams = new ProfileParameters(BaseProfile.Rush);

            profileparams.DiscoverSimulationValueThresholdPercent = 10;
            return(profileparams);
        }
Exemplo n.º 6
0
    /// <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);
    }
Exemplo n.º 7
0
 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));
         }
     }
 }
Exemplo n.º 8
0
        /***************************************************/
        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);
            }
        }
Exemplo n.º 9
0
        //防止法术被使用
        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));
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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));
            }
        }
Exemplo n.º 13
0
    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;
        }
    }
Exemplo n.º 14
0
    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;
            }
        }
    }
Exemplo n.º 15
0
        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));
                }
            }
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
    /// <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;
            }
        }
    }
Exemplo n.º 18
0
        //具体策略
        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);
        }
Exemplo n.º 19
0
        //具体策略
        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);
        }
Exemplo n.º 20
0
        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));
        }
Exemplo n.º 21
0
 private void OverrideSpellsValuesOnThreats(ref ProfileParameters parameters)
 {
     foreach (var card in _threatsModifiersTable)
     {
         parameters.SpellsModifiers.AddOrUpdate(card.Key.Key, new Modifier(card.Value, card.Key.Value));
     }
 }
Exemplo n.º 22
0
        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));
        }
Exemplo n.º 23
0
        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));
            }
        }
Exemplo n.º 24
0
        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;
        }
Exemplo n.º 25
0
        //具体策略
        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);
        }
Exemplo n.º 26
0
 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));
         }
     }
 }
Exemplo n.º 27
0
 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));
 }
Exemplo n.º 28
0
        //具体策略
        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);
        }
Exemplo n.º 29
0
        /***************************************************/

        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);
        }
Exemplo n.º 30
0
        //具体策略
        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);
        }
Exemplo n.º 31
0
        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));
                }
            }
        }
Exemplo n.º 32
0
    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();
    }
Exemplo n.º 33
0
        //具体策略
        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);
            }
        }
Exemplo n.º 35
0
        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));
        }
Exemplo n.º 36
0
        //具体策略
        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);
        }
Exemplo n.º 37
0
 private void OverrideOverloadMinionsModifiers(ref ProfileParameters parameters)
 {
     foreach (var i in _minionsOverloadTable)
     {
         parameters.MinionsModifiers.AddOrUpdate(i.Key, new Modifier(600));
     }
 }
Exemplo n.º 38
0
        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));
            }
        }
Exemplo n.º 39
0
        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;
        }
Exemplo n.º 40
0
        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));
        }
Exemplo n.º 41
0
        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;
        }
Exemplo n.º 42
0
        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));
            }
        }
Exemplo n.º 43
0
        //具体策略
        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);
        }
Exemplo n.º 44
0
 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));
     }
 }
Exemplo n.º 45
0
        //攻击模式



        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);
        }
Exemplo n.º 46
0
        //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);
        }