예제 #1
0
        private static void ProcessSpell_JarvanIVDragonStrike(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (args.SData.Name == "JarvanIVDragonStrike")
            {
                if (SpellDetector.onProcessSpells.TryGetValue("JarvanIVDragonStrike2", out spellData))
                {
                    foreach (KeyValuePair<int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                    {
                        var info = entry.Value;

                        if (info.Name == "Beacon" || info.obj.Name == "Beacon")
                        {
                            if (info.usePosition == false && (info.obj == null || !info.obj.IsValid || info.obj.IsDead))
                            {
                                DelayAction.Add(1, () => ObjectTracker.objTracker.Remove(info.obj.NetworkId));
                                continue;
                            }

                            var objPosition = info.usePosition ? info.position.LSTo2D() : info.obj.Position.LSTo2D();

                            if (args.End.LSTo2D().LSDistance(objPosition) < 300)
                            {
                                var dir = (objPosition - args.Start.LSTo2D()).LSNormalized();
                                var endPosition = objPosition + dir * 110;

                                SpellDetector.CreateSpellData(hero, args.Start, endPosition.To3D(), spellData);
                                specialSpellArgs.noProcess = true;
                                return;
                            }
                        }
                    }

                }
            }
        }
예제 #2
0
        private static void ProcessSpell_ZedShuriken(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName == "ZedQ")
            {
                foreach (KeyValuePair<int, ObjectTrackerInfo> entry in ObjectTracker.ObjTracker)
                {
                    var info = entry.Value;

                    if (info.Obj.Name == "Shadow" || info.Name == "Shadow")
                    {
                        if (info.UsePosition == false && (info.Obj == null || !info.Obj.IsValid || info.Obj.IsDead))
                        {
                            DelayAction.Add(1, () => ObjectTracker.ObjTracker.Remove(info.Obj.NetworkId));
                            continue;
                        }
                        else
                        {
                            Vector3 endPos2;
                            if (info.UsePosition == false)
                            {
                                endPos2 = info.Obj.Position.Extend(args.End, spellData.Range).To3DWorld();
                                SpellDetector.CreateSpellData(hero, info.Obj.Position, endPos2, spellData, null, 0, false);
                            }
                            else
                            {
                                endPos2 = info.Position.Extend(args.End, spellData.Range).To3DWorld();
                                SpellDetector.CreateSpellData(hero, info.Position, endPos2, spellData, null, 0, false);
                            }

                        }
                    }
                }
            }
        }
예제 #3
0
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "TaricE")
            {
                var sdata = new SpellData();
                sdata.charName = "Taric";
                sdata.name = "TaricE2";
                sdata.spellName = "TaricE";
                sdata.range = 750;
                sdata.radius = 100;
                sdata.fixedRange = true;
                sdata.spellDelay = 1000;
                sdata.projectileSpeed = int.MaxValue;
                sdata.dangerlevel = 3;

                var partner = HeroManager.Enemies.FirstOrDefault(x => x.HasBuff("taricwleashactive"));
                if (partner != null && partner.ChampionName != "Taric")
                {
                    var start = partner.ServerPosition.LSTo2D();
                    var direction = (args.End.LSTo2D() - start).LSNormalized();
                    var end = start + direction * spellData.range;

                    SpellDetector.CreateSpellData(partner, start.To3D(), end.To3D(), sdata);
                }
            }
        }
예제 #4
0
파일: Twitch.cs 프로젝트: aikoy/ezEvade
 private void ProcessSpell_TwitchSprayandPrayAttack(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.spellName == "TwitchSprayandPrayAttack")
     {
         spellData.spellDelay = hero.AttackCastDelay * 1000;
     }
 }
예제 #5
0
        private static void ProcessSpell_SionE(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName == "SionE")
            {
                var objList = new List<Obj_AI_Minion>();
                foreach (var obj in ObjectManager.Get<Obj_AI_Minion>())
                {
                    if (obj != null && obj.IsValid && !obj.IsDead && obj.IsAlly)
                    {
                        objList.Add(obj);
                    }
                }

                objList.OrderBy(o => o.Distance(hero.ServerPosition));

                var spellStart = args.Start.To2D();
                var dir = (args.End.To2D() - spellStart).Normalized();
                var spellEnd = spellStart + dir * spellData.Range;

                foreach (var obj in objList)
                {
                    var objProjection = obj.ServerPosition.To2D().ProjectOn(spellStart, spellEnd);

                    if (objProjection.IsOnSegment && objProjection.SegmentPoint.Distance(obj.ServerPosition.To2D()) < obj.BoundingRadius + spellData.Radius)
                    {
                        //sth happens
                    }
                }

                //specialSpellArgs.noProcess = true;
            }
        }
