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(); }
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(); }); }
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(); }); }
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; } } }); }