Exemplo n.º 1
0
            protected override void OnTick()
            {
                if (m_Attacker.HarmfulCheck(m_Defender))
                {
                    double damage;

                    if (Core.AOS)
                    {
                        damage = m_Spell.GetNewAosDamage(40, 1, 5, m_Defender);
                    }
                    else
                    {
                        damage = MagerySpell.GetPreUORDamage(SpellCircle.Sixth);

                        if (m_Spell.CheckResisted(m_Target))
                        {
                            damage *= 0.75;

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

                        damage *= m_Spell.GetDamageScalar(m_Target);
                    }

                    m_Target.FixedParticles(0x36BD, 20, 10, 5044, EffectLayer.Head);
                    m_Target.PlaySound(0x307);

                    SpellHelper.Damage(m_Spell, m_Target, damage, 0, 100, 0, 0, 0);

                    if (m_Spell != null)
                    {
                        m_Spell.RemoveDelayedDamageContext(m_Attacker);
                    }
                }
            }
        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);

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

                double damage = Utility.Random(27, 22);

                damage = MagerySpell.ScaleDamageAgainstResist(damage, 0.4, m);

                damage *= GetDamageScalar(m);

                m.FixedParticles(0x3709, 10, 30, 5052, EffectLayer.LeftFoot);
                m.PlaySound(0x208);

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

            FinishSequence();
        }
Exemplo n.º 3
0
            public override bool OnMoveOver(Mobile m)
            {
                if (Visible && m_Caster != null && (!Core.AOS || m != m_Caster) && SpellHelper.ValidIndirectTarget(m_Caster, m) && m_Caster.CanBeHarmful(m, false))
                {
                    /*m_Caster.DoHarmful( m );
                     *
                     * ApplyPoisonTo( m );
                     * m.PlaySound( 0x474 );*/

                    bool guarded = (m.Region is Regions.GuardedRegion && !((Regions.GuardedRegion)m.Region).IsDisabled());

                    // this is how it was on Rebirth
                    //if ( !guarded && !m.CheckSkill( SkillName.MagicResist, 5.0, 45.0 ) ) // CheckResistedEasy

                    if (!m.Poisoned)
                    {
                        //if ( !guarded && !m.CheckSkill( SkillName.MagicResist, 45.0, 105.0 ) ) // CheckResisted
                        if (!guarded && MagerySpell.CheckResistedStatic(m, m_Caster, (int)SpellCircle.Third)) // Poison Field is 5th circle, but poison is 3rd
                        {
                            m.ApplyPoison(m_Caster, Poison.Regular);
                        }
                        else
                        {
                            m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
                        }
                    }
                }

                return(true);
            }
Exemplo n.º 4
0
            public InternalTimer(MagerySpell spell, Mobile attacker, Mobile defender, Mobile target)
                : base(TimeSpan.FromSeconds(Core.AOS ? 3.0 : 2.5))
            {
                _spell    = spell;
                _attacker = attacker;
                _defender = defender;
                _target   = target;

                _spell?.StartDelayedDamageContext(_attacker, this);
            }
