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