示例#1
0
        public override bool CheckCast()
        {
            /*if ( Caster.Mounted )
             * {
             *      Caster.SendLocalizedMessage( 1042561 ); //Please dismount first.
             *      return false;
             * }
             * else */
            if (TransformationSpellHelper.UnderTransformation(Caster))
            {
                Caster.SendLocalizedMessage(1061633);                   // You cannot polymorph while in that form.
                return(false);
            }
            else if (DisguiseTimers.IsDisguised(Caster))
            {
                Caster.SendLocalizedMessage(502167);                   // You cannot polymorph while disguised.
                return(false);
            }
            else if (Caster.BodyMod == 183 || Caster.BodyMod == 184)
            {
                Caster.SendLocalizedMessage(1042512);                   // You cannot polymorph while wearing body paint
                return(false);
            }
            else if (!Caster.CanBeginAction(typeof(PolymorphSpell)))
            {
                Caster.SendLocalizedMessage(1005559);                   // This spell is already in effect.

                return(false);
            }
            else if (m_NewBody == 0)
            {
                Gump gump = new PolymorphGump(Caster, Scroll);
                Caster.SendGump(gump);
                return(false);
            }

            return(true);
        }
示例#2
0
        /// <summary>
        /// Apply effect on target or do spell action if non duration spell
        /// </summary>
        /// <param name="target">target that gets the effect</param>
        /// <param name="effectiveness">factor from 0..1 (0%-100%)</param>
        public override void ApplyEffectOnTarget(GameLiving target, double effectiveness)
        {
            int specLevel = Caster.GetModifiedSpecLevel(m_spellLine.Spec);

            if (Caster is GamePlayer && ((GamePlayer)Caster).CharacterClass.ClassType != eClassType.ListCaster && Spell.Level > 0 && ((GamePlayer)Caster).CharacterClass.ID != (int)eCharacterClass.Savage)
            {
                effectiveness = 0.75; // This section is for self bulfs, cleric buffs etc.
                if (Spell.Level > 0)
                {
                    effectiveness += (specLevel - 1.0) * 0.5 / Spell.Level;
                    effectiveness  = Math.Max(0.75, effectiveness);
                    effectiveness  = Math.Min(1.25, effectiveness);
                    effectiveness *= (1.0 + m_caster.GetModified(eProperty.BuffEffectiveness) * 0.01);
                }
            }
            else if (Caster is GamePlayer && Spell.Level > 0 && Spell.Target == "Enemy")
            {
                effectiveness = 0.75;                 // This section is for list casters stat debuffs.
                if (((GamePlayer)Caster).CharacterClass.ClassType == eClassType.ListCaster)
                {
                    effectiveness += (specLevel - 1.0) * 0.5 / Spell.Level;
                    effectiveness  = Math.Max(0.75, effectiveness);
                    effectiveness  = Math.Min(1.25, effectiveness);
                    effectiveness *= (1.0 + m_caster.GetModified(eProperty.DebuffEffectivness) * 0.01);
                }
                else
                {
                    effectiveness  = 1.0;                            // Non list casters debuffs. Reaver curses, Champ debuffs etc.
                    effectiveness *= (1.0 + m_caster.GetModified(eProperty.DebuffEffectivness) * 0.01);
                }
            }
            else
            {
                effectiveness = 1.0;
            }

            base.ApplyEffectOnTarget(target, effectiveness);
        }
		public override bool CheckFizzle()
		{
			int requiredTithing = this.RequiredTithing;

			if ( AosAttributes.GetValue( Caster, AosAttribute.LowerRegCost ) > Utility.Random( 100 ) )
			{
				requiredTithing = 0;
			}

			int mana = ScaleMana( RequiredMana );

			if ( Caster.Skills[ SkillName.Chivalry ].Value < RequiredSkill )
			{
				Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
				return false;
			}
			else if ( Caster.TithingPoints < requiredTithing )
			{
				Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
				return false;
			}
			else if ( Caster.Mana < mana )
			{
				Caster.SendLocalizedMessage( 1060174, RequiredMana.ToString() ); // You must have at least ~1_MANA_REQUIREMENT~ Mana to use this ability.
				return false;
			}

			Caster.TithingPoints -= requiredTithing;

			if ( !base.CheckFizzle() )
			{
				return false;
			}

			Caster.Mana -= mana;

			return true;
		}
