Beispiel #1
0
        /// <summary>
        /// Spawns the Next Wave if it exists and if previous wave was successful
        /// </summary>
        public void NextWave()
        {
            if (SuccessfulWave() && !m_WaveStarted)
            {
                CurrentLevel++;

                if (m_Levels.Count >= CurrentLevel)
                {
                    m_WaveStarted = true;
                    m_RecupeTimer = new RecupeTimer(TimeSpan.FromSeconds(3), this);
                    m_RecupeTimer.Start();
                }
                else
                {
                    RechargeDelay = DateTime.Now + RechargeTime;
                    SpawnStarted  = false;

                    foreach (Mobile m in GetMobilesInRange(PlayerRange))
                    {
                        m.SendMessage("The strange portal closes as the final enemy is slain.");
                    }

                    Visible = false;

                    if (UseRitual)
                    {
                        m_Timer.Stop();
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Saves the object
        /// </summary>
        /// <param name="writer"></param>
        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);

            writer.Write((bool)m_Active);
            writer.Write((int)m_CurrLvl);
            writer.Write((int)m_HomeRange);
            writer.Write((int)m_LevelAmt);
            writer.Write((int)m_PlayerRange);
            writer.Write((DateTime)m_RechargeDelay);
            writer.Write((TimeSpan)m_RechargeTime);
            writer.Write((bool)m_SpawnStarted);
            writer.Write((bool)m_UseRitual);
            writer.Write((int)m_WalkingRange);
            writer.Write((bool)m_WaveStarted);

            writer.Write(m_CreaturesName.Count);
            for (int i = 0; i < m_CreaturesName.Count; ++i)
            {
                writer.Write((string)m_CreaturesName[i]);
            }

            writer.Write(m_Creatures.Count);
            for (int i = 0; i < m_Creatures.Count; ++i)
            {
                object o = m_Creatures[i];

                if (o is Item)
                {
                    writer.Write((Item)o);
                }
                else if (o is Mobile)
                {
                    writer.Write((Mobile)o);
                }
                else
                {
                    writer.Write(Serial.MinusOne);
                }
            }

            // Hack to save the progression level info
            writer.Write((int)m_Levels.Count);
            foreach (ProgressionLevel l in m_Levels)
            {
                l.Save(writer);
            }

            if (m_RecupeTimer != null)
            {
                m_RecupeTimer.Save(writer);
            }
            else
            {
                m_RecupeTimer = new RecupeTimer(TimeSpan.FromSeconds(0.0), this);
                m_RecupeTimer.Save(writer);
            }

            if (m_TimeLimit != null)
            {
                m_TimeLimit.Save(writer);
            }
            else
            {
                m_TimeLimit = new LimitTimer(TimeSpan.FromSeconds(0.0), this);
                m_TimeLimit.Save(writer);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Loads the object
        /// </summary>
        /// <param name="reader"></param>
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            m_Active        = reader.ReadBool();
            m_CurrLvl       = reader.ReadInt();
            m_HomeRange     = reader.ReadInt();
            m_LevelAmt      = reader.ReadInt();
            m_PlayerRange   = reader.ReadInt();
            m_RechargeDelay = reader.ReadDateTime();
            m_RechargeTime  = reader.ReadTimeSpan();
            m_SpawnStarted  = reader.ReadBool();
            m_UseRitual     = reader.ReadBool();
            m_WalkingRange  = reader.ReadInt();
            m_WaveStarted   = reader.ReadBool();

            int size = reader.ReadInt();

            m_CreaturesName = new List <string>();
            for (int i = 0; i < size; ++i)
            {
                string typeName = reader.ReadString();
                m_CreaturesName.Add(typeName);
            }

            int count = reader.ReadInt();

            m_Creatures = new List <IEntity>();
            for (int i = 0; i < count; ++i)
            {
                IEntity e = World.FindEntity(reader.ReadInt());
                if (e != null)
                {
                    m_Creatures.Add(e);
                }
            }

            // Hack to load the progression level info
            m_Levels = new List <ProgressionLevel>();
            int amt = reader.ReadInt();

            for (int i = 0; i < amt; i++)
            {
                ProgressionLevel lvl = new ProgressionLevel();
                lvl.Load(reader);
                m_Levels.Add(lvl);
            }

            m_Timer = new SpawnerTimer(this);
            if (m_Active && !m_UseRitual)
            {
                m_Timer.Start();
            }

            DateTime recupe = reader.ReadDateTime();

            if (recupe > DateTime.Now)
            {
                m_RecupeTimer = new RecupeTimer(recupe.Subtract(DateTime.Now), this);
            }

            DateTime limit = reader.ReadDateTime();

            if (limit > DateTime.Now)
            {
                m_TimeLimit = new LimitTimer(limit.Subtract(DateTime.Now), this);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Saves the object
        /// </summary>
        /// <param name="writer"></param>
        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);

            writer.Write((bool)m_Active);
            writer.Write((int)m_CurrLvl);
            writer.Write((int)m_HomeRange);
            writer.Write((int)m_LevelAmt);
            writer.Write((int)m_PlayerRange);
            writer.Write((DateTime)m_RechargeDelay);
            writer.Write((TimeSpan)m_RechargeTime);
            writer.Write((bool)m_SpawnStarted);
            writer.Write((bool)m_UseRitual);
            writer.Write((int)m_WalkingRange);
            writer.Write((bool)m_WaveStarted);

            writer.Write(m_CreaturesName.Count);
            for (int i = 0; i < m_CreaturesName.Count; ++i)
                writer.Write((string)m_CreaturesName[i]);

            writer.Write(m_Creatures.Count);
            for (int i = 0; i < m_Creatures.Count; ++i)
            {
                object o = m_Creatures[i];

                if (o is Item)
                    writer.Write((Item)o);
                else if (o is Mobile)
                    writer.Write((Mobile)o);
                else
                    writer.Write(Serial.MinusOne);
            }

            // Hack to save the progression level info
            writer.Write((int)m_Levels.Count);
            foreach (ProgressionLevel l in m_Levels)
            {
                l.Save(writer);
            }

            if (m_RecupeTimer != null)
                m_RecupeTimer.Save(writer);
            else
            {
                m_RecupeTimer = new RecupeTimer(TimeSpan.FromSeconds(0.0), this);
                m_RecupeTimer.Save(writer);
            }

            if (m_TimeLimit != null)
                m_TimeLimit.Save(writer);
            else
            {
                m_TimeLimit = new LimitTimer(TimeSpan.FromSeconds(0.0), this);
                m_TimeLimit.Save(writer);
            }
        }
Beispiel #5
0
        /// <summary>
        /// Spawns the Next Wave if it exists and if previous wave was successful
        /// </summary>
        public void NextWave()
        {
            if (SuccessfulWave() && !m_WaveStarted)
            {
                CurrentLevel++;

                if (m_Levels.Count >= CurrentLevel)
                {
                    m_WaveStarted = true;
                    m_RecupeTimer = new RecupeTimer(TimeSpan.FromSeconds(3), this);
                    m_RecupeTimer.Start();
                }
                else
                {
                    RechargeDelay = DateTime.Now + RechargeTime;
                    SpawnStarted = false;

                    foreach (Mobile m in GetMobilesInRange(PlayerRange))
                    {
                        m.SendMessage("The strange portal closes as the final enemy is slain.");
                    }

                    Visible = false;

                    if (UseRitual)
                        m_Timer.Stop();
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Loads the object
        /// </summary>
        /// <param name="reader"></param>
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            m_Active = reader.ReadBool();
            m_CurrLvl = reader.ReadInt();
            m_HomeRange = reader.ReadInt();
            m_LevelAmt = reader.ReadInt();
            m_PlayerRange = reader.ReadInt();
            m_RechargeDelay = reader.ReadDateTime();
            m_RechargeTime = reader.ReadTimeSpan();
            m_SpawnStarted = reader.ReadBool();
            m_UseRitual = reader.ReadBool();
            m_WalkingRange = reader.ReadInt();
            m_WaveStarted = reader.ReadBool();

            int size = reader.ReadInt();
            m_CreaturesName = new List<string>();
            for (int i = 0; i < size; ++i)
            {
                string typeName = reader.ReadString();
                m_CreaturesName.Add(typeName);
            }

            int count = reader.ReadInt();
            m_Creatures = new List<IEntity>();
            for (int i = 0; i < count; ++i)
            {
                IEntity e = World.FindEntity(reader.ReadInt());
                if (e != null)
                    m_Creatures.Add(e);
            }

            // Hack to load the progression level info
            m_Levels = new List<ProgressionLevel>();
            int amt = reader.ReadInt();
            for (int i = 0; i < amt; i++)
            {
                ProgressionLevel lvl = new ProgressionLevel();
                lvl.Load(reader);
                m_Levels.Add(lvl);
            }

            m_Timer = new SpawnerTimer(this);
            if (m_Active && !m_UseRitual)
                m_Timer.Start();

            DateTime recupe = reader.ReadDateTime();
            if (recupe > DateTime.Now)
                m_RecupeTimer = new RecupeTimer(recupe.Subtract(DateTime.Now),this);

            DateTime limit = reader.ReadDateTime();
            if (limit > DateTime.Now)
                m_TimeLimit = new LimitTimer(limit.Subtract(DateTime.Now), this);
        }