Example #1
0
 internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents)
 {
     base.CheckSuccess(combatData, agentData, fightData, playerAgents);
     if (!fightData.Success)
     {
         AbstractSingleActor target   = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.ConjuredAmalgamate);
         AbstractSingleActor leftArm  = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.CALeftArm);
         AbstractSingleActor rightArm = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.CARightArm);
         if (target == null)
         {
             throw new MissingKeyActorsException("Conjured Amalgamate not found");
         }
         AgentItem zommoros = agentData.GetNPCsByID(21118).LastOrDefault();
         if (zommoros == null)
         {
             return;
         }
         SpawnEvent npcSpawn = combatData.GetSpawnEvents(zommoros).LastOrDefault();
         AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(target.AgentItem).LastOrDefault(x => (x.HealthDamage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
         if (lastDamageTaken == null)
         {
             return;
         }
         if (rightArm != null)
         {
             AbstractHealthDamageEvent lastDamageTakenArm = combatData.GetDamageTakenData(rightArm.AgentItem).LastOrDefault(x => (x.HealthDamage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
             if (lastDamageTakenArm != null)
             {
                 lastDamageTaken = lastDamageTaken.Time > lastDamageTakenArm.Time ? lastDamageTaken : lastDamageTakenArm;
             }
         }
         if (leftArm != null)
         {
             AbstractHealthDamageEvent lastDamageTakenArm = combatData.GetDamageTakenData(leftArm.AgentItem).LastOrDefault(x => (x.HealthDamage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
             if (lastDamageTakenArm != null)
             {
                 lastDamageTaken = lastDamageTaken.Time > lastDamageTakenArm.Time ? lastDamageTaken : lastDamageTakenArm;
             }
         }
         if (npcSpawn != null)
         {
             fightData.SetSuccess(true, lastDamageTaken.Time);
         }
     }
 }
Example #2
0
        public override void CheckMechanic(ParsedLog log, Dictionary <Mechanic, List <MechanicEvent> > mechanicLogs, Dictionary <int, AbstractSingleActor> regroupedMobs)
        {
            CombatData combatData = log.CombatData;

            foreach (Player p in log.PlayerList)
            {
                var cList = new List <long>();
                switch (SkillId)
                {
                case SkillItem.DeathId:
                    cList = combatData.GetDeadEvents(p.AgentItem).Select(x => x.Time).ToList();
                    break;

                case SkillItem.DCId:
                    cList = combatData.GetDespawnEvents(p.AgentItem).Select(x => x.Time).ToList();
                    break;

                case SkillItem.RespawnId:
                    cList = combatData.GetSpawnEvents(p.AgentItem).Select(x => x.Time).ToList();
                    break;

                case SkillItem.AliveId:
                    cList = combatData.GetAliveEvents(p.AgentItem).Select(x => x.Time).ToList();
                    break;

                case SkillItem.DownId:
                    cList = combatData.GetDownEvents(p.AgentItem).Select(x => x.Time).ToList();
                    var downByVaporForm = combatData.GetBuffRemoveAllData(5620).Where(x => x.To == p.AgentItem).Select(x => x.Time).ToList();
                    foreach (long time in downByVaporForm)
                    {
                        cList.RemoveAll(x => Math.Abs(x - time) < 20);
                    }
                    break;

                case SkillItem.ResurrectId:
                    cList = log.CombatData.GetAnimatedCastData(p.AgentItem).Where(x => x.SkillId == SkillItem.ResurrectId).Select(x => x.Time).ToList();
                    break;
                }
                foreach (long time in cList)
                {
                    mechanicLogs[this].Add(new MechanicEvent(time, this, p));
                }
            }
        }
 public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents)
 {
     base.CheckSuccess(combatData, agentData, fightData, playerAgents);
     if (!fightData.Success)
     {
         NPC target   = Targets.Find(x => x.ID == (int)ParseEnum.TargetIDS.ConjuredAmalgamate);
         NPC leftArm  = Targets.Find(x => x.ID == (int)ParseEnum.TargetIDS.CALeftArm);
         NPC rightArm = Targets.Find(x => x.ID == (int)ParseEnum.TargetIDS.CARightArm);
         if (target == null)
         {
             throw new InvalidOperationException("Error Encountered: Conjured Amalgamate not found");
         }
         AgentItem zommoros = agentData.GetNPCsByID(21118).LastOrDefault();
         if (zommoros == null)
         {
             return;
         }
         SpawnEvent          npcSpawn        = combatData.GetSpawnEvents(zommoros).LastOrDefault();
         AbstractDamageEvent lastDamageTaken = combatData.GetDamageTakenData(target.AgentItem).LastOrDefault(x => (x.Damage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
         if (rightArm != null)
         {
             AbstractDamageEvent lastDamageTakenArm = combatData.GetDamageTakenData(rightArm.AgentItem).LastOrDefault(x => (x.Damage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
             if (lastDamageTakenArm != null)
             {
                 lastDamageTaken = lastDamageTaken.Time > lastDamageTakenArm.Time ? lastDamageTaken : lastDamageTakenArm;
             }
         }
         if (leftArm != null)
         {
             AbstractDamageEvent lastDamageTakenArm = combatData.GetDamageTakenData(leftArm.AgentItem).LastOrDefault(x => (x.Damage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
             if (lastDamageTakenArm != null)
             {
                 lastDamageTaken = lastDamageTaken.Time > lastDamageTakenArm.Time ? lastDamageTaken : lastDamageTakenArm;
             }
         }
         if (npcSpawn != null && lastDamageTaken != null)
         {
             fightData.SetSuccess(true, lastDamageTaken.Time);
         }
     }
 }
Example #4
0
 public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents)
 {
     base.CheckSuccess(combatData, agentData, fightData, playerAgents);
     if (!fightData.Success)
     {
         Target target = Targets.Find(x => x.ID == TriggerID);
         if (target == null)
         {
             throw new InvalidOperationException("Target for success by combat exit not found");
         }
         AgentItem zommoros = agentData.GetAgentsByID(21118).LastOrDefault();
         if (zommoros == null)
         {
             return;
         }
         SpawnEvent          npcSpawn        = combatData.GetSpawnEvents(zommoros).LastOrDefault();
         AbstractDamageEvent lastDamageTaken = combatData.GetDamageTakenData(target.AgentItem).LastOrDefault(x => (x.Damage > 0) && (playerAgents.Contains(x.From) || playerAgents.Contains(x.MasterFrom)));
         if (npcSpawn != null && lastDamageTaken != null)
         {
             fightData.SetSuccess(true, fightData.ToLogSpace(lastDamageTaken.Time));
         }
     }
 }