示例#4
0
        public void Target(Gold weapon)
        {
            if (!Caster.CanSee(weapon))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }

            else if (CheckSequence())
            {
                if (Caster.BeginAction(typeof(AncientFalseCoinSpell)))
                {
                    if (this.Scroll != null)
                    {
                        Scroll.Consume();
                    }
                    FakeGold fake = new FakeGold();
                    fake.m_Amount = weapon.Amount * 5;
                    fake.Name     = "" + (weapon.Amount * 5) + " Gold Coins";
                    m_Fake        = fake;
                    Caster.AddToBackpack(fake);
                    Caster.PlaySound(0x2E6);

                    IEntity from = new Entity(Serial.Zero, new Point3D(Caster.X, Caster.Y, Caster.Z + 50), Caster.Map);
                    IEntity to   = new Entity(Serial.Zero, new Point3D(Caster.X, Caster.Y, Caster.Z), Caster.Map);
                    Effects.SendMovingParticles(from, to, 0x1EC6, 1, 0, false, false, 33, 3, 9501, 1, 0, EffectLayer.Head, 0x100);
                    StopTimer(Caster);


                    Timer t = new InternalTimer(Caster, m_Fake);

                    m_Timers[Caster] = t;

                    t.Start();
                }
            }

            FinishSequence();
        }
示例#5
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendAsciiMessage("Target can not be seen.");                   // Target can not be seen.
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                SpellHelper.CheckReflect((int)this.Circle, Caster, ref m);

                SpellHelper.AddStatCurse(Caster, m, StatType.Str, (int)((Caster.Skills[SkillName.Magery].Value / 10) + 1), TimeSpan.FromSeconds((6 * Caster.Skills[SkillName.Magery].Value / 5) + 1)); //SpellHelper.DisableSkillCheck = true;
                SpellHelper.AddStatCurse(Caster, m, StatType.Dex, (int)((Caster.Skills[SkillName.Magery].Value / 10) + 1), TimeSpan.FromSeconds((6 * Caster.Skills[SkillName.Magery].Value / 5) + 1));
                SpellHelper.AddStatCurse(Caster, m, StatType.Int, (int)((Caster.Skills[SkillName.Magery].Value / 10) + 1), TimeSpan.FromSeconds((6 * Caster.Skills[SkillName.Magery].Value / 5) + 1)); //SpellHelper.DisableSkillCheck = false;

                Timer t = (Timer)m_UnderEffect[m];

                if (Caster.Player && m.Player /*&& Caster != m */ && t == null)                                    //On OSI you CAN curse yourself and get this effect.
                {
                    TimeSpan duration = TimeSpan.FromSeconds((6 * Caster.Skills[SkillName.Magery].Value / 5) + 1); //SpellHelper.GetDuration( Caster, m );
                    m_UnderEffect[m] = t = Timer.DelayCall(duration, new TimerStateCallback(RemoveEffect), m);
                    m.UpdateResistances();
                }

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

                m.Paralyzed = false;

                m.FixedParticles(0x374A, 10, 15, 5028, EffectLayer.Waist);
                m.PlaySound(0x1EA);
            }

            FinishSequence();
        }
示例#6
0
        public void Target(Mobile m)
        {
            if (m == null)
            {
                Caster.SendLocalizedMessage(1060508); // You can't curse that.
            }
            else if (HasMindRotScalar(m))
            {
                Caster.SendLocalizedMessage(1005559); // This spell is already in effect.
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                /* Attempts to place a curse on the Target that increases the mana cost of any spells they cast,
                 * for a duration based off a comparison between the Caster's Spirit Speak skill and the Target's Resisting Spells skill.
                 * The effect lasts for ((Spirit Speak skill level - target's Resist Magic skill level) / 50 ) + 20 seconds.
                 */

                m.Spell?.OnCasterHurt();

                m.PlaySound(0x1FB);
                m.PlaySound(0x258);
                m.FixedParticles(0x373A, 1, 17, 9903, 15, 4, EffectLayer.Head);

                var duration =
                    TimeSpan.FromSeconds(
                        ((GetDamageSkill(Caster) - GetResistSkill(m)) / 5.0 + 20.0) * (m.Player ? 1.0 : 2.0)
                        );
                m.CheckSkill(SkillName.MagicResist, 0.0, 120.0); // Skill check for gain

                SetMindRotScalar(Caster, m, m.Player ? 1.25 : 2.00, duration);

                HarmfulSpell(m);
            }

            FinishSequence();
        }
