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