public static Vector2 GetCollisionPoint(this LinearSkillshot skillshot) { if (!skillshot.OwnSpellData.MinionCollision || skillshot.Missile == null) { return(Vector2.Zero); } var collisions = new List <Vector2>(); var currentSpellPos = skillshot.GetCurrentPosition().To2D(); if (EvadeMenu.CollisionMenu["minion"].Cast <CheckBox>().CurrentValue) { foreach (var minion in EntityManager.MinionsAndMonsters.AlliedMinions.Where(x => !x.IsDead && x.IsValid && x.Health >= 50 && x.Distance(skillshot.RealCurrentPosition) <= skillshot.OwnSpellData.Range + 100)) { var proj = minion.Position.To2D().ProjectOn(skillshot.RealCurrentPosition.To2D(), skillshot.RealEndPosition.To2D()); if (proj.IsOnSegment) { collisions.Add(proj.SegmentPoint); } } } if (EvadeMenu.CollisionMenu["yasuoWall"].Cast <CheckBox>().CurrentValue&& skillshot.Missile != null) { GameObject wall = null; foreach (var gameObject in ObjectManager.Get <GameObject>(). Where(gameObject => gameObject.IsValid && System.Text.RegularExpressions.Regex.IsMatch( gameObject.Name, "_w_windwall.\\.troy", System.Text.RegularExpressions.RegexOptions.IgnoreCase))) { wall = gameObject; } if (wall != null) { var level = wall.Name.Substring(wall.Name.Length - 6, 1); var wallWidth = 300 + 50 * Convert.ToInt32(level); var wallDirection = (wall.Position.To2D() - WindWallStartPosition).Normalized().Perpendicular(); var wallStart = wall.Position.To2D() + wallWidth / 2f * wallDirection; var wallEnd = wallStart - wallWidth * wallDirection; var wallPolygon = new Geometry.Polygon.Rectangle(wallStart, wallEnd, 75); var intersections = wallPolygon.GetIntersectionPointsWithLineSegment(skillshot.GetCurrentPosition().To2D(), skillshot.RealEndPosition.To2D()); if (intersections.Length > 0) { float wallDisappearTime = WallCastTick + 250 + 3750 - Environment.TickCount; collisions.AddRange(intersections.Where(intersec => intersec.Distance(currentSpellPos) / skillshot.OwnSpellData.MissileSpeed * 1000 < wallDisappearTime).ToList()); } } } var result = collisions.Count > 0 ? collisions. OrderBy(c => c.Distance(currentSpellPos)).ToList().First() : Vector2.Zero; return(result); }