internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { base.CheckSuccess(combatData, agentData, fightData, playerAgents); if (!fightData.Success) { IReadOnlyList <AgentItem> prisoners = agentData.GetNPCsByID((int)ArcDPSEnums.TrashID.Prisoner2); var prisonerDeaths = new List <DeadEvent>(); foreach (AgentItem prisoner in prisoners) { prisonerDeaths.AddRange(combatData.GetDeadEvents(prisoner)); } if (prisonerDeaths.Count == 0) { AbstractSingleActor narella = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.Narella); if (narella == null) { throw new MissingKeyActorsException("Narella not found"); } DeadEvent deadEvent = combatData.GetDeadEvents(narella.AgentItem).LastOrDefault(); if (deadEvent != null) { fightData.SetSuccess(true, deadEvent.Time); return; } SetSuccessByCombatExit(new HashSet <int>(GetSuccessCheckIds()), combatData, fightData, playerAgents); } } }
protected void SetSuccessByDeath(CombatData combatData, FightData fightData, HashSet <AgentItem> playerAgents, bool all, List <int> idsToUse) { int success = 0; long maxTime = long.MinValue; foreach (int id in idsToUse) { NPC target = Targets.FirstOrDefault(x => x.ID == id); if (target == null) { return; } DeadEvent killed = combatData.GetDeadEvents(target.AgentItem).LastOrDefault(); if (killed != null) { long time = killed.Time; success++; AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(target.AgentItem).LastOrDefault(x => (x.HealthDamage > 0) && playerAgents.Contains(x.From.GetFinalMaster())); if (lastDamageTaken != null) { time = Math.Min(lastDamageTaken.Time, time); } maxTime = Math.Max(time, maxTime); } } if ((all && success == idsToUse.Count) || (!all && success > 0)) { fightData.SetSuccess(true, maxTime); } }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { AbstractSingleActor mainTarget = Targets.FirstOrDefault(x => x.ID == GenericTriggerID); if (mainTarget == null) { throw new MissingKeyActorsException("Golem not found"); } long fightEndLogTime = fightData.FightEnd; bool success = false; DeadEvent deadEvt = combatData.GetDeadEvents(mainTarget.AgentItem).LastOrDefault(); if (deadEvt != null) { fightEndLogTime = deadEvt.Time; success = true; } else { IReadOnlyList <HealthUpdateEvent> hpUpdates = combatData.GetHealthUpdateEvents(mainTarget.AgentItem); if (hpUpdates.Count > 0) { AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(mainTarget.AgentItem).LastOrDefault(x => x.HealthDamage > 0); success = hpUpdates.Last().HPPercent < 2.00; if (success && lastDamageTaken != null) { fightEndLogTime = lastDamageTaken.Time; } } } fightData.SetSuccess(success, fightEndLogTime); }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { base.CheckSuccess(combatData, agentData, fightData, playerAgents); if (!fightData.Success) { List <AgentItem> prisoners = agentData.GetNPCsByID((int)ArcDPSEnums.TrashID.Prisoner2); var prisonerDeaths = new List <DeadEvent>(); foreach (AgentItem prisoner in prisoners) { prisonerDeaths.AddRange(combatData.GetDeadEvents(prisoner)); } if (prisonerDeaths.Count == 0) { SetSuccessByCombatExit(new HashSet <int>(GetSuccessCheckIds()), combatData, fightData, playerAgents); } } }
public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { base.CheckSuccess(combatData, agentData, fightData, playerAgents); if (!fightData.Success) { List <AgentItem> prisoners = agentData.GetAgentsByID((ushort)Prisoner2); List <DeadEvent> prisonerDeaths = new List <DeadEvent>(); foreach (AgentItem prisoner in prisoners) { prisonerDeaths.AddRange(combatData.GetDeadEvents(prisoner)); } if (prisonerDeaths.Count == 0) { SetSuccessByCombatExit(new HashSet <ushort>(GetSuccessCheckIds()), combatData, fightData, playerAgents); } } }
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)); } } }