示例#7
0
        public override void OnTarget(Mobile target)
        {
            Point3D from = Caster.Location;
            Point3D to   = target.Location;

            if (Factions.Sigil.ExistsOn(Caster))
            {
                Caster.SendLocalizedMessage(1061632);                   // You can't do that while carrying the sigil.
            }
            else if (!SpellHelper.CheckTravel(Caster, TravelCheckType.TeleportFrom))
            {
            }
            else if (!SpellHelper.CheckTravel(Caster, Caster.Map, new Point3D(target), TravelCheckType.TeleportTo))
            {
            }
            else if (target is BaseVendor)
            {
                Caster.SendMessage("You cannot switch with that.");
            }
            else if (CheckSequence())
            {
                SpellHelper.Turn(Caster, target);
                Caster.Location = to;
                target.Location = from;
                SpellHelper.Turn(Caster, target);

                Caster.ProcessDelta();

                Effects.SendLocationParticles(EffectItem.Create(from, Caster.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
                Effects.SendLocationParticles(EffectItem.Create(to, Caster.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
                //m.FixedParticles( 0x376A, 9, 32, 0x13AF, EffectLayer.Waist );
                Caster.PlaySound(0x1FE);

                BlueMageControl.CheckKnown(target, this, CanTeach(target));
            }

            FinishSequence();
        }
示例#8
0
        public void OnTarget(IDamageable d)
        {
            if (d == null)
            {
                return;
            }
            else if (CheckHSequence(d))
            {
                IDamageable target = d;
                IDamageable source = Caster;

                SpellHelper.Turn(Caster, target);

                if (HasDelayContext(target))
                {
                    DoHurtFizzle();
                    return;
                }

                if (SpellHelper.CheckReflect((int)Circle, ref source, ref target))
                {
                    Timer.DelayCall(TimeSpan.FromSeconds(.5), () =>
                    {
                        source.MovingParticles(target, 0x36D4, 7, 0, false, true, 0x49A, 0, 0, 9502, 4019, 0x160);
                        source.PlaySound(0x211);
                    });
                }

                double damage = GetNewAosDamage(10, 1, 4, target);

                SpellHelper.Damage(this, target, damage, 0, 0, 0, 0, 0, 100, 0);

                Caster.MovingParticles(d, 0x36D4, 7, 0, false, true, 0x49A, 0, 0, 9502, 4019, 0x160);
                Caster.PlaySound(0x211);
            }

            FinishSequence();
        }
示例#9
0
        private bool DoDamage(Mobile m, InternalItem item)
        {
            if (item.Visible && Caster != null && m != Caster && SpellHelper.ValidIndirectTarget(Caster, m) && Caster.CanBeHarmful(m, false))
            {
                if (SpellHelper.CanRevealCaster(m))
                {
                    Caster.RevealingAction();
                }

                SkillName damageSkill = Caster.Skills[SkillName.Focus].Value > Caster.Skills[SkillName.Imbuing].Value ? SkillName.Focus : SkillName.Imbuing;

                double skill = ((Caster.Skills[SkillName.Mysticism].Value) + Caster.Skills[damageSkill].Value * 2) / 3;
                skill /= m.Player ? 3.5 : 2;

                int damage = (int)skill + Utility.RandomMinMax(-3, 3);
                damage *= (int)GetDamageScalar(m);

                int sdiBonus = SpellHelper.GetSpellDamageBonus(Caster, m, CastSkill, Caster.Player && m.Player);

                damage *= (100 + sdiBonus);
                damage /= 100;

                Caster.DoHarmful(m);
                m.FixedParticles(0x374A, 1, 15, 9502, 97, 3, (EffectLayer)255);

                AOS.Damage(m, Caster, damage, 0, 0, 0, 0, 0, 100, 0, DamageType.SpellAOE);

                int manaRip = Math.Min(m.Mana, damage / 4);

                if (manaRip > 0)
                {
                    m.Mana      -= manaRip;
                    Caster.Mana += manaRip;
                }
            }

            return(true);
        }
示例#10
0
        protected override int CalculateEffectDuration(GameLiving target, double effectiveness)
        {
            double duration  = base.CalculateEffectDuration(target, effectiveness);
            double mocFactor = 1.0;
            MasteryofConcentrationEffect moc = Caster.EffectList.GetOfType <MasteryofConcentrationEffect>();

            if (moc != null)
            {
                MasteryofConcentrationAbility ra = Caster.GetAbility <MasteryofConcentrationAbility>();
                if (ra != null)
                {
                    mocFactor = System.Math.Round((double)ra.GetAmountForLevel(ra.Level) * 25 / 100, 2);
                }

                duration = (double)Math.Round(duration * mocFactor);
            }

            if (Spell.SpellType.ToLower() != "stylestun")
            {
                // capping duration adjustment to 100%, live cap unknown - Tolakram
                int hitChance = Math.Min(200, CalculateToHitChance(target));

                if (hitChance <= 0)
                {
                    duration = 0;
                }
                else if (hitChance < 55)
                {
                    duration -= (int)(duration * (55 - hitChance) * 0.01);
                }
                else if (hitChance > 100)
                {
                    duration += (int)(duration * (hitChance - 100) * 0.01);
                }
            }

            return((int)duration);
        }
示例#11
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Caster.PlaySound(0x20F);
                Caster.PlaySound(Caster.Female ? 0x338 : 0x44A);
                Caster.FixedParticles(0x376A, 1, 31, 9961, 1160, 0, EffectLayer.Waist);
                Caster.FixedParticles(0x37C4, 1, 31, 9502, 43, 2, EffectLayer.Waist);

                Caster.Stam = Caster.StamMax;

                Timer t = (Timer)m_Table[Caster];

                if (t != null)
                {
                    t.Stop();
                }

                int delay = ComputePowerValue(10);

                // TODO: Should caps be applied?
                if (delay < 7)
                {
                    delay = 7;
                }
                else if (delay > 24)
                {
                    delay = 24;
                }

                m_Table[Caster] = t = Timer.DelayCall(TimeSpan.FromSeconds(delay), new TimerStateCallback(Expire_Callback), Caster);
                Caster.Delta(MobileDelta.WeaponDamage);

                BuffInfo.AddBuff(Caster, new BuffInfo(BuffIcon.DivineFury, 1060589, 1075634, TimeSpan.FromSeconds(delay), Caster));
            }

            FinishSequence();
        }
示例#12
0
        public void Effect(Point3D loc, Map map, bool checkMulti)
        {
            if (map == null || (!Core.AOS && Caster.Map != map))
            {
                Caster.SendLocalizedMessage(1005569);                   // You can not recall to another facet.
            }
            else if (Caster.Kills >= 5 && map != Map.Felucca)
            {
                Caster.SendLocalizedMessage(1019004);                   // You are not allowed to travel there.
            }
            else if (Server.Misc.WeightOverloading.IsOverloaded(Caster))
            {
                Caster.SendLocalizedMessage(502359, "", 0x22);                   // Thou art too encumbered to move.
            }
            else if (!map.CanFit(loc.X, loc.Y, loc.Z, 16))
            {
                Caster.SendLocalizedMessage(501942);                   // That location is blocked.
            }
            else if (checkMulti && SpellHelper.CheckMulti(loc, map))
            {
                Caster.SendLocalizedMessage(501942);                   // That location is blocked.
            }
            else if (!SpellHelper.CheckTravel(Caster, loc, map, TravelType.Recall) && Caster.AccessLevel == AccessLevel.Player)
            {
                Caster.PlaySound(0x5C);
            }
            else if (CheckSequence())
            {
                BaseCreature.TeleportPets(Caster, loc, map, true);

                Caster.PlaySound(0x1FC);
                Caster.Map      = map;
                Caster.Location = loc;
                Caster.PlaySound(0x1FC);
            }

            FinishSequence();
        }
示例#13
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (m.Frozen || m.Paralyzed)
            {
                Caster.SendLocalizedMessage(1061923);                   // The target is already frozen.
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                SpellHelper.CheckReflect((int)this.Circle, Caster, ref m);

                int secs = (int)((GetDamageSkill(Caster) / 10) - (GetResistSkill(m) / 10));

                if (!m.Player)
                {
                    secs *= 3;
                }

                if (secs < 0)
                {
                    secs = 0;
                }

                double duration = secs;

                m.Paralyze(TimeSpan.FromSeconds(duration));

                m.PlaySound(0x204);
                m.FixedEffect(0x376A, 6, 1);
            }

            FinishSequence();
        }
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(m) && CheckFizzle())
            {
                SpellHelper.Turn(Caster, m);

                Timer t = new InternalTimer(m);

                m_Table[m] = t;

                t.Start();

                m.FixedParticles(0x374A, 10, 15, 5032, EffectLayer.Head);
                m.PlaySound(0x1F8);
                m.SendMessage("You feel your soul weakening.");
            }

            FinishSequence();
        }
