Exemple #1
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m) || m.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }

            else if (CheckBSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                SpellHelper.AddStatBonus(Caster, m, StatType.Str); SpellHelper.DisableSkillCheck = true;
                SpellHelper.AddStatBonus(Caster, m, StatType.Dex);
                SpellHelper.AddStatBonus(Caster, m, StatType.Int); SpellHelper.DisableSkillCheck = false;

                bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, m, EnhancedSpellbookType.Wizard, false, true);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Bless);

                if (enhancedSpellcast)
                {
                    m.FixedParticles(0x373A, 10, 30, 5018, spellHue, 0, EffectLayer.Waist);
                    m.PlaySound(0x1EA);
                }

                else
                {
                    m.FixedParticles(0x373A, 10, 15, 5018, spellHue, 0, EffectLayer.Waist);
                    m.PlaySound(0x1EA);
                }
            }

            FinishSequence();
        }
Exemple #2
0
        public void Target(Mobile mobile)
        {
            if (!Caster.CanSee(mobile) || mobile.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(mobile))
            {
                SpellHelper.Turn(Caster, mobile);
                SpellHelper.CheckReflect((int)this.Circle, Caster, ref mobile);
                SpellHelper.AddStatCurse(Caster, mobile, StatType.Dex);

                CheckMagicResist(mobile);

                if (mobile.Spell != null)
                {
                    mobile.Spell.OnCasterHurt();
                }

                mobile.Paralyzed = false;

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Clumsy);

                mobile.FixedParticles(0x3779, 10, 15, 5002, spellHue, 0, EffectLayer.Head);
                mobile.PlaySound(0x1DF);
            }

            FinishSequence();
        }
Exemple #3
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Summoner, false, true);

                BaseCreature summon = new SummonedFireElemental();

                summon.StoreBaseSummonValues();

                double duration = 4.0 * Caster.Skills[SkillName.Magery].Value;

                if (enhancedSpellcast)
                {
                    duration *= SpellHelper.EnhancedSummonDurationMultiplier;

                    summon.DamageMin = (int)((double)summon.DamageMin * SpellHelper.EnhancedSummonDamageMultiplier);
                    summon.DamageMax = (int)((double)summon.DamageMax * SpellHelper.EnhancedSummonDamageMultiplier);

                    summon.SetHitsMax((int)((double)summon.HitsMax * SpellHelper.EnhancedSummonHitPointsMultiplier));
                    summon.Hits = summon.HitsMax;
                }

                summon.SetDispelResistance(Caster, enhancedSpellcast, 0);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.FireElemental);

                summon.Hue = spellHue;

                SpellHelper.Summon(summon, Caster, 0x217, TimeSpan.FromSeconds(duration), false, false);
            }

            FinishSequence();
        }
Exemple #4
0
        public void Target(Mobile mobile)
        {
            BaseCreature bc_Creature = mobile as BaseCreature;

            if (!Caster.CanSee(mobile) || mobile.Hidden)
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (bc_Creature == null || !bc_Creature.IsDispellable)
            {
                Caster.SendLocalizedMessage(1005049); // That cannot be dispelled.
            }
            else if (CheckHSequence(mobile))
            {
                SpellHelper.Turn(Caster, mobile);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Dispel);

                Caster.DoHarmful(bc_Creature);

                if (Caster is PlayerMobile)
                {
                    bc_Creature.ResolveDispel(Caster, true, spellHue);
                }

                else
                {
                    bc_Creature.ResolveDispel(Caster, false, spellHue);
                }
            }

            FinishSequence();
        }
Exemple #5
0
            public InternalItem(Mobile caster, int itemID, Point3D loc, Map map, TimeSpan duration) : base(itemID)
            {
                Visible = false;
                Movable = false;
                Light   = LightType.Circle300;

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(caster, HueableSpell.ParalyzeField);

                Hue = spellHue;

                MoveToWorld(loc, map);

                if (caster.InLOS(this))
                {
                    Visible = true;
                }
                else
                {
                    Delete();
                }

                if (Deleted)
                {
                    return;
                }

                m_Caster = caster;

                m_Timer = new InternalTimer(this, duration);
                m_Timer.Start();

                m_End = DateTime.UtcNow + duration;
            }
        public static void Shielded(Mobile mobile)
        {
            if (mobile == null)
            {
                return;
            }

            mobile.PlaySound(0x64B); //0x456
            mobile.FixedEffect(0x37B9, 10, 5);

            int projectiles = 4;

            for (int a = 0; a < projectiles; a++)
            {
                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(mobile, HueableSpell.MagicReflect);

                Point3D newLocation = new Point3D(mobile.X + Utility.RandomList(-1, 1), mobile.Y + Utility.RandomList(-1, 1), mobile.Z);
                SpellHelper.AdjustField(ref newLocation, mobile.Map, 12, false);

                TimedStatic timedStatic = new TimedStatic(0x3779, .5);

                if (spellHue == 0)
                {
                    timedStatic.Hue = Utility.RandomList(2587, 2570, 2576, 2623, 2572, 2615, 2515, 2505, 2499, 2500, 2117, 2618);
                }

                else
                {
                    timedStatic.Hue = spellHue;
                }

                timedStatic.Name = "dissipated energy";
                timedStatic.MoveToWorld(newLocation, mobile.Map);
            }
        }
