Example #1
0
        private static void GameObject_OnCreate(GameObject sender, EventArgs args)
        {
            if (sender == null)
            {
                return;
            }

            var partical = sender as Obj_GeneralParticleEmitter;

            if (partical != null)
            {
                var pdata = SkillshotDatabase.List.FirstOrDefault(s => partical.Name.EndsWith(".troy") && ((!string.IsNullOrEmpty(s.ParticalName) && partical.Name.StartsWith(s.ParticalName)) ||
                                                                                                           (!string.IsNullOrEmpty(s.MissileName) && partical.Name.StartsWith(s.MissileName)) ||
                                                                                                           (s.ExtraMissileName != null && s.ExtraMissileName.Any(x => partical.Name.StartsWith(x)))));

                if (pdata != null)
                {
                    var pcaster       = EntityManager.Heroes.AllHeroes.OrderBy(e => e.Distance(partical)).FirstOrDefault(h => h.Hero.Equals(pdata.hero));
                    var correctObject = ObjectManager.Get <Obj_AI_Base>().OrderBy(o => o.Distance(partical)).FirstOrDefault(o => !string.IsNullOrEmpty(pdata.ParticalObjectName) && o.Name.Equals(pdata.ParticalObjectName));
                    if (correctObject != null)
                    {
                        var pdetected = new DetectedSkillshotData
                        {
                            Caster    = pcaster,
                            Start     = correctObject.Position.To2D(),
                            End       = correctObject.Position.To2D(),
                            Data      = pdata,
                            StartTick = Core.GameTickCount
                        };

                        Add(pdetected);
                    }
                    else
                    {
                        var start = partical.Position.To2D();
                        var end   = partical.Position.To2D();
                        if (pcaster != null)
                        {
                            //start = pcaster.ServerPosition.To2D();
                            switch (pcaster.ChampionName)
                            {
                            case "Zac":
                                if (start.Distance(end) > pdata.Range)
                                {
                                    start = end.Extend(start, pdata.Range);
                                }
                                break;
                            }
                        }

                        var pdetected = new DetectedSkillshotData
                        {
                            Caster    = pcaster,
                            Start     = start,
                            End       = end,
                            Data      = pdata,
                            StartTick = Core.GameTickCount
                        };

                        Add(pdetected);
                    }
                }
                else
                {
                    var StartluxR =
                        SkillshotDatabase.List.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.StartParticalName) && partical.Name.EndsWith(".troy"));
                    var MidluxR =
                        SkillshotDatabase.List.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.MidParticalName) && partical.Name.EndsWith(".troy"));
                    var EndluxR =
                        SkillshotDatabase.List.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.MidParticalName) && partical.Name.EndsWith(".troy"));

                    AIHeroClient pcaster;
                    if (StartluxR != null || MidluxR != null || EndluxR != null)
                    {
                        pcaster = EntityManager.Heroes.AllHeroes.OrderBy(h => h.Distance(partical)).FirstOrDefault(h => h.ChampionName.Equals("Lux"));
                        if (pcaster != null)
                        {
                            var alreadyDetected = DetectedLuxRParticals.FirstOrDefault(p => p.caster != null && !p.FullyDetected && p.caster.IdEquals(pcaster));
                            if (alreadyDetected != null)
                            {
                                if (alreadyDetected.Start == null && StartluxR != null)
                                {
                                    alreadyDetected.Start = partical.Position;
                                }
                                if (alreadyDetected.Mid == null && MidluxR != null)
                                {
                                    alreadyDetected.Mid = partical.Position;
                                }
                                if (alreadyDetected.End == null && EndluxR != null)
                                {
                                    alreadyDetected.End = partical.Position;
                                }
                            }
                            else
                            {
                                var addnew = new LuxRPartical
                                {
                                    caster = pcaster,
                                    Start  = StartluxR != null ? partical.Position : (Vector3?)null,
                                    Mid    = MidluxR != null ? partical.Position : (Vector3?)null,
                                    End    = EndluxR != null ? partical.Position : (Vector3?)null,
                                    Data   = SkillshotDatabase.List.FirstOrDefault(s => s.hero.Equals(Champion.Lux) && s.slot.Equals(SpellSlot.R))
                                };

                                DetectedLuxRParticals.Add(addnew);
                            }
                        }
                    }
                }
            }

            var missile = sender as MissileClient;
            var caster  = missile?.SpellCaster;

            if (missile == null || caster == null || missile.IsAutoAttack() || !missile.IsValid)
            {
                return;
            }

            var missilename = missile.SData.Name;
            //Console.WriteLine($"{missilename} - mis - {missile.Slot}");

            var data = GetData(caster, null, missile);

            if (data == null)
            {
                //Console.WriteLine($"OnCreateSkillshots: {caster.ChampionName} - [{missile.Slot} | {missilename}] - Not Detected");
                return;
            }

            var Misstart = missile.StartPosition.To2D();
            var Misend   = missile.EndPosition.To2D();

            if (data.hero.Equals(Champion.Shen) && data.slot.Equals(SpellSlot.Q))
            {
                Misstart   = missile.Position.To2D();
                Misend     = caster.ServerPosition.To2D();
                data.Range = Misstart.Distance(Misend);
            }

            var detected = new DetectedSkillshotData
            {
                Caster    = caster,
                Missile   = missile,
                Start     = Misstart,
                End       = Misend,
                Data      = data,
                StartTick = Core.GameTickCount
            };

            Add(detected);
        }
