Exemplo n.º 1
0
        private static void OnProcessSpell(
            Obj_AI_Base sender,
            GameObjectProcessSpellCastEventArgs args,
            SpellData data,
            SpellArgs spellArgs)
        {
            switch (data.MenuName)
            {
            case "MalphiteR":
            {
                var newData = (SpellData)data.Clone();
                newData.MissileSpeed += (int)sender.MoveSpeed;
                spellArgs.NewData     = newData;
            }
            break;

            case "SionR":
            {
                var newData = (SpellData)data.Clone();
                newData.MissileSpeed = (int)sender.MoveSpeed;
                spellArgs.NewData    = newData;
            }
            break;
            }

            if (data.MultipleNumber == -1 || (data.MenuName == "KhazixW" && args.SData.Name == data.SpellName))
            {
                return;
            }

            var startPos = sender.ServerPosition.To2D();
            var start    = startPos;
            var endPos   = args.End.To2D();

            if (data.InfrontStart > 0)
            {
                start = start.Extend(endPos, data.InfrontStart);
            }

            var dir = (endPos - start).Normalized();

            for (var i = -(data.MultipleNumber - 1) / 2; i <= (data.MultipleNumber - 1) / 2; i++)
            {
                SpellDetector.AddSpell(
                    sender,
                    startPos,
                    start + dir.Rotated(data.MultipleAngle * i) * (data.Range / 2f),
                    data);
            }

            spellArgs.NoProcess = true;
        }
Exemplo n.º 2
0
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args,
                                                         SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "GravesQLineSpell")
            {
                var newData = (SpellData)spellData.Clone();
                newData.isPerpendicular = true;
                newData.secondaryRadius = 255f;
                newData.updatePosition  = false;
                newData.extraEndTime    = 1300;

                var end   = args.End;
                var start = args.Start;

                if (end.Distance(start) > newData.range)
                {
                    end = args.Start + (args.End - args.Start).Normalized() * newData.range;
                }

                if (end.Distance(start) < newData.range)
                {
                    end = args.Start + (args.End - args.Start).Normalized() * newData.range;
                }

                var w = EvadeHelper.GetNearWallPoint(start, end);
                if (w != default(Vector3))
                {
                    end = w;
                }

                //SpellDetector.CreateSpellData(hero, hero.ServerPosition, end, spellData);
                SpellDetector.CreateSpellData(hero, hero.ServerPosition, end, newData);
            }
        }
Exemplo n.º 3
0
        private static void FizzR(Obj_AI_Base sender, MissileClient missile, SpellData data, SpellArgs spellArgs)
        {
            if (data.MenuName != "FizzR")
            {
                return;
            }

            var dist   = missile.StartPosition.Distance(missile.EndPosition);
            var radius = dist >= 910 ? 450 : (dist >= 455 ? 325 : 0);

            if (radius == 0)
            {
                return;
            }

            var spell =
                Evade.DetectedSpells.Values.FirstOrDefault(
                    i => i.Data.MenuName == data.MenuName && i.Unit.CompareId(sender) && i.Type == SpellType.Circle);

            if (spell != null)
            {
                Evade.DetectedSpells[spell.SpellId].Radius = radius + (int)ObjectManager.Player.BoundingRadius;

                return;
            }

            var newData = (SpellData)data.Clone();

            newData.RadiusEx  = radius;
            spellArgs.NewData = newData;
        }