Exemple #7
0
        public static void ApplyEffect(Mobile Caster, Mobile mobile)
        {
            SpellHelper.AddStatCurse(Caster, mobile, StatType.Str); SpellHelper.DisableSkillCheck = true;
            SpellHelper.AddStatCurse(Caster, mobile, StatType.Dex);
            SpellHelper.AddStatCurse(Caster, mobile, StatType.Int); SpellHelper.DisableSkillCheck = false;

            Timer t = (Timer)m_UnderEffect[mobile];

            if (Caster.Player && mobile.Player && t == null)
            {
                TimeSpan duration = SpellHelper.GetDuration(Caster, mobile);
                m_UnderEffect[mobile] = t = Timer.DelayCall(duration, new TimerStateCallback(RemoveEffect), mobile);
                mobile.UpdateResistances();
            }

            if (mobile.Spell != null)
            {
                mobile.Spell.OnCasterHurt();
            }

            mobile.Paralyzed = false;

            int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Curse);

            mobile.FixedParticles(0x374A, 10, 15, 5028, spellHue, 0, EffectLayer.Waist);
            mobile.PlaySound(0x1E1);
        }
Exemple #8
0
        public void Target(Mobile m)
        {
            if (!m.CanSee(m) || m.Hidden)
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }

            else if (m.MagicDamageAbsorb > 0)
            {
                Caster.SendLocalizedMessage(1005559);   // This spell is already in effect.
            }

            else if (!m.CanBeginAction(typeof(DefensiveSpell)))
            {
                Caster.SendMessage("The spell will not adhere to them at this time.");                   // The spell will not adhere to you at this time.
            }

            else if (CheckBSequence(m))
            {
                if (Caster.MagicDamageAbsorb >= 0)
                {
                    int value = 0;

                    bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Wizard, false, true);

                    //Spirit Speak Bonus
                    int spiritSpeakBonus = (int)(Math.Floor(8 * Caster.Skills[SkillName.SpiritSpeak].Value / 100));

                    value += spiritSpeakBonus;

                    if (enhancedSpellcast)
                    {
                        value += 8;
                    }

                    int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.MagicReflect);

                    if (enhancedSpellcast)
                    {
                        m.FixedParticles(0x375A, 10, 30, 5037, spellHue, 0, EffectLayer.Waist);
                        m.PlaySound(0x1E9);
                    }

                    else
                    {
                        m.FixedParticles(0x375A, 10, 15, 5037, spellHue, 0, EffectLayer.Waist);
                        m.PlaySound(0x1E9);
                    }

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

                    m.MagicDamageAbsorb = value;
                }
            }

            FinishSequence();
        }
Exemple #9
0
        public void Target(IPoint3D p)
        {
            if (!Caster.CanSee(p))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (SpellHelper.CheckTown(p, Caster) && CheckSequence())
            {
                SpellHelper.Turn(Caster, p);
                SpellHelper.GetSurfaceTop(ref p);

                List <Mobile> targets = new List <Mobile>();

                Map map = Caster.Map;

                if (map != null)
                {
                    IPooledEnumerable eable = map.GetMobilesInRange(new Point3D(p), 3);

                    foreach (Mobile m in eable)
                    {
                        if (SpellHelper.ValidIndirectTarget(Caster, m) && Caster.CanSee(m) && Caster.CanBeHarmful(m, false))
                        {
                            targets.Add(m);
                        }
                    }

                    eable.Free();
                }

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.MassCurse);

                for (int i = 0; i < targets.Count; ++i)
                {
                    Mobile mobile = targets[i];

                    CheckMagicResist(mobile);

                    Caster.DoHarmful(mobile);

                    SpellHelper.AddStatCurse(Caster, mobile, StatType.Str);
                    SpellHelper.AddStatCurse(Caster, mobile, StatType.Dex);
                    SpellHelper.AddStatCurse(Caster, mobile, StatType.Int);

                    if (mobile.Spell != null)
                    {
                        mobile.Spell.OnCasterHurt();
                    }

                    mobile.Paralyzed = false;

                    mobile.FixedParticles(0x374A, 10, 15, 5028, spellHue, 0, EffectLayer.Waist);
                    mobile.PlaySound(0x1FB);
                }
            }

            FinishSequence();
        }
Exemple #10
0
        public void Target(Mobile m)
        {
            if (!m.CanSee(m) || m.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }

            if (!m.CanBeginAction(typeof(ReactiveArmorSpell)))
            {
                Caster.SendMessage("The spell will not adhere to them at this time.");
            }

            else if (CheckBSequence(m))
            {
                int value = (int)(m.Skills[SkillName.Magery].Value);

                value /= 3;

                if (value < 0)
                {
                    value = 1;
                }
                else if (value > 20)
                {
                    value = 20;
                }

                bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Wizard, false, true);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.ReactiveArmor);

                //Spirit Speak Bonus
                value += (int)(20 * (Caster.Skills[SkillName.SpiritSpeak].Value / 100));

                if (enhancedSpellcast)
                {
                    value += 20;

                    m.FixedParticles(0x376A, 9, 64, 5008, spellHue, 0, EffectLayer.Waist);
                    m.PlaySound(0x1F2);
                }

                else
                {
                    m.FixedParticles(0x376A, 9, 32, 5008, spellHue, 0, EffectLayer.Waist);
                    m.PlaySound(0x1F2);
                }

                m.MeleeDamageAbsorb = value;

                m.BeginAction(typeof(ReactiveArmorSpell));
                Timer.DelayCall(TimeSpan.FromMinutes(0.5), delegate { m.EndAction(typeof(ReactiveArmorSpell)); });
            }

            FinishSequence();
        }
