internal void StartLife() { Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(x => { try { if (Monsters.Count(s => s.IsAlive) == 0) { OnMapClean.ForEach(e => { EventHelper.Instance.RunEvent(e); }); OnMapClean.RemoveAll(s => s != null); } if (!IsSleeping) { RemoveMapItem(); } } catch (Exception e) { Logger.Error(e); } }); }
internal void StartLife() { Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(x => { if (InstanceBag?.EndState == 0) { Parallel.ForEach(WaveEvents, waveEvent => { if (waveEvent?.LastStart.AddSeconds(waveEvent.Delay) <= DateTime.Now) { if (waveEvent.Offset == 0 && waveEvent.RunTimes > 0) { waveEvent.Events.ForEach(e => EventHelper.Instance.RunEvent(e)); waveEvent.RunTimes--; } waveEvent.Offset = waveEvent.Offset > 0 ? (byte)(waveEvent.Offset - 1) : (byte)0; waveEvent.LastStart = DateTime.Now; } }); try { if (!Monsters.Any(s => s.IsAlive && s.Owner?.Character == null && s.Owner?.Mate == null) && DelayedMonsters.Count == 0) { List <EventContainer> OnMapCleanCopy = OnMapClean.ToList(); OnMapCleanCopy.ForEach(e => EventHelper.Instance.RunEvent(e)); OnMapClean.RemoveAll(s => s != null && OnMapCleanCopy.Contains(s)); } if (!IsSleeping) { RemoveMapItem(); } } catch (Exception e) { Logger.Error(e); } } }); }
internal void StartLife() { Observable.Interval(TimeSpan.FromSeconds(5)).Subscribe(x => { if (InstanceBag?.EndState != 1) { Parallel.ForEach(WaveEvents, waveEvent => { if (waveEvent.LastStart.AddSeconds(waveEvent.Delay) <= DateTime.Now) { if (waveEvent.Offset == 0) { waveEvent.Events.ForEach(e => EventHelper.Instance.RunEvent(e)); } waveEvent.Offset = waveEvent.Offset > 0 ? (byte)(waveEvent.Offset - 1) : (byte)0; waveEvent.LastStart = DateTime.Now; } }); try { if (!Monsters.Any(s => s.IsAlive)) { OnMapClean.ForEach(e => EventHelper.Instance.RunEvent(e)); OnMapClean.RemoveAll(s => s != null); } if (!IsSleeping) { RemoveMapItem(); } } catch (Exception e) { Logger.Error(e); } } }); }
internal void StartLife() { Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(x => { WaveEvents.ForEach(s => { if (s.LastStart.AddSeconds(s.Delay) <= DateTime.Now) { if (s.Offset == 0) { s.Events.ForEach(e => EventHelper.Instance.RunEvent(e)); } s.Offset = s.Offset > 0 ? (byte)(s.Offset - 1) : (byte)0; s.LastStart = DateTime.Now; } }); try { if (Monsters.Count(s => s.IsAlive) == 0) { OnMapClean.ForEach(e => { EventHelper.Instance.RunEvent(e); }); OnMapClean.RemoveAll(s => s != null); } if (!IsSleeping) { RemoveMapItem(); } } catch (Exception e) { Logger.Error(e); } }); }