Exemplo n.º 4
0
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args,
                                                         SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "ZileanQ")
            {
                var end = args.End;
                if (args.Start.Distance(end) > spellData.range)
                {
                    end = args.Start + (args.End - args.Start).Normalized() * spellData.range;
                }

                foreach (var bomb in _bombs.Where(b => b.IsValid && !b.IsDead && b.IsVisible))
                {
                    var newData = (SpellData)spellData.Clone();
                    newData.radius = 350;

                    if (end.Distance(bomb.Position) <= newData.radius)
                    {
                        SpellDetector.CreateSpellData(hero, hero.ServerPosition, bomb.Position, newData, null, 0, true,
                                                      SpellType.Circular, false, newData.radius);
                        SpellDetector.CreateSpellData(hero, hero.ServerPosition, end, newData, null, 0, true,
                                                      SpellType.Circular, false, newData.radius);
                        specialSpellArgs.noProcess = true;
                    }
                }

                foreach (var bombPosition in _qSpots.Values)
                {
                    var newData = (SpellData)spellData.Clone();
                    newData.radius = 350;

                    if (end.Distance(bombPosition) <= newData.radius && _qSpots.Count > 1)
                    {
                        SpellDetector.CreateSpellData(hero, hero.ServerPosition, bombPosition, newData, null, 0, true,
                                                      SpellType.Circular, false, newData.radius);
                        SpellDetector.CreateSpellData(hero, hero.ServerPosition, end, newData, null, 0, true,
                                                      SpellType.Circular, false, newData.radius);
                        specialSpellArgs.noProcess = true;
                    }
                }

                _qSpots[Game.ClockTime] = end;
            }
        }
Exemplo n.º 5
0
        private static void PoppyR1(
            Obj_AI_Base sender,
            GameObjectProcessSpellCastEventArgs args,
            SpellData data,
            SpellArgs spellArgs)
        {
            if (data.MenuName != "PoppyRCharge")
            {
                return;
            }

            var newData = (SpellData)data.Clone();

            newData.FixedRange = true;
            spellArgs.NewData  = newData;
        }
Exemplo n.º 6
0
        private void ProcessSpell_TwitchSprayandPrayAttack(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "TwitchSprayandPrayAttack")
            {
                if (args.Target != null)
                {
                    var start = hero.ServerPosition;
                    var end   = hero.ServerPosition + (args.Target.Position - hero.ServerPosition) * spellData.range;

                    var data = (SpellData)spellData.Clone();
                    data.spellDelay = hero.AttackCastDelay * 1000;

                    SpellDetector.CreateSpellData(hero, start, end, data);
                }
            }
        }
Exemplo n.º 7
0
        private static void AzirR(
            Obj_AI_Base sender,
            GameObjectProcessSpellCastEventArgs args,
            SpellData data,
            SpellArgs spellArgs)
        {
            if (data.MenuName != "AzirR")
            {
                return;
            }

            var newData = (SpellData)data.Clone();

            newData.Radius = data.Radius * new[] { 4, 5, 6 }[((AIHeroClient)sender).GetSpell(data.Slot).Level - 1];
            //spellArgs.NewData = newData;
        }
Exemplo n.º 8
0
        private void ProcessSPellFizzMarinerDoom(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "FizzR")
            {
                var start  = args.Start;
                var endPos = args.End;

                if (start.Distance(endPos) > spellData.range)
                {
                    endPos = start + (endPos - start).Normalized() * spellData.range;
                }

                var dist   = start.Distance(endPos);
                var radius = dist > 910 ? 400 : (dist >= 455 ? 300 : 200);

                var data = (SpellData)spellData.Clone();
                data.secondaryRadius = radius;

                specialSpellArgs.spellData = data;
            }
        }
Exemplo n.º 9
0
        private static void YasuoQ(
            Obj_AI_Base sender,
            GameObjectProcessSpellCastEventArgs args,
            SpellData data,
            SpellArgs spellArgs)
        {
            if (data.MenuName != "YasuoQ")
            {
                return;
            }

            var delay = (int)(sender.Spellbook.CastTime - Game.Time) * 1000;

            if (delay <= 0)
            {
                return;
            }

            var newData = (SpellData)data.Clone();

            newData.Delay     = delay;
            spellArgs.NewData = newData;
        }