Exemple #11
0
        public void Target(IPoint3D p, Mobile from)
        {
            if (!Caster.CanSee(p))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (CheckSequence())
            {
                SpellHelper.Turn(Caster, p);
                SpellHelper.GetSurfaceTop(ref p);

                List <Mobile> targets = new List <Mobile>();

                Map map = Caster.Map;

                if (map != null)
                {
                    IPooledEnumerable eable = map.GetMobilesInRange(new Point3D(p), 8);

                    foreach (Mobile m in eable)
                    {
                        if (m is BaseCreature && ((BaseCreature)m).Summoned && Caster.CanBeHarmful(m, false))
                        {
                            targets.Add(m);
                        }
                    }

                    eable.Free();
                }

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.MassDispel);

                for (int i = 0; i < targets.Count; ++i)
                {
                    Mobile       m           = targets[i];
                    BaseCreature bc_Creature = m as BaseCreature;

                    if (bc_Creature == null)
                    {
                        continue;
                    }

                    Caster.DoHarmful(m);

                    bc_Creature.ResolveDispel(Caster, false, spellHue);
                }
            }

            FinishSequence();
        }
Exemple #12
0
        public void Target(IPoint3D p)
        {
            Map map = Caster.Map;

            SpellHelper.GetSurfaceTop(ref p);

            if (map == null || !map.CanSpawnMobile(p.X, p.Y, p.Z) || BaseBoat.FindBoatAt(p, map) != null)
            {
                Caster.SendLocalizedMessage(501942); // That location is blocked.
            }
            else if (SpellHelper.CheckTown(p, Caster) && CheckSequence())
            {
                bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Summoner, false, true);

                BaseCreature summon = new BladeSpirits();

                summon.StoreBaseSummonValues();

                double duration = 2.0 * Caster.Skills[SkillName.Magery].Value;

                if (enhancedSpellcast)
                {
                    duration *= SpellHelper.EnhancedSummonDurationMultiplier;

                    summon.DamageMin = (int)((double)summon.DamageMin * SpellHelper.EnhancedSummonDamageMultiplier);
                    summon.DamageMax = (int)((double)summon.DamageMax * SpellHelper.EnhancedSummonDamageMultiplier);

                    summon.SetHitsMax((int)((double)summon.HitsMax * SpellHelper.EnhancedSummonHitPointsMultiplier));
                    summon.Hits = summon.HitsMax;
                }

                summon.SetDispelResistance(Caster, enhancedSpellcast, 0);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.BladeSpirits);

                summon.Hue = spellHue;

                BaseCreature.Summon(summon, false, Caster, new Point3D(p), 0x212, TimeSpan.FromSeconds(duration));
            }

            FinishSequence();
        }
Exemple #13
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m) || m.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckBSequence(m))
            {
                SpellHelper.Turn(Caster, m);
                Poison p = m.Poison;

                if (p != null)
                {
                    double chanceToCure = (Caster.Skills[SkillName.Magery].Value * 0.75) + (110.0 - (p.Level + 1) * 33.0);
                    chanceToCure /= 100;

                    if (chanceToCure > Utility.RandomDouble())
                    {
                        if (m.CurePoison(Caster))
                        {
                            if (Caster != m)
                            {
                                Caster.SendLocalizedMessage(1010058); // You have cured the target of all poisons!
                            }
                            m.SendLocalizedMessage(1010059);          // You have been cured of all poisons.
                        }
                    }
                    else
                    {
                        m.SendLocalizedMessage(1010060); // You have failed to cure your target!
                    }
                }

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Cure);

                m.FixedParticles(0x373A, 10, 15, 5012, spellHue, 0, EffectLayer.Waist);
                m.PlaySound(0x1E0);
            }

            FinishSequence();
        }
Exemple #14
0
        public void Target(Mobile m)
        {
            if (!m.CanSee(m) || m.Hidden)
            {
                m.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckBSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                int val = (int)(m.Skills[SkillName.Magery].Value / 10.0 + 1);

                if (m.BeginAction(typeof(ProtectionSpell)))
                {
                    Caster.DoBeneficial(m);
                    m.VirtualArmorMod += val;

                    new InternalTimer(m, Caster, val).Start();

                    bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, m, EnhancedSpellbookType.Wizard, false, true);

                    int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Protection);

                    if (enhancedSpellcast)
                    {
                        m.FixedParticles(0x375A, 9, 40, 5027, spellHue, 0, EffectLayer.Waist);
                        m.PlaySound(0x1F7);
                    }

                    else
                    {
                        m.FixedParticles(0x375A, 9, 20, 5027, spellHue, 0, EffectLayer.Waist);
                        m.PlaySound(0x1F7);
                    }
                }
            }

            FinishSequence();
        }
