예제 #1
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237); // Target can not be seen.
            }
            else if (m.Spell != null && m.Spell.IsCasting)
            {
                // too busy casting
            }
            else if (m.InvisibleShield)
            {
                Caster.SendMessage("They are already covered with an invisible shield.");
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);
                m.Shield(TimeSpan.FromMinutes(2.0));

                InvisibleShieldInfo info = new InvisibleShieldInfo(Caster, m, TimeSpan.FromMinutes(2.0));
                info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), new TimerStateCallback(ProcessInvisibleShieldInfo), info);

                // wall of stone sound: point, map, sound
                Effects.PlaySound(m, Caster.Map, 0x1F6);
            }

            FinishSequence();
        }
예제 #2
0
        private static void ProcessInvisibleShieldInfo(object state)
        {
            InvisibleShieldInfo info = (InvisibleShieldInfo)state;
            Mobile from = info.m_From;
            Mobile targ = info.m_Target;

            if (DateTime.Now >= info.m_EndTime || targ.Deleted || from.Map != targ.Map ||
                targ.GetDistanceToSqrt(from) > 16 || targ.InvisibleShield == false)
            {
                if (info.m_Timer != null)
                {
                    info.m_Timer.Stop();
                }

                targ.InvisibleShield = false;
            }
            else
            {
                targ.FixedEffect(0x376A, 1, 32, 51, 0);
            }
        }