コード例 #1
0
        public virtual Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            if (m_Combo == 0)
            {
                spell   = new ExplosionSpell(m_Mobile, null);
                m_Combo = 4;                 // Move to next spell
            }

            if (m_Combo == 3 && spell == null)
            {
                switch (Utility.Random(2))
                {
                default:
                case 0:
                {
                    spell   = new EnergyBoltSpell(m_Mobile, null);
                    m_Combo = -1;                             // Reset combo state
                    break;
                }

                case 1:
                {
                    spell   = new FlameStrikeSpell(m_Mobile, null);
                    m_Combo = -1;                             // Reset combo state
                    break;
                }
                }
            }
            else if (m_Combo == 4 && spell == null)
            {
                spell   = new MindBlastSpell(m_Mobile, null);
                m_Combo = -1;
            }

            return(spell);
        }
コード例 #2
0
        public virtual Spell GetRandomDamageSpell(Mobile c)
        {
            int maxCircle = (int)((m_Mobile.Skills[SkillName.Magery].Value + 20.0) / (100.0 / 7.0));

            if (maxCircle < 1)
            {
                maxCircle = 1;
            }

            Spell spell = null;

            switch (Utility.Random(maxCircle * 2))
            {
            case 0:
            case 1: spell = new MagicArrowSpell(m_Mobile, null); break;

            case 2:
            case 3: spell = new HarmSpell(m_Mobile, null); break;

            case 4:
            case 5: spell = new FireballSpell(m_Mobile, null); break;

            case 6:
            case 7: spell = new LightningSpell(m_Mobile, null); break;

            case 8:
            case 9: spell = new MindBlastSpell(m_Mobile, null); break;

            case 10: spell = new EnergyBoltSpell(m_Mobile, null); break;

            case 11: spell = new ExplosionSpell(m_Mobile, null); break;

            default: spell = new FlameStrikeSpell(m_Mobile, null); break;
            }
            return(spell);
        }