Exemple #15
0
            public InternalItem(Point3D loc, Map map, Mobile caster) : base(128)
            {
                Visible = false;
                Movable = false;

                //Player Enhancement Customization: Geomancer
                if (PlayerEnhancementPersistance.IsCustomizationEntryActive(caster, CustomizationType.Geomancer))
                {
                    ItemID = 376;
                }

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(caster, HueableSpell.WallOfStone);

                Hue = spellHue;

                MoveToWorld(loc, map);

                if (caster.InLOS(this))
                {
                    Visible = true;
                }
                else
                {
                    Delete();
                }

                if (Deleted)
                {
                    return;
                }

                m_Timer = new InternalTimer(this, TimeSpan.FromSeconds(10.0));
                m_Timer.Start();

                m_End = DateTime.UtcNow + TimeSpan.FromSeconds(10.0);
            }
Exemple #16
0
        public void Target(Mobile mobile)
        {
            if (!Caster.CanSee(mobile) || mobile.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(mobile))
            {
                SpellHelper.Turn(Caster, mobile);
                SpellHelper.CheckReflect((int)this.Circle, Caster, ref mobile);

                double damage      = (double)Utility.RandomMinMax(30, 45);
                double damageBonus = 0;

                if (mobile is BaseCreature)
                {
                    damageBonus += .5;
                }

                CheckMagicResist(mobile);

                bool    enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, mobile, EnhancedSpellbookType.Fire, true, true);
                Boolean chargedSpellcast  = SpellHelper.IsChargedSpell(Caster, mobile, true, Scroll != null);
                Boolean isTamedTarget     = SpellHelper.IsTamedTarget(Caster, mobile);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Flamestrike);

                if (enhancedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.EnhancedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.EnhancedSpellBonus;
                    }
                }

                if (chargedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.ChargedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.ChargedSpellBonus;
                    }

                    mobile.FixedParticles(0x3709, 10, 60, 5052, spellHue, 0, EffectLayer.LeftFoot);
                    mobile.PlaySound(0x208);
                }

                else
                {
                    mobile.FixedParticles(0x3709, 10, 30, 5052, spellHue, 0, EffectLayer.LeftFoot);
                    mobile.PlaySound(0x208);
                }

                damage *= GetDamageScalar(mobile, damageBonus);

                SpellHelper.Damage(this, Caster, mobile, damage);
            }

            FinishSequence();
        }
Exemple #17
0
        public void Target(IPoint3D p)
        {
            if (!Caster.CanSee(p))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (SpellHelper.CheckTown(p, Caster) && CheckSequence())
            {
                bool    enhancedSpellcast = false;
                Boolean chargedSpellcast  = false;

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.MeteorSwarm);

                int radius = 3;

                if (Caster is BaseCreature)
                {
                    radius += (int)(Math.Floor((Caster.Skills[SkillName.Magery].Value - 75) / 25));
                }

                SpellHelper.Turn(Caster, p);

                if (p is Item)
                {
                    p = ((Item)p).GetWorldLocation();
                }

                Map map = Caster.Map;

                IPooledEnumerable nearbyMobiles = map.GetMobilesInRange(new Point3D(p), radius);

                Queue m_Queue = new Queue();

                int targetCount = 0;

                bool playerVsCreatureOccurred = false;

                if (targetCount > 0)
                {
                    Effects.PlaySound(p, Caster.Map, 0x160);
                }

                foreach (Mobile mobile in nearbyMobiles)
                {
                    if (mobile == Caster)
                    {
                        continue;
                    }

                    if (Caster is BaseCreature)
                    {
                        if (!SpecialAbilities.MonsterCanDamage(Caster, mobile))
                        {
                            continue;
                        }
                    }

                    if (!Caster.CanBeHarmful(mobile, false))
                    {
                        continue;
                    }

                    if (Caster is PlayerMobile && mobile is BaseCreature)
                    {
                        playerVsCreatureOccurred = true;
                    }

                    targetCount++;
                    m_Queue.Enqueue(mobile);
                }

                nearbyMobiles.Free();

                if (playerVsCreatureOccurred)
                {
                    enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Fire, false, true);
                    chargedSpellcast  = SpellHelper.IsChargedSpell(Caster, null, false, Scroll != null);
                }

                while (m_Queue.Count > 0)
                {
                    Mobile mobile = (Mobile)m_Queue.Dequeue();

                    double damage      = (double)Utility.RandomMinMax(15, 20);
                    double damageBonus = 0;

                    CheckMagicResist(mobile);

                    Boolean isTamedTarget = SpellHelper.IsTamedTarget(Caster, mobile);

                    if (enhancedSpellcast && mobile is BaseCreature)
                    {
                        if (isTamedTarget)
                        {
                            damageBonus += SpellHelper.EnhancedSpellTamedCreatureBonus;
                        }

                        else
                        {
                            damageBonus += SpellHelper.EnhancedSpellBonus;
                        }
                    }

                    if (chargedSpellcast && mobile is BaseCreature)
                    {
                        if (isTamedTarget)
                        {
                            damageBonus += SpellHelper.ChargedSpellTamedCreatureBonus;
                        }

                        else
                        {
                            damageBonus += SpellHelper.ChargedSpellBonus;
                        }

                        Caster.MovingParticles(mobile, 0x36D4, 5, 0, false, true, spellHue, 0, 9501, 1, 0, 0x100);
                        Caster.MovingParticles(mobile, 0x36D4, 9, 0, false, true, spellHue, 0, 9501, 1, 0, 0x100);
                    }

                    else
                    {
                        Caster.MovingParticles(mobile, 0x36D4, 7, 0, false, true, spellHue, 0, 9501, 1, 0, 0x100);
                    }

                    BaseCreature bc_Target = mobile as BaseCreature;
                    PlayerMobile pm_Target = mobile as PlayerMobile;

                    if (bc_Target != null)
                    {
                        if (bc_Target.BoatOccupied != null)
                        {
                            damage *= BaseBoat.shipBasedAoESpellDamageToCreatureScalar;
                        }
                    }

                    if (pm_Target != null)
                    {
                        if (pm_Target.BoatOccupied != null)
                        {
                            damage *= BaseBoat.shipBasedAoESpellDamageToPlayerScalar;
                        }
                    }

                    damage *= GetDamageScalar(mobile, damageBonus);

                    SpellHelper.Damage(this, Caster, mobile, damage);
                }
            }

            FinishSequence();
        }