예제 #6
0
        private static void ProcessSpell_OrianaIzunaCommand(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "OrianaIzunaCommand")
            {
                foreach (KeyValuePair<int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                {
                    var info = entry.Value;

                    if (entry.Value.Name == "TheDoomBall")
                    {
                        if (info.usePosition)
                        {
                            SpellDetector.CreateSpellData(hero, info.position, args.End, spellData, null, 0);
                        }
                        else
                        {
                            if (info.obj == null)
                                return;

                            SpellDetector.CreateSpellData(hero, info.obj.Position, args.End, spellData, null, 0);
                        }

                        info.position = args.End;
                        info.usePosition = true;
                    }
                }

                specialSpellArgs.noProcess = true;
            }

            if (spellData.spellName == "OrianaDetonateCommand" || spellData.spellName == "OrianaDissonanceCommand")
            {
                foreach (KeyValuePair<int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                {
                    var info = entry.Value;

                    if (entry.Value.Name == "TheDoomBall")
                    {
                        if (info.usePosition)
                        {
                            Vector3 endPos2 = info.position;
                            SpellDetector.CreateSpellData(hero, endPos2, endPos2, spellData, null, 0);
                        }
                        else
                        {
                            if (info.obj == null)
                                return;

                            Vector3 endPos2 = info.obj.Position;
                            SpellDetector.CreateSpellData(hero, endPos2, endPos2, spellData, null, 0);
                        }
                    }
                }

                specialSpellArgs.noProcess = true;
            }
        }
예제 #7
0
        private static void ProcessSpell_HeimerdingerTurretEnergyBlast(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "HeimerdingerTurretEnergyBlast" || spellData.spellName == "HeimerdingerTurretBigEnergyBlast")
            {
                SpellDetector.CreateSpellData(hero, args.Start, args.End, spellData);

                specialSpellArgs.noProcess = true;
            }
        }
예제 #8
0
        private void ProcessSpell_HeimerdingerW(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "HeimerdingerW")
            {
                //SpellDetector.CreateSpellData(hero, args.Start, args.End, spellData);

                specialSpellArgs.noProcess = true;
            }
        }
예제 #9
0
        private static void ProcessSpell_ThreeWay(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.isThreeWay)
            {
                Vector3 endPos2 = MathUtils.RotateVector(args.Start.LSTo2D(), args.End.LSTo2D(), spellData.angle).To3D();
                SpellDetector.CreateSpellData(hero, args.Start, endPos2, spellData, null, 0, false);

                Vector3 endPos3 = MathUtils.RotateVector(args.Start.LSTo2D(), args.End.LSTo2D(), -spellData.angle).To3D();
                SpellDetector.CreateSpellData(hero, args.Start, endPos3, spellData, null, 0, false);
            }
        }
예제 #10
0
파일: Fizz.cs 프로젝트: aikoy/ezEvade
        private static void ProcessSpell_FizzPiercingStrike(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "FizzPiercingStrike")
            {
                if (args.Target != null && args.Target.IsMe)
                {
                    SpellDetector.CreateSpellData(hero, args.Start, args.End, spellData, null, 0);
                }

                specialSpellArgs.noProcess = true;
            }
        }
예제 #11
0
파일: Ashe.cs 프로젝트: CainWolf/PortAIO
 private static void ProcessSpell_AsheVolley(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.spellName == "Volley")
     {
         for (int i = -4; i < 5; i++)
         {
             Vector3 endPos2 = MathUtils.RotateVector(args.Start.LSTo2D(), args.End.LSTo2D(), i * spellData.angle).To3D();
             if (i != 0)
             {
                 SpellDetector.CreateSpellData(hero, args.Start, endPos2, spellData, null, 0, false);
             }
         }
     }
 }