Exemplo n.º 5
0
            public InternalTimer(MagerySpell spell, Mobile attacker, IDamageable target)
                : base(TimeSpan.FromSeconds(3.0))
            {
                m_Spell    = spell;
                m_Attacker = attacker;
                m_Target   = target;

                m_Spell?.StartDelayedDamageContext(attacker, this);

                Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 6
0
			public InternalTimer( MagerySpell spell, Mobile target)
                : base(TimeSpan.FromSeconds( SpellDamageController._ExplosionBaseDelay + (Utility.Random(SpellDamageController._ExplosionDelayRandomTenths) / 10.0)))
			{
				m_Spell = spell;
				m_Target = target;

				if ( m_Spell != null && m_Spell.DelayedDamage && !m_Spell.DelayedDamageStacking )
					m_Spell.StartDelayedDamageContext( spell.Caster, this );

				Priority = TimerPriority.FiftyMS;
			}
Exemplo n.º 7
0
            public InternalTimer(MagerySpell spell, Mobile attacker, IDamageable target)
                : base(TimeSpan.FromSeconds(Core.AOS ? 3.0 : 2.5))
            {
                m_Spell = spell;
                m_Attacker = attacker;
                m_Target = target;

                if (this.m_Spell != null)
                    this.m_Spell.StartDelayedDamageContext(attacker, this);

                this.Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 8
0
            public InternalTimer(MagerySpell spell, Mobile attacker, Mobile defender, Mobile target)
                : base(TimeSpan.FromSeconds(Core.AOS ? 3.0 : 2.5))
            {
                m_Spell    = spell;
                m_Attacker = attacker;
                m_Defender = defender;
                m_Target   = target;

                m_Spell?.StartDelayedDamageContext(attacker, this);

                Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 9
0
            public override bool OnMoveOver(Mobile m)
            {
                if (Visible && m_Caster != null && (!Core.AOS || m != m_Caster) && SpellHelper.ValidIndirectTarget(m_Caster, m) && m_Caster.CanBeHarmful(m, false))
                {
                    m_Caster.DoHarmful(m);

                    double duration;

                    if (Core.AOS)
                    {
                        duration = 2.0 + ((int)(m_Caster.Skills[SkillName.EvalInt].Value / 10) - (int)(m.Skills[SkillName.MagicResist].Value / 10));

                        if (!m.Player)
                        {
                            duration *= 3.0;
                        }

                        if (duration < 0.0)
                        {
                            duration = 0.0;
                        }
                    }
                    else
                    {
                        duration = 7.0 + (m_Caster.Skills[SkillName.Magery].Value * 0.1);

                        bool guarded = (m.Region is Regions.GuardedRegion && !((Regions.GuardedRegion)m.Region).IsDisabled());

                        //if ( !m.CheckSkill( SkillName.MagicResist, 10.0, 50.0 ) ) // CheckResistedEasy
                        //if ( !guarded && !m.CheckSkill( SkillName.MagicResist, 45.0, 105.0 ) ) // CheckResisted
                        if (!guarded && MagerySpell.CheckResistedStatic(m, m_Caster, (int)SpellCircle.Fifth)) // Para Field is 6th circle, but para itself is 5th
                        {
                            m.Paralyze(TimeSpan.FromSeconds(duration));
                        }
                        else
                        {
                            duration *= 0.25;
                            m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
                        }
                    }

                    if (duration > 0)
                    {
                        m.Paralyze(TimeSpan.FromSeconds(duration));
                    }

                    m.PlaySound(0x204);
                    m.FixedEffect(0x376A, 10, 16);
                }

                return(true);
            }
Exemplo n.º 10
0
        public bool IsFifthCircleOrAbove(Mobile from, SpellScroll scroll)
        {
            MagerySpell spell = SpellRegistry.NewSpell(scroll.SpellID, from, scroll) as MagerySpell;

            if (spell != null && spell.Circle > SpellCircle.Fourth)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 11
0
			public InternalTimer( MagerySpell spell, Mobile attacker, Mobile defender, Mobile target )
				: base( TimeSpan.FromSeconds( Core.SE ? 3.0 : 2.5 ) )
			{
				m_Spell = spell;
				m_Attacker = attacker;
				m_Defender = defender;
				m_Target = target;

				if( m_Spell != null )
					m_Spell.StartDelayedDamageContext( attacker, this );

				Priority = TimerPriority.FiftyMS;
			}
Exemplo n.º 12
0
            public InternalTimer(MagerySpell spell, Mobile target)
                : base(TimeSpan.FromSeconds(SpellDamageController._ExplosionBaseDelay + (Utility.Random(SpellDamageController._ExplosionDelayRandomTenths) / 10.0)))
            {
                m_Spell  = spell;
                m_Target = target;

                if (m_Spell != null && m_Spell.DelayedDamage && !m_Spell.DelayedDamageStacking)
                {
                    m_Spell.StartDelayedDamageContext(spell.Caster, this);
                }

                Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 13
0
            public InternalTimer(MagerySpell spell, Mobile attacker, IDamageable target)
                : base(TimeSpan.FromSeconds(Core.AOS ? 3.0 : 2.5))
            {
                m_Spell    = spell;
                m_Attacker = attacker;
                m_Target   = target;

                if (m_Spell != null)
                {
                    m_Spell.StartDelayedDamageContext(attacker, this);
                }

                Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 14
0
            public InternalTimer(MagerySpell spell, Mobile attacker, Mobile source, Mobile target)
                : base(TimeSpan.FromSeconds(0.7))
            {
                m_Spell    = spell;
                m_Attacker = attacker;
                m_Target   = target;
                m_Source   = source;

                if (m_Spell != null)
                {
                    m_Spell.StartDelayedDamageContext(attacker, this);
                }

                Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 15
0
            public InternalTimer(MagerySpell spell, Mobile attacker, Mobile defender, Mobile target, TimeSpan delay)
                : base(delay)
            {
                m_Spell    = spell;
                m_Attacker = attacker;
                m_Defender = defender;
                m_Target   = target;

                if (m_Spell != null)
                {
                    m_Spell.StartDelayedDamageContext(attacker, this);
                }

                Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 16
0
            public InternalTimer(MagerySpell spell, Mobile attacker, Mobile defender, Mobile target)
                : base(TimeSpan.FromSeconds(Core.AOS ? 3.0 : 3.0))
            {
                this.m_Spell    = spell;
                this.m_Attacker = attacker;
                this.m_Defender = defender;
                this.m_Target   = target;

                if (this.m_Spell != null)
                {
                    this.m_Spell.StartDelayedDamageContext(attacker, this);
                }

                this.Priority = TimerPriority.FiftyMS;
            }
Exemplo n.º 17
0
        public override bool DoEffect(Mobile from, Mobile target)
        {
            if (from.CanSee(target) && from.CanBeHarmful(target) && from.InLOS(target) && target.Alive)
            {
                from.DoHarmful(target);

                Mobile source = from;
                SpellHelper.Turn(source, target);

                SpellHelper.CheckReflect(2, ref source, ref target);

                //double damage = Utility.RandomMinMax( m_Min, m_Max );
                double damage = MagerySpell.GetPreUORDamage(m_Circle);
                double scalar;

                double atkDmgVal = (100.0 * ((int)m_Circle)) / 7.0;
                double dfnDefVal = target.Skills[SkillName.MagicResist].Value;

                if (dfnDefVal > atkDmgVal)
                {
                    scalar = 1.0 + (atkDmgVal - dfnDefVal) / 200;
                }
                else
                {
                    scalar = 1.0 + (atkDmgVal - dfnDefVal) / 500;
                }

                if (scalar < 0.0)
                {
                    scalar = 0.01;
                }

                if (target is BaseCreature)
                {
                    ((BaseCreature)target).AlterDamageScalarFrom(from, ref scalar);
                }

                if (from is BaseCreature)
                {
                    ((BaseCreature)from).AlterDamageScalarTo(target, ref scalar);
                }

                target.Region.SpellDamageScalar(from, target, ref scalar);

                if (MagerySpell.CheckResistedStatic(target, from, (int)m_Circle))
                {
                    damage *= 0.5;
                    target.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
                }

                damage *= scalar;
                if (damage < 0)
                {
                    damage = 0;
                }

                if (m_ExpSnd >= 0)
                {
                    source.MovingParticles(target, m_EffIID, m_Spd, 0, false, true, m_Eff, m_Exp, m_ExpSnd);
                }
                else
                {
                    if (m_EffIID == 0 && m_Spd == 0)
                    {
                        target.BoltEffect(m_Eff);
                    }
                    else
                    {
                        target.FixedParticles(m_EffIID, m_Spd, m_Exp, m_Eff, (EffectLayer)(-(m_ExpSnd - 1)));
                    }
                }

                if (m_Snd > 0)
                {
                    source.PlaySound(m_Snd);
                }

                SpellHelper.Damage(TimeSpan.Zero, target, from, damage, 0, 100, 0, 0, 0);

                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 18
0
            public InternalTimer( MagerySpell spell, Mobile attacker, Mobile defender, Mobile target, TimeSpan delay )
                : base(delay)
            {
                m_Spell = spell;
                m_Attacker = attacker;
                m_Defender = defender;
                m_Target = target;

                if ( m_Spell != null )
                    m_Spell.StartDelayedDamageContext( attacker, this );

                Priority = TimerPriority.FiftyMS;
            }
        public SpellScrollLibraryGump(PlayerMobile player, SpellScrollLibrary library, int pageNumber) : base(10, 10)
        {
            if (player == null)
            {
                return;
            }
            if (library == null)
            {
                return;
            }
            if (library.Deleted)
            {
                return;
            }

            m_Player     = player;
            m_Library    = library;
            m_PageNumber = pageNumber;

            Closable   = true;
            Disposable = true;
            Dragable   = true;
            Resizable  = false;

            AddImage(205, 193, 11015);
            AddImage(204, 1, 11015);
            AddImage(3, 192, 11015);
            AddImage(3, 1, 11015);
            AddImage(302, 75, 2081, 2499);
            AddImage(300, 270, 2081, 2499);
            AddImage(301, 141, 2081, 2499);
            AddImage(301, 5, 2081, 2499);
            AddImage(301, 206, 2081, 2499);
            AddImage(299, 338, 2081, 2499);
            AddImage(44, 6, 2081, 2499);
            AddImage(44, 75, 2081, 2499);
            AddImage(43, 141, 2081, 2499);
            AddImage(43, 206, 2081, 2499);
            AddImage(41, 335, 2081);
            AddImage(43, 274, 2081, 2499);
            AddImage(41, 338, 2081, 2499);
            AddItem(152, 29, 8002);
            AddImage(49, 80, 3001, 2615);
            AddImage(56, 80, 3001, 2615);
            AddImage(306, 80, 3001, 2615);
            AddImage(315, 80, 3001, 2615);
            AddImageTiled(301, 2, 6, 405, 2701);

            AddLabel(115, 5, 2560, "Spell Scroll Library");

            AddLabel(88, 53, WhiteTextHue, "Add All in Backpack into Library");
            AddButton(65, 56, 2118, 2118, 1, GumpButtonType.Reply, 0);

            AddLabel(354, 5, 2615, "Locked Down Access Level");

            string accessName = "Owner";

            switch (m_Library.LockedDownAccessLevel)
            {
            case SpellScrollLibrary.LockedDownAccessLevelType.Owner: accessName = "Owner"; break;

            case SpellScrollLibrary.LockedDownAccessLevelType.CoOwner: accessName = "Co-Owner"; break;

            case SpellScrollLibrary.LockedDownAccessLevelType.Friend: accessName = "Friend"; break;

            case SpellScrollLibrary.LockedDownAccessLevelType.Anyone: accessName = "Anyone"; break;
            }

            AddLabel(Utility.CenteredTextOffset(435, accessName), 25, 2562, accessName);

            AddButton(366, 28, 2223, 2223, 2, GumpButtonType.Reply, 0);
            AddButton(488, 29, 2224, 2224, 3, GumpButtonType.Reply, 0);

            AddLabel(347, 53, WhiteTextHue, "Remove All Possible on Selection");
            if (m_Library.RemoveAllOnSelection)
            {
                AddButton(313, 48, 2154, 2151, 4, GumpButtonType.Reply, 0);
            }
            else
            {
                AddButton(313, 48, 2151, 2154, 4, GumpButtonType.Reply, 0);
            }

            //-----

            m_TotalEntries = m_Library.m_LibraryEntries.Count;
            m_TotalPages   = (int)(Math.Ceiling((double)m_TotalEntries / (double)EntriesPerPage));

            if (m_TotalPages == 0)
            {
                m_TotalPages = 1;
            }

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

            if (m_PageNumber > m_TotalPages)
            {
                m_PageNumber = m_TotalPages;
            }

            int startIndex = (m_PageNumber - 1) * EntriesPerPage;
            int endIndex   = startIndex + EntriesPerPage;

            if (endIndex > m_TotalEntries)
            {
                endIndex = m_TotalEntries;
            }

            int leftStartY  = 88;
            int rightStartY = 88;

            int entryCount = 0;

            for (int a = startIndex; a < endIndex; a++)
            {
                if (a < m_Library.m_LibraryEntries.Count)
                {
                    SpellScrollLibraryEntry entry = m_Library.m_LibraryEntries[a];

                    int numberTextHue = WhiteTextHue;

                    if (entry.Count > 0)
                    {
                        numberTextHue = 2560;
                    }

                    //Left Side
                    if (entryCount < EntriesPerSide)
                    {
                        AddLabel(60, leftStartY, 2560, MagerySpell.GetSpellName(entry.SpellType));
                        AddButton(231, leftStartY + 3, 2118, 2118, 10 + entryCount, GumpButtonType.Reply, 0);
                        AddLabel(249, leftStartY, numberTextHue, entry.Count.ToString());

                        leftStartY += 38;
                    }

                    //Right Side
                    else
                    {
                        AddLabel(317, rightStartY, 2560, MagerySpell.GetSpellName(entry.SpellType));
                        AddButton(488, rightStartY + 3, 2118, 2118, 10 + entryCount, GumpButtonType.Reply, 0);
                        AddLabel(506, rightStartY, numberTextHue, entry.Count.ToString());

                        rightStartY += 38;
                    }

                    entryCount++;
                }
            }

            if (m_PageNumber > 1)
            {
                AddButton(160, 380, 4014, 4016, 5, GumpButtonType.Reply, 0);
            }

            if (m_PageNumber < m_TotalPages)
            {
                AddButton(415, 380, 4005, 4007, 6, GumpButtonType.Reply, 0);
            }
        }
Exemplo n.º 20
0
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            Mobile from = sender.Mobile;

            if (from != null && info.ButtonID == 1)
            {
                TextRelay relay;

                try
                {
                    for (int i = 0; i < 2; i++)
                    {
                        relay = info.GetTextEntry(100 + i);
                        double number = Double.Parse(relay.Text);
                        MagerySpell.SpeedTable[i] = number;
                    }
                }
                catch
                {
                    from.SendMessage("Couldn't parse speed entries.");
                }

                for (int row = 0; row < 8; row++)
                {
                    for (int column = 0; column < 3; column++)
                    {
                        relay = info.GetTextEntry(row * 3 + column);
                        if (relay != null)
                        {
                            string text = relay.Text.Trim();
                            try
                            {
                                int number = Int32.Parse(text);
                                if (number < 0)
                                {
                                    number = 0;
                                }

                                if (number > 99)
                                {
                                    number = 99;
                                }

                                MagerySpell.DamageTable[row * 3 + column] = number;
                            }
                            catch
                            {
                                from.SendMessage("Invalid textentry at column {0} on circle {1}.", column + 1, row + 1);
                            }
                        }
                    }
                }
                from.SendMessage("Saved spell damages. Saving to file...");
                try
                {
                    MagerySpell.SaveTables();
                    from.SendMessage("done.");
                }
                catch (Exception e)
                {
                    from.SendMessage("Couldn't save damage table: {0}", e.Message);
                }

                from.SendGump(new SpellAdminSetupGump());
            }
        }
Exemplo n.º 21
0
        private void AddSpell(Type type, params Reg[] regs)
        {
            double minSkill, maxSkill;

            switch (m_Circle + 1)
            {
            default:

            case 1: minSkill = 25; maxSkill = 50; break;

            case 2: minSkill = 35; maxSkill = 60; break;

            case 3: minSkill = 45; maxSkill = 70; break;

            case 4: minSkill = 55; maxSkill = 80; break;

            case 5: minSkill = 65; maxSkill = 90; break;

            case 6: minSkill = 75; maxSkill = 100; break;

            case 7: minSkill = 85; maxSkill = 110; break;

            case 8: minSkill = 95; maxSkill = 120; break;
            }

            string groupName = "Circle 1-6 Spells";

            if (m_Circle >= 6)
            {
                groupName = "Circle 7-8 Spells";
            }

            string spellName = MagerySpell.GetSpellName(type) + " Scroll";

            int index = AddCraft(1, type, groupName, spellName, minSkill, maxSkill, m_RegTypes[(int)regs[0]], 1044353 + (int)regs[0], 1, 1044361 + (int)regs[0]);

            double minimumMagery = MagerySpell.GetCastMinSkills(m_Circle, false);

            AddSkill(index, SkillName.Magery, minimumMagery, minimumMagery);

            for (int i = 1; i < regs.Length; ++i)
            {
                AddRes(index, m_RegTypes[(int)regs[i]], 1044353 + (int)regs[i], 1, 1044361 + (int)regs[i]);
            }

            AddRes(index, typeof(BlankScroll), "Blank Scroll", 1, 1044378);

            int arcaneScrollsCount = 0;

            if (m_Circle >= 6)
            {
                if (m_Circle == 6)
                {
                    arcaneScrollsCount = 1;
                }

                if (m_Circle == 7)
                {
                    arcaneScrollsCount = 2;
                }

                AddRes(index, typeof(ArcaneScroll), "Arcane Scroll", arcaneScrollsCount, "You do not have the neccessary arcane scrolls needed to craft that.");
            }

            SetManaReq(index, m_Mana);
        }