Exemple #18
0
        public void Target(IPoint3D p)
        {
            IPoint3D orig = p;
            Map      map  = Caster.Map;

            SpellHelper.GetSurfaceTop(ref p);
            Point3D pP = new Point3D(p);

            WarpBlockerTotem recallBlocker = WarpBlockerTotem.RecallBlockerTriggered(Caster, WarpBlockerTotem.MovementMode.TeleportIn, pP, Caster.Map);

            if (recallBlocker != null)
            {
                if (recallBlocker.PreventTeleportInResponse != "")
                {
                    Caster.SendMessage(recallBlocker.PreventTeleportInResponse);
                }
                else
                {
                    Caster.SendMessage(WarpBlockerTotem.DefaultTeleportInResponse);
                }
            }

            else if (Server.Misc.WeightOverloading.IsOverloaded(Caster))
            {
                Caster.SendLocalizedMessage(502359, "", 0x22);                   // Thou art too encumbered to move.
            }

            else if (!SpellHelper.CheckTravel(Caster, TravelCheckType.TeleportFrom))
            {
                Caster.SendLocalizedMessage(501942); // That location is blocked.
            }

            else if (!SpellHelper.CheckTravel(Caster, map, pP, TravelCheckType.TeleportTo))
            {
                Caster.SendLocalizedMessage(501942); // That location is blocked.
            }

            else if (map == null || !map.CanSpawnMobile(p.X, p.Y, p.Z))
            {
                Caster.SendLocalizedMessage(501942);                   // That location is blocked.
            }

            else if (SpellHelper.CheckMulti(pP, map))
            {
                Caster.SendLocalizedMessage(501942);                   // That location is blocked.
            }

            else
            {
                if (CheckSequence())
                {
                    SpellHelper.Turn(Caster, orig);

                    Mobile m = Caster;

                    Point3D from = m.Location;
                    Point3D to   = pP;

                    m.Location = to;
                    m.ProcessDelta();

                    int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.Teleport);

                    if (m.Player)
                    {
                        Effects.SendLocationParticles(EffectItem.Create(from, m.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, spellHue, 0, 2023, 0);

                        //Player Enhancement Customization: Blink
                        bool blink = PlayerEnhancementPersistance.IsCustomizationEntryActive(Caster, CustomizationType.Blink);

                        if (blink)
                        {
                            int distance = Utility.GetDistance(from, to);

                            Point3D effectStep = from;

                            for (int a = 0; a < distance + 1; a++)
                            {
                                Timer.DelayCall(TimeSpan.FromSeconds(a * .05), delegate
                                {
                                    if (m == null)
                                    {
                                        return;
                                    }

                                    Direction direction = Utility.GetDirection(effectStep, to);
                                    effectStep          = SpecialAbilities.GetPointByDirection(effectStep, direction);

                                    Effects.SendLocationParticles(EffectItem.Create(effectStep, m.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, spellHue, 0, 2023, 0);
                                    m.PlaySound(0x5C6);
                                });
                            }
                        }

                        else
                        {
                            Effects.SendLocationParticles(EffectItem.Create(to, m.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, spellHue, 0, 2023, 0);
                            m.PlaySound(0x1FE);
                        }
                    }

                    else
                    {
                        m.FixedParticles(0x376A, 9, 32, 0x13AF, spellHue, 0, EffectLayer.Waist);
                        m.PlaySound(0x1FE);
                    }

                    IPooledEnumerable eable = m.GetItemsInRange(0);

                    foreach (Item item in eable)
                    {
                        if (item is Server.Spells.Sixth.ParalyzeFieldSpell.InternalItem || item is Server.Spells.Fifth.PoisonFieldSpell.InternalItem || item is Server.Spells.Fourth.FireFieldSpell.FireFieldItem)
                        {
                            item.OnMoveOver(m);
                        }
                    }

                    eable.Free();

                    m.BeginAction(typeof(TeleportSpell));
                    Timer.DelayCall(TimeSpan.FromSeconds(6), delegate { m.EndAction(typeof(TeleportSpell)); });
                }
            }

            FinishSequence();
        }
Exemple #19
0
        public void Target(Mobile mobile)
        {
            if (!Caster.CanSee(mobile) || mobile.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(mobile))
            {
                Mobile source = Caster;
                SpellHelper.Turn(Caster, mobile);
                SpellHelper.CheckReflect((int)this.Circle, ref source, ref mobile);

                double damage      = (double)Utility.RandomMinMax(20, 35);
                double damageBonus = 0;

                CheckMagicResist(mobile);

                bool    enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, mobile, EnhancedSpellbookType.Fire, true, true);
                Boolean chargedSpellcast  = SpellHelper.IsChargedSpell(Caster, mobile, true, Scroll != null);
                Boolean isTamedTarget     = SpellHelper.IsTamedTarget(Caster, mobile);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.EnergyBolt);

                if (enhancedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.EnhancedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.EnhancedSpellBonus;
                    }
                }

                if (enhancedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.EnhancedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.EnhancedSpellBonus;
                    }
                }

                if (chargedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.ChargedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.ChargedSpellBonus;
                    }
                }

                Timer.DelayCall(TimeSpan.FromSeconds(2.5), delegate
                {
                    if (!SpecialAbilities.Exists(mobile))
                    {
                        return;
                    }

                    if (chargedSpellcast)
                    {
                        mobile.FixedParticles(0x36BD, 20, 20, 5044, spellHue, 0, EffectLayer.Head);
                        mobile.PlaySound(0x307);
                    }

                    else
                    {
                        mobile.FixedParticles(0x36BD, 20, 10, 5044, spellHue, 0, EffectLayer.Head);
                        mobile.PlaySound(0x307);
                    }

                    damage *= GetDamageScalar(mobile, damageBonus);

                    SpellHelper.Damage(this, Caster, mobile, damage);
                });
            }

            FinishSequence();
        }