Exemplo n.º 10
0
        private static void BardR(Obj_AI_Base sender, MissileClient missile, SpellData data, SpellArgs spellArgs)
        {
            if (data.MenuName != "BardR" || !missile.SData.Name.Contains("Fixed"))
            {
                return;
            }

            var newData = (SpellData)data.Clone();

            newData.MissileSpeed = newData.MissileMinSpeed;
            var spell =
                Evade.DetectedSpells.Values.FirstOrDefault(
                    i => i.Data.MenuName == data.MenuName && i.Unit.CompareId(sender));

            if (spell == null)
            {
                spellArgs.NewData = newData;

                return;
            }

            Evade.DetectedSpells.Remove(spell.SpellId);
            SpellDetector.AddSpell(sender, missile.StartPosition, missile.EndPosition, newData, missile);
        }
Exemplo n.º 11
0
        private static void OnDash(Obj_AI_Base sender, Dash.DashItem args, SpellData data)
        {
            var caster = sender as AIHeroClient;

            if (caster == null || !caster.IsValid || (!caster.IsEnemy && !Configs.Debug) ||
                caster.ChampionName != data.ChampName)
            {
                return;
            }

            if (Utils.GameTimeTickCount - lastQTick > 100)
            {
                return;
            }

            var newData = (SpellData)data.Clone();

            if (caster.HasBuff("RivenFengShuiEngine"))
            {
                newData.Radius += 75;
            }

            SpellDetector.AddSpell(caster, args.StartPos, args.EndPos, newData, null, SpellType.None, true, lastQTick);
        }
Exemplo n.º 12
0
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args,
                                                         SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName.ToLower() == "syndrae")
            {
                var estart = args.Start;
                var eend   = args.Start + (args.End - args.Start).Normalized() * 800;

                foreach (var sphere in _spheres.Where(s => s.IsValid && !s.IsDead))
                {
                    // check if e whill hit the sphere
                    var proj = sphere.Position.To2D().ProjectOn(estart.To2D(), eend.To2D());
                    if (proj.IsOnSegment && sphere.Position.To2D().Distance(proj.SegmentPoint) <=
                        sphere.BoundingRadius + 155)
                    {
                        var start = sphere.Position;
                        var end   = hero.ServerPosition + (sphere.Position - hero.ServerPosition).Normalized() *
                                    spellData.range;
                        var data = (SpellData)spellData.Clone();
                        data.spellDelay = sphere.Distance(hero.ServerPosition) / spellData.projectileSpeed * 1000;
                        SpellDetector.CreateSpellData(hero, start, end, data, sphere);
                    }
                }

                foreach (var entry in _qSpots)
                {
                    var spherePosition = entry.Value;

                    // check if e whill hit the sphere
                    var proj = spherePosition.To2D().ProjectOn(estart.To2D(), eend.To2D());
                    if (proj.IsOnSegment && spherePosition.To2D().Distance(proj.SegmentPoint) <= 155)
                    {
                        var start = spherePosition;
                        var end   = hero.ServerPosition + (spherePosition - hero.ServerPosition).Normalized() *
                                    spellData.range;
                        var data = (SpellData)spellData.Clone();
                        data.spellDelay = spherePosition.Distance(hero.ServerPosition) / spellData.projectileSpeed *
                                          1000;
                        SpellDetector.CreateSpellData(hero, start, end, data, null);
                    }
                }

                specialSpellArgs.noProcess = true;
            }

            if (spellData.spellName.ToLower() == "syndraq")
            {
                var end = args.End;
                if (args.Start.Distance(end) > spellData.range)
                {
                    end = args.Start + (args.End - args.Start).Normalized() * spellData.range;
                }

                _qSpots[Game.ClockTime] = end;
            }

            if (spellData.spellName.ToLower() == "syndrawcast")
            {
                var end = args.End;
                if (args.Start.Distance(end) > spellData.range)
                {
                    end = args.Start + (args.End - args.Start).Normalized() * spellData.range;
                }

                _qSpots[Game.ClockTime] = end;
            }
        }