示例#15
0
        public override void OnCast()
        {
            if (Caster.Backpack != null && CheckSequence())
            {
                Item[] stones = Caster.Backpack.FindItemsByType(typeof(HealingStone));

                for (int i = 0; i < stones.Length; i++)
                {
                    stones[i].Delete();
                }

                int amount  = (int)((Caster.Skills[CastSkill].Value + Caster.Skills[DamageSkill].Value) * 1.5);
                int maxHeal = (int)((Caster.Skills[CastSkill].Value + Caster.Skills[DamageSkill].Value) / 5);

                Caster.PlaySound(0x650);
                Caster.FixedParticles(0x3779, 1, 15, 0x251E, 0, 0, EffectLayer.Waist);

                Caster.Backpack.DropItem(new HealingStone(Caster, amount, maxHeal));
                Caster.SendLocalizedMessage(1080115); // A Healing Stone appears in your backpack.
            }

            FinishSequence();
        }
示例#16
0
        public override void OnCast()
        {
            if (Caster.HasGump(typeof(SpellTriggerGump)))
            {
                Caster.CloseGump(typeof(SpellTriggerGump));
            }

            SpellTriggerGump gump = new SpellTriggerGump(this, Caster);
            int serial            = gump.Serial;

            Caster.SendGump(gump);

            Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
            {
                Gump current = Caster.FindGump(typeof(SpellTriggerGump));

                if (current != null && current.Serial == serial)
                {
                    Caster.CloseGump(typeof(EnchantSpellGump));
                    FinishSequence();
                }
            });
        }