Exemple #20
0
        public void Target(IPoint3D p)
        {
            Map map = Caster.Map;

            SpellHelper.GetSurfaceTop(ref p);

            if (map == null || !map.CanSpawnMobile(p.X, p.Y, p.Z) || BaseBoat.FindBoatAt(p, map) != null)
            {
                Caster.SendLocalizedMessage(501942); // That location is blocked.
            }

            else if (SpellHelper.CheckTown(p, Caster) && CheckSequence())
            {
                // Here's a little Napoleon Dynamite easter egg for IPY!
                if (Utility.RandomDouble() < 0.005)
                //if ( true )
                {
                    EnergyVortex tina = new EnergyVortex();
                    Slime        ham  = new Slime();

                    tina.Name   = "Tina";
                    tina.Body   = 0xDC;
                    tina.Hue    = 0;
                    tina.Frozen = true;

                    ham.Name   = "Ham";
                    ham.Hue    = 0x76;
                    ham.Frozen = true;

                    bool    validLocation = false;
                    Point3D tinaLocation  = new Point3D(p.X, p.Y, p.Z);
                    Point3D hamLocation   = new Point3D();

                    // Find a suitable location for Ham to spawn.
                    for (int j = 0; !validLocation && j < 10; ++j)
                    {
                        int x = tinaLocation.X + 1;
                        int y = tinaLocation.Y + 1;
                        int z = map.GetAverageZ(x, y);

                        if (validLocation = map.CanFit(x, y, tinaLocation.Z, 16, false, false))
                        {
                            hamLocation = new Point3D(x, y, tinaLocation.Z);
                        }
                        else if (validLocation = map.CanFit(x, y, z, 16, false, false))
                        {
                            hamLocation = new Point3D(x, y, z);
                        }
                    }

                    BaseCreature.Summon(tina, false, Caster, tinaLocation, 0x212, TimeSpan.FromSeconds(10.0));
                    BaseCreature.Summon(ham, false, Caster, hamLocation, 0, TimeSpan.FromSeconds(10.0));

                    List <Mobile> mobs = new List <Mobile>();
                    mobs.Add(tina);
                    mobs.Add(ham);

                    // Wait 5 seconds, then make Tina talk.
                    Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerStateCallback(BeginAction), mobs);

                    // Wait 8 seconds, then make Tina and Ham recall.
                    Timer.DelayCall(TimeSpan.FromSeconds(8.0), new TimerStateCallback(EndAction), mobs);
                }

                else
                {
                    bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Summoner, false, true);

                    BaseCreature summon = new EnergyVortex();

                    summon.StoreBaseSummonValues();

                    double duration = 2.0 * Caster.Skills[SkillName.Magery].Value;

                    if (enhancedSpellcast)
                    {
                        duration *= SpellHelper.EnhancedSummonDurationMultiplier;

                        summon.DamageMin = (int)((double)summon.DamageMin * SpellHelper.EnhancedSummonDamageMultiplier);
                        summon.DamageMax = (int)((double)summon.DamageMax * SpellHelper.EnhancedSummonDamageMultiplier);

                        summon.SetHitsMax((int)((double)summon.HitsMax * SpellHelper.EnhancedSummonHitPointsMultiplier));
                        summon.Hits = summon.HitsMax;
                    }

                    summon.SetDispelResistance(Caster, enhancedSpellcast, 0);

                    int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.EnergyVortex);

                    summon.Hue = spellHue;

                    BaseCreature.Summon(summon, false, Caster, new Point3D(p), 0x212, TimeSpan.FromSeconds(duration));
                }
            }

            FinishSequence();
        }
