Example #1
0
        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));
        }
Example #2
0
 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);
 }