Exemple #1
0
 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);
        }
Exemple #4
0
 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);
         }
     }
 }
Exemple #5
0
 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);
         }
     }
 }
Exemple #6
0
        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));
                }
            }
        }