private void CheckPendingAbnormalities(NPC npc) { if (PendingAbnormalities.Count == 0) { return; } var npcAbs = PendingAbnormalities.Where(x => x.Target == npc.EntityId).ToList(); npcAbs.ForEach(ab => { if (npc.EntityId != ab.Target) { return; } var delay = (uint)(DateTime.Now - ab.ArrivalTime).TotalMilliseconds; if (delay >= ab.Duration) { return; } npc.AddorRefresh(ab.Abnormality, ab.Duration - delay, ab.Stacks); Log.CW($"Applied pending abnormal {ab.Abnormality.Name} to {ab.Target} ({npc.Name})"); }); npcAbs.ForEach(aa => PendingAbnormalities.Remove(aa)); }
public void UpdateAbnormality(Abnormality ab, int stacks, uint duration, ulong target) { if (!TryFindNPC(target, out var boss)) { if (Game.IsMe(target) || Game.NearbyPlayers.ContainsKey(target)) { return; } Log.CW($"Added pending abnormal {ab.Name} for {target}"); Dispatcher.Invoke(() => { PendingAbnormalities.Add(new PendingAbnormality { Target = target, Abnormality = ab, Duration = duration, Stacks = stacks, ArrivalTime = DateTime.Now }); }); return; } boss !.AddorRefresh(ab, duration, stacks); }