Exemplo n.º 1
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            m_Peerless     = reader.ReadMobile() as BasePeerless;
            m_BossLocation = reader.ReadPoint3D();
            m_TeleportDest = reader.ReadPoint3D();
            m_ExitDest     = reader.ReadPoint3D();

            m_Deadline = reader.ReadDateTime();

            // deserialize master keys
            m_MasterKeys = reader.ReadStrongItemList();

            // deserialize fightes
            m_Fighters = reader.ReadStrongMobileList();

            // deserialize pets
            m_Pets = new Dictionary <Mobile, List <Mobile> >();
            int count = reader.ReadInt();

            for (int i = 0; i < count; i++)
            {
                m_Pets.Add(reader.ReadMobile(), reader.ReadStrongMobileList());
            }

            m_Spawned = reader.ReadBool();

            FinishSequence();
        }
Exemplo n.º 2
0
        public virtual void FinishSequence()
        {
            StopTimers();

            // delete peerless
            if (m_Peerless != null)
            {
                if (m_Peerless.Corpse != null && !m_Peerless.Corpse.Deleted)
                {
                    m_Peerless.Corpse.Delete();
                }

                if (!m_Peerless.Deleted)
                {
                    m_Peerless.Delete();
                }
            }

            // teleport party to exit if not already there
            for (int i = 0; i < m_Fighters.Count; i++)
            {
                Exit(m_Fighters[i]);
            }

            // delete master keys
            for (int i = 0; i < m_MasterKeys.Count; i++)
            {
                if (m_MasterKeys[i] != null && !m_MasterKeys[i].Deleted)
                {
                    m_MasterKeys[i].Delete();
                }
            }

            if (m_MasterKeys != null)
            {
                m_MasterKeys.Clear();
            }

            if (m_Fighters != null)
            {
                m_Fighters.Clear();
            }

            if (m_Pets != null)
            {
                m_Pets.Clear();
            }

            // delete any remaining helpers
            CleanupHelpers();

            // reset summoner, boss
            m_Peerless    = null;
            m_IsAvailable = true;

            m_Deadline = DateTime.MinValue;
        }
Exemplo n.º 3
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 2:
            case 1:
                if (reader.ReadBool())
                {
                    m_Helpers = reader.ReadStrongMobileList <BaseCreature>();
                }
                goto case 0;

            case 0:
                m_Peerless     = reader.ReadMobile() as BasePeerless;
                m_BossLocation = reader.ReadPoint3D();
                m_TeleportDest = reader.ReadPoint3D();
                m_ExitDest     = reader.ReadPoint3D();

                m_Deadline = reader.ReadDateTime();

                m_MasterKeys = reader.ReadStrongItemList();
                m_Fighters   = reader.ReadStrongMobileList();
                m_Pets       = new Dictionary <Mobile, List <Mobile> >();

                int count = reader.ReadInt();

                for (int i = 0; i < count; i++)
                {
                    m_Pets.Add(reader.ReadMobile(), reader.ReadStrongMobileList());
                }

                if (version < 2)
                {
                    reader.ReadBool();
                }

                if (m_Peerless == null && m_Helpers.Count > 0)
                {
                    Timer.DelayCall(TimeSpan.FromSeconds(30), new TimerCallback(CleanupHelpers));
                }

                break;
            }

            FinishSequence();
        }
Exemplo n.º 4
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 2:
            case 1:
                if (reader.ReadBool())
                {
                    this.m_Helpers = reader.ReadStrongMobileList <BaseCreature>();
                }
                goto case 0;

            case 0:
                this.m_Peerless     = reader.ReadMobile() as BasePeerless;
                this.m_BossLocation = reader.ReadPoint3D();
                this.m_TeleportDest = reader.ReadPoint3D();
                this.m_ExitDest     = reader.ReadPoint3D();

                this.m_Deadline = reader.ReadDateTime();

                // deserialize master keys
                this.m_MasterKeys = reader.ReadStrongItemList();

                // deserialize fightes
                this.m_Fighters = reader.ReadStrongMobileList();

                // deserialize pets
                this.m_Pets = new Dictionary <Mobile, List <Mobile> >();
                int count = reader.ReadInt();

                for (int i = 0; i < count; i++)
                {
                    this.m_Pets.Add(reader.ReadMobile(), reader.ReadStrongMobileList());
                }

                if (version < 2)
                {
                    reader.ReadBool();
                }

                break;
            }

            this.FinishSequence();
        }