Exemple #21
0
        public void Target(Mobile mobile)
        {
            if (!Caster.CanSee(mobile) || mobile.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(mobile))
            {
                Mobile source = Caster;

                SpellHelper.Turn(source, mobile);
                SpellHelper.CheckReflect((int)this.Circle, ref source, ref mobile);

                double damage      = (double)Utility.RandomMinMax(3, 5);
                double damageBonus = 0;

                CheckMagicResist(mobile);

                bool    enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, mobile, EnhancedSpellbookType.Fire, true, true);
                Boolean chargedSpellcast  = SpellHelper.IsChargedSpell(Caster, mobile, true, Scroll != null);
                Boolean isTamedTarget     = SpellHelper.IsTamedTarget(Caster, mobile);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.MagicArrow);

                if (enhancedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.EnhancedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.EnhancedSpellBonus;
                    }
                }

                if (chargedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.ChargedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.ChargedSpellBonus;
                    }

                    source.MovingParticles(mobile, 0x36E4, 3, 0, false, true, spellHue, 0, 3006, 4006, 0, 0);
                    source.MovingParticles(mobile, 0x36E4, 7, 0, false, true, spellHue, 0, 3006, 4006, 0, 0);

                    source.PlaySound(0x1E5);
                }

                else
                {
                    source.MovingParticles(mobile, 0x36E4, 5, 0, false, true, spellHue, 0, 3006, 4006, 0, 0);
                    source.PlaySound(0x1E5);
                }

                damage *= GetDamageScalar(mobile, damageBonus);

                SpellHelper.Damage(this, Caster, mobile, damage);
            }

            FinishSequence();
        }
Exemple #22
0
        public void Target(Mobile m)
        {
            bool validTarget = true;

            PlayerMobile playerTarget = m as PlayerMobile;

            if (!Caster.CanSee(m) || m.Hidden)
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
                validTarget = false;
            }

            else if (m == Caster)
            {
                Caster.SendLocalizedMessage(501039); // Thou can not resurrect thyself.
                validTarget = false;
            }

            else if (!Caster.Alive)
            {
                Caster.SendLocalizedMessage(501040); // The resurrecter must be alive.
                validTarget = false;
            }

            else if (m.Alive)
            {
                Caster.SendLocalizedMessage(501041); // Target is not dead.
                validTarget = false;
            }

            else if (!Caster.InRange(m, 1))
            {
                Caster.SendLocalizedMessage(501042); // Target is not close enough.
                validTarget = false;
            }

            else if (!m.Player)
            {
                Caster.SendLocalizedMessage(501043); // Target is not a being.
                validTarget = false;
            }

            else if (m.Map == null || !m.Map.CanFit(m.Location, 16, false, false))
            {
                Caster.SendLocalizedMessage(501042); // Target can not be resurrected at that location.
                m.SendLocalizedMessage(502391);      // Thou can not be resurrected there!
                validTarget = false;
            }

            if (validTarget)
            {
                if (CheckBSequence(m, true))
                {
                    SpellHelper.Turn(Caster, m);

                    int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.WaterElemental);

                    m.PlaySound(0x214);
                    m.FixedEffect(0x376A, 10, 16, spellHue, 0);

                    m.SendGump(new ResurrectGump(m, Caster));
                }
            }

            FinishSequence();
        }
Exemple #23
0
        //Removed by IPY
        // Archcure is now 1/4th of a second faster
        //public override TimeSpan CastDelayBase{ get{ return base.CastDelayBase - TimeSpan.FromSeconds( 0.25 ); } }

        public void Target(IPoint3D p)
        {
            if (!Caster.CanSee(p))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckSequence())
            {
                SpellHelper.Turn(Caster, p);

                SpellHelper.GetSurfaceTop(ref p);

                List <Mobile> targets = new List <Mobile>();

                Map map = Caster.Map;

                if (map != null)
                {
                    IPooledEnumerable eable = map.GetMobilesInRange(new Point3D(p), 3);

                    foreach (Mobile m in eable)
                    {
                        if (Caster.CanBeBeneficial(m, false))
                        {
                            targets.Add(m);
                        }
                    }

                    eable.Free();
                }

                Effects.PlaySound(p, Caster.Map, 0x299);

                if (targets.Count > 0)
                {
                    int cured = 0;

                    int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.ArchCure);

                    for (int i = 0; i < targets.Count; ++i)
                    {
                        Mobile m = targets[i];

                        if (m.Player)                          // UOAC : No flagging when doing AC around a monster.
                        {
                            Caster.DoBeneficial(m);
                        }

                        if (m.CurePoison(Caster))
                        {
                            ++cured;
                        }

                        m.FixedParticles(0x373A, 10, 15, 5012, spellHue, 0, EffectLayer.Waist);
                        m.PlaySound(0x1E0);
                    }

                    if (cured > 0)
                    {
                        Caster.SendLocalizedMessage(1010058);                           // You have cured the target of all poisons!
                    }
                }
            }

            FinishSequence();
        }