示例#17
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Caster.FixedParticles(0x3779, 10, 20, 0x0, EffectLayer.Waist);
                Caster.PlaySound(0x5C0);

                List <Mobile> arcanists = GetArcanists();

                TimeSpan duration = TimeSpan.FromHours(Math.Max(1, (int)(Caster.Skills.Spellweaving.Value / 24)));

                int strengthBonus = GetStrengthBonus(arcanists.Count);
                duration += TimeSpan.FromHours(strengthBonus - 1);

                for (int i = 0; i < arcanists.Count; i++)
                {
                    Mobile m = arcanists[i];
                    GiveArcaneFocus(m, duration, strengthBonus);
                }
            }

            FinishSequence();
        }
示例#18
0
        public override void OnCast()
        {
            if (CheckSequence())
            {
                Caster.FixedParticles(0x3779, 10, 20, 0x0, EffectLayer.Waist);
                Caster.PlaySound(0x5C0);

                List <Mobile> Arcanists = GetArcanists();

                TimeSpan duration = TimeSpan.FromHours(Math.Max(1, (int)(Caster.Skills.Spellweaving.Value / 24)));

                duration += TimeSpan.FromHours(Math.Min(6, Arcanists.Count));

                int strengthBonus = Math.Min(IsBonus(Caster.Location, Caster.Map) ? 6 : 5, Arcanists.Sum(m => GetStrength(m))); // Math.Min(Arcanists.Count, IsBonus(Caster.Location, Caster.Map) ? 6 : 5);	//The Sanctuary is a special, single location place

                for (int i = 0; i < Arcanists.Count; i++)
                {
                    GiveArcaneFocus(Arcanists[i], duration, strengthBonus);
                }
            }

            FinishSequence();
        }
示例#19
0
        private void ConsumePowers()
        {
            if (SpellInfo.HasAttribute(SpellAttributes.RequiresComboPoints))
            {
                ConsumedComboPoints = Caster.ComboPoints;
                Caster.Attributes.SetComboPoints(0);
            }

            foreach ((SpellPowerType, int)powerCost in powerCosts)
            {
                if (powerCost.Item1 == SpellPowerType.Health)
                {
                    if (Caster.IsAlive)
                    {
                        Caster.ModifyHealth(-Mathf.Min(Caster.Health - 1, powerCost.Item2));
                    }

                    continue;
                }

                Caster.Attributes.ModifyPower(powerCost.Item1, -powerCost.Item2);
            }
        }