Exemplo n.º 5
0
        public virtual void BeginSequence(Mobile from)
        {
            if (this.m_Peerless == null)
            {
                // spawn boss
                this.m_Peerless = this.Boss;

                if (this.m_Peerless != null)
                {
                    this.m_Peerless.Home      = this.m_BossLocation;
                    this.m_Peerless.RangeHome = 4;
                    this.m_Peerless.MoveToWorld(this.m_BossLocation, this.Map);
                    this.m_Peerless.Altar = this;
                }
                else
                {
                    return;
                }

                // set deadline
                if (this.m_Timer != null)
                {
                    this.m_Timer.Stop();
                }

                if (this.TimeToSlay != TimeSpan.Zero)
                {
                    this.m_Deadline       = DateTime.Now + this.TimeToSlay;
                    this.m_Timer          = Timer.DelayCall(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5), new TimerCallback(DeadlineCheck));
                    this.m_Timer.Priority = TimerPriority.OneMinute;
                }
            }

            // teleport figters
            for (int i = 0; i < this.m_Fighters.Count; i++)
            {
                Mobile fighter = this.m_Fighters[i];
                int    counter = 1;

                if (from.InRange(fighter.Location, 5) && this.CanEnter(fighter))
                {
                    Timer.DelayCall(TimeSpan.FromSeconds(counter), new TimerStateCallback(Enter_Callback), fighter);

                    counter += 1;
                }
            }
        }
Exemplo n.º 6
0
        public virtual void BeginSequence(Mobile from)
        {
            if (m_Peerless == null)
            {
                // spawn boss
                m_Peerless    = Boss;
                m_IsAvailable = false;

                if (m_Peerless != null)
                {
                    m_Peerless.Home      = m_BossLocation;
                    m_Peerless.RangeHome = 12;
                    m_Peerless.MoveToWorld(m_BossLocation, Map);
                    m_Peerless.Altar = this;
                }
                else
                {
                    return;
                }

                StartSlayTimer();
            }

            Point3D loc = from.Location;

            // teleport fighters
            for (int i = 0; i < m_Fighters.Count; i++)
            {
                Mobile fighter = m_Fighters[i];
                int    counter = 1;

                if (fighter.InRange(loc, 15) && CanEnter(fighter))
                {
                    Timer.DelayCall(TimeSpan.FromSeconds(counter), new TimerStateCallback(Enter_Callback), fighter);

                    counter += 1;
                }
            }
        }
Exemplo n.º 7
0
        public virtual void FinishSequence()
        {
            this.StopTimer();

            // delete perless
            if (this.m_Peerless != null)
            {
                if (this.m_Peerless.Corpse != null)
                {
                    this.m_Peerless.Corpse.Delete();
                }

                this.m_Peerless.Delete();
            }

            // teleport pary to exit if not already there
            for (int i = this.m_Fighters.Count - 1; i >= 0; i--)
            {
                this.Exit(this.m_Fighters[i]);
            }

            // delete master keys
            for (int i = this.m_MasterKeys.Count - 1; i >= 0; i--)
            {
                this.m_MasterKeys[i].Delete();
            }

            this.m_MasterKeys.Clear();
            this.m_Fighters.Clear();
            this.m_Pets.Clear();

            // delete any remaining helpers
            this.CleanupHelpers();

            // reset summoner, boss
            this.m_Peerless = null;
        }
Exemplo n.º 8
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
                case 4:
                case 3:
                    m_IsAvailable = reader.ReadBool();
                    goto case 2;
                case 2:
                case 1:
                    if (reader.ReadBool())
                        m_Helpers = reader.ReadStrongMobileList<BaseCreature>();
                    goto case 0;
                case 0:
                    m_Peerless = reader.ReadMobile() as BasePeerless;
                    m_BossLocation = reader.ReadPoint3D();
                    m_TeleportDest = reader.ReadPoint3D();
                    m_ExitDest = reader.ReadPoint3D();

                    m_Deadline = reader.ReadDateTime();

                    m_MasterKeys = reader.ReadStrongItemList();
                    m_Fighters = reader.ReadStrongMobileList();

                    if (version < 4)
                    {
                        int count = reader.ReadInt();

                        for (int i = 0; i < count; i++)
                        {
                            reader.ReadMobile();
                            reader.ReadStrongMobileList();
                        }
                    }

                    if (version < 2)
                        reader.ReadBool();

                    if (m_Peerless == null && m_Helpers.Count > 0)
                        Timer.DelayCall(TimeSpan.FromSeconds(30), new TimerCallback(CleanupHelpers));

                    break;
            }

            if (version == 2)
            {
                if (m_Peerless == null)
                {
                    FinishSequence();
                    m_IsAvailable = true;
                }
            }
            else if (!m_IsAvailable && m_Peerless == null)
            {
                FinishSequence();
            }
        }