예제 #12
0
파일: Xerath.cs 프로젝트: CainWolf/PortAIO
        private static void ProcessSpell_XerathArcanopulse2(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (args.SData.Name == "XerathArcanopulseChargeUp")// || spellData.spellName == "xeratharcanopulse2")
            {
                var castTime = -1 * (hero.Spellbook.CastTime - Game.Time) * 1000;

                if (castTime > 0)
                {
                    var dir = (args.End.LSTo2D() - args.Start.LSTo2D()).LSNormalized();
                    var endPos = args.Start.LSTo2D() + dir * Math.Min(spellData.range, 750 + castTime / 2);
                    SpellDetector.CreateSpellData(hero, args.Start, endPos.To3D(), spellData);
                }

                specialSpellArgs.noProcess = true;
            }
        }
예제 #13
0
        private static void ProcessSpell_EkkoR(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName == "EkkoR")
            {
                foreach (var obj in ObjectManager.Get<Obj_AI_Minion>())
                {
                    if (obj != null && obj.IsValid && !obj.IsDead && obj.Name == "Ekko" && obj.IsEnemy)
                    {
                        var blinkPos = obj.ServerPosition.To2D();

                        SpellDetector.CreateSpellData(hero, args.Start, blinkPos.To3D(), spellData);
                    }
                }

                specialSpellArgs.NoProcess = true;
            }
        }
예제 #14
0
파일: Malzahar.cs 프로젝트: aikoy/ezEvade
        private static void ProcessSpell_AlZaharCalloftheVoid(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "AlZaharCalloftheVoid")
            {
                var direction = (args.End.To2D() - args.Start.To2D()).Normalized();
                var pDirection = direction.Perpendicular();
                var targetPoint = args.End.To2D();

                var pos1 = targetPoint - pDirection * spellData.sideRadius;
                var pos2 = targetPoint + pDirection * spellData.sideRadius;

                SpellDetector.CreateSpellData(hero, pos1.To3D(), pos2.To3D(), spellData, null, 0, false);
                SpellDetector.CreateSpellData(hero, pos2.To3D(), pos1.To3D(), spellData, null, 0);

                specialSpellArgs.noProcess = true;
            }
        }
예제 #15
0
        private static void ProcessSpell_LucianQ(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName == "LucianQ")
            {

                if (args.Target.GetType() == typeof(Obj_AI_Base) && ((Obj_AI_Base)args.Target).IsValid())
                {
                    var target = args.Target as Obj_AI_Base;

                    float spellDelay = ((float)(350 - Game.Ping)) / 1000;
                    var heroWalkDir = (target.ServerPosition - target.Position).Normalized();
                    var predictedHeroPos = target.Position + heroWalkDir * target.MoveSpeed * (spellDelay);

                    SpellDetector.CreateSpellData(hero, args.Start, predictedHeroPos, spellData, null, 0);

                    specialSpellArgs.NoProcess = true;
                }
            }
        }
예제 #16
0
파일: Ziggs.cs 프로젝트: HeheheM/Elobuddy-3
        private static void ProcessSpell_ZiggsQ(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "ZiggsQ")
            {
                var startPos = hero.ServerPosition.To2D();
                var endPos = args.End.To2D();
                var dir = (endPos - startPos).Normalized();

                if (endPos.Distance(startPos) > 850)
                {
                    endPos = startPos + dir * 850;
                }

                SpellDetector.CreateSpellData(hero, args.Start, endPos.To3D(), spellData, null, 0, false);

                var endPos2 = endPos + dir * 0.4f * startPos.Distance(endPos);
                SpellDetector.CreateSpellData(hero, args.Start, endPos2.To3D(), spellData, null, 250, false);

                var endPos3 = endPos2 + dir * 0.6f * endPos.Distance(endPos2);
                SpellDetector.CreateSpellData(hero, args.Start, endPos3.To3D(), spellData, null, 800);

                specialSpellArgs.noProcess = true;
            }
        }
