private static void OnProcessSpell( Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args, SpellData data, SpellArgs spellArgs) { switch (data.MenuName) { case "MalphiteR": { var newData = (SpellData)data.Clone(); newData.MissileSpeed += (int)sender.MoveSpeed; spellArgs.NewData = newData; } break; case "SionR": { var newData = (SpellData)data.Clone(); newData.MissileSpeed = (int)sender.MoveSpeed; spellArgs.NewData = newData; } break; } if (data.MultipleNumber == -1 || (data.MenuName == "KhazixW" && args.SData.Name == data.SpellName)) { return; } var startPos = sender.ServerPosition.To2D(); var start = startPos; var endPos = args.End.To2D(); if (data.InfrontStart > 0) { start = start.Extend(endPos, data.InfrontStart); } var dir = (endPos - start).Normalized(); for (var i = -(data.MultipleNumber - 1) / 2; i <= (data.MultipleNumber - 1) / 2; i++) { SpellDetector.AddSpell( sender, startPos, start + dir.Rotated(data.MultipleAngle * i) * (data.Range / 2f), data); } spellArgs.NoProcess = true; }
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); } }
private static void FizzR(Obj_AI_Base sender, MissileClient missile, SpellData data, SpellArgs spellArgs) { if (data.MenuName != "FizzR") { return; } var dist = missile.StartPosition.Distance(missile.EndPosition); var radius = dist >= 910 ? 450 : (dist >= 455 ? 325 : 0); if (radius == 0) { return; } var spell = Evade.DetectedSpells.Values.FirstOrDefault( i => i.Data.MenuName == data.MenuName && i.Unit.CompareId(sender) && i.Type == SpellType.Circle); if (spell != null) { Evade.DetectedSpells[spell.SpellId].Radius = radius + (int)ObjectManager.Player.BoundingRadius; return; } var newData = (SpellData)data.Clone(); newData.RadiusEx = radius; spellArgs.NewData = newData; }
private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.spellName == "ZileanQ") { var end = args.End; if (args.Start.Distance(end) > spellData.range) { end = args.Start + (args.End - args.Start).Normalized() * spellData.range; } foreach (var bomb in _bombs.Where(b => b.IsValid && !b.IsDead && b.IsVisible)) { var newData = (SpellData)spellData.Clone(); newData.radius = 350; if (end.Distance(bomb.Position) <= newData.radius) { SpellDetector.CreateSpellData(hero, hero.ServerPosition, bomb.Position, newData, null, 0, true, SpellType.Circular, false, newData.radius); SpellDetector.CreateSpellData(hero, hero.ServerPosition, end, newData, null, 0, true, SpellType.Circular, false, newData.radius); specialSpellArgs.noProcess = true; } } foreach (var bombPosition in _qSpots.Values) { var newData = (SpellData)spellData.Clone(); newData.radius = 350; if (end.Distance(bombPosition) <= newData.radius && _qSpots.Count > 1) { SpellDetector.CreateSpellData(hero, hero.ServerPosition, bombPosition, newData, null, 0, true, SpellType.Circular, false, newData.radius); SpellDetector.CreateSpellData(hero, hero.ServerPosition, end, newData, null, 0, true, SpellType.Circular, false, newData.radius); specialSpellArgs.noProcess = true; } } _qSpots[Game.ClockTime] = end; } }
private static void PoppyR1( Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args, SpellData data, SpellArgs spellArgs) { if (data.MenuName != "PoppyRCharge") { return; } var newData = (SpellData)data.Clone(); newData.FixedRange = true; spellArgs.NewData = newData; }
private void ProcessSpell_TwitchSprayandPrayAttack(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.spellName == "TwitchSprayandPrayAttack") { if (args.Target != null) { var start = hero.ServerPosition; var end = hero.ServerPosition + (args.Target.Position - hero.ServerPosition) * spellData.range; var data = (SpellData)spellData.Clone(); data.spellDelay = hero.AttackCastDelay * 1000; SpellDetector.CreateSpellData(hero, start, end, data); } } }
private static void AzirR( Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args, SpellData data, SpellArgs spellArgs) { if (data.MenuName != "AzirR") { return; } var newData = (SpellData)data.Clone(); newData.Radius = data.Radius * new[] { 4, 5, 6 }[((AIHeroClient)sender).GetSpell(data.Slot).Level - 1]; //spellArgs.NewData = newData; }
private void ProcessSPellFizzMarinerDoom(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.spellName == "FizzR") { var start = args.Start; var endPos = args.End; if (start.Distance(endPos) > spellData.range) { endPos = start + (endPos - start).Normalized() * spellData.range; } var dist = start.Distance(endPos); var radius = dist > 910 ? 400 : (dist >= 455 ? 300 : 200); var data = (SpellData)spellData.Clone(); data.secondaryRadius = radius; specialSpellArgs.spellData = data; } }
private static void YasuoQ( Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args, SpellData data, SpellArgs spellArgs) { if (data.MenuName != "YasuoQ") { return; } var delay = (int)(sender.Spellbook.CastTime - Game.Time) * 1000; if (delay <= 0) { return; } var newData = (SpellData)data.Clone(); newData.Delay = delay; spellArgs.NewData = newData; }
private static void BardR(Obj_AI_Base sender, MissileClient missile, SpellData data, SpellArgs spellArgs) { if (data.MenuName != "BardR" || !missile.SData.Name.Contains("Fixed")) { return; } var newData = (SpellData)data.Clone(); newData.MissileSpeed = newData.MissileMinSpeed; var spell = Evade.DetectedSpells.Values.FirstOrDefault( i => i.Data.MenuName == data.MenuName && i.Unit.CompareId(sender)); if (spell == null) { spellArgs.NewData = newData; return; } Evade.DetectedSpells.Remove(spell.SpellId); SpellDetector.AddSpell(sender, missile.StartPosition, missile.EndPosition, newData, missile); }
private static void OnDash(Obj_AI_Base sender, Dash.DashItem args, SpellData data) { var caster = sender as AIHeroClient; if (caster == null || !caster.IsValid || (!caster.IsEnemy && !Configs.Debug) || caster.ChampionName != data.ChampName) { return; } if (Utils.GameTimeTickCount - lastQTick > 100) { return; } var newData = (SpellData)data.Clone(); if (caster.HasBuff("RivenFengShuiEngine")) { newData.Radius += 75; } SpellDetector.AddSpell(caster, args.StartPos, args.EndPos, newData, null, SpellType.None, true, lastQTick); }
private void SpellDetector_OnProcessSpecialSpell(Obj_AI_Base hero, Obj_AI_BaseMissileClientDataEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.spellName.ToLower() == "syndrae") { var estart = args.Start; var eend = args.Start + (args.End - args.Start).Normalized() * 800; foreach (var sphere in _spheres.Where(s => s.IsValid && !s.IsDead)) { // check if e whill hit the sphere var proj = sphere.Position.To2D().ProjectOn(estart.To2D(), eend.To2D()); if (proj.IsOnSegment && sphere.Position.To2D().Distance(proj.SegmentPoint) <= sphere.BoundingRadius + 155) { var start = sphere.Position; var end = hero.ServerPosition + (sphere.Position - hero.ServerPosition).Normalized() * spellData.range; var data = (SpellData)spellData.Clone(); data.spellDelay = sphere.Distance(hero.ServerPosition) / spellData.projectileSpeed * 1000; SpellDetector.CreateSpellData(hero, start, end, data, sphere); } } foreach (var entry in _qSpots) { var spherePosition = entry.Value; // check if e whill hit the sphere var proj = spherePosition.To2D().ProjectOn(estart.To2D(), eend.To2D()); if (proj.IsOnSegment && spherePosition.To2D().Distance(proj.SegmentPoint) <= 155) { var start = spherePosition; var end = hero.ServerPosition + (spherePosition - hero.ServerPosition).Normalized() * spellData.range; var data = (SpellData)spellData.Clone(); data.spellDelay = spherePosition.Distance(hero.ServerPosition) / spellData.projectileSpeed * 1000; SpellDetector.CreateSpellData(hero, start, end, data, null); } } specialSpellArgs.noProcess = true; } if (spellData.spellName.ToLower() == "syndraq") { var end = args.End; if (args.Start.Distance(end) > spellData.range) { end = args.Start + (args.End - args.Start).Normalized() * spellData.range; } _qSpots[Game.ClockTime] = end; } if (spellData.spellName.ToLower() == "syndrawcast") { var end = args.End; if (args.Start.Distance(end) > spellData.range) { end = args.Start + (args.End - args.Start).Normalized() * spellData.range; } _qSpots[Game.ClockTime] = end; } }