private static void DetonateQ(Obj_AI_Base t) { if (QMissile != null && QMissile.IsValid) { QSplit.Collision = false; var realPosition = QMissile.StartPosition.LSExtend(QMissile.EndPosition, QMissile.StartPosition.Distance(QMissile.Position) + Game.Ping / 2 + 60); //Q.Cast(); QSplit.UpdateSourcePosition(realPosition, realPosition); var start = QMissile.StartPosition.To2D(); var end = realPosition.To2D(); var radius = QSplit.Range; var dir = (end - start).Normalized(); var pDir = dir.Perpendicular(); var rightEndPos = end + pDir * radius; var leftEndPos = end - pDir * radius; var rEndPos = new Vector3(rightEndPos.X, rightEndPos.Y, ObjectManager.Player.Position.Z); var lEndPos = new Vector3(leftEndPos.X, leftEndPos.Y, ObjectManager.Player.Position.Z); if (QSplit.WillHit(t, rEndPos) || QSplit.WillHit(t, lEndPos)) { Q.Cast(); } } }
private static void BestAim(Vector3 predictionPos) { var start = Player.Position.To2D(); var c1 = predictionPos.Distance(Player.Position); var playerPos2d = Player.Position.To2D(); foreach (var point in pointList) { for (var j = 400; j <= 1100; j = j + 50) { var posExtend = Player.Position.LSExtend(point, j); var a1 = Player.Distance(posExtend); var b1 = (float)Math.Sqrt(c1 * c1 - a1 * a1); if (b1 > QSplit.Range) { continue; } var pointA = Player.Position.LSExtend(point, a1); var end = pointA.To2D(); var dir = (end - start).Normalized(); var pDir = dir.Perpendicular(); var rightEndPos = end + pDir * b1; var leftEndPos = end - pDir * b1; var rEndPos = new Vector3(rightEndPos.X, rightEndPos.Y, ObjectManager.Player.Position.Z); var lEndPos = new Vector3(leftEndPos.X, leftEndPos.Y, ObjectManager.Player.Position.Z); if (lEndPos.Distance(predictionPos) < QSplit.Width) { var collision = Q.GetCollision(playerPos2d, new List <Vector2> { posExtend.To2D() }); if (collision.Count > 0) { break; } var collisionS = QSplit.GetCollision(pointA.To2D(), new List <Vector2> { lEndPos.To2D() }); if (collisionS.Count > 0) { break; } Q.Cast(pointA); return; } if (rEndPos.Distance(predictionPos) < QSplit.Width) { var collision = Q.GetCollision(playerPos2d, new List <Vector2> { posExtend.To2D() }); if (collision.Count > 0) { break; } var collisionR = QSplit.GetCollision(pointA.To2D(), new List <Vector2> { rEndPos.To2D() }); if (collisionR.Count > 0) { break; } Q.Cast(pointA); return; } } } }