예제 #17
0
        private static void ProcessSpell_LuluQ(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName == "LuluQ")
            {
                foreach (KeyValuePair<int, ObjectTrackerInfo> entry in ObjectTracker.ObjTracker)
                {
                    var info = entry.Value;

                    if (entry.Value.Name == "RobotBuddy")
                    {
                        if (info.Obj == null || !info.Obj.IsValid || info.Obj.IsDead || info.Obj.IsVisible)
                        {
                            continue;
                        }
                        else
                        {
                            Vector3 endPos2 = info.Obj.Position.Extend(args.End, spellData.Range).To3DWorld();
                            SpellDetector.CreateSpellData(hero, info.Obj.Position, endPos2, spellData, null, 0, false);
                        }
                    }
                }
            }
        }
예제 #18
0
        private static void ProcessSpell_HeimerdingerTurretEnergyBlast(Obj_AI_Base hero,
                                                                       Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "HeimerdingerTurretEnergyBlast" ||
                spellData.spellName == "HeimerdingerTurretBigEnergyBlast")
            {
                SpellDetector.CreateSpellData(hero, args.Start, args.End, spellData);

                specialSpellArgs.noProcess = true;
            }
        }
예제 #19
0
파일: Twitch.cs 프로젝트: happymaj00r/Port
        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.CopyData();
                    data.spellDelay = hero.AttackCastDelay * 1000;

                    SpellDetector.CreateSpellData(hero, start, end, data);
                }
            }
        }
