Exemplo n.º 1
0
 public void Execute(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
 {
     /*if (!sender.IsEnemy)
      *  return;
      *
      * if (SoulBoundAlly == null)
      *  return;
      *
      * if ((!(sender is Obj_AI_Hero) || args.SpellData.ConsideredAsAutoAttack) && args.Target != null &&
      *  args.Target.NetworkId == SoulBoundAlly.NetworkId)
      * {
      *  IncDamage[
      *      SoulBoundAlly.ServerPosition.Distance(sender.ServerPosition) / args.SpellData.MissileSpeed +
      *      Game.TickCount] = (float) sender.GetAutoAttackDamage(SoulBoundAlly);
      * }
      * else
      * {
      *  var attacker = sender as Obj_AI_Hero;
      *  if (attacker == null)
      *      return;
      *
      *  var slot = attacker.GetSpellSlotFromName(args.SpellData.Name);
      *
      *  if (slot == SpellSlot.Unknown)
      *      return;
      *
      *  //TODO summoner spells damage
      *  if (slot == SpellSlot.Q || slot == SpellSlot.W || slot == SpellSlot.E || slot == SpellSlot.R)
      *      if (args.Target != null && args.Target.NetworkId == SoulBoundAlly.NetworkId ||
      *          args.End.Distance(SoulBoundAlly.ServerPosition) <
      *          Math.Pow(args.SpellData.LineWidth, 2))
      *          InstDamage[Game.TickCount + 2] = (float) attacker.GetSpellDamage(SoulBoundAlly, slot);
      * }*/
 }
Exemplo n.º 2
0
        private static void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs Args)
        {
            try
            {
                if (sender.IsMe)
                {
                    if (Args.SpellData.Name.Contains("KatarinaW"))
                    {
                        lastWTime = Game.TickCount;
                    }

                    if (Args.SpellData.Name.Contains("KatarinaE"))
                    {
                        lastETime = Game.TickCount;

                        if (MiscMenu["FlowersKatarina.MiscMenu.OneKeyEW"].As <MenuKeyBind>().Enabled&& W.Ready)
                        {
                            W.Cast();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in MyEventManager.OnProcessSpellCast." + ex);
            }
        }
Exemplo n.º 3
0
 private static void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs Args)
 {
     try
     {
         if (sender.IsMe && Orbwalker.Mode == OrbwalkingMode.Combo)
         {
             RivenDoubleCastEvent(Args.SpellData.Name, BurstMenu["FlowersRiven.BurstMenu.Key"].As <MenuKeyBind>().Enabled);
         }
         else if (sender.IsEnemy && sender.Type == GameObjectType.obj_AI_Hero &&
                  !string.IsNullOrEmpty(Args.SpellData.Name) && !Args.SpellData.Name.Contains("attack"))
         {
             if (EvadeMenu["FlowersRiven.EvadeMenu.Use E"].Enabled && E.Ready)
             {
                 if (Args.SpellData.TargettingType == 1 && Args.Target != null && Args.Target.IsMe)
                 {
                     E.Cast(Game.CursorPos);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Error in MyEventManager.OnProcessSpellCast." + ex);
     }
 }
Exemplo n.º 4
0
 private static void ObjAiBaseOnOnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs e)
 {
     if (sender.IsMe && e.SpellSlot == SpellSlot.E)
     {
         RushToTarget = true;
     }
 }
Exemplo n.º 5
0
        internal static void Obj_AI_Base_OnStealth(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            #region Stealth

            var attacker = sender as Obj_AI_Hero;
            if (attacker == null || attacker.IsAlly || !attacker.IsValid)
            {
                return;
            }

            foreach (var hero in ZLib.GetUnits().Where(h => h.Instance.Distance(attacker) <= 1000))
            {
                foreach (var entry in ZLib.CachedSpells.Where(s => s.EventTypes.Contains(EventType.Stealth)))
                {
                    if (entry.SpellName.ToLower() == args.SpellData.Name.ToLower())
                    {
                        EmulateDamage(sender, hero, new Gamedata {
                            SpellName = "Stealth"
                        }, EventType.Stealth, "process.onstealth");
                        break;
                    }
                }
            }

            #endregion
        }
Exemplo n.º 6
0
        //private static void ImplementationOnPostAttack(object o, PostAttackEventArgs e)
        //{
        //    if (e.Target == null || !e.Target.IsValid)
        //        return;
        //    if (e.Target.Name == "Barrel" && Game.TickCount - LastAutoAttack >= 500)
        //    {
        //        LastAutoAttack = Game.TickCount;
        //        var barrel = (Barrel)e.Target;
        //        if (barrel != null)
        //        {
        //            if (barrel.Health > 1)
        //                barrel.Decay(Game.Ping);
        //        }
        //    }
        //}

        private static void ObjAiBaseOnOnProcessAutoAttack(Obj_AI_Base obj, Obj_AI_BaseMissileClientDataEventArgs e)
        {
            if (e.Target == null || !e.Target.IsValid)
            {
                return;
            }
            if (e.Target.Name == "Barrel")
            {
                var barrel = (Barrel)e.Target;
                if (barrel != null)
                {
                    if (barrel.Health > 1)
                    {
                        if (e.Sender.IsMelee)
                        {
                            barrel.Decay((int)((Player.AttackCastDelay * 1000) + Game.Ping));
                        }
                        else
                        {
                            barrel.Decay((int)(e.Start.Distance(e.End) / e.SpellData.MissileSpeed) + Game.Ping);
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        private static void Obj_AI_Base_OnProcessAutoAttack(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs e)
        {
            //Ignore auto attacks happening too far away
            if (sender == null || !sender.IsValidTarget(4000, true) || sender is Obj_AI_Hero)
            {
                return;
            }

            //Only process for minion targets
            var targetM = e.Target as Obj_AI_Minion;

            if (targetM == null)
            {
                return;
            }


            AutoAttack attack;

            if (sender.IsMelee)
            {
                attack = new MeleeAttack(sender, targetM, 0);
            }

            else
            {
                attack = new RangedAttack(sender, targetM, 0);
            }

            Attacks.AddAttack(attack);
        }
Exemplo n.º 8
0
 private static void ObjAiBaseOnOnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs e)
 {
     if (sender.IsMe && e.SpellSlot == SpellSlot.R)
     {
         LastUltTime = Game.TickCount;
     }
 }
Exemplo n.º 9
0
 public static void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
 {
     if (sender.IsMe && args.SpellSlot == SpellSlot.R)
     {
         LastR = Game.TickCount;
     }
 }
Exemplo n.º 10
0
 private static void Obj_AI_Base_OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
 {
     if (sender.IsMe && args.SpellData.Name.ToLower() == "jhinr")
     {
         _rPosCast = args.End;
     }
 }
Exemplo n.º 11
0
 /// <summary>
 ///     Called on do-cast.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="args">The <see cref="Obj_AI_BaseMissileClientDataEventArgs" /> instance containing the event data.</param>
 public void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
 {
     if (sender.IsMe)
     {
         /// <summary>
         ///     Initializes the orbwalkingmodes.
         /// </summary>
         switch (ImplementationClass.IOrbwalker.Mode)
         {
         case OrbwalkingMode.Combo:
             switch (args.SpellData.Name)
             {
             //case "CaitlynEntrapment":
             case "CaitlynEntrapmentMissile":
                 if (SpellClass.W.Ready &&
                     MenuClass.Spells["w"]["triplecombo"].As <MenuBool>().Enabled)
                 {
                     var bestTarget = GameObjects.EnemyHeroes
                                      .Where(t => !Invulnerable.Check(t) && t.IsValidTarget(SpellClass.W.Range))
                                      .MinBy(o => o.Distance(args.End));
                     if (bestTarget != null &&
                         CanTrap(bestTarget))
                     {
                         SpellClass.W.Cast(UtilityClass.Player.ServerPosition.Extend(bestTarget.ServerPosition, UtilityClass.Player.Distance(bestTarget) + bestTarget.BoundingRadius));
                         UpdateEnemyTrapTime(bestTarget.NetworkId);
                     }
                 }
                 break;
             }
             break;
         }
     }
 }
Exemplo n.º 12
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.º 13
0
        private static void AutoAttack(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            var attack = sender as Obj_AI_Hero;
            var target = args.Target as Obj_AI_Hero;

            if (attack != null && attack.IsEnemy && attack.IsHero && Main["combo"]["autoW"].As <MenuSliderBool>().Enabled&& Player.ManaPercent() >= Main["combo"]["autoW"].As <MenuSliderBool>().Value&& W.Ready)
            {
                foreach (var ally in GameObjects.AllyHeroes.Where(x => !x.IsDead && x.IsMe))
                {
                    if (target != null)
                    {
                        foreach (var sword in GameObjects.AllGameObjects)
                        {
                            if (sword.Name == "ShenSpiritUnit" && ally.Distance(sword.Position) <= 350 && Main["combo"]["autoWS"].As <MenuBool>().Enabled)
                            {
                                W.Cast();
                            }
                            else if (!Main["combo"]["autoWS"].As <MenuBool>().Enabled&& Player.CountEnemyHeroesInRange(650) >= 1)
                            {
                                W.Cast();
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 14
0
        private void Game_OnProcessSpell(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (!sender.IsMe)
            {
                return;
            }

            string name;

            if (SpellDetector.channeledSpells.TryGetValue(args.SpellData.Name.ToLower(), out name))
            {
                isChanneling    = true;
                channelPosition = myHero.ServerPosition.To2D();
            }

            if (ObjectCache.menuCache.cache["CalculateWindupDelay"].As <MenuBool>().Enabled)
            {
                var castTime = (sender.SpellBook.CastEndTime - Game.ClockTime) * 1000;

                if (castTime > 0 && args.SpellData.ConsideredAsAutoAttack &&
                    Math.Abs(castTime - myHero.AttackCastDelay * 1000) > 1)
                {
                    lastWindupTime = EvadeUtils.TickCount + castTime - Game.Ping / 2;

                    if (isDodging)
                    {
                        SpellDetector_OnProcessDetectedSpells(); //reprocess
                    }
                }
            }
        }
Exemplo n.º 15
0
 /// <summary>
 ///     Called on do-cast.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="args">The <see cref="Obj_AI_BaseMissileClientDataEventArgs" /> instance containing the event data.</param>
 private static void OnProcessAutoAttack(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
 {
     if (sender is Obj_AI_Hero)
     {
         Console.WriteLine("Autoattack Name: " + args.SpellData.Name);
     }
 }
Exemplo n.º 16
0
 /// <summary>
 ///     Called while processing spellcast operations.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="args">The <see cref="Obj_AI_BaseMissileClientDataEventArgs" /> instance containing the event data.</param>
 public void OnPerformCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
 {
     if (sender.IsMe)
     {
         switch (args.SpellSlot)
         {
         /// <summary>
         ///     The W->E Combo Logic.
         /// </summary>
         case SpellSlot.W:
             if (SpellClass.E.Ready)
             {
                 switch (ImplementationClass.IOrbwalker.Mode)
                 {
                 case OrbwalkingMode.Combo:
                     if (MenuClass.Spells["e"]["combo"].As <MenuBool>().Enabled)
                     {
                         SpellClass.E.Cast(args.End);
                     }
                     break;
                 }
             }
             break;
         }
     }
 }
Exemplo n.º 17
0
        private void Game_OnProcessSpell(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (!sender.IsMe)
            {
                return;
            }

            if (SpellDetector.ChanneledSpells.TryGetValue(args.SpellData.Name.ToLower(), out _))
            {
                IsChanneling    = true;
                ChannelPosition = MyHero.ServerPosition.To2D();
            }

            if (!ObjectCache.MenuCache.Cache["CalculateWindupDelay"].As <MenuBool>().Enabled)
            {
                return;
            }

            var castTime = (sender.SpellBook.CastEndTime - Game.ClockTime) * 1000;

            if (!(castTime > 0) || !args.SpellData.ConsideredAsAutoAttack || !(Math.Abs(castTime - MyHero.AttackCastDelay * 1000) > 1))
            {
                return;
            }

            LastWindupTime = Environment.TickCount + castTime - Game.Ping / 2f;

            if (IsDodging)
            {
                SpellDetector_OnProcessDetectedSpells();
            }
        }
Exemplo n.º 18
0
 private static void Obj_AI_Hero_OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs e)
 {
     if (sender.IsMelee && e.SpellSlot == SpellSlot.R && e.SpellData.Name == "OrnnR")
     {
         LastRCast = Game.TickCount;
     }
 }
Exemplo n.º 19
0
 private static void Obj_AI_Base_OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs e)
 {
     if (sender.IsMe && e.SpellSlot == SpellSlot.E)
     {
         ECasted = Game.TickCount;
     }
 }
Exemplo n.º 20
0
 private void ProcessSpell_HeimerdingerW(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
 {
     if (spellData.SpellName == "HeimerdingerW")
     {
         specialSpellArgs.NoProcess = true;
     }
 }
Exemplo n.º 21
0
        private static void Obj_AI_Base_OnProcessAutoAttack(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (sender == null || args.Target == null)
            {
                return;
            }

            var bTarget = args.Target as Obj_AI_Base;

            if (bTarget == null)
            {
                return;
            }

            var tSender = sender as Obj_AI_Turret;

            if (tSender == null)
            {
                return;
            }

            if (!Turrets.ContainsKey(tSender.NetworkId))
            {
                return;
            }

            Turrets[tSender.NetworkId]?.OnAttack(tSender, bTarget, args);
        }
Exemplo n.º 22
0
        private static void OnProcessAutoAttack(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs Args)
        {
            if (sender == null || sender.Type != GameObjectType.obj_AI_Hero || !sender.IsEnemy || !sender.IsMelee)
            {
                return;
            }

            if (string.IsNullOrEmpty(Args.SpellData.Name) || Args.Target == null || !Args.Target.IsMe ||
                Menu["Gapcloser." + sender.UnitSkinName.ToLower()].As <Menu>()["Gapcloser." + sender.UnitSkinName.ToLower() + ".Melee"] == null ||
                !Menu["Gapcloser." + sender.UnitSkinName.ToLower()].As <Menu>()["Gapcloser." + sender.UnitSkinName.ToLower() + ".Melee"].As <MenuSliderBool>().Enabled)
            {
                return;
            }

            if (!Gapclosers.ContainsKey(sender.NetworkId))
            {
                Gapclosers.Add(sender.NetworkId, new GapcloserArgs());
            }

            Gapclosers[sender.NetworkId].Unit          = (Obj_AI_Hero)sender;
            Gapclosers[sender.NetworkId].Slot          = SpellSlot.Unknown;
            Gapclosers[sender.NetworkId].Type          = SpellType.Melee;
            Gapclosers[sender.NetworkId].SpellName     = Args.SpellData.Name;
            Gapclosers[sender.NetworkId].StartPosition = Args.Start;
            Gapclosers[sender.NetworkId].EndPosition   = Args.End;
            Gapclosers[sender.NetworkId].StartTick     = Game.TickCount;
        }
Exemplo n.º 23
0
        private static void ProcessSpell_ZedShuriken(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args,
                                                     SpellData spellData,
                                                     SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.spellName == "ZedQ")
            {
                foreach (var entry in ObjectTracker.objTracker)
                {
                    var info = entry.Value;

                    if (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));
                        }
                        else
                        {
                            Vector3 endPos2;
                            if (info.usePosition == false)
                            {
                                endPos2 = info.obj.Position.Extend(args.End, spellData.range);
                                SpellDetector.CreateSpellData(hero, info.obj.Position, endPos2, spellData, null, 0,
                                                              false);
                            }
                            else
                            {
                                endPos2 = info.position.Extend(args.End, spellData.range);
                                SpellDetector.CreateSpellData(hero, info.position, endPos2, spellData, null, 0, false);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 24
0
        public void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (sender is Obj_AI_Turret && args.Target.IsMe && E.Ready && Champions.Fizz.MenuClass.miscoptionsmenu["UseETower"].Enabled)
            {
                E.Cast(Game.CursorPos);
            }

            if (!sender.IsMe)
            {
                return;
            }

            if (args.SpellData.Name == "FizzQ")
            {
                /*if (IOrbwalker.Mode == OrbwalkingMode.Combo)
                 * {
                 *  DelayAction.Queue((int)(sender.SpellBook.CastEndTime - Game.ClockTime) + Game.Ping / 2 + 250, () => W.Cast());
                 * }*/

                if (IOrbwalker.Mode == OrbwalkingMode.Mixed && E.Ready)
                {
                    //THEN HARASS. SET LAST POSITION BEFORE CASTING.
                    LastHarassPos = Player.ServerPosition;
                }
            }

            if (args.SpellData.Name == "FizzETwo" || args.SpellData.Name == "FizzEBuffer")
            {
                //Get rid of last pos since we are landing now. For next harass.
                LastHarassPos = null;
            }
        }
Exemplo n.º 25
0
        private static void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs Args)
        {
            if (sender == null || !sender.IsValid ||
                sender.Type != GameObjectType.obj_AI_Hero || !sender.IsEnemy ||
                string.IsNullOrEmpty(Args.SpellData.Name) ||
                Args.SpellData.Name.ToLower().Contains("attack") || Args.SpellData.Name.ToLower().Contains("crit"))
            {
                return;
            }

            if (Spells.All(
                    x => !string.Equals(x.SpellName, Args.SpellData.Name, StringComparison.CurrentCultureIgnoreCase)) ||
                !Menu["Gapcloser" + sender.UnitSkinName.ToLower()].As <Menu>()
                ["Gapcloser" + sender.UnitSkinName.ToLower() + "." + Args.SpellData.Name.ToLower()].As <MenuBool>().Enabled)
            {
                return;
            }

            if (!Gapclosers.ContainsKey(sender.NetworkId))
            {
                Gapclosers.Add(sender.NetworkId, new GapcloserArgs());
            }

            Gapclosers[sender.NetworkId].Unit          = (Obj_AI_Hero)sender;
            Gapclosers[sender.NetworkId].Slot          = Args.SpellSlot;
            Gapclosers[sender.NetworkId].Type          = Args.Target != null ? SpellType.Targeted : SpellType.SkillShot;
            Gapclosers[sender.NetworkId].SpellName     = Args.SpellData.Name;
            Gapclosers[sender.NetworkId].StartPosition = Args.Start;
            Gapclosers[sender.NetworkId].EndPosition   = Args.End;
            Gapclosers[sender.NetworkId].StartTick     = Game.TickCount;
            Gapclosers[sender.NetworkId].HaveShield    = HaveShiledBuff(sender);
        }
Exemplo n.º 26
0
        public static void OnProcessSpellCast(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (!MenuConfig.Combo["Dodge"].Enabled || sender == null || !sender.IsHero || !sender.IsEnemy)
            {
                return;
            }

            var missile = SpellDatabase.GetByName(args.SpellData.Name);

            if (missile == null)
            {
                return;
            }

            var minion = GameObjects.Minions.Where(x => x.Distance(Global.Player) <= SpellConfig.E.Range && !x.HasBuff("YasuoDashWrapper")).
                         OrderBy(x => x.Distance(Game.CursorPos)).
                         FirstOrDefault();

            if (args.End.Distance(Global.Player.ServerPosition) <= 140 && SpellConfig.E.Ready && minion != null)
            {
                SpellConfig.E.CastOnUnit(minion);
            }

            if (args.End.Distance(Global.Player.ServerPosition) <= 300 && SpellConfig.W.Ready && missile.CollisionObjects.Any(x => x.HasFlag(CollisionableObjects.YasuoWall)))
            {
                SpellConfig.W.Cast(sender.ServerPosition);
            }
        }
Exemplo n.º 27
0
        private static void OnProcessAutoAttackDelayEvent(Obj_AI_BaseMissileClientDataEventArgs Args)
        {
            var target = Args.Target as AttackableUnit;

            if (target == null || target.IsDead || !target.IsValidTarget())
            {
                return;
            }

            switch (Orbwalker.Mode)
            {
            case OrbwalkingMode.Combo:
                if (BurstMenu["FlowersRiven.BurstMenu.Key"].As <MenuKeyBind>().Enabled)
                {
                    BurstAfterAttackEvent();
                }
                else
                {
                    ComboAfterAttackEvent(target);
                }
                break;

            case OrbwalkingMode.Mixed:
                HarassAfterAttackEvent(target);
                break;

            case OrbwalkingMode.Laneclear:
                ClearFarmAfterAttackEvent(target);
                break;
            }
        }
Exemplo n.º 28
0
        private static void ProcessSpell_AzirSoldier(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs)
        {
            if (spellData.SpellName == "AzirQWrapper")
            {
                foreach (var 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 maxMenuSliderange = 875 + hero.Distance(soldier.Position);
                            var start             = soldier.Position;
                            var end = args.End;

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

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

                specialSpellArgs.NoProcess = true;
            }
        }
Exemplo n.º 29
0
        private static void ProcessSpell_OrianaRedactCommand(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (!hero.IsValid && hero.Type == GameObjectType.obj_AI_Hero)
            {
                return;
            }

            var champ = (Obj_AI_Hero)hero;

            if (champ.ChampionName == "Orianna" && champ.CheckTeam())
            {
                if (args.SpellData.Name == "OrianaRedactCommand")
                {
                    foreach (var entry in ObjectTracker.ObjTracker)
                    {
                        var info = entry.Value;

                        if (entry.Value.Name == "TheDoomBall")
                        {
                            info.UsePosition = false;
                            info.Obj         = args.Target;
                        }
                    }
                }
            }
        }
Exemplo n.º 30
0
        private static void OnProcessAutoAttack(Obj_AI_Base sender, Obj_AI_BaseMissileClientDataEventArgs args)
        {
            if (sender == null || !sender.IsHero || !sender.IsEnemy || !sender.IsValidTarget())
            {
                return;
            }

            if (string.IsNullOrEmpty(args.SpellData.Name) ||
                args.Target == null ||
                !args.Target.IsMe ||
                !Menu[sender.UnitSkinName][sender.UnitSkinName + ".Melee"].Enabled)
            {
                return;
            }

            if (!Gapclosers.ContainsKey(sender.NetworkId))
            {
                Gapclosers.Add(sender.NetworkId, new GapcloserArgs());
            }

            var gapclosers = Gapclosers[sender.NetworkId];

            gapclosers.Unit = (Obj_AI_Hero)sender;
            gapclosers.Slot = SpellSlot.Unknown;
            gapclosers.Type = SpellType.Melee;

            gapclosers.SpellName = args.SpellData.Name;

            gapclosers.StartPosition = args.Start;
            gapclosers.EndPosition   = args.End;
            gapclosers.StartTick     = Game.TickCount;
        }