static void Obj_AI_Hero_OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!sender.IsMe || Player.IsDead) { return; } if ((Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo && AIO_Menu.Champion.Combo.UseQ || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && AIO_Menu.Champion.Harass.UseQ)) { if (args.SData.Name == Player.Spellbook.GetSpell(SpellSlot.W).Name&& HeroManager.Enemies.Any(x => x.IsValidTarget(Q.Range + 300))) { var Qtarget = TargetSelector.GetTarget(Q.Range + 300, Q.DamageType); if (Qtarget != null) { Q.AOECast(Qtarget); } } } }
internal static void SC(this Spell spell, float ExtraTargetDistance = 150f, float ALPHA = float.MaxValue, float Cost = 1f, float BombRadius = 0f, float 난사 = 0f) // { // var target = TargetSelector.GetTarget(Math.Max(spell.Range, Orbwalking.GetRealAutoAttackRange(Player)), (spell.DamageType), true); // bool HM = true; bool LM = true; bool JM = false; bool LHM = false; if (Cost == 1f) { HM = (Menu.Item("Harass.If Mana >", true) != null ? Player.ManaPercent > MenuProvider.Champion.Harass.IfMana : true); LM = (Menu.Item("Laneclear.If Mana >", true) != null ? Player.ManaPercent > MenuProvider.Champion.Laneclear.IfMana : true); JM = (Menu.Item("Jungleclear.If Mana >", true) != null ? Player.ManaPercent > MenuProvider.Champion.Jungleclear.IfMana : true); LHM = (Menu.Item("Lasthit.If Mana >", true) != null ? Player.ManaPercent > MenuProvider.Champion.Lasthit.IfMana : true); } if (target != null) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo && Menu.Item("Combo.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Combo.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady()) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, target, ExtraTargetDistance, ALPHA, false, BombRadius); } else if (spell.Type == SkillshotType.SkillshotCircle) { var ctarget = TargetSelector.GetTarget(spell.Range + spell.Width / 2, spell.DamageType, true); CCast(spell, ctarget); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.ConeCast(target, ExtraTargetDistance, ALPHA); } } else if (spell.IsChargedSpell) { if (!spell.IsCharging) { spell.StartCharging(); } } else { if (false == spell.IsSkillshot) { spell.Cast(target); } else { spell.AOECast(target); } } } } else if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && Menu.Item("Harass.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Harass.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && HM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, target, ExtraTargetDistance, ALPHA, false, BombRadius); } else if (spell.Type == SkillshotType.SkillshotCircle) { var ctarget = TargetSelector.GetTarget(spell.Range + spell.Width / 2, spell.DamageType, true); CCast(spell, ctarget); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.ConeCast(target, ExtraTargetDistance, ALPHA); } } else if (spell.IsChargedSpell) { if (!spell.IsCharging) { spell.StartCharging(); } } else { if (false == spell.IsSkillshot) { spell.Cast(target); } else { spell.AOECast(target); } } } } else if (Menu.Item("Harass.Auto Harass", true) != null) { if (Menu.Item("Harass.Auto Harass", true).GetValue <bool>() && Menu.Item("Harass.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Harass.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && HM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, target, ExtraTargetDistance, ALPHA, false, BombRadius); } else if (spell.Type == SkillshotType.SkillshotCircle) { var ctarget = TargetSelector.GetTarget(spell.Range + spell.Width / 2, spell.DamageType, true); CCast(spell, ctarget); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.ConeCast(target, ExtraTargetDistance, ALPHA); } } /*else if(spell.IsChargedSpell) * { 오토하레스 차징 스킬은 음 일단 잠시 보류. * if(!spell.IsCharging) * spell.StartCharging(); * }*/ else { if (false == spell.IsSkillshot) { spell.Cast(target); } else { spell.AOECast(target); } } } } } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var Minions = MinionManager.GetMinions(Math.Max(spell.Range, Orbwalking.GetRealAutoAttackRange(Player)), MinionTypes.All, MinionTeam.Enemy); var Mobs = MinionManager.GetMinions(Math.Max(spell.Range, Orbwalking.GetRealAutoAttackRange(Player)), MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth); if (Mobs.Count > 0 && Menu.Item("Jungleclear.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Jungleclear.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && JM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, Mobs[0], ExtraTargetDistance, ALPHA, false, BombRadius); } else if (spell.Type == SkillshotType.SkillshotCircle) { CCast(spell, Mobs[0]); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.ConeCast(Mobs[0], ExtraTargetDistance, ALPHA); } } else if (spell.IsChargedSpell) { if (!spell.IsCharging) { spell.StartCharging(); } } else { if (false == spell.IsSkillshot) { spell.Cast(Mobs[0]); } else { spell.AOECast(Mobs[0]); } } } } if (Minions.Count > 0 && Menu.Item("Laneclear.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Laneclear.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && LM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { if (ALPHA > 1f) { LCast(spell, Minions[0], ExtraTargetDistance, ALPHA, false, BombRadius); } else { LH(spell, ALPHA); } } else if (spell.Type == SkillshotType.SkillshotCircle) { CCast(spell, Minions[0]); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.ConeCast(Minions[0], ExtraTargetDistance, ALPHA); } } else if (spell.IsChargedSpell) { if (!spell.IsCharging && Minions.Count() > 2) { spell.StartCharging(); } } else { if (난사 == 0f) { LH(spell); } else { if (false == spell.IsSkillshot) { spell.Cast(Minions[0]); } else { spell.AOECast(Minions[0]); } } } } } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit && Menu.Item("Lasthit.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Lasthit.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && LHM) { var Mini = MinionManager.GetMinions(Math.Max(Orbwalking.GetRealAutoAttackRange(Player), spell.Range), MinionTypes.All, MinionTeam.NotAlly); if (Mini.Count() > 0) { LH(spell, ALPHA); } } } if (spell.IsChargedSpell && spell.IsCharging) // 따로 해놔야 스킬 써서 마나가 ifMana보다 적어졌거나 타겟이 사라져 새 타겟이 필요할때 혹은 스킬을 직접 캐스팅했을 때에도 대응 가능. { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) { var TG = TargetSelector.GetTarget(spell.ChargedMaxRange, spell.DamageType); //타겟을 다시 잡게 지정해야함. 그래야 타겟이 사라져 새 타겟을 잡아야 할 때 멍때리고 움직이지도 못하는 병신같은 일 방지 가능. if (TG != null) { spell.LCast(TG, ExtraTargetDistance, ALPHA, false, BombRadius); } /*else 있어도 상관은 없지만. Flee 모드 추가함. * { * Player.Spellbook.CastSpell(SpellSlot.Recall); //귀환으로 차지 취소. * EloBuddy.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPos); * }*/ } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var M = MinionManager.GetMinions(Player.ServerPosition, spell.ChargedMaxRange, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth); var MI = MinionManager.GetMinions(Player.ServerPosition, spell.ChargedMaxRange, MinionTypes.All, MinionTeam.Enemy, MinionOrderTypes.MaxHealth); var Vec = spell.GetLineFarmLocation(MI); var Vec2 = spell.GetLineFarmLocation(M); if (MI.Count() >= 1 && Vec.MinionsHit >= Math.Min(MI.Count(), 7) && Vec.Position.IsValid()) { spell.Cast(Vec.Position); } if (M.Count() >= 1 && Vec2.MinionsHit >= Math.Min(M.Count(), 4) && Vec2.Position.IsValid()) { spell.Cast(Vec2.Position); } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Flee) { Player.Spellbook.CastSpell(SpellSlot.Recall); //귀환으로 차지 취소. EloBuddy.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPos); } } }
internal static void SC(Spell spell, float ExtraTargetDistance = 150f, float ALPHA = float.MaxValue, float Cost = 1f) // { // var target = TargetSelector.GetTarget(spell.Range, spell.DamageType, true); // bool HM = true; bool LM = true; bool LHM = false; if (Cost == 1f) { HM = getManaPercent(Player) > AIO_Menu.Champion.Harass.IfMana; LM = getManaPercent(Player) > AIO_Menu.Champion.Laneclear.IfMana; LHM = getManaPercent(Player) > AIO_Menu.Champion.Jungleclear.IfMana; } else { HM = true; LM = true; LHM = true; } if (target != null) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo && Menu.Item("Combo.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Combo.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady()) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, target, ExtraTargetDistance, ALPHA); } else if (spell.Type == SkillshotType.SkillshotCircle) { var ctarget = TargetSelector.GetTarget(spell.Range + spell.Width / 2, spell.DamageType, true); CCast(spell, ctarget); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.Cast(target); } } else if (!spell.IsSkillshot) { spell.Cast(target); } else { spell.AOECast(target); } } } else if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && Menu.Item("Harass.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Harass.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && HM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, target, ExtraTargetDistance, ALPHA); } else if (spell.Type == SkillshotType.SkillshotCircle) { var ctarget = TargetSelector.GetTarget(spell.Range + spell.Width / 2, spell.DamageType, true); CCast(spell, ctarget); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.Cast(target); } } else if (!spell.IsSkillshot) { spell.Cast(target); } else { spell.AOECast(target); } } } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var Minions = MinionManager.GetMinions(spell.Range, MinionTypes.All, MinionTeam.Enemy); var Mobs = MinionManager.GetMinions(spell.Range, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth); if (Mobs.Count > 0 && Menu.Item("Jungleclear.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Jungleclear.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && LHM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { LCast(spell, Mobs[0], ExtraTargetDistance, ALPHA); } else if (spell.Type == SkillshotType.SkillshotCircle) { CCast(spell, Mobs[0]); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.Cast(Mobs[0]); } } else if (!spell.IsSkillshot) { spell.Cast(Mobs[0]); } else { spell.AOECast(Mobs[0]); } } } if (Minions.Count > 0 && Menu.Item("Laneclear.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Laneclear.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && LM) { if (spell.IsSkillshot) { if (spell.Type == SkillshotType.SkillshotLine) { if (ALPHA > 1f) { LCast(spell, Minions[0], ExtraTargetDistance, ALPHA); } else { LH(spell, ALPHA); } } else if (spell.Type == SkillshotType.SkillshotCircle) { CCast(spell, Minions[0]); } else if (spell.Type == SkillshotType.SkillshotCone) { spell.Cast(Minions[0]); } } else if (!spell.IsSkillshot) { spell.Cast(Minions[0]); } else { spell.AOECast(Minions[0]); } } } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit && Menu.Item("Lasthit.Use " + spell.Slot.ToString(), true) != null) { if (Menu.Item("Lasthit.Use " + spell.Slot.ToString(), true).GetValue <bool>() && spell.IsReady() && LHM) { var Mini = MinionManager.GetMinions(spell.Range, MinionTypes.All, MinionTeam.NotAlly); if (Mini.Count() > 0) { LH(spell, ALPHA); } } } }