예제 #20
0
파일: Jayce.cs 프로젝트: aikoy/ezEvade
        private static void ProcessSpell_jayceshockblast(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellDataOld, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellDataOld.spellName == "jayceshockblast")
            {
                SpellData spellData;

                if (SpellDetector.onProcessSpells.TryGetValue("JayceShockBlastWall", out spellData))
                {
                    foreach (var tracker in ObjectTracker.objTracker)
                    {
                        var gateObj = tracker.Value;

                        if (gateObj.Name == "AccelGate")
                        {
                            if (gateObj.obj == null)
                            {
                                DelayAction.Add(0, () => ObjectTracker.objTracker.Remove(tracker.Key));
                            }
                            else
                            {
                                var startPos = args.Start.To2D();
                                var endPos = args.End.To2D();
                                var dir = (endPos - startPos).Normalized();
                                endPos = startPos + dir * spellDataOld.range;

                                var obj = gateObj.obj;

                                Vector2 int1, int2;
                                var intersection =
                                    MathUtils.FindLineCircleIntersections(obj.Position.To2D(), 470, startPos, endPos,
                                    out int1, out int2);
                                var projection = obj.Position.To2D().ProjectOn(startPos, endPos);

                                if (intersection > 0 && projection.IsOnSegment)
                                {
                                    SpellDetector.CreateSpellData(hero, startPos.To3D(), endPos.To3D(), spellData);

                                    specialSpellArgs.noProcess = true;
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #21
0
파일: Ziggs.cs 프로젝트: Burbb/Portaio
        private static void ProcessSpell_ZiggsQ(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "ZiggsQ")
            {
                var startPos = hero.ServerPosition.LSTo2D();
                var endPos   = args.End.LSTo2D();
                var dir      = (endPos - startPos).LSNormalized();

                if (endPos.LSDistance(startPos) > 850)
                {
                    endPos = startPos + dir * 850;
                }

                SpellDetector.CreateSpellData(hero, args.Start, endPos.To3D(), spellData, null, 0, false);

                var endPos2 = endPos + dir * 0.4f * startPos.LSDistance(endPos);
                SpellDetector.CreateSpellData(hero, args.Start, endPos2.To3D(), spellData, null, 250, false);

                var endPos3 = endPos2 + dir * 0.6f * endPos.LSDistance(endPos2);
                SpellDetector.CreateSpellData(hero, args.Start, endPos3.To3D(), spellData, null, 800);

                specialSpellArgs.noProcess = true;
            }
        }
예제 #22
0
        private static void ProcessSpell_LucianQ(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "LucianQ")
            {
                if (args.Target.IsValid <Obj_AI_Base>())
                {
                    var target = args.Target as Obj_AI_Base;

                    float spellDelay       = ((float)(350 - ObjectCache.gamePing)) / 1000;
                    var   heroWalkDir      = (target.ServerPosition - target.Position).Normalized();
                    var   predictedHeroPos = target.Position + heroWalkDir * target.MoveSpeed * (spellDelay);


                    SpellDetector.CreateSpellData(hero, args.Start, predictedHeroPos, spellData, null, 0);

                    specialSpellArgs.noProcess = true;
                }
            }
        }
예제 #23
0
파일: Azir.cs 프로젝트: hehelmaoCx/Ports
        private static void ProcessSpell_AzirSoldier(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "AzirQWrapper")
            {
                foreach (KeyValuePair <int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                {
                    var info = entry.Value;
                    if (info.Name == "AzirQSoldier")
                    {
                        foreach (var objEntry in info.objList)
                        {
                            var soldier = objEntry.Value;
                            if (soldier == null || !soldier.IsValid || soldier.IsDead)
                            {
                                continue;
                            }

                            var maxsliderange = 875 + hero.Distance(soldier.Position);
                            var start         = soldier.Position;
                            var end           = args.End;

                            if (start.Distance(end) > maxsliderange)
                            {
                                end = start + (end - start).Normalized() * maxsliderange;
                            }

                            SpellDetector.CreateSpellData(hero, start, end, spellData, soldier);
                        }
                    }
                }

                specialSpellArgs.noProcess = true;
            }
        }
예제 #24
0
        private static void ProcessSpell_ThreeWay(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.isThreeWay)
            {
                Vector3 endPos2 = MathUtils.RotateVector(args.Start.LSTo2D(), args.End.LSTo2D(), spellData.angle).To3D();
                SpellDetector.CreateSpellData(hero, args.Start, endPos2, spellData, null, 0, false);

                Vector3 endPos3 = MathUtils.RotateVector(args.Start.LSTo2D(), args.End.LSTo2D(), -spellData.angle).To3D();
                SpellDetector.CreateSpellData(hero, args.Start, endPos3, spellData, null, 0, false);
            }
        }
예제 #25
0
        private static void ProcessSpell_JarvanIVDragonStrike(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "JarvanIVDemacianStandard")
            {
                var end = args.End;
                if (args.Start.Distance(end) > spellData.range)
                {
                    end = args.Start + (args.End - args.Start).Normalized() * spellData.range;
                }

                _eSpots.Add(Game.Time, end);
            }

            if (spellData.spellName == "JarvanIVDragonStrike")
            {
                if (SpellDetector.onProcessSpells.TryGetValue("jarvanivdragonstrike2", out spellData))
                {
                    foreach (var entry in _eSpots)
                    {
                        var flagPosition = entry.Value;

                        if (args.End.To2D().Distance(flagPosition) < 300)
                        {
                            var dir         = (flagPosition.To2D() - args.Start.To2D()).Normalized();
                            var endPosition = flagPosition.To2D() + dir * 110;

                            SpellDetector.CreateSpellData(hero, args.Start, endPosition.To3D(), spellData);
                            specialSpellArgs.noProcess = true;
                            return;
                        }
                    }

                    foreach (KeyValuePair <int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                    {
                        var info = entry.Value;

                        if (info.Name == "Beacon" || info.obj.Name == "Beacon")
                        {
                            if (info.usePosition == false && (info.obj == null || !info.obj.IsValid || info.obj.IsDead))
                            {
                                DelayAction.Add(1, () => ObjectTracker.objTracker.Remove(info.obj.NetworkId));
                                continue;
                            }

                            var objPosition = info.usePosition ? info.position.To2D() : info.obj.Position.To2D();

                            if (args.End.To2D().Distance(objPosition) < 300)
                            {
                                var dir         = (objPosition - args.Start.To2D()).Normalized();
                                var endPosition = objPosition + dir * 110;

                                SpellDetector.CreateSpellData(hero, args.Start, endPosition.To3D(), spellData);
                                specialSpellArgs.noProcess = true;
                                return;
                            }
                        }
                    }
                }
            }
        }
예제 #26
0
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs 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.Time] = end;
            }
        }
예제 #27
0
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName != "ZileanQ")
            {
                return;
            }

            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))
                {
                    continue;
                }

                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)
                {
                    continue;
                }

                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;
        }
예제 #28
0
파일: Ashe.cs 프로젝트: yashine59fr/Port
 private static void ProcessSpell_AsheVolley(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.spellName == "Volley")
     {
         for (int i = -4; i < 5; i++)
         {
             Vector3 endPos2 = MathUtils.RotateVector(args.Start.To2D(), args.End.To2D(), i * spellData.angle).To3D();
             if (i != 0)
             {
                 SpellDetector.CreateSpellData(hero, args.Start, endPos2, spellData, null, 0, false);
             }
         }
     }
 }
