public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { base.CheckSuccess(combatData, agentData, fightData, playerAgents); if (!fightData.Success) { NPC desmina = Targets.Find(x => x.ID == (int)ParseEnum.TargetIDS.Desmina); if (desmina == null) { throw new InvalidOperationException("Error Encountered: Desmina not found"); } ExitCombatEvent ooc = combatData.GetExitCombatEvents(desmina.AgentItem).LastOrDefault(); if (ooc != null) { long time = 0; foreach (NPC mob in TrashMobs.Where(x => x.ID == (int)SpiritHorde3)) { DespawnEvent dspwnHorde = combatData.GetDespawnEvents(mob.AgentItem).LastOrDefault(); if (dspwnHorde != null) { time = Math.Max(dspwnHorde.Time, time); } } DespawnEvent dspwn = combatData.GetDespawnEvents(desmina.AgentItem).LastOrDefault(); if (time != 0 && dspwn == null && time <= desmina.LastAware) { fightData.SetSuccess(true, time); } } } }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { base.CheckSuccess(combatData, agentData, fightData, playerAgents); if (!fightData.Success) { AgentItem desmina = agentData.GetNPCsByID((int)ArcDPSEnums.TargetID.Desmina).FirstOrDefault(); if (desmina == null) { throw new MissingKeyActorsException("Desmina not found"); } ExitCombatEvent ooc = combatData.GetExitCombatEvents(desmina).LastOrDefault(); if (ooc != null) { long time = 0; foreach (NPC mob in TrashMobs) { time = Math.Max(mob.LastAware, time); } DespawnEvent dspwn = combatData.GetDespawnEvents(desmina).LastOrDefault(); if (time != 0 && dspwn == null && time + 500 <= desmina.LastAware) { if (!AtLeastOnePlayerAlive(combatData, fightData, time, playerAgents)) { return; } fightData.SetSuccess(true, time); } } } }
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)); } } }