Example #2
0
        private static void GameObject_OnCreate(GameObject sender, EventArgs args)
        {
            if (sender == null)
            {
                return;
            }

            var partical = sender as Obj_GeneralParticleEmitter;

            if (partical != null)
            {
                var particleName = partical.Name.ToLower();
                var pdata        = SkillshotDatabase.Current.FirstOrDefault(s => !ExcludeEnds.Any(particleName.EndsWith) && s.IsParticleName(particleName) && ObjectManager.Get <Obj_AI_Base>().Any(s.HasBuff));
                if (pdata != null)
                {
                    var isAlly    = AlliedNames.Any(particleName.EndsWith);
                    var yasuoEQ   = partical.Name.StartsWith("Yasuo_Base_EQ_SwordGlow");
                    var jungleMob = pdata.IsCasterName("jungle");

                    Obj_AI_Base pcaster =
                        jungleMob ? ObjectManager.Get <Obj_AI_Base>().Where(m => pdata.IsCasterName(m.BaseSkinName) && m.IsValid && !m.IsDead).OrderBy(m => m.Distance(partical)).FirstOrDefault()
                        : yasuoEQ?EntityManager.Heroes.AllHeroes.OrderBy(m => m.Distance(partical)).FirstOrDefault(h => h.ChampionName == "Yasuo" && h.IsValid && !h.IsDead)
                            : EntityManager.Heroes.AllHeroes.OrderByDescending(h => h.Distance(partical)).FirstOrDefault(h => h.IsInRange(partical, 3000) && pdata.IsCasterName(h.BaseSkinName) &&
                                                                                                                         (isAlly ? h.IsAlly : h.IsEnemy) && h.IsValid && !h.IsDead && pdata.HasBuff(h));

                    var correctObject = ObjectManager.Get <Obj_AI_Base>().OrderBy(o => o.Distance(partical)).FirstOrDefault(o => !string.IsNullOrEmpty(pdata.ParticalObjectName) &&
                                                                                                                            (o.Name.Equals(pdata.ParticalObjectName) || o.BaseSkinName.Equals(pdata.ParticalObjectName) || o.Model.Equals(pdata.ParticalObjectName) || pdata.HasBuff(o)));
                    if (correctObject != null)
                    {
                        var buff          = correctObject.Buffs.FirstOrDefault(b => b.Caster is Obj_AI_Base);
                        var correctCaster = buff?.Caster as Obj_AI_Base;
                        if (correctCaster != null)
                        {
                            pcaster = correctCaster;
                        }

                        if (pcaster != null)
                        {
                            var pdetected = new DetectedSkillshotData
                            {
                                Caster    = pcaster,
                                Start     = correctObject.Position.To2D(),
                                End       = correctObject.Position.To2D(),
                                Data      = pdata,
                                StartTick = Core.GameTickCount,
                                Particle  = partical
                            };

                            Add(pdetected);
                        }
                    }
                    else
                    {
                        var start = partical.Position.To2D();
                        var end   = partical.Position.To2D();
                        if (pcaster != null)
                        {
                            //start = pcaster.ServerPosition.To2D();
                            switch (pcaster.BaseSkinName)
                            {
                            case "Yasuo":
                            {
                                var alreadydetected = SkillshotsDetected.FirstOrDefault(s => s.Caster.IdEquals(pcaster));
                                if (alreadydetected != null)
                                {
                                    var qcircle = SkillshotDatabase.Current.FirstOrDefault(s => s.IsCasterName(Champion.Yasuo) && s.IsDisplayName(pcaster.HasBuff("YasuoQ3W") ? "E Q3" : "E Q"));
                                    if (qcircle != null)
                                    {
                                        alreadydetected.Data = qcircle;
                                        alreadydetected.End  = pcaster.GetDashInfo() != null?pcaster.GetDashInfo().EndPos.To2D() : pcaster.ServerPosition.To2D();

                                        alreadydetected.Update();
                                    }
                                }
                                return;
                            }

                            case "Zac":
                                start = pcaster.IsHPBarRendered ? pcaster.ServerPosition.To2D() : end.Extend(pcaster, pdata.Range);
                                break;
                            }

                            var pdetected = new DetectedSkillshotData
                            {
                                Caster    = pcaster,
                                Start     = start,
                                End       = end,
                                Data      = pdata,
                                StartTick = Core.GameTickCount,
                                Particle  = partical
                            };

                            Add(pdetected);
                        }
                    }
                }
                else
                {
                    var StartluxR =
                        SkillshotDatabase.Current.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.StartParticalName) && partical.Name.EndsWith(".troy"));
                    var MidluxR =
                        SkillshotDatabase.Current.FirstOrDefault(p => !string.IsNullOrEmpty(p.MidParticalName) && partical.Name.StartsWith(p.MidParticalName) && partical.Name.EndsWith(".troy"));
                    var EndluxR =
                        SkillshotDatabase.Current.FirstOrDefault(p => !string.IsNullOrEmpty(p.EndParticalName) && partical.Name.StartsWith(p.EndParticalName) && partical.Name.EndsWith(".troy"));

                    AIHeroClient pcaster;
                    if (StartluxR != null || MidluxR != null || EndluxR != null)
                    {
                        pdata = SkillshotDatabase.Current.FirstOrDefault(s => s.IsCasterName(Champion.Lux) && s.IsSlot(SpellSlot.R));
                        var luxInStart = EntityManager.Heroes.AllHeroes.FirstOrDefault(h => h.Hero.Equals(Champion.Lux) && h.IsValidTarget() && h.IsInRange(partical, 275));
                        pcaster = luxInStart ?? EntityManager.Heroes.AllHeroes.OrderBy(h => h.Distance(partical)).FirstOrDefault(h => h.BaseSkinName.Equals("Lux") && (h.Spellbook.IsChanneling || h.Spellbook.IsCharging || h.Spellbook.IsCastingSpell || !h.IsHPBarRendered));

                        if (pcaster != null)
                        {
                            var alreadyDetected = DetectedLuxRParticals.FirstOrDefault(p => p.caster != null && !p.FullyDetected && p.caster.IdEquals(pcaster));
                            if (alreadyDetected != null)
                            {
                                if (alreadyDetected.Start == null && StartluxR != null)
                                {
                                    alreadyDetected.Start = partical.Position.To2D();
                                }
                                if (alreadyDetected.Mid == null && MidluxR != null)
                                {
                                    alreadyDetected.Mid = partical.Position.To2D();
                                }
                                if (alreadyDetected.End == null && EndluxR != null)
                                {
                                    alreadyDetected.End = partical.Position.To2D();
                                }
                                return;
                            }
                            var addnew = new LuxRPartical
                            {
                                caster                                                                                              = pcaster,
                                Start                                                                                               = StartluxR != null?partical.Position.To2D() : (Vector2?)null,
                                                                           Mid                                                      = MidluxR != null?partical.Position.To2D() : (Vector2?)null,
                                                                                                          End                       = EndluxR != null?partical.Position.To2D() : (Vector2?)null,
                                                                                                                               Data = pdata
                            };

                            DetectedLuxRParticals.Add(addnew);
                            return;
                        }
                    }
                }
            }

            var missile = sender as MissileClient;
            var caster  = missile?.SpellCaster;

            if (missile == null || caster == null || !missile.IsValid)
            {
                return;
            }

            //var missilename = missile.SData.Name;
            //Console.WriteLine($"{missilename} - mis - {missile.Slot}");

            var data = GetData(caster, null, missile);

            if (data == null)
            {
                //Console.WriteLine($"OnCreateSkillshots: {caster.ChampionName} - [{missile.Slot} | {missilename}] - Not Detected");
                return;
            }

            var Misstart = missile.StartPosition.To2D();
            var Misend   = missile.EndPosition.To2D();

            if (data.IsCasterName(Champion.Shen) && data.IsSlot(SpellSlot.Q))
            {
                Misstart   = missile.Position.To2D();
                Misend     = caster.ServerPosition.To2D();
                data.Range = Misstart.Distance(Misend);
            }

            var detected = new DetectedSkillshotData
            {
                Caster    = caster,
                Target    = missile.Target as AIHeroClient,
                Missile   = missile,
                Start     = Misstart,
                End       = Misend,
                Data      = data,
                StartTick = Core.GameTickCount
            };

            Add(detected);
        }