private static void Add(DetectedSkillshotData data) { if (data == null) { Console.WriteLine("Invalid DetectedSkillshotData"); return; } if (!data.Data.AllowDuplicates) { if (SkillshotsDetected.Any(s => s.Missile != null && data.Missile == null && s.Caster != null && data.Caster != null && s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data))) { // Already Detected by Missile return; } var replaceByMissile = SkillshotsDetected.FirstOrDefault(s => s.Missile == null && data.Missile != null && s.Caster != null && data.Caster != null && s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data)); if (replaceByMissile != null) { // Add the Missile replaceByMissile.Missile = data.Missile; replaceByMissile.End = data.Missile.EndPosition.To2D(); replaceByMissile.Start = data.Missile.StartPosition.To2D(); return; } if (SkillshotsDetected.Any(s => s.Caster != null && !s.DetectedMissile && s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data))) { return; } } OnSkillShotDetected.Invoke(data); SkillshotsDetected.Add(data); }
private static void OnSkillShotUpdate_OnUpdate(DetectedSkillshotData args) { if (args.Caster == null || !Spells.E.IsReady() || !args.IsEnemy || !args.WillHit(Player.Instance)) { return; } var spellname = args.Data.MenuItemName; var spell = EnabledSpells.FirstOrDefault(s => s.SpellName.Equals(spellname)); if (spell == null) { Logger.Warn($"{spellname} Not valid Spell"); return; } if (!spell.Enabled && (!Meniu.BlockExecute || Player.Instance.PredictHealth(args.TravelTime(Player.Instance)) > args.GetSpellDamage(Player.Instance))) { Logger.Warn($"{spellname} Not Enabled from Menu"); return; } Block(args, spell); }
private static void Game_OnTick(EventArgs args) { foreach (var LuxR in DetectedLuxRParticals) { var data = SkillshotDatabase.List.FirstOrDefault(s => s.hero.Equals(Champion.Lux) && s.slot.Equals(SpellSlot.R)); if (data == null) { continue; } if (SkillshotsDetected.Any(s => s.Caster.IdEquals(LuxR.caster) && s.Data.Equals(data))) { continue; } Vector3?start = null; Vector3?end = null; if (start == null) { if (LuxR.caster != null && LuxR.caster.IsHPBarRendered) { start = LuxR.caster.ServerPosition; } else { if (LuxR.Start.HasValue) { start = LuxR.Start; } else { if (LuxR.Mid.HasValue && LuxR.End.HasValue) { start = LuxR.End.Value.Extend(LuxR.Mid.Value, data.Range).To3DWorld(); } } } } if (end == null) { if (LuxR.End.HasValue) { end = LuxR.End.Value; } else { if (LuxR.caster != null && LuxR.caster.IsHPBarRendered) { if (LuxR.End.HasValue) { end = LuxR.End.Value; } if (LuxR.Mid.HasValue) { end = LuxR.caster.ServerPosition.Extend(LuxR.Mid.Value, data.Range).To3DWorld(); } else { if (LuxR.Start.HasValue) { end = LuxR.caster.ServerPosition.Extend(LuxR.Start.Value, data.Range).To3DWorld(); } } } else { if (LuxR.Start.HasValue && LuxR.Mid.HasValue) { end = LuxR.Start.Value.Extend(LuxR.Mid.Value, data.Range).To3DWorld(); } } } } if (start.HasValue && end.HasValue) { if (!SkillshotsDetected.Any(s => s.Caster.IdEquals(LuxR.caster) && s.Data.Equals(data))) { var detected = new DetectedSkillshotData { Caster = LuxR.caster, StartTick = Core.GameTickCount, Start = start.Value.To2D(), End = end.Value.To2D(), Data = data }; Add(detected); } } } foreach (var skill in SkillshotsDetected) { OnSkillShotDetected.Invoke(skill); } DetectedLuxRParticals.RemoveAll(s => Core.GameTickCount - s.StartTick > s.Data.CastDelay); SkillshotsDetected.RemoveAll(s => s.Ended); }
public static void Check(DetectedSkillshotData skill) { var collideobjects = new List <Obj_AI_Base>(); var collidePoints = new List <Vector2>(); collideobjects.Clear(); collidePoints.Clear(); var collisionData = skill.Data.Collisions; skill.CollidePoint = null; skill.CollideTarget = null; skill.CollideTargets = null; if (collisionData == null || !collisionData.Any()) { return; } var polygon = skill.OriginalPolygon; if (polygon == null) { return; } bool CollideWithWals = false; if (collisionData.Contains(Databases.SpellData.Collision.Heros)) { var heros = EntityManager.Heroes.AllHeroes.Where(h => h.Team != skill.Caster.Team && !h.IsMe && h.IsValidTarget() && polygon.IsInside(h)).ToList(); if (heros != null && heros.Any()) { collideobjects.AddRange(heros); collidePoints.AddRange(heros.Select(h => h.ServerPosition.To2D())); } } if (collisionData.Contains(Databases.SpellData.Collision.Minions)) { var minions = EntityManager.MinionsAndMonsters.Combined.Where(h => h.Team != skill.Caster.Team && !h.IsWard() && h.IsValidTarget() && polygon.IsInside(h)).ToList(); if (minions != null && minions.Any()) { collideobjects.AddRange(minions); collidePoints.AddRange(minions.Select(h => h.ServerPosition.To2D())); } } if (collisionData.Contains(Databases.SpellData.Collision.Walls)) { var wallsDetected = CellsAnalyze(skill.Start, polygon).Select(c => c.WorldPosition.To2D()).ToList(); if (wallsDetected != null && wallsDetected.Any()) { collidePoints.AddRange(wallsDetected); CollideWithWals = true; } } var orderedPoints = collidePoints.OrderBy(vector2 => vector2.Distance(skill.Start)).ToArray(); var orderedObjects = collideobjects.OrderBy(obj => obj.Distance(skill.Start)).ToArray(); if (CollideWithWals) { if (orderedPoints.Any()) { var range = orderedPoints[0].Distance(skill.Start); skill.CollidePoint = skill.Start.Extend(skill.EndPosition, range); } } else { if (orderedPoints.Any()) { var range = orderedPoints[0].Distance(skill.Start); if (skill.Data.CanCollide) { if (orderedPoints.Length > skill.Data.CollideCount) { var point = orderedPoints[skill.Data.CollideCount]; range = point.Distance(skill.Start); var obj = orderedObjects.FirstOrDefault(o => o.ServerPosition.To2D().Equals(point)); if (obj != null) { range -= obj.BoundingRadius; } skill.CollidePoint = skill.Start.Extend(skill.EndPosition, range); } } else { skill.CollidePoint = skill.Start.Extend(skill.EndPosition, range); } } } if (orderedObjects.Any()) { skill.CollideTargets = orderedObjects; skill.CollideTarget = orderedObjects[0]; } }
private static void Obj_AI_Base_OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { var caster = sender as AIHeroClient; var target = args.Target as AIHeroClient; if (caster == null || !caster.IsValid) { return; } var spellname = args.SData.Name; //Console.WriteLine(spellname); var data = GetData(caster, args, null); if (data == null) { //Console.WriteLine($"OnProcessSkillshots: {caster.ChampionName} - [{args.Slot} | {spellname}] - Not Detected"); return; } var start = args.Start.To2D(); var end = args.End.To2D(); if (data.StartsFromTarget && target != null) { if (data.hero == Champion.LeeSin && data.slot == SpellSlot.R) { start = target.ServerPosition.To2D(); end = start.Extend(caster, -data.Range); } } if (data.RangeScaleWithMoveSpeed) { data.Range = caster.MoveSpeed * data.MoveSpeedScaleMod; if (data.hero == Champion.Warwick && data.slot == SpellSlot.R) { data.Range = Math.Max(275, caster.MoveSpeed * data.MoveSpeedScaleMod); } end = start.Extend(end, data.Range); } if (data.hero.Equals(Champion.Taric) && data.slot.Equals(SpellSlot.E)) { var taricAllies = EntityManager.Heroes.AllHeroes.Where(h => h.IsValidTarget() && h.Team.Equals(caster.Team) && !h.IdEquals(caster) && h.HasBuff("taricwleashactive")); foreach (var ally in taricAllies) { var taricAllyE = new DetectedSkillshotData { Caster = ally, Target = target, Start = ally.ServerPosition.To2D(), End = ally.ServerPosition.To2D().Extend(end, data.Range), Data = data, StartTick = Core.GameTickCount }; Add(taricAllyE); } } if (data.SpellName.Equals("SiegeLaserAffixShot")) { var turret = EntityManager.Turrets.AllTurrets.FirstOrDefault(t => t.Team.Equals(caster.Team) && t.Buffs.Any(b => b.Caster.IdEquals(caster))); if (turret == null) { return; } start = turret.ServerPosition.To2D(); end = start.Extend(args.End.To2D(), data.Range); } var detected = new DetectedSkillshotData { Caster = caster, Target = target, Start = start, End = end, Data = data, StartTick = Core.GameTickCount }; Add(detected); }
private static void GameObject_OnCreate(GameObject sender, EventArgs args) { if (sender == null) { return; } var partical = sender as Obj_GeneralParticleEmitter; if (partical != null) { var pdata = SkillshotDatabase.List.FirstOrDefault(s => partical.Name.EndsWith(".troy") && ((!string.IsNullOrEmpty(s.ParticalName) && partical.Name.StartsWith(s.ParticalName)) || (!string.IsNullOrEmpty(s.MissileName) && partical.Name.StartsWith(s.MissileName)) || (s.ExtraMissileName != null && s.ExtraMissileName.Any(x => partical.Name.StartsWith(x))))); if (pdata != null) { var pcaster = EntityManager.Heroes.AllHeroes.OrderBy(e => e.Distance(partical)).FirstOrDefault(h => h.Hero.Equals(pdata.hero)); var correctObject = ObjectManager.Get <Obj_AI_Base>().OrderBy(o => o.Distance(partical)).FirstOrDefault(o => !string.IsNullOrEmpty(pdata.ParticalObjectName) && o.Name.Equals(pdata.ParticalObjectName)); if (correctObject != null) { var pdetected = new DetectedSkillshotData { Caster = pcaster, Start = correctObject.Position.To2D(), End = correctObject.Position.To2D(), Data = pdata, StartTick = Core.GameTickCount }; Add(pdetected); } else { var start = partical.Position.To2D(); var end = partical.Position.To2D(); if (pcaster != null) { //start = pcaster.ServerPosition.To2D(); switch (pcaster.ChampionName) { case "Zac": if (start.Distance(end) > pdata.Range) { start = end.Extend(start, pdata.Range); } break; } } var pdetected = new DetectedSkillshotData { Caster = pcaster, Start = start, End = end, Data = pdata, StartTick = Core.GameTickCount }; Add(pdetected); } } else { var StartluxR = SkillshotDatabase.List.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.StartParticalName) && partical.Name.EndsWith(".troy")); var MidluxR = SkillshotDatabase.List.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.MidParticalName) && partical.Name.EndsWith(".troy")); var EndluxR = SkillshotDatabase.List.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.MidParticalName) && partical.Name.EndsWith(".troy")); AIHeroClient pcaster; if (StartluxR != null || MidluxR != null || EndluxR != null) { pcaster = EntityManager.Heroes.AllHeroes.OrderBy(h => h.Distance(partical)).FirstOrDefault(h => h.ChampionName.Equals("Lux")); if (pcaster != null) { var alreadyDetected = DetectedLuxRParticals.FirstOrDefault(p => p.caster != null && !p.FullyDetected && p.caster.IdEquals(pcaster)); if (alreadyDetected != null) { if (alreadyDetected.Start == null && StartluxR != null) { alreadyDetected.Start = partical.Position; } if (alreadyDetected.Mid == null && MidluxR != null) { alreadyDetected.Mid = partical.Position; } if (alreadyDetected.End == null && EndluxR != null) { alreadyDetected.End = partical.Position; } } else { var addnew = new LuxRPartical { caster = pcaster, Start = StartluxR != null ? partical.Position : (Vector3?)null, Mid = MidluxR != null ? partical.Position : (Vector3?)null, End = EndluxR != null ? partical.Position : (Vector3?)null, Data = SkillshotDatabase.List.FirstOrDefault(s => s.hero.Equals(Champion.Lux) && s.slot.Equals(SpellSlot.R)) }; DetectedLuxRParticals.Add(addnew); } } } } } var missile = sender as MissileClient; var caster = missile?.SpellCaster; if (missile == null || caster == null || missile.IsAutoAttack() || !missile.IsValid) { return; } var missilename = missile.SData.Name; //Console.WriteLine($"{missilename} - mis - {missile.Slot}"); var data = GetData(caster, null, missile); if (data == null) { //Console.WriteLine($"OnCreateSkillshots: {caster.ChampionName} - [{missile.Slot} | {missilename}] - Not Detected"); return; } var Misstart = missile.StartPosition.To2D(); var Misend = missile.EndPosition.To2D(); if (data.hero.Equals(Champion.Shen) && data.slot.Equals(SpellSlot.Q)) { Misstart = missile.Position.To2D(); Misend = caster.ServerPosition.To2D(); data.Range = Misstart.Distance(Misend); } var detected = new DetectedSkillshotData { Caster = caster, Missile = missile, Start = Misstart, End = Misend, Data = data, StartTick = Core.GameTickCount }; Add(detected); }
public CollisionResult(DetectedSkillshotData skillshot) { this.Check(skillshot); }
internal static void Add(DetectedSkillshotData data) { if (data == null) { Console.WriteLine("Invalid DetectedSkillshot"); return; } if (data.Data.IsTrap && SkillshotsDetected.Any(x => x.Trap != null && data.Trap.Equals(x.Trap))) { return; } if (data.Missile == null && data.Data.DetectByMissile) { return; } if (data.Data.type == Type.Cone) { if (SkillshotsDetected.Any(s => s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data))) { return; } } if (!data.Data.AllowDuplicates) { if (SkillshotsDetected.Any(s => s.Missile != null && data.Missile == null && s.Caster != null && data.Caster != null && s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data))) { // Already Detected by Missile return; } var replaceByMissile = SkillshotsDetected.FirstOrDefault(s => s.Missile == null && data.Missile != null && s.Caster != null && data.Caster != null && s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data)); if (replaceByMissile != null && data.Missile != null && !(data.Data.StaticStart && data.Data.StaticEnd)) { // Add the Missile replaceByMissile.Missile = data.Missile; replaceByMissile.End = data.Missile.EndPosition.To2D(); replaceByMissile.Start = data.Missile.StartPosition.To2D(); return; } if (SkillshotsDetected.Any(s => s.Caster != null && !s.DetectedByMissile && s.Caster.IdEquals(data.Caster) && s.Data.Equals(data.Data))) { return; } } if (data.Data.StaticStart && data.Data.StaticEnd && data.Missile == null) { var start = data.Start; var end = data.End; data.Start = end - (end - start).Normalized().Perpendicular() * (data.Range / 2); data.End = end + (end - start).Normalized().Perpendicular() * (data.Range / 2); } if (data.Data.IsSpellName("YorickE")) { var start = data.End.Extend(data.Start, 200); var end = data.End.Extend(data.Start, -450); data.Start = start; data.End = end; } if (data.Data.CasterNames.Length == 3 && data.Data.type == Type.CircleMissile) { var obj = ObjectManager.Get <Obj_AI_Base>().FirstOrDefault(o => o.IsValid && !o.IsDead && o.Team == data.Caster.Team && data.Data.CasterNames[1].Equals(o.BaseSkinName) && data.Data.CasterNames[2].Equals(o.Model)); if (obj != null) { data.Start = obj.ServerPosition.To2D(); data.End = obj.ServerPosition.To2D(); } } if (data.Data.IsSpellName("JarvanIVDragonStrike")) { var jarvanFlag = ObjectManager.Get <Obj_AI_Base>().OrderBy(o => o.Distance(data.EndPosition)).FirstOrDefault(o => o.BaseSkinName.Equals("JarvanIVStandard") && o.Team == data.Caster.Team && o.IsValid && data.IsInside(o)); if (jarvanFlag != null) { var jarvanEQData = SkillshotDatabase.Current.FirstOrDefault(s => s.IsSpellName("JarvanIVEQ")); if (jarvanEQData != null) { var jarvanEQ = new DetectedSkillshotData { Data = jarvanEQData, Start = data.Start, End = jarvanFlag.ServerPosition.To2D(), Caster = data.Caster, StartTick = Core.GameTickCount, }; Add(jarvanEQ); return; } } } if (data.Data.DecaySpeedWithLessRange) { data.Speed = data.Data.Speed * (data.Start.Distance(data.EndPosition) / data.Data.Range); } data.DetectedByMissile = data.Missile != null; data.FromFOW = !data.Caster.IsHPBarRendered; data.Update(); SkillshotsDetected.Add(data); OnSkillShotDetected.Invoke(data); if (data.Data.IsSpellName("SyndraE")) { var qeData = SkillshotDatabase.Current.FirstOrDefault(s => s.IsSpellName("SyndraEQ")); if (qeData != null) { var syndraBalls = ObjectManager.Get <Obj_AI_Base>().Where(o => o.BaseSkinName.Equals("SyndraSphere") && o.Team == data.Caster.Team && data.IsInside(o) && o.IsValid && o.Mana > 17.5); foreach (var ball in syndraBalls) { var newDetect = new DetectedSkillshotData { Caster = data.Caster, Start = ball.ServerPosition.To2D(), End = data.Start.Extend(ball.ServerPosition.To2D(), qeData.Range), Data = qeData, StartTick = Core.GameTickCount, extraDelay = data.TravelTime(ball) }; newDetect.Update(); SkillshotsDetected.Add(newDetect); OnSkillShotDetected.Invoke(newDetect); } } } }
private static void GameObject_OnCreate(GameObject sender, EventArgs args) { if (sender == null) { return; } var partical = sender as Obj_GeneralParticleEmitter; if (partical != null) { var particleName = partical.Name.ToLower(); var pdata = SkillshotDatabase.Current.FirstOrDefault(s => !ExcludeEnds.Any(particleName.EndsWith) && s.IsParticleName(particleName) && ObjectManager.Get <Obj_AI_Base>().Any(s.HasBuff)); if (pdata != null) { var isAlly = AlliedNames.Any(particleName.EndsWith); var yasuoEQ = partical.Name.StartsWith("Yasuo_Base_EQ_SwordGlow"); var jungleMob = pdata.IsCasterName("jungle"); Obj_AI_Base pcaster = jungleMob ? ObjectManager.Get <Obj_AI_Base>().Where(m => pdata.IsCasterName(m.BaseSkinName) && m.IsValid && !m.IsDead).OrderBy(m => m.Distance(partical)).FirstOrDefault() : yasuoEQ?EntityManager.Heroes.AllHeroes.OrderBy(m => m.Distance(partical)).FirstOrDefault(h => h.ChampionName == "Yasuo" && h.IsValid && !h.IsDead) : EntityManager.Heroes.AllHeroes.OrderByDescending(h => h.Distance(partical)).FirstOrDefault(h => h.IsInRange(partical, 3000) && pdata.IsCasterName(h.BaseSkinName) && (isAlly ? h.IsAlly : h.IsEnemy) && h.IsValid && !h.IsDead && pdata.HasBuff(h)); var correctObject = ObjectManager.Get <Obj_AI_Base>().OrderBy(o => o.Distance(partical)).FirstOrDefault(o => !string.IsNullOrEmpty(pdata.ParticalObjectName) && (o.Name.Equals(pdata.ParticalObjectName) || o.BaseSkinName.Equals(pdata.ParticalObjectName) || o.Model.Equals(pdata.ParticalObjectName) || pdata.HasBuff(o))); if (correctObject != null) { var buff = correctObject.Buffs.FirstOrDefault(b => b.Caster is Obj_AI_Base); var correctCaster = buff?.Caster as Obj_AI_Base; if (correctCaster != null) { pcaster = correctCaster; } if (pcaster != null) { var pdetected = new DetectedSkillshotData { Caster = pcaster, Start = correctObject.Position.To2D(), End = correctObject.Position.To2D(), Data = pdata, StartTick = Core.GameTickCount, Particle = partical }; Add(pdetected); } } else { var start = partical.Position.To2D(); var end = partical.Position.To2D(); if (pcaster != null) { //start = pcaster.ServerPosition.To2D(); switch (pcaster.BaseSkinName) { case "Yasuo": { var alreadydetected = SkillshotsDetected.FirstOrDefault(s => s.Caster.IdEquals(pcaster)); if (alreadydetected != null) { var qcircle = SkillshotDatabase.Current.FirstOrDefault(s => s.IsCasterName(Champion.Yasuo) && s.IsDisplayName(pcaster.HasBuff("YasuoQ3W") ? "E Q3" : "E Q")); if (qcircle != null) { alreadydetected.Data = qcircle; alreadydetected.End = pcaster.GetDashInfo() != null?pcaster.GetDashInfo().EndPos.To2D() : pcaster.ServerPosition.To2D(); alreadydetected.Update(); } } return; } case "Zac": start = pcaster.IsHPBarRendered ? pcaster.ServerPosition.To2D() : end.Extend(pcaster, pdata.Range); break; } var pdetected = new DetectedSkillshotData { Caster = pcaster, Start = start, End = end, Data = pdata, StartTick = Core.GameTickCount, Particle = partical }; Add(pdetected); } } } else { var StartluxR = SkillshotDatabase.Current.FirstOrDefault(p => !string.IsNullOrEmpty(p.StartParticalName) && partical.Name.StartsWith(p.StartParticalName) && partical.Name.EndsWith(".troy")); var MidluxR = SkillshotDatabase.Current.FirstOrDefault(p => !string.IsNullOrEmpty(p.MidParticalName) && partical.Name.StartsWith(p.MidParticalName) && partical.Name.EndsWith(".troy")); var EndluxR = SkillshotDatabase.Current.FirstOrDefault(p => !string.IsNullOrEmpty(p.EndParticalName) && partical.Name.StartsWith(p.EndParticalName) && partical.Name.EndsWith(".troy")); AIHeroClient pcaster; if (StartluxR != null || MidluxR != null || EndluxR != null) { pdata = SkillshotDatabase.Current.FirstOrDefault(s => s.IsCasterName(Champion.Lux) && s.IsSlot(SpellSlot.R)); var luxInStart = EntityManager.Heroes.AllHeroes.FirstOrDefault(h => h.Hero.Equals(Champion.Lux) && h.IsValidTarget() && h.IsInRange(partical, 275)); pcaster = luxInStart ?? EntityManager.Heroes.AllHeroes.OrderBy(h => h.Distance(partical)).FirstOrDefault(h => h.BaseSkinName.Equals("Lux") && (h.Spellbook.IsChanneling || h.Spellbook.IsCharging || h.Spellbook.IsCastingSpell || !h.IsHPBarRendered)); if (pcaster != null) { var alreadyDetected = DetectedLuxRParticals.FirstOrDefault(p => p.caster != null && !p.FullyDetected && p.caster.IdEquals(pcaster)); if (alreadyDetected != null) { if (alreadyDetected.Start == null && StartluxR != null) { alreadyDetected.Start = partical.Position.To2D(); } if (alreadyDetected.Mid == null && MidluxR != null) { alreadyDetected.Mid = partical.Position.To2D(); } if (alreadyDetected.End == null && EndluxR != null) { alreadyDetected.End = partical.Position.To2D(); } return; } var addnew = new LuxRPartical { caster = pcaster, Start = StartluxR != null?partical.Position.To2D() : (Vector2?)null, Mid = MidluxR != null?partical.Position.To2D() : (Vector2?)null, End = EndluxR != null?partical.Position.To2D() : (Vector2?)null, Data = pdata }; DetectedLuxRParticals.Add(addnew); return; } } } } var missile = sender as MissileClient; var caster = missile?.SpellCaster; if (missile == null || caster == null || !missile.IsValid) { return; } //var missilename = missile.SData.Name; //Console.WriteLine($"{missilename} - mis - {missile.Slot}"); var data = GetData(caster, null, missile); if (data == null) { //Console.WriteLine($"OnCreateSkillshots: {caster.ChampionName} - [{missile.Slot} | {missilename}] - Not Detected"); return; } var Misstart = missile.StartPosition.To2D(); var Misend = missile.EndPosition.To2D(); if (data.IsCasterName(Champion.Shen) && data.IsSlot(SpellSlot.Q)) { Misstart = missile.Position.To2D(); Misend = caster.ServerPosition.To2D(); data.Range = Misstart.Distance(Misend); } var detected = new DetectedSkillshotData { Caster = caster, Target = missile.Target as AIHeroClient, Missile = missile, Start = Misstart, End = Misend, Data = data, StartTick = Core.GameTickCount }; Add(detected); }
public static void OnSkillShotDetected_OnDetect(DetectedSkillshotData args) { if (args.Caster == null || !args.Caster.IsEnemy || !args.WillHit(Player.Instance) || !Program.SubMenu["enabled"].Cast <CheckBox>().CurrentValue) { return; } var hero = args.Caster as AIHeroClient; var player = Player.Instance; #region Skillshots foreach (var shot in Shots.Where(shot => args.Data.MissileName == shot)) { if (player.BaseSkinName == "Zyra") { W = new Spell.SimpleSkillshot(SpellSlot.W); E = new Spell.SimpleSkillshot(SpellSlot.E); { if (hero != null && W.IsReady() && E.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); E.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Sivir") { E = new Spell.Active(SpellSlot.E); { if (hero != null && E.IsReady()) { E.Cast(); } } } if (player.BaseSkinName == "Heimerdinger") { Q = new Spell.SimpleSkillshot(SpellSlot.Q); { if (hero != null && Q.IsReady()) { Q.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Leblanc") { R = new Spell.Active(SpellSlot.R); R1 = new Spell.SimpleSkillshot(SpellSlot.R); { if (hero != null && R.IsReady()) { if (player.Spellbook.Spells[3].Name == "LeblancR") { R.Cast(); R1.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } else { R1.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } } if (player.BaseSkinName == "Shaco") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Fiora") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast(hero.ServerPosition); } } } if (player.BaseSkinName == "Fizz") { W = new Spell.Active(SpellSlot.E); { if (hero != null && E.IsReady() && E.ToggleState != 1) { E.Cast(); } } } if (player.BaseSkinName == "Malzahar") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "MonkeyKing") { W = new Spell.Active(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast(); } } } if (player.BaseSkinName == "Yasuo") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 5)); } } } if (player.BaseSkinName == "Nocturne") { E = new Spell.Active(SpellSlot.E); { if (hero != null && E.IsReady()) { E.Cast(); } } } } #endregion #region Hooks foreach (var hook in Hooks.Where(hook => args.Data.MissileName == hook)) { if (player.BaseSkinName == "Zyra") { W = new Spell.SimpleSkillshot(SpellSlot.W); E = new Spell.SimpleSkillshot(SpellSlot.E); { if (hero != null && W.IsReady() && E.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); E.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Sivir") { E = new Spell.Active(SpellSlot.E); { if (hero != null && E.IsReady()) { E.Cast(); } } } if (player.BaseSkinName == "Anivia") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { Core.DelayAction(() => W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 50)), (int)player.Distance(hero) / 2); } } } if (player.BaseSkinName == "Heimerdinger") { Q = new Spell.SimpleSkillshot(SpellSlot.Q); { if (hero != null && Q.IsReady()) { Q.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Leblanc") { R = new Spell.Active(SpellSlot.R); R1 = new Spell.SimpleSkillshot(SpellSlot.R); { if (hero != null && R.IsReady()) { if (player.Spellbook.Spells[3].Name == "LeblancR") { R.Cast(); R1.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } else { R1.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 50)); } } } } if (player.BaseSkinName == "Shaco") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Fiora") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast(hero.ServerPosition); } } } if (player.BaseSkinName == "Fizz") { E = new Spell.Active(SpellSlot.E); { if (hero != null && E.IsReady() && E.ToggleState != 1) { E.Cast(); } } } if (player.BaseSkinName == "Malzahar") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 80)); } } } if (player.BaseSkinName == "Trundle") { E = new Spell.SimpleSkillshot(SpellSlot.E, 1000); { if (hero != null && E.IsReady()) { Core.DelayAction(() => E.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 50)), (int)player.Distance(hero) / 2); } } } if (player.BaseSkinName == "MonkeyKing") { W = new Spell.Active(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast(); } } } if (player.BaseSkinName == "Yasuo") { W = new Spell.SimpleSkillshot(SpellSlot.W); { if (hero != null && W.IsReady()) { W.Cast((Vector3)player.ServerPosition.Extend(hero.ServerPosition, 5)); } } } if (player.BaseSkinName == "Nocturne") { E = new Spell.Active(SpellSlot.E); { if (hero != null && E.IsReady()) { E.Cast(); } } } } #endregion }