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

            if (Combo == 0)
            {
                m_Mobile.DebugSay("I am doing combo part 1");
                Map     fromMap = m_Mobile.Map;
                Point3D from    = m_Mobile.Location;

                Map     toMap = c.Map;
                Point3D to    = c.Location;

                if (toMap != null)
                {
                    for (int i = 0; i < 5; ++i)
                    {
                        Point3D loc = new Point3D(to.X - 4 + Utility.Random(8), to.Y - 4 + Utility.Random(9), to.Z);

                        if (toMap.CanSpawnMobile(loc))
                        {
                            to = loc;
                            break;
                        }
                        else
                        {
                            loc.Z = toMap.GetAverageZ(loc.X, loc.Y);

                            if (toMap.CanSpawnMobile(loc))
                            {
                                to = loc;
                                break;
                            }
                        }
                    }

                    m_Mobile.Map      = toMap;
                    m_Mobile.Location = to;
                    //poof effect
                    DoParticleEffect(m_Mobile, from, to, fromMap, toMap);
                }

                spell = new LightningSpell(m_Mobile, null);
                ++Combo;                 // Move to next spell
            }
            else if (Combo == 1)
            {
                spell = new ParalyzeSpell(m_Mobile, null);
                ++Combo;                 // Move to next spell
            }
            else if (Combo == 2)
            {
                m_Mobile.Say("I bet your first wish would be that you had never rubbed the lamp!");
                if (!c.Paralyzed)
                {
                    spell = new ParalyzeSpell(m_Mobile, null);
                }
                else
                {
                    spell = new LightningSpell(m_Mobile, null);
                }
                ++Combo;                 // Move to next spell
            }

            else if (Combo == 3)
            {
                Map     fromMap = m_Mobile.Map;
                Point3D from    = m_Mobile.Location;

                Map     toMap = c.Map;
                Point3D to    = c.Location;

                if (toMap != null)
                {
                    for (int i = 0; i < 5; ++i)
                    {
                        Point3D loc = new Point3D(to.X - 4 + Utility.Random(8), to.Y - 4 + Utility.Random(9), to.Z);

                        if (toMap.CanSpawnMobile(loc))
                        {
                            to = loc;
                            break;
                        }
                        else
                        {
                            loc.Z = toMap.GetAverageZ(loc.X, loc.Y);

                            if (toMap.CanSpawnMobile(loc))
                            {
                                to = loc;
                                break;
                            }
                        }
                    }

                    m_Mobile.Map      = toMap;
                    m_Mobile.Location = to;

                    DoParticleEffect(m_Mobile, from, to, fromMap, toMap);
                }
                spell = new LightningSpell(m_Mobile, null);
                ++Combo;                 // Move to next spell
            }

            else if (Combo == 4 && spell == null)
            {
                if (!c.Paralyzed)
                {
                    spell = new ParalyzeSpell(m_Mobile, null);
                }
                else
                {
                    spell = new LightningSpell(m_Mobile, null);
                }
                Combo = -1;                 // Move to next spell
            }

            return(spell);
        }
コード例 #2
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);
        }
コード例 #3
0
        public override Spell ChooseSpell(Mobile c)
        {
            if (c is PlayerMobile && SmartAI && (c.Spell is MagicTrapSpell || c.Spell is MagicArrowSpell))
            {
                m_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 (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)
                {
                    m_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 && m_EnemyCountersPara == false && m_Mobile.Mana > 40)
                    {
                        spell = new ParalyzeSpell(m_Mobile, null);
                    }
                    else
                    {
                        if (m_Mobile.InRange(c, 4))
                        {
                            RunFrom(c);
                        }
                        if (!m_Mobile.InRange(c, 6))
                        {
                            RunTo(c, CanRun);
                        }

                        //m_Mobile.UseSkill( SkillName.Meditation );
                    }
                }

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

                break;
            }
            }

            return(spell);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: MageAI.cs プロジェクト: nydehi/divinity
        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 LightningSpell(m_Mobile, null);                //MindBlastSpell( m_Mobile, null );
                m_Combo = -1;
            }

            return(spell);
        }
コード例 #6
0
ファイル: EvilMageAI.cs プロジェクト: zerodowned/angelisland
        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);
        }