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; } } } } } }
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); } } } } } }
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); } } }
private void ProcessSpell_TwitchSprayandPrayAttack(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.spellName == "TwitchSprayandPrayAttack") { spellData.spellDelay = hero.AttackCastDelay * 1000; } }
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; } }
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; } }
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; } }
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; } }
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); } }
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; } }
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); } } } }
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; } }
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; } }
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; } }
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; } } }
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; } }
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); } } } } }
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; } }
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); } } }
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; } } } } } } }
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; } }
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; } } }
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; } }
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); } }
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; } } } } } }
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; } }
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; }
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); } } } }
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; } }
private static void ProcessSpell_jayceshockblast(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.spellName == "jayceshockblast") { } }
private static void ProcessSpell_jayceshockblast(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args, SpellData spellData, SpecialSpellEventArgs specialSpellArgs) { if (spellData.SpellName == "jayceshockblast") { } }
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; } }
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; } }
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; } }
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; } }
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); } }