示例#1
0
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData            mechData   = log.MechanicData;
            CombatData              combatData = log.CombatData;
            HashSet <ushort>        playersIds = log.PlayerIDs;
            IEnumerable <AgentItem> agents     = log.AgentData.GetAgentsByID((ushort)SkillId);

            foreach (AgentItem a in agents)
            {
                List <CombatItem> combatitems = combatData.GetDamageTakenData(a.InstID, a.FirstAware, a.LastAware);
                foreach (CombatItem c in combatitems)
                {
                    if (c.IsBuff > 0 || !c.ResultEnum.IsHit() || !Keep(c, log))
                    {
                        continue;
                    }
                    foreach (Player p in log.PlayerList)
                    {
                        if (c.SrcInstid == p.InstID || c.SrcMasterInstid == p.InstID)
                        {
                            mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(c.Time), this, p));
                        }
                    }
                }
            }
        }
示例#2
0
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData     mechData   = log.MechanicData;
            CombatData       combatData = log.CombatData;
            HashSet <ushort> playersIds = log.PlayerIDs;

            foreach (Player p in log.PlayerList)
            {
                List <CombatItem> cList = new List <CombatItem>();
                switch (SkillId)
                {
                case SkillItem.DeathId:
                    cList = combatData.GetStatesData(p.InstID, ParseEnum.StateChange.ChangeDead, log.FightData.FightStart, log.FightData.FightEnd);
                    break;

                case SkillItem.DownId:
                    cList = combatData.GetStatesData(p.InstID, ParseEnum.StateChange.ChangeDown, log.FightData.FightStart, log.FightData.FightEnd);
                    List <CombatItem> downByVaporForm = combatData.GetBoonData(5620).Where(x => x.SrcInstid == p.InstID && x.IsBuffRemove == ParseEnum.BuffRemove.All).ToList();
                    foreach (CombatItem c in downByVaporForm)
                    {
                        cList.RemoveAll(x => Math.Abs(x.Time - c.Time) < 20);
                    }
                    break;

                case SkillItem.ResurrectId:
                    cList = log.CombatData.GetCastData(p.InstID, log.FightData.FightStart, log.FightData.FightEnd).Where(x => x.SkillID == SkillItem.ResurrectId && x.IsActivation.StartCasting()).ToList();
                    break;
                }
                foreach (CombatItem mechItem in cList)
                {
                    mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(mechItem.Time), this, p));
                }
            }
        }
示例#3
0
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData     mechData   = log.MechanicData;
            CombatData       combatData = log.CombatData;
            HashSet <ushort> playersIds = log.PlayerIDs;

            foreach (AgentItem a in log.AgentData.GetAgentByType(AgentItem.AgentType.NPC).Where(x => x.ID == SkillId))
            {
                if (!regroupedMobs.TryGetValue(a.ID, out DummyActor amp))
                {
                    amp = new DummyActor(a);
                    regroupedMobs.Add(a.ID, amp);
                }
                mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(a.FirstAware), this, amp));
            }
        }
示例#4
0
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData     mechData   = log.MechanicData;
            CombatData       combatData = log.CombatData;
            HashSet <ushort> playersIds = log.PlayerIDs;

            foreach (Player p in log.PlayerList)
            {
                foreach (CombatItem c in log.CombatData.GetCastDataById(SkillId))
                {
                    if (!c.IsActivation.StartCasting() && c.SrcInstid == p.InstID && Keep(c, log))
                    {
                        mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(c.Time), this, p));
                    }
                }
            }
        }
示例#5
0
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData     mechData   = log.MechanicData;
            CombatData       combatData = log.CombatData;
            HashSet <ushort> playersIds = log.PlayerIDs;

            foreach (Player p in log.PlayerList)
            {
                foreach (CombatItem c in log.CombatData.GetBoonData(SkillId))
                {
                    if (c.IsBuffRemove == ParseEnum.BuffRemove.Manual && p.InstID == c.SrcInstid && Keep(c, log))
                    {
                        mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(c.Time), this, p));
                    }
                }
            }
        }
示例#6
0
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData     mechData   = log.MechanicData;
            CombatData       combatData = log.CombatData;
            HashSet <ushort> playersIds = log.PlayerIDs;

            foreach (CombatItem c in log.CombatData.GetBoonData(SkillId))
            {
                DummyActor amp = null;
                if (c.IsBuffRemove == ParseEnum.BuffRemove.Manual && Keep(c, log))
                {
                    Target target = log.FightData.Logic.Targets.Find(x => x.InstID == c.SrcInstid && x.FirstAware <= c.Time && x.LastAware >= c.Time);
                    if (target != null)
                    {
                        amp = target;
                    }
                    else
                    {
                        AgentItem a = log.AgentData.GetAgent(c.SrcAgent, c.Time);
                        if (playersIds.Contains(a.InstID))
                        {
                            continue;
                        }
                        else if (a.MasterAgent != 0)
                        {
                            AgentItem m = log.AgentData.GetAgent(a.MasterAgent, c.Time);
                            if (playersIds.Contains(m.InstID))
                            {
                                continue;
                            }
                        }
                        if (!regroupedMobs.TryGetValue(a.ID, out amp))
                        {
                            amp = new DummyActor(a);
                            regroupedMobs.Add(a.ID, amp);
                        }
                    }
                }
                if (amp != null)
                {
                    mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(c.Time), this, amp));
                }
            }
        }
        public override void CheckMechanic(ParsedLog log, Dictionary <ushort, DummyActor> regroupedMobs)
        {
            MechanicData     mechData   = log.MechanicData;
            CombatData       combatData = log.CombatData;
            HashSet <ushort> playersIds = log.PlayerIDs;

            foreach (Player p in log.PlayerList)
            {
                List <CombatItem> combatitems = combatData.GetDamageTakenData(p.InstID, p.FirstAware, p.LastAware);
                foreach (CombatItem c in combatitems)
                {
                    if (!(c.SkillID == SkillId) || (c.IsBuff == 0 && !c.ResultEnum.IsHit()) || (c.IsBuff > 0 && c.Result > 0) || !Keep(c, log))
                    {
                        continue;
                    }
                    mechData[this].Add(new MechanicLog(log.FightData.ToFightSpace(c.Time), this, p));
                }
            }
        }