예제 #29
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);
                    }
                }

                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;
            }
        }
예제 #30
0
파일: Jayce.cs 프로젝트: HeheheM/Elobuddy-3
 private static void ProcessSpell_jayceshockblast(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.spellName == "jayceshockblast")
     {
     }
 }
예제 #31
0
 private static void ProcessSpell_jayceshockblast(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.SpellName == "jayceshockblast")
     {
     }
 }
예제 #32
0
        private static void ProcessSpell_XerathArcanopulse2(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (args.SpellData.Name == "XerathArcanopulseChargeUp") // || spellData.spellName == "xeratharcanopulse2")
            {
                // Not sure with CastEndTime
                var castTime = -1 * (hero.SpellBook.CastEndTime - Game.ClockTime) * 1000;

                if (castTime > 0)
                {
                    var dir    = (args.End.To2D() - args.Start.To2D()).Normalized();
                    var endPos = args.Start.To2D() + dir * Math.Min(spellData.Range, 750 + castTime / 2);
                    SpellDetector.CreateSpellData(hero, args.Start, endPos.To3D(), spellData);
                }

                specialSpellArgs.NoProcess = true;
            }
        }
예제 #33
0
파일: Fizz.cs 프로젝트: happymaj00r/Port
        private static void ProcessSpell_FizzPiercingStrike(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "FizzPiercingStrike")
            {
                if (args.Target != null && args.Target.IsMe)
                {
                    SpellDetector.CreateSpellData(hero, args.Start, args.End, spellData, null, 0);
                }

                specialSpellArgs.noProcess = true;
            }
        }
예제 #34
0
파일: Orianna.cs 프로젝트: hama1/Port
        private static void ProcessSpell_OrianaIzunaCommand(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData,
                                                            SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "OrianaIzunaCommand")
            {
                foreach (KeyValuePair <int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                {
                    var info = entry.Value;

                    if (entry.Value.Name == "TheDoomBall")
                    {
                        if (info.usePosition)
                        {
                            SpellDetector.CreateSpellData(hero, info.position, args.End, spellData, null, 0, false);
                            SpellDetector.CreateSpellData(hero, info.position, args.End,
                                                          spellData, null, 150, true, SpellType.Circular, false, spellData.secondaryRadius);
                        }
                        else
                        {
                            if (info.obj == null || !info.obj.IsValid || info.obj.IsDead)
                            {
                                return;
                            }

                            SpellDetector.CreateSpellData(hero, info.obj.Position, args.End, spellData, null, 0, false);
                            SpellDetector.CreateSpellData(hero, info.obj.Position, args.End,
                                                          spellData, null, 150, true, SpellType.Circular, false, spellData.secondaryRadius);
                        }

                        info.position    = args.End;
                        info.usePosition = true;
                    }
                }

                specialSpellArgs.noProcess = true;
            }

            if (spellData.spellName == "OrianaDetonateCommand" || spellData.spellName == "OrianaDissonanceCommand")
            {
                foreach (KeyValuePair <int, ObjectTrackerInfo> entry in ObjectTracker.objTracker)
                {
                    var info = entry.Value;

                    if (entry.Value.Name == "TheDoomBall")
                    {
                        if (info.usePosition)
                        {
                            Vector3 endPos2 = info.position;
                            SpellDetector.CreateSpellData(hero, endPos2, endPos2, spellData, null, 0);
                        }
                        else
                        {
                            if (info.obj == null || !info.obj.IsValid || info.obj.IsDead)
                            {
                                return;
                            }

                            Vector3 endPos2 = info.obj.Position;
                            SpellDetector.CreateSpellData(hero, endPos2, endPos2, spellData, null, 0);
                        }
                    }
                }

                specialSpellArgs.noProcess = true;
            }
        }
예제 #35
0
 private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.spellName == "SionR")
     {
         spellData.projectileSpeed  = hero.MoveSpeed;
         specialSpellArgs.spellData = spellData;
     }
 }
예제 #36
0
파일: Graves.cs 프로젝트: hehelmaoCx/Ports
        private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs 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);
            }
        }