diff --git a/GW2EIEvtcParser/EncounterLogic/Fractals/SunquaPeak/AiKeeperOfThePeak.cs b/GW2EIEvtcParser/EncounterLogic/Fractals/SunquaPeak/AiKeeperOfThePeak.cs index a96f65b972..910b05473f 100644 --- a/GW2EIEvtcParser/EncounterLogic/Fractals/SunquaPeak/AiKeeperOfThePeak.cs +++ b/GW2EIEvtcParser/EncounterLogic/Fractals/SunquaPeak/AiKeeperOfThePeak.cs @@ -22,6 +22,8 @@ internal class AiKeeperOfThePeak : SunquaPeak private bool _hasDarkMode = false; private bool _hasElementalMode = false; private bool _china = false; + + private const long Determined895Duration = int.MaxValue / 4; public AiKeeperOfThePeak(int triggerID) : base(triggerID) { MechanicList.AddRange(new List @@ -162,7 +164,7 @@ internal override void EIEvtcParse(ulong gw2Build, FightData fightData, AgentDat if (_hasElementalMode) { long darkModeStart = combatData.FirstOrDefault(x => x.StartCasting() && x.SrcMatchesAgent(aiAgent) && (_china ? x.SkillID == AiDarkModeStartCN : x.SkillID == AiDarkModeStart) && x.Time >= darkModePhaseEvent.Time && x.SrcMatchesAgent(aiAgent)).Time; - CombatItem invul895Loss = combatData.FirstOrDefault(x => x.Time <= darkModeStart && x.SkillID == Determined895 && x.IsBuffRemove == BuffRemove.All && x.SrcMatchesAgent(aiAgent)); + CombatItem invul895Loss = combatData.FirstOrDefault(x => x.Time <= darkModeStart && x.SkillID == Determined895 && x.IsBuffRemove == BuffRemove.All && x.SrcMatchesAgent(aiAgent) && x.Value > Determined895Duration); long elementalLastAwareTime = (invul895Loss != null ? invul895Loss.Time : darkModeStart); AgentItem darkAiAgent = agentData.AddCustomNPCAgent(elementalLastAwareTime, aiAgent.LastAware, aiAgent.Name, aiAgent.Spec, TargetID.AiKeeperOfThePeak2, false, aiAgent.Toughness, aiAgent.Healing, aiAgent.Condition, aiAgent.Concentration, aiAgent.HitboxWidth, aiAgent.HitboxHeight); RedirectEventsAndCopyPreviousStates(combatData, extensions, agentData, aiAgent, new List { aiAgent}, darkAiAgent, false); @@ -232,7 +234,7 @@ internal override List GetPhases(ParsedEvtcLog log, bool requirePhase } if (_hasElementalMode) { - BuffApplyEvent invul895Gain = log.CombatData.GetBuffData(Determined895).OfType().Where(x => x.To == elementalAi.AgentItem).FirstOrDefault(); + BuffApplyEvent invul895Gain = log.CombatData.GetBuffData(Determined895).OfType().Where(x => x.To == elementalAi.AgentItem && x.AppliedDuration > Determined895Duration).FirstOrDefault(); long eleStart = Math.Max(elementalAi.FirstAware, log.FightData.FightStart); long eleEnd = invul895Gain != null ? invul895Gain.Time : log.FightData.FightEnd; if (_hasDarkMode) @@ -274,7 +276,7 @@ internal override List GetPhases(ParsedEvtcLog log, bool requirePhase } if (_hasDarkMode) { - BuffApplyEvent invul895Gain = log.CombatData.GetBuffData(Determined895).OfType().Where(x => x.To == darkAi.AgentItem).FirstOrDefault(); + BuffApplyEvent invul895Gain = log.CombatData.GetBuffData(Determined895).OfType().Where(x => x.To == darkAi.AgentItem && x.AppliedDuration > Determined895Duration).FirstOrDefault(); long darkStart = Math.Max(darkAi.FirstAware, log.FightData.FightStart); long darkEnd = invul895Gain != null ? invul895Gain.Time : log.FightData.FightEnd; if (_hasElementalMode) @@ -331,14 +333,14 @@ internal override void CheckSuccess(CombatData combatData, AgentData agentData, { case 1: case 2: - BuffApplyEvent invul895Gain = combatData.GetBuffData(Determined895).OfType().Where(x => x.To == Targets[0].AgentItem).FirstOrDefault(); + BuffApplyEvent invul895Gain = combatData.GetBuffData(Determined895).OfType().Where(x => x.To == Targets[0].AgentItem && x.AppliedDuration > Determined895Duration).FirstOrDefault(); if (invul895Gain != null) { fightData.SetSuccess(true, invul895Gain.Time); } break; case 3: - BuffApplyEvent darkInvul895Gain = combatData.GetBuffData(Determined895).OfType().Where(x => x.To == Targets.FirstOrDefault(y => y.IsSpecies(TargetID.AiKeeperOfThePeak2)).AgentItem).FirstOrDefault(); + BuffApplyEvent darkInvul895Gain = combatData.GetBuffData(Determined895).OfType().Where(x => x.To == Targets.FirstOrDefault(y => y.IsSpecies(TargetID.AiKeeperOfThePeak2)).AgentItem && x.AppliedDuration > Determined895Duration).FirstOrDefault(); if (darkInvul895Gain != null) { fightData.SetSuccess(true, darkInvul895Gain.Time);