Пример #1
0
        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);
        }
Пример #2
0
 // 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);
 }