Exemple #24
0
        public void Target(Mobile mobile)
        {
            if (!Caster.CanSee(mobile) || mobile.Hidden)
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(mobile))
            {
                Mobile from = Caster, target = mobile;
                SpellHelper.Turn(from, target);
                SpellHelper.CheckReflect((int)this.Circle, ref from, ref target);

                double damage      = (double)Utility.RandomMinMax(10, 20);
                double damageBonus = 0;

                CheckMagicResist(mobile);

                bool    enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, mobile, EnhancedSpellbookType.Warlock, true, true);
                Boolean chargedSpellcast  = SpellHelper.IsChargedSpell(Caster, mobile, true, Scroll != null);
                Boolean isTamedTarget     = SpellHelper.IsTamedTarget(Caster, mobile);

                int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.MindBlast);

                if (enhancedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.EnhancedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.EnhancedSpellBonus;
                    }
                }

                if (chargedSpellcast)
                {
                    if (isTamedTarget)
                    {
                        damageBonus += SpellHelper.ChargedSpellTamedCreatureBonus;
                    }

                    else
                    {
                        damageBonus += SpellHelper.ChargedSpellBonus;
                    }

                    from.FixedParticles(0x374A, 10, 30, 2038, spellHue, 0, EffectLayer.Head);

                    target.FixedParticles(0x374A, 10, 30, 5038, spellHue, 0, EffectLayer.Head);
                    target.PlaySound(0x213);
                }

                else
                {
                    from.FixedParticles(0x374A, 10, 15, 2038, spellHue, 0, EffectLayer.Head);

                    target.FixedParticles(0x374A, 10, 15, 5038, spellHue, 0, EffectLayer.Head);
                    target.PlaySound(0x213);
                }

                damage *= GetDamageScalar(mobile, damageBonus);

                SpellHelper.Damage(this, Caster, mobile, damage);
            }

            FinishSequence();
        }
Exemple #25
0
        public void Target(IPoint3D p)
        {
            if (!Caster.CanSee(p))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckSequence())
            {
                SpellHelper.Turn(Caster, p);

                SpellHelper.GetSurfaceTop(ref p);

                List <Mobile> targets = new List <Mobile>();

                Map map = Caster.Map;

                if (map != null)
                {
                    IPooledEnumerable eable = map.GetMobilesInRange(new Point3D(p), Core.AOS ? 2 : 3);

                    foreach (Mobile m in eable)
                    {
                        if (Caster.CanBeBeneficial(m, false))
                        {
                            targets.Add(m);
                        }
                    }

                    eable.Free();
                }

                if (Core.AOS)
                {
                    Party party = Party.Get(Caster);

                    for (int i = 0; i < targets.Count; ++i)
                    {
                        Mobile m = targets[i];

                        if (m == Caster || (party != null && party.Contains(m)))
                        {
                            Caster.DoBeneficial(m);
                            Spells.Second.ProtectionSpell.Toggle(Caster, m);
                        }
                    }
                }

                else
                {
                    Effects.PlaySound(p, Caster.Map, 0x299);

                    int val = (int)(Caster.Skills[SkillName.Magery].Value / 10.0 + 1);

                    bool chargeUsed = false;

                    for (int i = 0; i < targets.Count; ++i)
                    {
                        Mobile m = targets[i];

                        if (m.BeginAction(typeof(ProtectionSpell)))
                        {
                            if (m.Player)
                            {
                                Caster.DoBeneficial(m);
                            }

                            m.VirtualArmorMod += val;
                            new InternalTimer(m, Caster, val).Start();

                            bool enhancedSpellcast = SpellHelper.IsEnhancedSpell(Caster, null, EnhancedSpellbookType.Wizard, false, false);

                            if (enhancedSpellcast)
                            {
                                chargeUsed = true;
                            }

                            int spellHue = PlayerEnhancementPersistance.GetSpellHueFor(Caster, HueableSpell.ArchProtection);

                            if (enhancedSpellcast)
                            {
                                m.FixedParticles(0x375A, 9, 40, 5027, spellHue, 0, EffectLayer.Waist);
                                m.PlaySound(0x1F7);
                            }

                            else
                            {
                                m.FixedParticles(0x375A, 9, 20, 5027, spellHue, 0, EffectLayer.Waist);
                                m.PlaySound(0x1F7);
                            }
                        }
                    }

                    if (chargeUsed)
                    {
                        if (Caster.FindItemOnLayer(Layer.OneHanded) is EnhancedSpellbook)
                        {
                            EnhancedSpellbook spellbook = Caster.FindItemOnLayer(Layer.OneHanded) as EnhancedSpellbook;

                            if (spellbook != null)
                            {
                                spellbook.OnSpellCast(Caster);
                            }
                        }
                    }
                }
            }

            FinishSequence();
        }