public LineHistory(Line line) { TimeStamp = DateTime.Now; Line = line; SourceStatusEntries = new List <StatusEntry>(); TargetStatusEntries = new List <StatusEntry>(); uint PlayerID = 0; try { var monsterEntries = MonsterWorkerDelegate.GetNPCEntities(); var pcEntries = PCWorkerDelegate.GetNPCEntities(); // process you => monster foreach (var actorEntity in pcEntries) { if (!String.Equals(actorEntity.Name, line.Source, Constants.InvariantComparer)) { continue; } PlayerID = actorEntity.ID; foreach (var statusEntry in actorEntity.StatusEntries) { SourceStatusEntries.Add(statusEntry); } } foreach (var actorEntity in monsterEntries) { if (!String.Equals(actorEntity.Name, line.Target, Constants.InvariantComparer)) { return; } foreach (var statusEntry in actorEntity.StatusEntries) { if (statusEntry.CasterID == PlayerID) { TargetStatusEntries.Add(statusEntry); } } } // process monster => you foreach (var actorEntity in pcEntries) { if (!String.Equals(actorEntity.Name, line.Target, Constants.InvariantComparer)) { continue; } PlayerID = actorEntity.ID; foreach (var statusEntry in actorEntity.StatusEntries) { TargetStatusEntries.Add(statusEntry); } } foreach (var actorEntity in monsterEntries) { if (!String.Equals(actorEntity.Name, line.Source, Constants.InvariantComparer)) { return; } foreach (var statusEntry in actorEntity.StatusEntries) { if (statusEntry.CasterID == PlayerID) { SourceStatusEntries.Add(statusEntry); } } } } catch (Exception ex) { } }
private void StatusUpdateTimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs) { if (StatusUpdateTimerProcessing) { return; } StatusUpdateTimerProcessing = true; var monsterEntries = MonsterWorkerDelegate.GetNPCEntities(); var pcEntries = PCWorkerDelegate.GetNPCEntities(); StatusEntriesSelf.Clear(); StatusEntriesPlayers.Clear(); StatusEntriesMonsters.Clear(); if (pcEntries.Any()) { try { var cleanedName = Regex.Replace(Name, @"\[[\w]+\]", "") .Trim(); var isYou = Regex.IsMatch(cleanedName, @"^(([Dd](ich|ie|u))|You|Vous)$") || String.Equals(cleanedName, Constants.CharacterName, Constants.InvariantComparer); var isPet = false; try { NPCEntry = isYou ? PCWorkerDelegate.CurrentUser : null; if (!isYou) { try { NPCEntry = pcEntries.First(p => String.Equals(p.Name, cleanedName, Constants.InvariantComparer)); } catch (Exception ex) { isPet = true; } } } catch (Exception ex) { } if (NPCEntry != null) { ID = NPCEntry.ID; if (ID > 0) { StatusEntriesSelf = NPCEntry.StatusEntries; try { foreach (var statusEntry in monsterEntries.ToList() .Where(p => p.HPCurrent > 0) .SelectMany(monster => monster.StatusEntries) .Where(statusEntry => statusEntry.CasterID == ID)) { StatusEntriesMonsters.Add(statusEntry); } } catch (Exception ex) { } try { foreach (var statusEntry in pcEntries.ToList() .Where(p => p.HPCurrent > 0) .SelectMany(pc => pc.StatusEntries) .Where(statusEntry => statusEntry.CasterID == ID)) { StatusEntriesPlayers.Add(statusEntry); } } catch (Exception ex) { } } } } catch (Exception ex) { } } if (!StatusEntriesMonsters.Any() && !StatusEntriesPlayers.Any()) { StatusUpdateTimerProcessing = false; return; } if (StatusEntriesMonsters.Any()) { ProcessDamageOverTime(StatusEntriesMonsters); } if (StatusEntriesPlayers.Any()) { ProcessHealingOverTime(StatusEntriesPlayers); ProcessBuffs(StatusEntriesPlayers); } StatusUpdateTimerProcessing = false; }