示例#20
0
        public override bool CheckCast()
        {
            int mana = ScaleMana(RequiredMana);

            if (!base.CheckCast())
            {
                return(false);
            }

            if (Caster.Skills[CastSkill].Value < RequiredSkill)
            {
                string args = String.Format("{0}\t{1}\t ", RequiredSkill.ToString("F1"), CastSkill.ToString());
                Caster.SendLocalizedMessage(1063013, args); // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
                return(false);
            }
            else if (Caster.Mana < mana)
            {
                Caster.SendLocalizedMessage(1060174, mana.ToString()); // You must have at least ~1_MANA_REQUIREMENT~ Mana to use this ability.
                return(false);
            }

            return(true);
        }
        private void DoEffect()
        {
            IPooledEnumerable eable = Caster.GetMobilesInRange(4);

            foreach (Mobile m in eable)
            {
                if (m != null && m is PlayerMobile && m.Alive && m.AccessLevel == AccessLevel.Player)
                {
                    PlayerMobile pm = (PlayerMobile)m;
                    if (/*pm.IOBEquipped &&*/ pm.IOBAlignment == IOBAlignment.Council)
                    {
                        continue;
                    }

                    if (m.Hidden && Utility.RandomDouble() <= 0.80)
                    {
                        m.RevealingAction();
                        DoVisualForPlayer(m);
                    }
                }
            }
            eable.Free();
        }
示例#22
0
        public override bool CheckCast()
        {
            if (!base.CheckCast())
            {
                return(false);
            }

            if (Caster.Mounted)
            {
                Caster.SendLocalizedMessage(1010097);                   // You cannot use this while mounted.
                return(false);
            }

            if ((Caster.Followers + 1) > Caster.FollowersMax)
            {
                Caster.SendLocalizedMessage(1063133);                   // You cannot summon a mirror image because you have too many followers.
                return(false);
            }

            Caster.SendLocalizedMessage(1063134);               // You begin to summon a mirror image of yourself.

            return(true);
        }
示例#23
0
        public override bool CheckCast()
        {
            if (IsInCooldown(Caster, GetType()))
            {
                return(false);
            }

            if (!CheckWeapon())
            {
                Caster.SendLocalizedMessage(1156016); // You must have a throwing weapon equipped to use this ability.
                return(false);
            }

            ElementalFurySpell spell = GetSpell(Caster, GetType()) as ElementalFurySpell;

            if (spell != null)
            {
                spell.Expire();
                return(false);
            }

            return(base.CheckCast());
        }
示例#24
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237);                 // Target can not be seen.
            }
            else if (CheckBSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                SpellHelper.AddStatBonus(Caster, m, StatType.Dex);

                m.FixedParticles(0x375A, 10, 15, 5010, EffectLayer.Waist);
                m.PlaySound(0x1e7);

                int      percentage = (int)(SpellHelper.GetOffsetScalar(Caster, m, false) * 100);
                TimeSpan length     = SpellHelper.GetDuration(Caster, m);

                BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Agility, 1075841, length, m, percentage.ToString()));
            }

            FinishSequence();
        }
        public async Task CastAsync()
        {
            if (!Caster.CanBuff(Caster, false, BuffIcon.MagicReflection))
            {
                Caster.SendLocalizedMessage(1005559); // This spell is already in effect.
                return;
            }

            var value = Caster.Skills[SkillName.Magery].Value / 12.0 + 1.0;

            Caster.FireHook(h => h.OnModifyWithMagicEfficiency(Caster, ref value));

            Caster.TryAddBuff(new MagicReflectionBuff
            {
                Value = value >= (int)SpellCircle.Highest
                    ? SpellCircle.Highest - 1
                    : (SpellCircle)value,
                Charges = 1
            });

            Caster.FixedParticles(0x374B, 10, 10, 5037, EffectLayer.Waist);
            Caster.PlaySound(0x1E7);
        }