コード例 #3
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            Spell spell = null;

            if (!SmartAI)
            {
                spell = CheckCastHealingSpell();

                if (spell != null)
                {
                    return(spell);
                }

                switch (Utility.Random(15))
                {
                case 0:
                case 1:         // Poison them
                {
                    if (c.Poisoned)
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Attempting to poison");

                    spell = new PoisonSpell(m_Mobile, null);
                    break;
                }

                case 2:         // Bless ourselves
                {
                    m_Mobile.DebugSay("Blessing myself");

                    spell = GetRandomBuffSpell();        //new BlessSpell(this.m_Mobile, null);
                    break;
                }

                case 3:
                case 4:     // Curse them
                {
                    m_Mobile.DebugSay("Attempting to curse");

                    spell = GetRandomCurseSpell();
                    break;
                }

                case 5:         // Paralyze them
                {
                    if (c.Paralyzed || m_Mobile.Skills[SkillName.Magery].Value <= 50.0)
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Attempting to paralyze");

                    spell = new ParalyzeSpell(m_Mobile, null);
                    break;
                }

                case 6:     // Drain mana
                {
                    m_Mobile.DebugSay("Attempting to drain mana");

                    spell = GetRandomManaDrainSpell();
                    break;
                }

                default:     // Damage them
                {
                    m_Mobile.DebugSay("Just doing damage");

                    spell = GetRandomDamageSpell();
                    break;
                }
                }

                return(spell);
            }

            spell = CheckCastHealingSpell();

            if (spell != null)
            {
                return(spell);
            }

            switch (Utility.Random(3))
            {
            case 0:     // Poison them
            {
                if (c.Poisoned)
                {
                    goto case 1;
                }

                spell = new PoisonSpell(m_Mobile, null);
                break;
            }

            case 1:     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            default:     // Set up a combo
            {
                if (m_Mobile.Mana > 15 && m_Mobile.Mana < 40)
                {
                    if (c.Paralyzed && !c.Poisoned && !m_Mobile.Meditating)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.RandomBool() && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #4
0
ファイル: MageAI.cs プロジェクト: zerodowned/DimensionsNewAge
        public virtual Spell ChooseSpell(Mobile c)
        {
            Spell spell = null;

            if (!SmartAI)
            {
                spell = CheckCastHealingSpell();

                if (spell != null)
                {
                    return(spell);
                }

                switch (Utility.Random(16))
                {
                case 0:
                case 1:                         // Poison them
                {
                    //m_Mobile.DebugSay( "Attempting to poison" );

                    if (!c.Poisoned)
                    {
                        spell = new PoisonSpell(m_Mobile, null);
                    }

                    break;
                }

                case 2:                         // Bless ourselves.
                {
                    //m_Mobile.DebugSay( "Blessing myself" );

                    spell = new BlessSpell(m_Mobile, null);
                    break;
                }

                case 3:
                case 4:                         // Curse them.
                {
                    //m_Mobile.DebugSay( "Attempting to curse" );

                    spell = GetRandomCurse();
                    break;
                }

                case 5:                         // Paralyze them.
                {
                    //m_Mobile.DebugSay( "Attempting to paralyze" );

                    if (m_Mobile.Skills[SkillName.Magery].Value > 50.0)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }

                    break;
                }

                case 6:                         // Drain mana
                {
                    //m_Mobile.DebugSay( "Attempting to drain mana" );

                    spell = GetRandomManaDrainSpell();
                    break;
                }

                case 7:
                {
                    //m_Mobile.DebugSay( "Attempting to Invis" );

                    if (spell == null)
                    {
                        spell = new InvisibilitySpell(m_Mobile, null);
                    }

                    break;
                }

                default:                         // Damage them.
                {
                    //m_Mobile.DebugSay( "Just doing damage" );

                    spell = GetRandomDamage();
                    break;
                }
                }

                return(spell);
            }

            spell = CheckCastHealingSpell();

            if (spell != null)
            {
                return(spell);
            }

            switch (Utility.Random(2)) // Removido COMBO Utility.Random( 3 )
            {
            default:
            case 0:                     // Poison them
            {
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                break;
            }

            case 1:                     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            case 2:                     // Set up a combo
            {
                if (m_Mobile.Mana < 40 && m_Mobile.Mana > 15)
                {
                    if (c.Paralyzed && !c.Poisoned)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.Random(2) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #5
0
        public virtual Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            if (m_Combo == 0)
            {
                //m_Mobile.Say( "combo phase 0" );
                spell = new ExplosionSpell(m_Mobile, null);
                ++m_Combo;                 // Move to next spell
            }
            else if (m_Combo == 1)
            {
                //m_Mobile.Say( "combo phase 1" );
                spell = new ExplosionSpell(m_Mobile, null);
                ++m_Combo;                 // Move to next spell
            }
            else if (m_Combo == 2)
            {
                //m_Mobile.Say( "combo phase 2" );
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                ++m_Combo;                 // Move to next spell
            }

            else if (m_Combo == 3)
            {
                //m_Mobile.Say( "combo phase 3" );
                if (c.Poisoned)
                {
                    spell = new WeakenSpell(m_Mobile, null);
                }

                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                ++m_Combo;                 // Move to next spell
            }

            else if (m_Combo == 4)
            {
                //	m_Mobile.Say( "combo phase 4 ebolt" );
                spell = new EnergyBoltSpell(m_Mobile, null);

                ++m_Combo;                 // Move to next spell
            }

            else if (m_Combo == 5)
            {
                //m_Mobile.Say( "combo phase 5" );
                if (c.Poisoned && c.Alive)
                {
                    spell = new HarmSpell(m_Mobile, null);

                    m_Combo = 5;                     // Move to next spell
                }

                if (!c.Poisoned)
                {
                    if (m_Mobile.Mana > 20)
                    {
                        spell = new EnergyBoltSpell(m_Mobile, null);
                    }

                    if (m_Mobile.Mana < 19)
                    {
                        spell = new LightningSpell(m_Mobile, null);
                    }
                    m_Combo = -1;                     // Reset combo state
                }
            }

            return(spell);
        }
コード例 #6
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            if (!SmartAI)
            {
                if (!m_Mobile.Summoned && ScaleByMagery(HealChance) > Utility.RandomDouble())
                {
                    if (m_Mobile.Hits < (m_Mobile.HitsMax - 50))
                    {
                        return(new GreaterHealSpell(m_Mobile, null));
                    }
                    else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                    {
                        return(new HealSpell(m_Mobile, null));
                    }
                }

                return(GetRandomDamageSpell());
            }

            if (c.Int > 70 && m_Mobile.CanBeginAction(typeof(DefensiveSpell)))
            {
                return(new MagicReflectSpell(m_Mobile, null));
            }

            if (c.Dex > 60 && m_Mobile.CanBeginAction(typeof(DefensiveSpell)))
            {
                return(new ReactiveArmorSpell(m_Mobile, null));
            }


            Spell spell = null;

            int healChance = (m_Mobile.Hits == 0 ? m_Mobile.HitsMax : (m_Mobile.HitsMax / m_Mobile.Hits));

            if (m_Mobile.Summoned)
            {
                healChance = 0;
            }

            switch (Utility.Random(1 + healChance))
            {
            default:
            case 0:                     // Heal ourself
            {
                if (!m_Mobile.Summoned)
                {
                    if (m_Mobile.Hits < (m_Mobile.HitsMax - 50))
                    {
                        spell = new GreaterHealSpell(m_Mobile, null);
                    }
                    else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                    {
                        spell = new HealSpell(m_Mobile, null);
                    }
                }

                break;
            }

            //case 1: // Poison them
            //{
            //	if ( !c.Poisoned )
            //		spell = new PoisonSpell( m_Mobile, null );
            //
            //	break;
            //	}
            //case 2: // Deal some damage
            //	{
            //		spell = GetRandomDamageSpell();
            //
            //		break;
            //	}
            case 1:                     // Set up a combo
            {
                if (m_Mobile.Mana < 50 && m_Mobile.Mana > 15)
                {
                    if (c.Paralyzed && !c.Poisoned)
                    {
                        if (c.Hits < 45)
                        {
                            spell = new ExplosionSpell(m_Mobile, null);
                        }

                        if (c.Hits < 30)
                        {
                            spell = new EnergyBoltSpell(m_Mobile, null);
                        }

                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 80)
                {
                    m_Combo = 1;
                    spell   = new ExplosionSpell(m_Mobile, null);
                }

                break;
            }
            }

            return(spell);
        }
コード例 #7
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            Spell spell = null;

            if (!SmartAI)
            {
                spell = CheckCastHealingSpell();

                if (spell != null)
                {
                    return(spell);
                }

                switch (Utility.Random(16))
                {
                case 0:
                {
                    spell = new FireballSpell(m_Mobile, null);
                    break;
                }

                case 1:
                {
                    m_Mobile.DebugSay("Protecting myself");

                    spell = new ProtectionSpell(m_Mobile, null);
                    break;
                }

                case 2:         // Poison them
                {
                    m_Mobile.DebugSay("Attempting to poison");

                    if (!c.Poisoned)
                    {
                        spell = new PoisonSpell(m_Mobile, null);
                    }

                    break;
                }

                case 3:         // Bless ourselves.
                {
                    m_Mobile.DebugSay("Blessing myself");

                    spell = new BlessSpell(m_Mobile, null);
                    break;
                }

                case 4:
                {
                    m_Mobile.DebugSay("Summoning FIRE FIELD!!!");

                    spell = new FireFieldSpell(m_Mobile, null);
                    break;
                }

                case 5:
                case 6:     // Curse them.
                {
                    m_Mobile.DebugSay("Attempting to curse");

                    spell = GetRandomCurseSpell();
                    break;
                }

                case 7:         // Paralyze them.
                {
                    m_Mobile.DebugSay("Attempting to paralyze");

                    if (m_Mobile.Skills[SkillName.Magery].Value > 50.0)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }

                    break;
                }

                case 8:     // Drain mana
                {
                    m_Mobile.DebugSay("Attempting to drain mana");

                    spell = GetRandomManaDrainSpell();
                    break;
                }

                default:     // Damage them.
                {
                    m_Mobile.DebugSay("Just doing damage");

                    spell = GetRandomDamageSpell();
                    break;
                }
                }

                return(spell);
            }

            spell = CheckCastHealingSpell();

            if (spell != null)
            {
                return(spell);
            }

            if (!c.Poisoned && c.Spell != null && c.Mana > (c.ManaMax / 2))
            {
                return(GetRandomManaDrainSpell());
            }

            if (m_Mobile.Hits < (m_Mobile.HitsMax / 2) && 0.30 > Utility.RandomDouble())
            {
                spell = new ProtectionSpell(m_Mobile, null);

                if (spell == null)
                {
                    spell = new BlessSpell(m_Mobile, null);
                }

                if (spell != null)
                {
                    return(spell);
                }
            }

            if (c.Hits < (c.HitsMax * 0.30))  //They're dying, set up a kill combo
            {
                m_Combo = 0;

                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }
                else
                {
                    spell = new ParalyzeSpell(m_Mobile, null);
                }
            }

            switch (Utility.Random(10))
            {
            default:
            case 0:     // Deal some damage
            {
                spell = GetRandomDamageSpell();
                break;
            }

            case 1:     // Poison them
            {
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                break;
            }

            case 2:     // Set up a combo
            {
                if (m_Mobile.Mana < 40 && m_Mobile.Mana > 15)
                {
                    if (c.Paralyzed && !c.Poisoned)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.Random(2) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }

            case 3:
            {
                spell = GetRandomCurseSpell();
                break;
            }
            }

            return(spell);
        }
コード例 #8
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            if (!SmartAI)
            {
                if (ScaleByMagery(HealChance) > Utility.RandomDouble())
                {
                    if (m_Mobile.Hits < (m_Mobile.HitsMax - 50))
                    {
                        return(new GreaterHealSpell(m_Mobile, null));
                    }
                    else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                    {
                        return(new HealSpell(m_Mobile, null));
                    }
                }

                return(GetRandomDamageSpell());
            }

            Spell spell = null;

            int healChance = (m_Mobile.Hits == 0 ? m_Mobile.HitsMax : (m_Mobile.HitsMax / m_Mobile.Hits));

            switch (Utility.Random(4 + healChance))
            {
            default:
            case 0:                     // Heal ourself
            {
                if (m_Mobile.Hits < (m_Mobile.HitsMax - 50))
                {
                    spell = new GreaterHealSpell(m_Mobile, null);
                }
                else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                {
                    spell = new HealSpell(m_Mobile, null);
                }
                break;
            }

            case 1:                     // Poison them
            {
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                break;
            }

            case 2:                     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            case 3:                     // Set up a combo
            {
                if (m_Mobile.Mana < 40 && m_Mobile.Mana > 15)
                {
                    if (c.Paralyzed && !c.Poisoned)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.Random(2) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #9
0
ファイル: NecromageEpicAI.cs プロジェクト: KairiL/runuo
        public virtual Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            m_Mobile.DebugSay("Doing Combo");
            if (m_Combo == 0)
            {
                m_Mobile.DebugSay(" Casting Explosion and moving to the next spell ");
                spell = new ExplosionSpell(m_Mobile, null);
                ++m_Combo; // Move to next spell
            }
            else if (m_Combo == 1)
            {
                if (m_Mobile.Skills[SkillName.Magery].Value * Utility.RandomDouble() > m_Mobile.Skills[SkillName.Necromancy].Value * Utility.RandomDouble())
                {
                    spell = new FlameStrikeSpell(m_Mobile, null);
                    m_Mobile.DebugSay("Casting Flamestrike and moving to the next spell ");
                }
                else
                {
                    spell = new PoisonStrikeSpell(m_Mobile, null);
                    m_Mobile.DebugSay("Casting Poison Strike and moving to the next spell ");
                }
                ++m_Combo;     // Move to next spell
            }
            else if (m_Combo == 2)
            {
                m_Mobile.DebugSay("Casting maybe poison and moving to next spell");
                if (!c.Poisoned && (!(c is BaseCreature) ||
                                    (((BaseCreature)c).PoisonImmune != null && ((BaseCreature)m_Mobile).HitPoison != null &&
                                     ((BaseCreature)c).PoisonImmune.Level < ((BaseCreature)m_Mobile).HitPoison.Level) ||
                                    ((BaseCreature)c).PoisonImmune == null))
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }
                else
                {
                    spell = new PainSpikeSpell(m_Mobile, null);
                }

                ++m_Combo;                 // Move to next spell
            }
            else if (m_Combo == 3 && spell == null)
            {
                switch (Utility.Random(3))
                {
                default:
                case 0:
                {
                    m_Mobile.DebugSay("Casting small spell");
                    spell = GetSmallDamageSpell();
                    m_Mobile.DebugSay("Moving to next spell");
                    ++m_Combo;     // Move to next spell

                    break;
                }

                case 1:
                {
                    m_Mobile.DebugSay("Casting Strangle and resetting combo");
                    spell   = new StrangleSpell(m_Mobile, null);
                    m_Combo = -1;                             // Reset combo state
                    break;
                }

                case 2:
                {
                    m_Mobile.DebugSay("Casting small spell");
                    spell = GetSmallDamageSpell();
                    break;
                }
                }
            }
            else if (m_Combo == 4 && spell == null)
            {
                m_Mobile.DebugSay("Casting Vengeful Spirit and resetting combo");
                spell   = new VengefulSpiritSpell(m_Mobile, null);
                m_Combo = -1;
            }

            return(spell);
        }
コード例 #10
0
        public override Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            if (m_NecroComboType == NecroComboType.None)
            {
                m_NecroComboType = (NecroComboType)Utility.RandomMinMax(1, 7);
                m_Combo          = 0;
                m_Mobile.DebugSay("Doing {0} Combo", m_NecroComboType);
            }

            if (m_Combo == 0)
            {
                switch (m_NecroComboType)
                {
                case NecroComboType.Exp_FS_Omen_Poison_PS:
                case NecroComboType.Exp_MB_Omen_Poison_PS:
                case NecroComboType.Exp_EB_Omen_Poison_PS:
                case NecroComboType.Exp_FB_MA_Poison_PS:
                case NecroComboType.Exp_FB_Poison_PS:
                case NecroComboType.Exp_FB_MA_PS:
                case NecroComboType.Exp_Poison_FB_PS: spell = new ExplosionSpell(m_Mobile, null); break;
                }

                ++m_Combo;
            }
            else if (m_Combo == 1)
            {
                switch (m_NecroComboType)
                {
                case NecroComboType.Exp_FS_Omen_Poison_PS: spell = new FlameStrikeSpell(m_Mobile, null); break;

                case NecroComboType.Exp_MB_Omen_Poison_PS: spell = new MindBlastSpell(m_Mobile, null); break;

                case NecroComboType.Exp_EB_Omen_Poison_PS: spell = new EnergyBoltSpell(m_Mobile, null); break;

                case NecroComboType.Exp_FB_MA_Poison_PS:
                case NecroComboType.Exp_FB_Poison_PS:
                case NecroComboType.Exp_FB_MA_PS: spell = new FireballSpell(m_Mobile, null); break;

                case NecroComboType.Exp_Poison_FB_PS: spell = new PoisonSpell(m_Mobile, null); break;
                }

                ++m_Combo;
            }
            else if (m_Combo == 2)
            {
                switch (m_NecroComboType)
                {
                case NecroComboType.Exp_FS_Omen_Poison_PS:
                case NecroComboType.Exp_MB_Omen_Poison_PS:
                case NecroComboType.Exp_EB_Omen_Poison_PS: spell = new EvilOmenSpell(m_Mobile, null); break;

                case NecroComboType.Exp_FB_MA_Poison_PS: spell = new MagicArrowSpell(m_Mobile, null); break;

                case NecroComboType.Exp_FB_Poison_PS: spell = new PoisonSpell(m_Mobile, null); break;

                case NecroComboType.Exp_FB_MA_PS: spell = new MagicArrowSpell(m_Mobile, null); break;

                case NecroComboType.Exp_Poison_FB_PS: spell = new FireballSpell(m_Mobile, null); break;
                }

                ++m_Combo;
            }
            else if (m_Combo == 3)
            {
                switch (m_NecroComboType)
                {
                case NecroComboType.Exp_FS_Omen_Poison_PS:
                case NecroComboType.Exp_MB_Omen_Poison_PS:
                case NecroComboType.Exp_EB_Omen_Poison_PS:
                case NecroComboType.Exp_FB_MA_Poison_PS:
                case NecroComboType.Exp_FB_Poison_PS: spell = new PoisonSpell(m_Mobile, null); break;

                case NecroComboType.Exp_FB_MA_PS:
                case NecroComboType.Exp_Poison_FB_PS:
                    if (Utility.RandomBool())
                    {
                        spell = new PoisonStrikeSpell(m_Mobile, null);
                    }
                    else
                    {
                        spell = new PainSpikeSpell(m_Mobile, null);
                    }
                    EndCombo();
                    return(spell);
                }

                ++m_Combo;
            }

            else if (m_Combo == 4)
            {
                switch (m_NecroComboType)
                {
                case NecroComboType.Exp_FS_Omen_Poison_PS:
                case NecroComboType.Exp_MB_Omen_Poison_PS:
                case NecroComboType.Exp_EB_Omen_Poison_PS:
                case NecroComboType.Exp_FB_MA_Poison_PS:
                case NecroComboType.Exp_FB_Poison_PS:
                case NecroComboType.Exp_FB_MA_PS:
                case NecroComboType.Exp_Poison_FB_PS:
                    if (Utility.RandomBool())
                    {
                        spell = new PoisonStrikeSpell(m_Mobile, null);
                    }
                    else
                    {
                        spell = new PainSpikeSpell(m_Mobile, null);
                    }
                    EndCombo();
                    return(spell);
                }
            }

            return(spell);
        }
コード例 #11
0
ファイル: MageEpicAI.cs プロジェクト: KairiL/runuo
        public virtual Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            m_Mobile.DebugSay("Doing Combo");
            if (m_Combo == 0)
            {
                m_Mobile.DebugSay(" Casting Explosion and moving to the next spell ");
                spell = new ExplosionSpell(m_Mobile, null);
                ++m_Combo; // Move to next spell
            }
            else if (m_Combo == 1)
            {
                spell = new FlameStrikeSpell(m_Mobile, null);
                m_Mobile.DebugSay("Casting Flamestrike and moving to the next spell ");
                ++m_Combo; // Move to next spell
            }
            else if (m_Combo == 2)
            {
                m_Mobile.DebugSay("Casting maybe poison and moving to next spell");
                if (!c.Poisoned && (!(c is BaseCreature) ||
                                    (((BaseCreature)c).PoisonImmune != null && ((BaseCreature)m_Mobile).HitPoison != null &&
                                     ((BaseCreature)c).PoisonImmune.Level < ((BaseCreature)m_Mobile).HitPoison.Level) ||
                                    ((BaseCreature)c).PoisonImmune == null))
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }
                else
                {
                    spell = new HarmSpell(m_Mobile, null);
                }

                ++m_Combo;                 // Move to next spell
            }
            else if (m_Combo == 3 && spell == null)
            {
                switch (Utility.Random(3))
                {
                default:
                case 0:
                {
                    m_Mobile.DebugSay("Random small Spell and next spell");
                    spell = GetSmallDamageSpell();
                    ++m_Combo;     // Move to next spell

                    break;
                }

                case 1:
                {
                    m_Mobile.DebugSay("Random small spell and resetting combo");
                    spell   = GetSmallDamageSpell();
                    m_Combo = -1;     // Reset combo state
                    break;
                }

                case 2:
                {
                    m_Mobile.DebugSay("Random small spell and same state");
                    spell = GetSmallDamageSpell();
                    break;
                }
                }
            }
            else if (m_Combo == 4 && spell == null)
            {
                m_Mobile.DebugSay("Casting Flamestrike and resetting combo");
                spell   = new FlameStrikeSpell(m_Mobile, null);
                m_Combo = -1;
            }
            return(spell);
        }
コード例 #12
0
        public override Spell ChooseSpell(Mobile c)
        {
            if (c is PlayerMobile && SmartAI && (c.Spell is MagicTrapSpell || c.Spell is MagicArrowSpell))
            {
                EnemyCountersPara = true;
            }

            if (c.Int > 70 && m_Mobile.MagicDamageAbsorb <= 0 && m_Mobile.Mana > 20 && m_Mobile.Hits > 60 && m_Mobile.CanBeginAction(typeof(DefensiveSpell)))
            {
                Spell temp = c.Spell as Spell;

                if (temp == null || (temp != null && temp.IsCasting && (int)temp.Circle <= (int)SpellCircle.Fourth))
                {
                    return(new MagicReflectSpell(m_Mobile, null));
                }
            }

            if (c.Dex > 60 && m_Mobile.MeleeDamageAbsorb <= 0 && m_Mobile.Mana > 20 && m_Mobile.Hits > 30 && m_Mobile.CanBeginAction(typeof(DefensiveSpell)))
            {
                return(new ReactiveArmorSpell(m_Mobile, null));
            }

            Spell spell = null;

            int healChance = (m_Mobile.Hits == 0 ? m_Mobile.HitsMax : (m_Mobile.HitsMax / m_Mobile.Hits));

            switch (Utility.Random(1 + healChance))
            {
            default:
            case 0:                     // Heal ourself
            {
                if (UsesPotions && HealPotCount >= 1 && m_Mobile.Hits < (m_Mobile.HitsMax - 30))
                {
                    DrinkHeal(m_Mobile);
                }
                else if (m_Mobile.Hits < (m_Mobile.HitsMax - 35) && m_Mobile.Hits >= 45)
                {
                    spell = new GreaterHealSpell(m_Mobile, null);
                }
                else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                {
                    spell = new HealSpell(m_Mobile, null);
                }
                break;
            }

            case 1:                     // Set up a combo
            {
                //para them and med up until we have mana for a dump
                if (m_Mobile.Mana < 85 && m_Mobile.Mana > 2)
                {
                    RegainingMana = true;
                    //if there low on life and we have the mana try an finish them
                    if (m_Mobile.Mana > 20 && c.Hits < 28)
                    {
                        spell = new EnergyBoltSpell(m_Mobile, null);
                    }

                    if (m_Mobile.Mana > 12 && c.Hits < 15)
                    {
                        spell = new LightningSpell(m_Mobile, null);
                    }

                    if (c.Paralyzed && !c.Poisoned)
                    {
                        if (c.Hits < 45 && m_Mobile.Mana > 40)
                        {
                            spell = new ExplosionSpell(m_Mobile, null);
                        }

                        if (c.Hits < 30)
                        {
                            spell = new EnergyBoltSpell(m_Mobile, null);
                        }

                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned && EnemyCountersPara == false && m_Mobile.Mana > 40)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }

                if (m_Mobile.Mana > 85)
                {
                    RegainingMana = false;
                    Combo         = 0;
                }

                break;
            }
            }

            return(spell);
        }
コード例 #13
0
        public override Spell DoCombo(Mobile c)
        {
            //m_Mobile.Say("doing human AI combo");
            if (c is PlayerMobile && SmartAI && (c.Spell is MagicTrapSpell || c.Spell is MagicArrowSpell))
            {
                m_EnemyCountersPara = true;
            }

            Spell spell = null;

            if (Combo == 0)
            {
                //m_Mobile.Say( "combo phase 1" );
                spell = new ExplosionSpell(m_Mobile, null);
                ++Combo;                 // Move to next spell
            }

            if (Combo == 1)
            {
                //m_Mobile.Say( "combo phase 1" );
                spell = new ExplosionSpell(m_Mobile, null);
                ++Combo;                 // Move to next spell
            }
            else if (Combo == 2)
            {
                //m_Mobile.Say( "combo phase 2" );
                if (!c.Poisoned && (CheckCanPoison(c)))
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                ++Combo;                 // Move to next spell
            }

            else if (Combo == 3)
            {
                //m_Mobile.Say( "combo phase 3" );
                if (c.Poisoned || !CheckCanPoison(c))
                {
                    spell = new WeakenSpell(m_Mobile, null);
                }

                if (!c.Poisoned && (CheckCanPoison(c)))
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                ++Combo;                 // Move to next spell
            }

            else if (Combo == 4)
            {
                //	m_Mobile.Say( "combo phase 4 ebolt" );

                if (!c.Poisoned && (CheckCanPoison(c)))
                {
                    spell = new PoisonSpell(m_Mobile, null);
                    Combo = 4;
                }

                else
                {
                    spell = new EnergyBoltSpell(m_Mobile, null);
                }

                ++Combo;                 // Move to next spell
            }
            else if (Combo == 5)
            {
                //m_Mobile.Say( "combo phase 5" );
                if (c.Poisoned)
                {
                    if (c.Hits < 20 && m_Mobile.Mana >= 20)
                    {
                        spell = new EnergyBoltSpell(m_Mobile, null);
                    }

                    else
                    {
                        spell = new HarmSpell(m_Mobile, null);
                    }

                    Combo = 5;                     // Move to next spell
                }

                if (!c.Poisoned)
                {
                    if (m_Mobile.Mana > 20)
                    {
                        spell = new EnergyBoltSpell(m_Mobile, null);
                    }

                    if (m_Mobile.Mana < 19)
                    {
                        spell = new LightningSpell(m_Mobile, null);
                    }
                    Combo = -1;                     // Reset combo state
                }
            }

            return(spell);
        }
コード例 #14
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            // tamable solution ---------------
            Mobile com   = m_Mobile.Combatant;
            Spell  spell = null;

            if (com != null && com is BaseCreature && DateTime.Now >= m_NextCouncilSpell)
            {
                if (CastRevelationWave())
                {
                    m_Mobile.DebugSay("I'm gunna cast Revelation Wave!");
                    m_NextCouncilSpell = DateTime.Now + TimeBetweenCouncilSpell;
                    return(new RevelationWaveSpell(m_Mobile, null));
                }

                if (CastPoisonWave())
                {
                    m_Mobile.DebugSay("I'm gunna cast Poison Wave!");
                    m_NextCouncilSpell = DateTime.Now + TimeBetweenCouncilSpell;
                    return(new PoisonWaveSpell(m_Mobile, null));
                }
            }
            // end tamable solution ---------------

            if (!SmartAI)
            {
                if (!m_Mobile.Summoned && ScaleByMagery(HealChance) > Utility.RandomDouble())
                {
                    if (m_Mobile.Hits < (m_Mobile.HitsMax - 50))
                    {
                        return(new GreaterHealSpell(m_Mobile, null));
                    }
                    else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                    {
                        return(new HealSpell(m_Mobile, null));
                    }
                }

                return(GetRandomDamageSpell());
            }

            int healChance = (m_Mobile.Hits == 0 ? m_Mobile.HitsMax : (m_Mobile.HitsMax / m_Mobile.Hits));

            if (m_Mobile.Summoned)
            {
                healChance = 0;
            }

            switch (Utility.Random(4 + healChance))
            {
            default:
            case 0:                     // Heal ourself
            {
                if (!m_Mobile.Summoned)
                {
                    if (m_Mobile.Hits < (m_Mobile.HitsMax - 50))
                    {
                        spell = new GreaterHealSpell(m_Mobile, null);
                    }
                    else if (m_Mobile.Hits < (m_Mobile.HitsMax - 10))
                    {
                        spell = new HealSpell(m_Mobile, null);
                    }
                }

                break;
            }

            case 1:                     // Poison them
            {
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                break;
            }

            case 2:                     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            case 3:                     // Set up a combo
            {
                if (m_Mobile.Mana < 40 && m_Mobile.Mana > 15)
                {
                    if (c.Paralyzed && !c.Poisoned)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.Random(2) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #15
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            Spell spell = null;

            spell = GetRandomBlessSpell();

            if (spell != null)
            {
                return(spell);
            }

            spell = CheckCastHealingSpell();

            if (spell != null)
            {
                return(spell);
            }

            switch (Utility.Random(10))
            {
            default:
            case 0:
            case 1:                     // Curse them.
            {
                spell = GetRandomCurseSpell(c);

                break;
            }

            case 2:                     // Poison them
            {
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                break;
            }

            case 3:                     // Drain some mana
            {
                spell = GetRandomManaDrainSpell(c);

                break;
            }

            case 4:
            case 5:
            case 6:                     // Deal some damage
            {
                spell = GetRandomDamageSpell(c);

                break;
            }

            case 7:
            case 8:
            case 9:                     // Set up a combo
            {
                if (m_Mobile.Mana < 40 && m_Mobile.Mana > 15)
                {
                    if (c.Paralyzed && !c.Poisoned)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.Random(2) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #16
0
ファイル: MageAI.cs プロジェクト: pallop/Servuo
        public virtual Spell ChooseSpell(IDamageable d)
        {
            if (!(d is Mobile))
            {
                m_Mobile.DebugSay("Just doing damage");
                return(GetRandomDamageSpell());
            }

            Mobile c     = d as Mobile;
            Spell  spell = null;

            if (!SmartAI)
            {
                spell = CheckCastHealingSpell();

                if (spell != null)
                {
                    return(spell);
                }

                if (spell == null && m_Mobile.RawInt >= 80)
                {
                    spell = CheckCastDispelField();
                }

                switch (Utility.Random(15))
                {
                case 0:
                case 1:         // Poison them
                {
                    if (c.Poisoned || !CheckCast(3))
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Attempting to poison");

                    spell = new PoisonSpell(m_Mobile, null);
                    break;
                }

                case 2:         // Bless ourselves
                {
                    if (BlessSpell.IsBlessed(m_Mobile) || !CheckCast(3))
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Blessing myself");

                    spell = GetRandomBuffSpell();        //new BlessSpell(m_Mobile, null);
                    break;
                }

                case 3:
                case 4:     // Curse them
                {
                    m_Mobile.DebugSay("Attempting to curse");

                    spell = GetRandomCurseSpell();

                    if (spell == null)
                    {
                        goto default;
                    }
                    break;
                }

                case 5:         // Paralyze them
                {
                    m_Mobile.DebugSay("Attempting to paralyze");

                    if (CheckCast(5))
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        spell = GetRandomCurseSpell();
                    }

                    if (spell == null)
                    {
                        goto default;
                    }
                    break;
                }

                case 6:     // Drain mana
                {
                    m_Mobile.DebugSay("Attempting to drain mana");

                    spell = GetRandomManaDrainSpell();

                    if (spell == null)
                    {
                        goto default;
                    }
                    break;
                }

                default:     // Damage them
                {
                    m_Mobile.DebugSay("Just doing damage");

                    spell = GetRandomDamageSpell();
                    break;
                }
                }

                return(spell);
            }

            if (m_Mobile.Hidden)
            {
                return(null);
            }

            spell = CheckCastDispelField();

            if (spell == null)
            {
                spell = CheckCastHealingSpell();
            }

            if (spell == null && 0.05 >= Utility.RandomDouble())
            {
                spell = GetRandomBuffSpell();
            }

            else if (spell == null && m_Mobile.Followers + 1 < m_Mobile.FollowersMax && 0.05 >= Utility.RandomDouble())
            {
                spell = GetRandomSummonSpell();
            }

            else if (spell == null && 0.05 >= Utility.RandomDouble())
            {
                spell = GetRandomFieldSpell();
            }

            else if (spell == null && 0.05 >= Utility.RandomDouble())
            {
                spell = GetRandomManaDrainSpell();
            }

            if (spell != null)
            {
                return(spell);
            }

            switch (Utility.Random(3))
            {
            case 0:     // Poison them
            {
                if (c.Poisoned)
                {
                    goto case 1;
                }

                spell = new PoisonSpell(m_Mobile, null);
                break;
            }

            case 1:     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            default:     // Set up a combo
            {
                if (m_Mobile.Mana > 15 && m_Mobile.Mana < 40)
                {
                    if (c.Paralyzed && !c.Poisoned && !m_Mobile.Meditating)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.RandomBool() && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #17
0
ファイル: MageAI.cs プロジェクト: zerodowned/vivre-uo
        public virtual Spell ChooseSpell(Mobile c)
        {
            Spell spell = null;

            if (!SmartAI)
            {
                spell = CheckCastHealingSpell();

                if (spell != null)
                {
                    return(spell);
                }

                if (IsNecromancer)
                {
                    double psDamage = ((m_Mobile.Skills[SkillName.SpiritSpeak].Value - c.Skills[SkillName.MagicResist].Value) / 10) + (c.Player ? 18 : 30);

                    if (psDamage > c.Hits)
                    {
                        return(new PainSpikeSpell(m_Mobile, null));
                    }
                }

                switch (Utility.Random(16))
                {
                case 0:
                case 1:         // Poison them
                {
                    if (c.Poisoned)
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Attempting to poison");

                    spell = new PoisonSpell(m_Mobile, null);
                    break;
                }

                case 2:         // Bless ourselves
                {
                    m_Mobile.DebugSay("Blessing myself");

                    spell = new BlessSpell(m_Mobile, null);
                    break;
                }

                case 3:
                case 4:     // Curse them
                {
                    m_Mobile.DebugSay("Attempting to curse");

                    spell = GetRandomCurseSpell();
                    break;
                }

                case 5:         // Paralyze them
                {
                    if (c.Paralyzed || m_Mobile.Skills[SkillName.Magery].Value <= 50.0)
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Attempting to paralyze");

                    spell = new ParalyzeSpell(m_Mobile, null);
                    break;
                }

                case 6:     // Drain mana
                {
                    m_Mobile.DebugSay("Attempting to drain mana");

                    spell = GetRandomManaDrainSpell();
                    break;
                }

                case 7:     // Invis ourselves
                {
                    if (Utility.RandomBool())
                    {
                        goto default;
                    }

                    m_Mobile.DebugSay("Attempting to invis myself");

                    spell = new InvisibilitySpell(m_Mobile, null);
                    break;
                }

                default:     // Damage them
                {
                    m_Mobile.DebugSay("Just doing damage");

                    spell = GetRandomDamageSpell();
                    break;
                }
                }

                return(spell);
            }

            spell = CheckCastHealingSpell();

            if (spell != null)
            {
                return(spell);
            }

            switch (Utility.Random(3))
            {
            case 0:     // Poison them
            {
                if (c.Poisoned)
                {
                    goto case 1;
                }

                spell = new PoisonSpell(m_Mobile, null);
                break;
            }

            case 1:     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            default:     // Set up a combo
            {
                if (m_Mobile.Mana > 15 && m_Mobile.Mana < 40)
                {
                    if (c.Paralyzed && !c.Poisoned && !m_Mobile.Meditating)
                    {
                        m_Mobile.DebugSay("I am going to meditate");

                        m_Mobile.UseSkill(SkillName.Meditation);
                    }
                    else if (!c.Poisoned)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.RandomBool() && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 1;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }
コード例 #18
0
ファイル: MageAI.cs プロジェクト: pallop/Servuo
        public virtual Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            if (m_ComboType == ComboType.None)
            {
                m_ComboType = (ComboType)Utility.RandomMinMax(1, 7);
            }

            if (m_Combo == 1)
            {
                switch (m_ComboType)
                {
                case ComboType.Exp_FS_Poison:
                case ComboType.Exp_MB_Poison:
                case ComboType.Exp_EB_Poison:
                case ComboType.Exp_FB_MA_Poison:
                case ComboType.Exp_FB_Poison_Light:
                case ComboType.Exp_FB_MA_Light:
                case ComboType.Exp_Poison_FB_Light: spell = new ExplosionSpell(m_Mobile, null); break;
                }
            }
            else if (m_Combo == 2)
            {
                switch (m_ComboType)
                {
                case ComboType.Exp_FS_Poison: spell = new FlameStrikeSpell(m_Mobile, null); break;

                case ComboType.Exp_MB_Poison: spell = new MindBlastSpell(m_Mobile, null); break;

                case ComboType.Exp_EB_Poison: spell = new EnergyBoltSpell(m_Mobile, null); break;

                case ComboType.Exp_FB_MA_Poison: spell = new FireballSpell(m_Mobile, null); break;

                case ComboType.Exp_FB_Poison_Light: spell = new FireballSpell(m_Mobile, null); break;

                case ComboType.Exp_FB_MA_Light: spell = new FireballSpell(m_Mobile, null); break;

                case ComboType.Exp_Poison_FB_Light: spell = new PoisonSpell(m_Mobile, null); break;
                }
            }
            else if (m_Combo == 3)
            {
                switch (m_ComboType)
                {
                case ComboType.Exp_FS_Poison:
                case ComboType.Exp_MB_Poison:
                case ComboType.Exp_EB_Poison:
                    spell = new PoisonSpell(m_Mobile, null);
                    EndCombo();
                    return(spell);

                case ComboType.Exp_FB_MA_Poison: spell = new MagicArrowSpell(m_Mobile, null); break;

                case ComboType.Exp_FB_Poison_Light: spell = new PoisonSpell(m_Mobile, null); break;

                case ComboType.Exp_FB_MA_Light: spell = new MagicArrowSpell(m_Mobile, null); break;

                case ComboType.Exp_Poison_FB_Light: spell = new FireballSpell(m_Mobile, null); break;
                }
            }
            else if (m_Combo == 4)
            {
                switch (m_ComboType)
                {
                case ComboType.Exp_FS_Poison:
                case ComboType.Exp_MB_Poison:
                case ComboType.Exp_EB_Poison:
                    spell = new LightningSpell(m_Mobile, null);
                    EndCombo();
                    return(spell);

                case ComboType.Exp_FB_MA_Poison: spell = new PoisonSpell(m_Mobile, null); break;

                case ComboType.Exp_FB_Poison_Light:
                case ComboType.Exp_FB_MA_Light:
                case ComboType.Exp_Poison_FB_Light: spell = new LightningSpell(m_Mobile, null);
                    EndCombo();
                    return(spell);
                }
            }
            else if (m_Combo == 5)
            {
                switch (m_ComboType)
                {
                case ComboType.Exp_FS_Poison:
                case ComboType.Exp_MB_Poison:
                case ComboType.Exp_EB_Poison:
                case ComboType.Exp_FB_MA_Poison:
                case ComboType.Exp_FB_Poison_Light:
                case ComboType.Exp_FB_MA_Light:
                case ComboType.Exp_Poison_FB_Light:
                    spell = new LightningSpell(m_Mobile, null);
                    EndCombo();
                    return(spell);
                }
            }

            m_Combo++; // Move to next spell

            if (spell == null)
            {
                spell = new PoisonSpell(m_Mobile, null);
            }

            return(spell);
        }
コード例 #19
0
        public virtual Spell DoCombo(Mobile c)
        {
            Spell spell = null;

            if (m_Combo == 0)
            {
                spell = new ExplosionSpell(m_Mobile, null);
                ++m_Combo;                 // Move to next spell
            }
            else if (m_Combo == 1)
            {
                spell = new WeakenSpell(m_Mobile, null);
                ++m_Combo;                 // Move to next spell
            }
            else if (m_Combo == 2)
            {
                if (!c.Poisoned)
                {
                    spell = new PoisonSpell(m_Mobile, null);
                }

                ++m_Combo;                 // Move to next spell
            }

            if (m_Combo == 3 && spell == null)
            {
                switch (Utility.Random(3))
                {
                default:
                case 0:
                {
                    if (c.Int < c.Dex)
                    {
                        spell = new FeeblemindSpell(m_Mobile, null);
                    }
                    else
                    {
                        spell = new ClumsySpell(m_Mobile, null);
                    }

                    ++m_Combo;                                     // Move to next spell

                    break;
                }

                case 1:
                {
                    spell   = new EnergyBoltSpell(m_Mobile, null);
                    m_Combo = -1;                                     // Reset combo state
                    break;
                }

                case 2:
                {
                    spell   = new FlameStrikeSpell(m_Mobile, null);
                    m_Combo = -1;                                     // Reset combo state
                    break;
                }
                }
            }
            else if (m_Combo == 4 && spell == null)
            {
                spell   = new MindBlastSpell(m_Mobile, null);
                m_Combo = -1;
            }

            return(spell);
        }
コード例 #20
0
        public virtual Spell ChooseSpell(Mobile c)
        {
            Spell spell = null;

            if (!SmartAI)
            {
                spell = CheckCastHealingSpell();

                if (spell != null)
                {
                    return(spell);
                }

                switch (Utility.Random(14))
                {
                case 0:
                case 1:
                case 2:
                {
                    goto case 6;
                }

                case 3:
                case 4:
                case 5:
                case 6:                         // Paralyze them.
                {
                    m_Mobile.DebugSay("Attempting to paralyze");

                    if (m_Mobile.Skills[SkillName.Magery].Value > 50.0)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                    goto default;
                }

                case 7:                         // Drain mana
                {
                    m_Mobile.DebugSay("Attempting to drain mana");

                    spell = GetRandomManaDrainSpell();
                    break;
                }

                default:                         // Damage them.
                {
                    m_Mobile.DebugSay("Just doing damage");

                    spell = GetRandomDamageSpell();
                    break;
                }
                }

                return(spell);
            }

            spell = CheckCastHealingSpell();

            if (spell != null)
            {
                return(spell);
            }

            switch (Utility.Random(2))
            {
            default:
            case 0:                     // Deal some damage
            {
                spell = GetRandomDamageSpell();

                break;
            }

            case 1:                     // Set up a combo
            {
                if (m_Mobile.Mana < 40 && m_Mobile.Mana > 15)
                {
                    spell = new ParalyzeSpell(m_Mobile, null);
                }
                else if (m_Mobile.Mana > 60)
                {
                    if (Utility.Random(2) == 0 && !c.Paralyzed && !c.Frozen && !c.Poisoned)
                    {
                        m_Combo = 0;
                        spell   = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        m_Combo = 3;
                        spell   = new ExplosionSpell(m_Mobile, null);
                    }
                }

                break;
            }
            }

            return(spell);
        }