Beispiel #1
0
        /// <summary>
        /// Clever enough.
        /// </summary>
        protected bool DefaultDimensionalBarrier()
        {
            const int RITUAL   = 0;
            const int FUSION   = 1;
            const int SYNCHRO  = 2;
            const int XYZ      = 3;
            const int PENDULUM = 4;

            if (Duel.Player != 0)
            {
                List <ClientCard> monsters = Enemy.GetMonsters();
                int[]             levels   = new int[13];
                bool tuner    = false;
                bool nontuner = false;
                foreach (ClientCard monster in monsters)
                {
                    if (monster.HasType(CardType.Tuner))
                    {
                        tuner = true;
                    }
                    else if (!monster.HasType(CardType.Xyz) && !monster.HasType(CardType.Link))
                    {
                        nontuner = true;
                        levels[monster.Level] = levels[monster.Level] + 1;
                    }

                    if (monster.IsOneForXyz())
                    {
                        AI.SelectOption(XYZ);
                        return(true);
                    }
                }
                if (tuner && nontuner)
                {
                    AI.SelectOption(SYNCHRO);
                    return(true);
                }
                for (int i = 1; i <= 12; i++)
                {
                    if (levels[i] > 1)
                    {
                        AI.SelectOption(XYZ);
                        return(true);
                    }
                }
                ClientCard l = Enemy.SpellZone[6];
                ClientCard r = Enemy.SpellZone[7];
                if (l != null && r != null && l.LScale != r.RScale)
                {
                    AI.SelectOption(PENDULUM);
                    return(true);
                }
            }
            ClientCard lastchaincard = Util.GetLastChainCard();

            if (Duel.LastChainPlayer == 1 && lastchaincard != null && !lastchaincard.IsDisabled())
            {
                if (lastchaincard.HasType(CardType.Ritual))
                {
                    AI.SelectOption(RITUAL);
                    return(true);
                }
                if (lastchaincard.HasType(CardType.Fusion))
                {
                    AI.SelectOption(FUSION);
                    return(true);
                }
                if (lastchaincard.HasType(CardType.Synchro))
                {
                    AI.SelectOption(SYNCHRO);
                    return(true);
                }
                if (lastchaincard.HasType(CardType.Xyz))
                {
                    AI.SelectOption(XYZ);
                    return(true);
                }
                if (lastchaincard.IsFusionSpell())
                {
                    AI.SelectOption(FUSION);
                    return(true);
                }
            }
            if (Util.IsChainTarget(Card))
            {
                AI.SelectOption(XYZ);
                return(true);
            }
            return(false);
        }
Beispiel #2
0
        protected bool DefaultDimensionalBarrier()
        {
            if (Duel.Player != 0)
            {
                List <ClientCard> monsters = Duel.Fields[1].GetMonsters();
                int[]             levels   = new int[13];
                bool tuner    = false;
                bool nontuner = false;
                foreach (ClientCard monster in monsters)
                {
                    if (monster.HasType(CardType.Tuner))
                    {
                        tuner = true;
                    }
                    else if (!monster.HasType(CardType.Xyz))
                    {
                        nontuner = true;
                    }
                    if (monster.IsOneForXyz())
                    {
                        AI.SelectOption(3);
                        return(true);
                    }
                    levels[monster.Level] = levels[monster.Level] + 1;
                }
                if (tuner && nontuner)
                {
                    AI.SelectOption(2);
                    return(true);
                }
                for (int i = 1; i <= 12; i++)
                {
                    if (levels[i] > 1)
                    {
                        AI.SelectOption(3);
                        return(true);
                    }
                }
                ClientCard l = Duel.Fields[1].SpellZone[6];
                ClientCard r = Duel.Fields[1].SpellZone[7];
                if (l != null && r != null && l.LScale != r.RScale)
                {
                    AI.SelectOption(4);
                    return(true);
                }
            }
            ClientCard lastchaincard = GetLastChainCard();

            if (LastChainPlayer == 1 && lastchaincard != null && !lastchaincard.IsDisabled())
            {
                if (lastchaincard.HasType(CardType.Ritual))
                {
                    AI.SelectOption(0);
                    return(true);
                }
                if (lastchaincard.HasType(CardType.Fusion))
                {
                    AI.SelectOption(1);
                    return(true);
                }
                if (lastchaincard.HasType(CardType.Synchro))
                {
                    AI.SelectOption(2);
                    return(true);
                }
                if (lastchaincard.HasType(CardType.Xyz))
                {
                    AI.SelectOption(3);
                    return(true);
                }
                if (lastchaincard.IsFusionSpell())
                {
                    AI.SelectOption(1);
                    return(true);
                }
            }
            foreach (ClientCard card in Duel.ChainTargets)
            {
                if (Card.Equals(card))
                {
                    AI.SelectOption(3);
                    return(true);
                }
            }
            return(false);
        }