using System; using Server.Engines.PartySystem; using Server.Spells; namespace Server.Items { public class MoonstoneGate : Moongate { private readonly Mobile m_Caster; public MoonstoneGate(Point3D loc, Map map, Map targetMap, Mobile caster, int hue) : base(loc, targetMap) { this.MoveToWorld(loc, map); this.Dispellable = false; this.Hue = hue; this.m_Caster = caster; new InternalTimer(this).Start(); Effects.PlaySound(loc, map, 0x20E); } public MoonstoneGate(Serial serial) : base(serial) { } public override void CheckGate(Mobile m, int range) { if (SpellHelper.RestrictRedTravel && m.Murderer) return; Party casterParty = Party.Get(this.m_Caster); Party userParty = Party.Get(m); if (m == this.m_Caster || (casterParty != null && userParty == casterParty)) base.CheckGate(m, range); } public override void UseGate(Mobile m) { if (m.Murderer) return; Party casterParty = Party.Get(this.m_Caster); Party userParty = Party.Get(m); if (m == this.m_Caster || (casterParty != null && userParty == casterParty)) base.UseGate(m); } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); this.Delete(); } private class InternalTimer : Timer { private readonly Item m_Item; public InternalTimer(Item item) : base(TimeSpan.FromSeconds(30.0)) { this.m_Item = item; this.Priority = TimerPriority.OneSecond; } protected override void OnTick() { this.m_Item.Delete(); } } } }