Ejemplo n.º 1
0
        private void AddNPC(ulong entityId, uint zoneId, uint templateId, bool isBoss, bool visibility)
        {
            if (App.Settings.NpcWindowSettings.HideAdds && !isBoss)
            {
                return;
            }
            if (templateId == 0 || zoneId == 0)
            {
                return;
            }
            if (zoneId == 1023)
            {
                return;
            }

            var boss = new NPC(entityId, zoneId, templateId, isBoss, visibility);

            boss.Visible = boss.IsTower || visibility;
            if (boss.IsTower)
            {
                HandleNewTower(boss, entityId);
            }
            else if (boss.IsPhase1Dragon)
            {
                HandleNewPh1Dragon(boss, entityId);
            }
            else
            {
                AddNormalNPC(boss);
            }

            boss.SetTimerPattern();
            boss.SetEnragePattern();
            NpcListChanged?.Invoke();
        }
Ejemplo n.º 2
0
 private void AddOrUpdateNpc(S_SPAWN_NPC spawn, Monster npcData)
 {
     Dispatcher.InvokeAsync(() =>
     {
         var visibility = npcData.IsBoss && TccUtils.IsFieldBoss(npcData.ZoneId, npcData.TemplateId);
         var boss       = GetOrAddNpc(spawn.EntityId, npcData.ZoneId, npcData.TemplateId, npcData.IsBoss, visibility);
         SetHP(boss, npcData.MaxHP, npcData.MaxHP, HpChangeSource.CreatureChangeHp);
         SetEnrageTime(spawn.EntityId, spawn.RemainingEnrageTime);
         if (boss.Visible == visibility)
         {
             return;
         }
         boss.Visible = visibility;
         NpcListChanged?.Invoke();
     });
 }
Ejemplo n.º 3
0
 public void AddOrUpdateNpc(ulong entityId, float maxHp, float curHp, bool isBoss, HpChangeSource src, uint templateId = 0, uint zoneId = 0, bool visibility = true, int remainingEnrageTime = 0)
 {
     Dispatcher.InvokeAsync(() =>
     {
         var boss = GetOrAddNpc(entityId, zoneId, templateId, isBoss, visibility);
         SetHP(boss, maxHp, curHp, src);
         SetEnrageTime(entityId, remainingEnrageTime);
         if (boss.Visible == visibility)
         {
             return;
         }
         boss.Visible = visibility;
         Dispatcher.Invoke(() => CheckPendingAbnormalities(boss));
         NpcListChanged?.Invoke();
     });
 }
Ejemplo n.º 4
0
        private void OnDespawnNpc(S_DESPAWN_NPC p)
        {
            Dispatcher.InvokeAsync(() =>
            {
                if (TryFindNPC(p.Target, out var boss))
                {
                    if (p.Type == DespawnType.OutOfView)
                    {
                        _savedHp[p.Target] = boss.CurrentHP;
                    }
                    else
                    {
                        _savedHp.Remove(p.Target);
                    }

                    if (!boss.Visible || boss.IsTower)
                    {
                        _npcList.Remove(boss);
                        boss.Dispose();
                    }
                    else
                    {
                        boss.Delete();
                    }

                    NpcListChanged?.Invoke();

                    if (SelectedDragon != null && SelectedDragon.EntityId == p.Target)
                    {
                        SelectedDragon = null;
                    }

                    if (VisibleBossesCount == 0)
                    {
                        Game.Encounter = false;
                    }
                }
            });
        }