示例#26
0
		public override bool CasterIsAttacked(GameLiving attacker)
		{
			if (Spell.Uninterruptible)
				return false;

			if (IsCasting && Stage < 2)
			{
				double mod = Caster.GetConLevel(attacker);
				double chance = 65;
				chance += mod * 10;
				chance = Math.Max(1, chance);
				chance = Math.Min(99, chance);
				if (attacker is GamePlayer) chance = 100;
				if (Util.Chance((int)chance))
				{
					Caster.TempProperties.setProperty(INTERRUPT_TIMEOUT_PROPERTY, Caster.CurrentRegion.Time + Caster.SpellInterruptDuration);
					MessageToLiving(Caster, attacker.GetName(0, true) + " attacks you and your shot is interrupted!", eChatType.CT_SpellResisted);
					InterruptCasting();
					return true;
				}
			}
			return true;
		}
示例#27
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (m is Mobiles.BaseVendor || m is Mobiles.PlayerVendor || m.AccessLevel > Caster.AccessLevel)
            {
                Caster.SendLocalizedMessage(501857); // This spell won't work on that!
            }
            else if (CheckBSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                Effects.SendLocationParticles(EffectItem.Create(new Point3D(m.X, m.Y, m.Z + 16), Caster.Map, EffectItem.DefaultDuration), 0x376A, 10, 15, 5045);
                m.PlaySound(0x3C4);

                m.Hidden    = true;
                m.Combatant = null;
                m.Warmode   = false;

                RemoveTimer(m);

                TimeSpan duration = TimeSpan.FromSeconds(((1.2 * Caster.Skills.Magery.Fixed) / 10));

                Timer t = new InternalTimer(m, duration);

                BuffInfo.RemoveBuff(m, BuffIcon.HidingAndOrStealth);
                BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Invisibility, 1075825, duration, m)); //Invisibility/Invisible

                m_Table[m] = t;

                t.Start();
            }

            FinishSequence();
        }
示例#28
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (!CheckLineOfSight(m))
            {
                this.DoFizzle();
                Caster.SendAsciiMessage("Target is not in line of sight");
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                SpellHelper.CheckReflect((int)this.Circle, Caster, ref m);

                SpellHelper.AddStatCurse(Caster, m, StatType.Str);

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

                m.Paralyzed = false;

                m.FixedParticles(0x3779, 10, 15, 5009, EffectLayer.Waist);
                m.PlaySound(0x1E6);

                int      percentage = (int)(SpellHelper.GetOffsetScalar(Caster, m, true) * 100);
                TimeSpan length     = SpellHelper.GetDuration(Caster, m);

                BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Weaken, 1075837, length, m, percentage.ToString()));
            }

            FinishSequence();
        }
示例#29
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);
                int intel = Caster.Int;

                if (intel > 150)
                {
                    intel = 150;
                }

                double damage = (intel - m.Int) / 2.5;

                damage = SpellHelper.AdjustValue(Caster, damage);

                if (CheckResisted(m))
                {
                    damage *= 0.75;

                    m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
                }

                Effects.SendTargetParticles(Caster, 0x374A, 10, 15, 2038, EffectLayer.Head);

                Effects.SendTargetParticles(m, 0x374A, 10, 15, 5038, EffectLayer.Head);
                m.PlaySound(0x213);

                SpellHelper.Damage(this, m, damage, 0, 0, 0, 0, 100);
            }

            FinishSequence();
        }
示例#30
0
        public void Target(IDamageable m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (CheckHSequence(m))
            {
                IDamageable source = Caster;
                IDamageable target = m;

                SpellHelper.Turn(Caster, m);

                if (SpellHelper.CheckReflect((int)Circle, ref source, ref target))
                {
                    Timer.DelayCall(TimeSpan.FromSeconds(.5), () =>
                    {
                        source.MovingParticles(target, 0x379F, 7, 0, false, true, 3043, 4043, 0x211);
                        source.PlaySound(0x20A);
                    });
                }

                double damage = GetNewAosDamage(40, 1, 5, m);

                // Do the effects
                Caster.MovingParticles(m, 0x379F, 7, 0, false, true, 3043, 4043, 0x211);
                Caster.PlaySound(0x20A);

                if (damage > 0)
                {
                    // Deal the damage
                    SpellHelper.Damage(this, target, damage, 0, 0, 0, 0, 100);
                }
            }

            FinishSequence();
        }