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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }