示例#1
0
        internal override void ComputeNPCCombatReplayActors(NPC target, ParsedEvtcLog log, CombatReplay replay)
        {
            IReadOnlyList <AbstractCastEvent> cls = target.GetCastEvents(log, 0, log.FightData.FightEnd);

            switch (target.ID)
            {
            case (int)ArcDPSEnums.TargetID.BrokenKing:
                var Cone = cls.Where(x => x.SkillId == 48066).ToList();
                foreach (AbstractCastEvent c in Cone)
                {
                    int     start  = (int)c.Time;
                    int     end    = (int)c.EndTime;
                    int     range  = 450;
                    int     angle  = 100;
                    Point3D facing = replay.Rotations.LastOrDefault(x => x.Time <= start + 1000);
                    if (facing == null)
                    {
                        continue;
                    }
                    replay.Decorations.Add(new PieDecoration(true, 0, range, facing, angle, (start, end), "rgba(0,100,255,0.2)", new AgentConnector(target)));
                    replay.Decorations.Add(new PieDecoration(true, 0, range, facing, angle, (start + 1900, end), "rgba(0,100,255,0.3)", new AgentConnector(target)));
                }
                break;

            default:
                break;
            }
        }
示例#2
0
        public override void ComputeNPCCombatReplayActors(NPC target, ParsedLog log, CombatReplay replay)
        {
            List <AbstractCastEvent> cls = target.GetCastLogs(log, 0, log.FightData.FightEnd);

            switch (target.ID)
            {
            case (int)ParseEnum.TargetIDS.Slothasor:
                var sleepy = cls.Where(x => x.SkillId == 34515).ToList();
                foreach (AbstractCastEvent c in sleepy)
                {
                    replay.Decorations.Add(new CircleDecoration(true, 0, 180, ((int)c.Time, (int)c.Time + c.ActualDuration), "rgba(0, 180, 255, 0.3)", new AgentConnector(target)));
                }
                var breath = cls.Where(x => x.SkillId == 34516).ToList();
                foreach (AbstractCastEvent c in breath)
                {
                    int     start       = (int)c.Time;
                    int     preCastTime = 1000;
                    int     duration    = 2000;
                    int     range       = 600;
                    Point3D facing      = replay.Rotations.LastOrDefault(x => x.Time <= start + 1000);
                    if (facing != null)
                    {
                        int direction = Point3D.GetRotationFromFacing(facing);
                        int angle     = 60;
                        replay.Decorations.Add(new PieDecoration(true, 0, range, direction, angle, (start, start + preCastTime), "rgba(255,200,0,0.1)", new AgentConnector(target)));
                        replay.Decorations.Add(new PieDecoration(true, 0, range, direction, angle, (start + preCastTime, start + preCastTime + duration), "rgba(255,200,0,0.4)", new AgentConnector(target)));
                    }
                }
                var tantrum = cls.Where(x => x.SkillId == 34547).ToList();
                foreach (AbstractCastEvent c in tantrum)
                {
                    int start = (int)c.Time;
                    int end   = start + c.ActualDuration;
                    replay.Decorations.Add(new CircleDecoration(false, 0, 300, (start, end), "rgba(255, 150, 0, 0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new CircleDecoration(true, end, 300, (start, end), "rgba(255, 150, 0, 0.4)", new AgentConnector(target)));
                }
                var shakes = cls.Where(x => x.SkillId == 34482).ToList();
                foreach (AbstractCastEvent c in shakes)
                {
                    int start = (int)c.Time;
                    int end   = start + c.ActualDuration;
                    replay.Decorations.Add(new CircleDecoration(false, 0, 700, (start, end), "rgba(255, 0, 0, 0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new CircleDecoration(true, end, 700, (start, end), "rgba(255, 0, 0, 0.4)", new AgentConnector(target)));
                }
                break;

            default:
                break;
            }
        }
        internal override void ComputeNPCCombatReplayActors(NPC target, ParsedEvtcLog log, CombatReplay replay)
        {
            IReadOnlyList <AbstractCastEvent> cls = target.GetCastEvents(log, 0, log.FightData.FightEnd);

            switch (target.ID)
            {
            case (int)ArcDPSEnums.TargetID.Slothasor:
                var sleepy = cls.Where(x => x.SkillId == NarcolepsySkill).ToList();
                foreach (AbstractCastEvent c in sleepy)
                {
                    replay.Decorations.Add(new CircleDecoration(true, 0, 180, ((int)c.Time, (int)c.EndTime), "rgba(0, 180, 255, 0.3)", new AgentConnector(target)));
                }
                var breath = cls.Where(x => x.SkillId == Halitosis).ToList();
                foreach (AbstractCastEvent c in breath)
                {
                    int     start       = (int)c.Time;
                    int     preCastTime = 1000;
                    int     duration    = 2000;
                    int     range       = 600;
                    Point3D facing      = replay.Rotations.LastOrDefault(x => x.Time <= start + 1000);
                    if (facing != null)
                    {
                        float direction = Point3D.GetRotationFromFacing(facing);
                        int   angle     = 60;
                        replay.Decorations.Add(new PieDecoration(true, 0, range, direction, angle, (start, start + preCastTime), "rgba(255,200,0,0.1)", new AgentConnector(target)));
                        replay.Decorations.Add(new PieDecoration(true, 0, range, direction, angle, (start + preCastTime, start + preCastTime + duration), "rgba(255,200,0,0.4)", new AgentConnector(target)));
                    }
                }
                var tantrum = cls.Where(x => x.SkillId == TantrumSkill).ToList();
                foreach (AbstractCastEvent c in tantrum)
                {
                    int start = (int)c.Time;
                    int end   = (int)c.EndTime;
                    replay.Decorations.Add(new CircleDecoration(false, 0, 300, (start, end), "rgba(255, 150, 0, 0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new CircleDecoration(true, end, 300, (start, end), "rgba(255, 150, 0, 0.4)", new AgentConnector(target)));
                }
                var shakes = cls.Where(x => x.SkillId == SporeRelease).ToList();
                foreach (AbstractCastEvent c in shakes)
                {
                    int start = (int)c.Time;
                    int end   = (int)c.EndTime;
                    replay.Decorations.Add(new CircleDecoration(false, 0, 700, (start, end), "rgba(255, 0, 0, 0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new CircleDecoration(true, end, 700, (start, end), "rgba(255, 0, 0, 0.4)", new AgentConnector(target)));
                }
                break;

            default:
                break;
            }
        }
 internal PieDecorationCombatReplayDescription(ParsedEvtcLog log, PieDecoration decoration, CombatReplayMap map) : base(log, decoration, map)
 {
     Type         = "Pie";
     Direction    = decoration.Direction;
     OpeningAngle = decoration.OpeningAngle;
 }
        internal override void ComputeNPCCombatReplayActors(NPC target, ParsedEvtcLog log, CombatReplay replay)
        {
            IReadOnlyList <AbstractCastEvent> cls = target.GetCastEvents(log, 0, log.FightData.FightEnd);
            int start = (int)replay.TimeOffsets.start;
            int end   = (int)replay.TimeOffsets.end;

            switch (target.ID)
            {
            case (int)ArcDPSEnums.TargetID.KeepConstruct:

                List <AbstractBuffEvent> kcOrbCollect = GetFilteredList(log.CombatData, XerasBoon, target, true, true);
                int kcOrbStart = 0, kcOrbEnd = 0;
                foreach (AbstractBuffEvent c in kcOrbCollect)
                {
                    if (c is BuffApplyEvent)
                    {
                        kcOrbStart = (int)c.Time;
                    }
                    else
                    {
                        kcOrbEnd = (int)c.Time;
                        replay.Decorations.Add(new CircleDecoration(false, 0, 300, (kcOrbStart, kcOrbEnd), "rgba(255, 0, 0, 0.5)", new AgentConnector(target)));
                        replay.Decorations.Add(new CircleDecoration(true, kcOrbEnd, 300, (kcOrbStart, kcOrbEnd), "rgba(255, 0, 0, 0.5)", new AgentConnector(target)));
                    }
                }
                var towerDrop  = cls.Where(x => x.SkillId == TowerDrop).ToList();
                foreach (AbstractCastEvent c in towerDrop)
                {
                    start = (int)c.Time;
                    end   = (int)c.EndTime;
                    int     skillCast = end - 1000;
                    Point3D next      = replay.PolledPositions.FirstOrDefault(x => x.Time >= end);
                    Point3D prev      = replay.PolledPositions.LastOrDefault(x => x.Time <= end);
                    if (prev != null || next != null)
                    {
                        replay.Decorations.Add(new CircleDecoration(false, 0, 400, (start, skillCast), "rgba(255, 150, 0, 0.5)", new InterpolatedPositionConnector(prev, next, end)));
                        replay.Decorations.Add(new CircleDecoration(true, skillCast, 400, (start, skillCast), "rgba(255, 150, 0, 0.5)", new InterpolatedPositionConnector(prev, next, end)));
                    }
                }
                var blades1    = cls.Where(x => x.SkillId == PhantasmalBlades1).ToList();
                var blades2    = cls.Where(x => x.SkillId == PhantasmalBlades2).ToList();
                var blades3    = cls.Where(x => x.SkillId == PhantasmalBlades3).ToList();
                int bladeDelay = 150;
                int duration   = 1000;
                foreach (AbstractCastEvent c in blades1)
                {
                    int ticks = (int)Math.Max(0, Math.Min(Math.Ceiling((c.ActualDuration - 1150) / 1000.0), 9));
                    start = (int)c.Time + bladeDelay;
                    Point3D facing = replay.Rotations.LastOrDefault(x => x.Time < start + 1000);
                    if (facing == null)
                    {
                        continue;
                    }
                    replay.Decorations.Add(new CircleDecoration(true, 0, 200, (start, start + (ticks + 1) * 1000), "rgba(255,0,0,0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new PieDecoration(true, 0, 1600, facing, 360 * 3 / 32, (start, start + 2 * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));     // First blade lasts twice as long
                    for (int i = 1; i < ticks; i++)
                    {
                        replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(facing.Y, facing.X)) + i * 360 / 8), 360 * 3 / 32, (start + 1000 + i * duration, start + 1000 + (i + 1) * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));     // First blade lasts longer
                    }
                }
                foreach (AbstractCastEvent c in blades2)
                {
                    int ticks = (int)Math.Max(0, Math.Min(Math.Ceiling((c.ActualDuration - 1150) / 1000.0), 9));
                    start = (int)c.Time + bladeDelay;
                    Point3D facing = replay.Rotations.LastOrDefault(x => x.Time < start + 1000);
                    if (facing == null)
                    {
                        continue;
                    }
                    replay.Decorations.Add(new CircleDecoration(true, 0, 200, (start, start + (ticks + 1) * 1000), "rgba(255,0,0,0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new PieDecoration(true, 0, 1600, facing, 360 * 3 / 32, (start, start + 2 * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));                                                           // First blade lasts twice as long
                    replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X))), 360 * 3 / 32, (start, start + 2 * duration), "rgba(255,0,255,0.5)", new AgentConnector(target))); // First blade lasts twice as long
                    for (int i = 1; i < ticks; i++)
                    {
                        replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(facing.Y, facing.X)) + i * 360 / 8), 360 * 3 / 32, (start + 1000 + i * duration, start + 1000 + (i + 1) * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));     // First blade lasts longer
                        replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X)) + i * 360 / 8), 360 * 3 / 32, (start + 1000 + i * duration, start + 1000 + (i + 1) * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));   // First blade lasts longer
                    }
                }
                foreach (AbstractCastEvent c in blades3)
                {
                    int ticks = (int)Math.Max(0, Math.Min(Math.Ceiling((c.ActualDuration - 1150) / 1000.0), 9));
                    start = (int)c.Time + bladeDelay;
                    Point3D facing = replay.Rotations.LastOrDefault(x => x.Time < start + 1000);
                    if (facing == null)
                    {
                        continue;
                    }
                    replay.Decorations.Add(new CircleDecoration(true, 0, 200, (start, start + (ticks + 1) * 1000), "rgba(255,0,0,0.4)", new AgentConnector(target)));
                    replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X))), 360 * 3 / 32, (start, start + 2 * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));       // First blade lasts twice as long
                    replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X)) + 120), 360 * 3 / 32, (start, start + 2 * duration), "rgba(255,0,255,0.5)", new AgentConnector(target))); // First blade lasts twice as long
                    replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X)) - 120), 360 * 3 / 32, (start, start + 2 * duration), "rgba(255,0,255,0.5)", new AgentConnector(target))); // First blade lasts twice as long
                    for (int i = 1; i < ticks; i++)
                    {
                        replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X)) + i * 360 / 8), 360 * 3 / 32, (start + 1000 + i * duration, start + 1000 + (i + 1) * duration), "rgba(255,0,255,0.5)", new AgentConnector(target)));       // First blade lasts longer
                        replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X)) + i * 360 / 8 + 120), 360 * 3 / 32, (start + 1000 + i * duration, start + 1000 + (i + 1) * duration), "rgba(255,0,255,0.5)", new AgentConnector(target))); // First blade lasts longer
                        replay.Decorations.Add(new PieDecoration(true, 0, 1600, (ParserHelper.RadianToDegreeF(Math.Atan2(-facing.Y, -facing.X)) + i * 360 / 8 - 120), 360 * 3 / 32, (start + 1000 + i * duration, start + 1000 + (i + 1) * duration), "rgba(255,0,255,0.5)", new AgentConnector(target))); // First blade lasts longer
                    }
                }
                break;

            case (int)ArcDPSEnums.TrashID.KeepConstructCore:
                break;

            case (int)ArcDPSEnums.TrashID.Jessica:
            case (int)ArcDPSEnums.TrashID.Olson:
            case (int)ArcDPSEnums.TrashID.Engul:
            case (int)ArcDPSEnums.TrashID.Faerla:
            case (int)ArcDPSEnums.TrashID.Caulle:
            case (int)ArcDPSEnums.TrashID.Henley:
            case (int)ArcDPSEnums.TrashID.Galletta:
            case (int)ArcDPSEnums.TrashID.Ianim:
                replay.Decorations.Add(new CircleDecoration(false, 0, 600, (start, end), "rgba(255, 0, 0, 0.5)", new AgentConnector(target)));
                replay.Decorations.Add(new CircleDecoration(true, 0, 400, (start, end), "rgba(0, 125, 255, 0.5)", new AgentConnector(target)));
                Point3D firstPhantasmPosition = replay.PolledPositions.FirstOrDefault();
                if (firstPhantasmPosition != null)
                {
                    replay.Decorations.Add(new CircleDecoration(true, 0, 300, (start - 5000, start), "rgba(220, 50, 0, 0.5)", new PositionConnector(firstPhantasmPosition)));
                    replay.Decorations.Add(new CircleDecoration(true, start, 300, (start - 5000, start), "rgba(220, 50, 0, 0.5)", new PositionConnector(firstPhantasmPosition)));
                }
                break;

            case (int)ArcDPSEnums.TrashID.GreenPhantasm:
                int lifetime = 8000;
                replay.Decorations.Add(new CircleDecoration(true, 0, 210, (start, start + lifetime), "rgba(0,255,0,0.2)", new AgentConnector(target)));
                replay.Decorations.Add(new CircleDecoration(true, start + lifetime, 210, (start, start + lifetime), "rgba(0,255,0,0.3)", new AgentConnector(target)));
                break;

            case (int)ArcDPSEnums.TrashID.RetrieverProjection:
            case (int)ArcDPSEnums.TrashID.InsidiousProjection:
            case (int)ArcDPSEnums.TrashID.UnstableLeyRift:
            case (int)ArcDPSEnums.TrashID.RadiantPhantasm:
            case (int)ArcDPSEnums.TrashID.CrimsonPhantasm:
                break;

            default:
                break;
            }
        }