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); }
private void HPCheck(CombatData combatData, FightData fightData) { NPC eye1 = Targets.Find(x => x.ID == (int)ParseEnum.TargetIDS.EyeOfFate); NPC eye2 = Targets.Find(x => x.ID == (int)ParseEnum.TargetIDS.EyeOfJudgement); if (eye2 == null || eye1 == null) { throw new InvalidOperationException("Eyes not found"); } List <HealthUpdateEvent> eye1HPs = combatData.GetHealthUpdateEvents(eye1.AgentItem); List <HealthUpdateEvent> eye2HPs = combatData.GetHealthUpdateEvents(eye2.AgentItem); if (eye1HPs.Count == 0 || eye2HPs.Count == 0) { return; } double lastEye1Hp = eye1HPs.LastOrDefault().HPPercent; double lastEye2Hp = eye2HPs.LastOrDefault().HPPercent; double margin1 = Math.Min(0.80, lastEye1Hp); double margin2 = Math.Min(0.80, lastEye2Hp); if (lastEye1Hp <= margin1 && lastEye2Hp <= margin2) { int lastIEye1; for (lastIEye1 = eye1HPs.Count - 1; lastIEye1 >= 0; lastIEye1--) { if (eye1HPs[lastIEye1].HPPercent > margin1) { lastIEye1++; break; } } int lastIEye2; for (lastIEye2 = eye2HPs.Count - 1; lastIEye2 >= 0; lastIEye2--) { if (eye2HPs[lastIEye2].HPPercent > margin2) { lastIEye2++; break; } } fightData.SetSuccess(true, Math.Max(eye1HPs[lastIEye1].Time, eye2HPs[lastIEye2].Time)); } }
private void HPCheck(CombatData combatData, FightData fightData) { AbstractSingleActor eye1 = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.EyeOfFate); AbstractSingleActor eye2 = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.EyeOfJudgement); if (eye2 == null || eye1 == null) { throw new MissingKeyActorsException("Eyes not found"); } IReadOnlyList <HealthUpdateEvent> eye1HPs = combatData.GetHealthUpdateEvents(eye1.AgentItem); IReadOnlyList <HealthUpdateEvent> eye2HPs = combatData.GetHealthUpdateEvents(eye2.AgentItem); if (eye1HPs.Count == 0 || eye2HPs.Count == 0) { return; } double lastEye1Hp = eye1HPs.LastOrDefault().HPPercent; double lastEye2Hp = eye2HPs.LastOrDefault().HPPercent; double margin1 = Math.Min(0.80, lastEye1Hp); double margin2 = Math.Min(0.80, lastEye2Hp); if (lastEye1Hp <= margin1 && lastEye2Hp <= margin2) { int lastIEye1; for (lastIEye1 = eye1HPs.Count - 1; lastIEye1 >= 0; lastIEye1--) { if (eye1HPs[lastIEye1].HPPercent > margin1) { lastIEye1++; break; } } int lastIEye2; for (lastIEye2 = eye2HPs.Count - 1; lastIEye2 >= 0; lastIEye2--) { if (eye2HPs[lastIEye2].HPPercent > margin2) { lastIEye2++; break; } } fightData.SetSuccess(true, Math.Max(eye1HPs[lastIEye1].Time, eye2HPs[lastIEye2].Time)); } }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { NPC mainTarget = Targets.FirstOrDefault(x => x.ID == GenericTriggerID); if (mainTarget == null) { throw new MissingKeyActorsException("Golem not found"); } AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(mainTarget.AgentItem).LastOrDefault(x => x.HealthDamage > 0); long fightEndLogTime = fightData.FightEnd; bool success = false; if (lastDamageTaken != null) { fightEndLogTime = lastDamageTaken.Time; } IReadOnlyList <HealthUpdateEvent> hpUpdates = combatData.GetHealthUpdateEvents(mainTarget.AgentItem); if (hpUpdates.Count > 0) { success = hpUpdates.Last().HPPercent < 2.00; } fightData.SetSuccess(success, fightEndLogTime); }
public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { Target mainTarget = Targets.Find(x => x.ID == TriggerID); if (mainTarget == null) { throw new InvalidOperationException("Main target of the fight not found"); } AbstractDamageEvent lastDamageTaken = combatData.GetDamageTakenData(mainTarget.AgentItem).LastOrDefault(x => x.Damage > 0); long fightEndLogTime = fightData.FightEndLogTime; bool success = false; if (lastDamageTaken != null) { fightEndLogTime = fightData.ToLogSpace(lastDamageTaken.Time); } List <HealthUpdateEvent> hpUpdates = combatData.GetHealthUpdateEvents(mainTarget.AgentItem); if (hpUpdates.Count > 0) { success = hpUpdates.Last().HPPercent < 2.00; } fightData.SetSuccess(success, fightEndLogTime); }