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); } } }
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); } } }
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)); } } }