internal static bool IsKnownMinionID(AgentItem minion, Spec spec) { if (minion.Type == AgentItem.AgentType.Gadget) { return(false); } long id = minion.ID; bool res = CommonMinions.Contains(id); switch (spec) { // case Spec.Elementalist: case Spec.Tempest: case Spec.Weaver: case Spec.Catalyst: res |= ElementalistHelper.IsKnownMinionID(id); break; // case Spec.Necromancer: case Spec.Scourge: case Spec.Harbinger: res |= NecromancerHelper.IsKnownMinionID(id); break; case Spec.Reaper: res |= NecromancerHelper.IsKnownMinionID(id); res |= ReaperHelper.IsKnownMinionID(id); break; // case Spec.Mesmer: res |= MesmerHelper.IsKnownMinionID(id); break; case Spec.Chronomancer: res |= MesmerHelper.IsKnownMinionID(id); res |= ChronomancerHelper.IsKnownMinionID(id); break; case Spec.Mirage: res |= MesmerHelper.IsKnownMinionID(id); res |= MirageHelper.IsKnownMinionID(id); break; case Spec.Virtuoso: res |= MesmerHelper.IsKnownMinionID(id); res |= VirtuosoHelper.IsKnownMinionID(id); break; // case Spec.Thief: res |= ThiefHelper.IsKnownMinionID(id); break; case Spec.Daredevil: res |= ThiefHelper.IsKnownMinionID(id); res |= DaredevilHelper.IsKnownMinionID(id); break; case Spec.Deadeye: res |= ThiefHelper.IsKnownMinionID(id); res |= DeadeyeHelper.IsKnownMinionID(id); break; case Spec.Specter: res |= ThiefHelper.IsKnownMinionID(id); res |= SpecterHelper.IsKnownMinionID(id); break; // case Spec.Engineer: case Spec.Scrapper: case Spec.Holosmith: res |= EngineerHelper.IsKnownMinionID(id); break; case Spec.Mechanist: res |= EngineerHelper.IsKnownMinionID(id); res |= MechanistHelper.IsKnownMinionID(id); break; // case Spec.Ranger: case Spec.Druid: case Spec.Soulbeast: case Spec.Untamed: res |= RangerHelper.IsKnownMinionID(id); break; // case Spec.Revenant: case Spec.Herald: case Spec.Vindicator: res |= RevenantHelper.IsKnownMinionID(id); break; case Spec.Renegade: res |= RevenantHelper.IsKnownMinionID(id); res |= RenegadeHelper.IsKnownMinionID(id); break; // case Spec.Guardian: case Spec.Dragonhunter: case Spec.Firebrand: case Spec.Willbender: res |= GuardianHelper.IsKnownMinionID(id); break; } return(res); }
// Minions public IReadOnlyDictionary <long, Minions> GetMinions(ParsedEvtcLog log) { if (_minions == null) { _minions = new Dictionary <long, Minions>(); // npcs, species id based var combatMinion = log.AgentData.GetAgentByType(AgentItem.AgentType.NPC).Where(x => x.Master != null && x.GetFinalMaster() == AgentItem).ToList(); var auxMinions = new Dictionary <long, Minions>(); foreach (AgentItem agent in combatMinion) { long id = agent.ID; AbstractSingleActor singleActor = log.FindActor(agent); if (singleActor is NPC npc) { if (auxMinions.TryGetValue(id, out Minions values)) { values.AddMinion(npc); } else { auxMinions[id] = new Minions(this, npc); } } } foreach (KeyValuePair <long, Minions> pair in auxMinions) { if (pair.Value.GetDamageEvents(null, log, 0, log.FightData.FightEnd).Count > 0 || pair.Value.GetCastEvents(log, 0, log.FightData.FightEnd).Any(x => x.SkillId != SkillItem.WeaponSwapId && x.SkillId != SkillItem.MirageCloakDodgeId) || MesmerHelper.IsClone(pair.Key)) { _minions[pair.Value.UniqueID] = pair.Value; } } // gadget, string based var combatGadgetMinion = log.AgentData.GetAgentByType(AgentItem.AgentType.Gadget).Where(x => x.Master != null && x.GetFinalMaster() == AgentItem).ToList(); var auxGadgetMinions = new Dictionary <string, Minions>(); foreach (AgentItem agent in combatGadgetMinion) { string id = agent.Name; AbstractSingleActor singleActor = log.FindActor(agent); if (singleActor is NPC npc) { if (auxGadgetMinions.TryGetValue(id, out Minions values)) { values.AddMinion(npc); } else { auxGadgetMinions[id] = new Minions(this, npc); } } } foreach (KeyValuePair <string, Minions> pair in auxGadgetMinions) { if (pair.Value.GetDamageEvents(null, log, 0, log.FightData.FightEnd).Count > 0 || pair.Value.GetCastEvents(log, 0, log.FightData.FightEnd).Any(x => x.SkillId != SkillItem.WeaponSwapId && x.SkillId != SkillItem.MirageCloakDodgeId)) { _minions[pair.Value.UniqueID] = pair.Value; } } } return(_minions); }