public static List<AIBaseClient> GetCollision(List<Vector3> positions, PredictionInput input) { var list = new List<AIBaseClient>(); Func<AIBaseClient, bool> khong; Func<AIBaseClient, bool> mot; Predicate<AIBaseClient> hai; Predicate<AIBaseClient> ba; foreach (Vector3 v in positions) { var collisionObjects = input.CollisionObjects; int i = 0; while (i < collisionObjects.Length) { switch (collisionObjects[i]) { case CollisionableObjects.Minions: { var minions = (from x in GameObjects.Minions where x.IsValid() && !x.IsAlly select x).ToList<AIBaseClient>(); Func<AIBaseClient, bool> predicate; predicate = (khong = (minion => minion.IsValidTarget(Math.Min(input.Range + input.Radius + 100f, 2000f), true, input.RangeCheckFrom))); foreach (AIBaseClient AIBaseClient in minions.Where(predicate)) { float distance = AIBaseClient.Position.Distance(input.From); input.Unit = AIBaseClient; if ((double)Prediction.GetPrediction(input, false, false).UnitPosition.ToVector2().Distanced(input.From.ToVector2(), v.ToVector2(), true, true) <= Math.Pow((double)(input.Radius + (float)(AIBaseClient.IsMoving ? 50 : 15) + AIBaseClient.BoundingRadius), 2.0) && !Collision.MinionIsDead(input, AIBaseClient, distance)) { list.Add(AIBaseClient); } } var neutralMinions = (from x in GameObjects.Minions where x.IsValid() && !x.IsAlly select x).ToList<AIBaseClient>(); Func<AIBaseClient, bool> predicate2; predicate2 = (mot = ((AIBaseClient minion) => minion.IsValidTarget(Math.Min(input.Range + input.Radius + 100f, 2000f), true, input.RangeCheckFrom))); using (IEnumerator<AIBaseClient> enumerator2 = neutralMinions.Where(predicate2).GetEnumerator()) { while (enumerator2.MoveNext()) { AIBaseClient AIBaseClient2 = enumerator2.Current; input.Unit = AIBaseClient2; if ((double)Prediction.GetPrediction(input, false, false).UnitPosition.ToVector2().Distanced(input.From.ToVector2(), v.ToVector2(), true, true) <= Math.Pow((double)(input.Radius + 15f + AIBaseClient2.BoundingRadius), 2.0)) { list.Add(AIBaseClient2); } } break; } goto IL_236; } case CollisionableObjects.Heroes: goto IL_236; case CollisionableObjects.Walls: goto IL_3D5; case CollisionableObjects.Allies: goto IL_307; } IL_433: i++; continue; IL_236: List<AIBaseClient> heroes = GameObjects.EnemyHeroes.ToList<AIBaseClient>(); Predicate<AIBaseClient> match; match = (hai = ((AIBaseClient hero) => hero.IsValidTarget(Math.Min(input.Range + input.Radius + 100f, 2000f), true, input.RangeCheckFrom))); using (List<AIBaseClient>.Enumerator enumerator3 = heroes.FindAll(match).GetEnumerator()) { while (enumerator3.MoveNext()) { AIBaseClient AIBaseClient3 = enumerator3.Current; input.Unit = AIBaseClient3; if ((double)Prediction.GetPrediction(input, false, false).UnitPosition.ToVector2().Distanced(input.From.ToVector2(), v.ToVector2(), true, true) <= Math.Pow((double)(input.Radius + 50f + AIBaseClient3.BoundingRadius), 2.0)) { list.Add(AIBaseClient3); } } goto IL_433; } IL_307: List<AIBaseClient> heroes2 = GameObjects.AllyHeroes.ToList<AIBaseClient>(); Predicate<AIBaseClient> match2; match2 = (ba = ((AIBaseClient hero) => Vector3.Distance(ObjectManager.Player.Position, hero.Position) <= Math.Min(input.Range + input.Radius + 100f, 2000f))); using (List<AIBaseClient>.Enumerator enumerator3 = heroes2.FindAll(match2).GetEnumerator()) { while (enumerator3.MoveNext()) { AIBaseClient AIBaseClient4 = enumerator3.Current; input.Unit = AIBaseClient4; if ((double)Prediction.GetPrediction(input, false, false).UnitPosition.ToVector2().Distanced(input.From.ToVector2(), v.ToVector2(), true, true) <= Math.Pow((double)(input.Radius + 50f + AIBaseClient4.BoundingRadius), 2.0)) { list.Add(AIBaseClient4); } } goto IL_433; } IL_3D5: float num = v.Distance(input.From) / 20f; for (int j = 0; j < 20; j++) { if (input.From.ToVector2().Extend(v.ToVector2(), num * (float)j).IsWall()) { list.Add(ObjectManager.Player); } } goto IL_433; } } return list.Distinct<AIBaseClient>().ToList<AIBaseClient>(); }
public static PredictionOutput GetPrediction(PredictionInput input) { PredictionOutput prediction = Prediction.GetPrediction(input, false, true); List <AoePrediction.PossibleTarget> list = new List <AoePrediction.PossibleTarget> { new AoePrediction.PossibleTarget { Position = prediction.UnitPosition.ToVector2(), Unit = input.Unit } }; if (prediction.Hitchance >= HitChance.Medium) { list.AddRange(AoePrediction.GetPossibleTargets(input)); } if (list.Count > 1) { List <Vector2> list2 = new List <Vector2>(); foreach (AoePrediction.PossibleTarget possibleTarget in list) { possibleTarget.Position -= input.From.ToVector2(); } for (int i = 0; i < list.Count; i++) { for (int j = 0; j < list.Count; j++) { if (i != j) { Vector2 item = (list[i].Position + list[j].Position) * 0.5f; if (!list2.Contains(item)) { list2.Add(item); } } } } int num = -1; Vector2 vector = default(Vector2); List <Vector2> points = (from t in list select t.Position).ToList <Vector2>(); foreach (Vector2 vector2 in list2) { int hits = AoePrediction.Cone.GetHits(vector2, (double)input.Range, input.Radius, points); if (hits > num) { vector = vector2; num = hits; } } vector += input.From.ToVector2(); if (num > 1 && input.From.ToVector2().DistanceSquared(vector) > 2500f) { return(new PredictionOutput { Hitchance = prediction.Hitchance, _aoeTargetsHitCount = num, UnitPosition = prediction.UnitPosition, CastPosition = vector.ToVector3(), Input = input }); } } return(prediction); }
public static PredictionOutput GetPrediction(PredictionInput input) { PredictionOutput prediction = Prediction.GetPrediction(input, false, true); List <AoePrediction.PossibleTarget> list = new List <AoePrediction.PossibleTarget> { new AoePrediction.PossibleTarget { Position = prediction.UnitPosition.ToVector2(), Unit = input.Unit } }; if (prediction.Hitchance >= HitChance.Medium) { list.AddRange(AoePrediction.GetPossibleTargets(input)); } if (list.Count > 1) { List <Vector2> list2 = new List <Vector2>(); foreach (AoePrediction.PossibleTarget possibleTarget in list) { Vector2[] candidates = AoePrediction.Line.GetCandidates(input.From.ToVector2(), possibleTarget.Position, input.Radius, input.Range); list2.AddRange(candidates); } var num = -1; var vector = default(Vector2); List <Vector2> list3 = new List <Vector2>(); List <Vector2> list4 = (from t in list select t.Position).ToList <Vector2>(); foreach (Vector2 vector2 in list2) { if (AoePrediction.Line.GetHits(input.From.ToVector2(), vector2, (double)(input.Radius + input.Unit.BoundingRadius / 3f - 10f), new List <Vector2> { list[0].Position }).Count <Vector2>() == 1) { List <Vector2> list5 = AoePrediction.Line.GetHits(input.From.ToVector2(), vector2, (double)input.Radius, list4).ToList <Vector2>(); int count = list5.Count; if (count >= num) { num = count; vector = vector2; list3 = list5.ToList <Vector2>(); } } } if (num > 1) { float num2 = -1f; Vector2 left = default(Vector2); Vector2 right = default(Vector2); for (int i = 0; i < list3.Count; i++) { for (int j = 0; j < list3.Count; j++) { Vector2 segmentStart = input.From.ToVector2(); Vector2 segmentEnd = vector; var projectionInfo = list4[i].ProjectOn(segmentStart, segmentEnd); var projectionInfo2 = list4[j].ProjectOn(segmentStart, segmentEnd); float num3 = Vector2.DistanceSquared(list3[i], projectionInfo.LinePoint) + Vector2.DistanceSquared(list3[j], projectionInfo2.LinePoint); if (num3 >= num2 && (projectionInfo.LinePoint - list4[i]).AngleBetween(projectionInfo2.LinePoint - list4[j]) > 90f) { num2 = num3; left = list4[i]; right = list4[j]; } } } return(new PredictionOutput { Hitchance = prediction.Hitchance, _aoeTargetsHitCount = num, UnitPosition = prediction.UnitPosition, CastPosition = ((left + right) * 0.5f).ToVector3(), Input = input }); } } return(prediction); }
internal static void BrandLoad() { if (ME == null) { return; } BrandMenu = new Menu("FS_Brand", "Brand Simple", true); Menu Blaze = new Menu("Blaze Settings", "Blaze Settings"); Blaze.Add(BrandSettings.LogicBlaze); Blaze.Add(BrandSettings.AcceptQ); Blaze.Add(BrandSettings.AcceptW); Blaze.Add(BrandSettings.AcceptE); Blaze.Add(BrandSettings.AcceptR); Menu Qmenu = new Menu("Q Settings", "Q Settings"); Qmenu.Add(BrandSettings.Qcombo); Qmenu.Add(BrandSettings.OnlyStun); Menu Wmenu = new Menu("W Settings", "W Settings"); Wmenu.Add(BrandSettings.Wcombo); Menu Emenu = new Menu("E Settings", "E Settings"); Emenu.Add(BrandSettings.Ecombo); Menu Rmenu = new Menu("R Settings", "R Settings"); Rmenu.Add(BrandSettings.Rcombo); Rmenu.Add(BrandSettings.Hit); Rmenu.Add(BrandSettings.Heath); Menu BrandAuto = new Menu("Auto Brand", "Auto Settings"); BrandAuto.Add(BrandSettings.EarlyCombo); BrandAuto.Add(BrandSettings.QStun); BrandAuto.Add(BrandSettings.Whit); BrandAuto.Add(BrandSettings.AutoR); BrandMenu.Add(Blaze); BrandMenu.Add(Qmenu); BrandMenu.Add(Wmenu); BrandMenu.Add(Emenu); BrandMenu.Add(Rmenu); BrandMenu.Add(BrandAuto); BrandMenu.Attach(); Q = new Spell(SpellSlot.Q, 1000f); W = new Spell(SpellSlot.W, 900f); E = new Spell(SpellSlot.E); R = new Spell(SpellSlot.R); Q.SetSkillshot(0.25f, 55f, 1600f, true, SpellType.Line); //Q.Range = 1000f; Q.Delay = 0.25f; Q.Width = 55f; Q.Speed = 1600f; Q.Collision = true; Q.Type = SpellType.Line; //Q W.SetSkillshot(0.75f, 200f, float.MaxValue, false, SpellType.Circle); // W.Range = 900f; W.Delay = 0.75f; W.Width = 200f; W.Speed = float.MaxValue; W.Collision = false; W.Type = SpellType.Circle; //W E.Range = 675f; E.SetTargetted(0.25f, float.MaxValue); //E R.Range = 750f; R.SetTargetted(0.25f, 1000f); //R QPred = new FSpred.Prediction.PredictionInput { Aoe = false, CollisionYasuoWall = true, Collision = true, CollisionObjects = new FSpred.Prediction.CollisionableObjects[] { FSpred.Prediction.CollisionableObjects.Minions, FSpred.Prediction.CollisionableObjects.YasuoWall }, Delay = 0.25f, Radius = 55f, Range = 1000f, Speed = 1600f, Type = FSpred.Prediction.SkillshotType.SkillshotLine, From = ME.Position, RangeCheckFrom = ME.Position }; WPred = new FSpred.Prediction.PredictionInput { Aoe = true, CollisionYasuoWall = false, Collision = false, CollisionObjects = null, Delay = 0.75f, Radius = 200f, Range = 900f, Speed = float.MaxValue, Type = FSpred.Prediction.SkillshotType.SkillshotCircle, From = ME.Position, RangeCheckFrom = ME.Position }; Game.OnUpdate += Game_OnUpdate; Game.OnUpdate += AUTOQSTUN; Game.OnUpdate += AUTOWHIT; Game.OnUpdate += AUTOEHIT; Game.OnUpdate += AUTORHIT; Game.OnUpdate += COMBOHARASS; Drawing.OnDraw += BRANDDRAWING; //Orbwalker.OnAction += Orbwalker_OnAction; }
public static PredictionOutput GetPrediction(PredictionInput input, bool ft, bool checkCollision) { PredictionOutput predictionOutput = null; if (!input.Unit.IsValidTarget(float.MaxValue, false)) { return(new PredictionOutput()); } if (ft) { input.Delay += Game.Ping / 2000f + 0.06f; if (input.Aoe) { return(AoePrediction.GetPrediction(input)); } } if (Math.Abs(input.Range - 3.40282347E+38f) > 1.401298E-45f && (double)input.Unit.DistanceSquared(input.RangeCheckFrom) > Math.Pow((double)input.Range * 1.5, 2.0)) { return(new PredictionOutput { Input = input }); } if (input.Unit.IsDashing()) { predictionOutput = Prediction.GetDashingPrediction(input); } else { double num = Prediction.UnitIsImmobileUntil(input.Unit); if (num >= 0.0) { predictionOutput = Prediction.GetImmobilePrediction(input, num); } else { input.Range = input.Range * item.Value / 100f; } } if (predictionOutput == null) { predictionOutput = Prediction.GetStandardPrediction(input); } if (Math.Abs(input.Range - 3.40282347E+38f) > 1.401298E-45f) { if (predictionOutput.Hitchance >= HitChance.High && (double)input.RangeCheckFrom.DistanceSquared(input.Unit.Position) > Math.Pow((double)(input.Range + input.RealRadius * 3f / 4f), 2.0)) { predictionOutput.Hitchance = HitChance.Medium; } if ((double)input.RangeCheckFrom.DistanceSquared(predictionOutput.UnitPosition) > Math.Pow((double)(input.Range + ((input.Type == SkillshotType.SkillshotCircle) ? input.RealRadius : 0f)), 2.0)) { predictionOutput.Hitchance = HitChance.OutOfRange; } if ((double)input.RangeCheckFrom.DistanceSquared(predictionOutput.CastPosition) > Math.Pow((double)input.Range, 2.0)) { if (predictionOutput.Hitchance != HitChance.OutOfRange) { predictionOutput.CastPosition = input.RangeCheckFrom + input.Range * (predictionOutput.UnitPosition - input.RangeCheckFrom).ToVector2().Normalized().ToVector3(); } else { predictionOutput.Hitchance = HitChance.OutOfRange; } } } if (checkCollision && input.Collision) { var positions = new List <Vector3> { predictionOutput.UnitPosition, predictionOutput.CastPosition }; AIBaseClient originalUnit = input.Unit; predictionOutput.CollisionObjects = Collision.GetCollision(positions, input); predictionOutput.CollisionObjects.RemoveAll(x => x.NetworkId == originalUnit.NetworkId); predictionOutput.Hitchance = ((predictionOutput.CollisionObjects.Count > 0) ? HitChance.Collision : predictionOutput.Hitchance); } if (input.CollisionYasuoWall && predictionOutput.Hitchance > HitChance.Impossible && new List <Vector3> { predictionOutput.UnitPosition, predictionOutput.CastPosition, input.Unit.Position }.GetYasuoWallCollision(input.From)) { predictionOutput.Hitchance = HitChance.Collision; } if (predictionOutput.Hitchance == HitChance.High || predictionOutput.Hitchance == HitChance.VeryHigh) { List <Vector2> waypoints = input.Unit.GetWaypoints(); if (waypoints.Count > 1 != input.Unit.IsMoving) { predictionOutput.Hitchance = HitChance.Medium; } else if (waypoints.Count > 0) { Vector3 v = waypoints.Last <Vector2>().ToVector3(); float num2 = v.Distance(input.Unit.Position); float num3 = input.From.Distance(input.Unit.Position); float num4 = v.Distance(input.From); float num5 = num3 / input.Speed; if (Math.Abs(input.Speed - 3.40282347E+38f) < 1.401298E-45f) { num5 = 0f; } float num6 = num5 + input.Delay; float num7 = input.Unit.MoveSpeed * num6 * 0.35f; if (input.Type == SkillshotType.SkillshotCircle) { num7 -= input.Radius / 2f; } if (num4 <= num3 && num3 > input.Range - num7) { predictionOutput.Hitchance = HitChance.Medium; } if (num2 > 0f && num2 < 100f) { predictionOutput.Hitchance = HitChance.Medium; } } } return(predictionOutput); }
public static PredictionOutput GetPrediction(this Spell spell, AIBaseClient unit, out PredictionInput getinput, bool aoe = false, float overrideRange = -1f, CollisionableObjects[] collisionable = null) { bool flag = false; if ((SkillshotType)spell.Type == SkillshotType.SkillshotCircle) { flag = true; } getinput = new PredictionInput { CollisionYasuoWall = false, Unit = unit, Delay = spell.Delay, Radius = spell.Width, Speed = spell.Speed, From = spell.From, Range = ((overrideRange > 150f) ? overrideRange : spell.Range), Collision = spell.Collision, Type = (SkillshotType)spell.Type, RangeCheckFrom = spell.RangeCheckFrom, Aoe = (flag || aoe), CollisionObjects = (collisionable ?? new CollisionableObjects[1]) }; return(Prediction.GetPrediction(getinput)); }
internal static PredictionOutput GetPositionOnPath(PredictionInput input, List <Vector2> path, float speed = -1f) { speed = ((Math.Abs(speed - -1f) < float.Epsilon) ? input.Unit.MoveSpeed : speed); if (path.Count <= 1) { return(new PredictionOutput { Input = input, UnitPosition = input.Unit.Position, CastPosition = input.Unit.Position, Hitchance = HitChance.VeryHigh }); } float num = path.PathLength(); if (num >= input.Delay * speed - input.RealRadius && Math.Abs(input.Speed - 3.40282347E+38f) < 1.401298E-45f) { float num2 = input.Delay * speed - input.RealRadius; for (int i = 0; i < path.Count - 1; i++) { Vector2 vector = path[i]; Vector2 vector2 = path[i + 1]; float num3 = vector.Distance(vector2); if (num3 >= num2) { Vector2 value = (vector2 - vector).Normalized(); Vector2 v = vector + value * num2; Vector2 v2 = vector + value * ((i == path.Count - 2) ? Math.Min(num2 + input.RealRadius, num3) : (num2 + input.RealRadius)); return(new PredictionOutput { Input = input, CastPosition = v.ToVector3(), UnitPosition = v2.ToVector3(), Hitchance = (HitChance.High) }); } num2 -= num3; } } if (num >= input.Delay * speed - input.RealRadius && Math.Abs(input.Speed - 3.40282347E+38f) > 1.401298E-45f) { float distance = input.Delay * speed - input.RealRadius; if ((input.Type == SkillshotType.SkillshotLine || input.Type == SkillshotType.SkillshotCone) && input.From.DistanceSquared(input.Unit.Position) < 40000f) { distance = input.Delay * speed; } path = path.CutPath(distance); float num4 = 0f; int j = 0; while (j < path.Count - 1) { Vector2 vector3 = path[j]; Vector2 vector4 = path[j + 1]; float num5 = vector3.Distance(vector4) / speed; Vector2 value2 = (vector4 - vector3).Normalized(); vector3 -= speed * num4 * value2; object[] array = VectorMovementCollision(vector3, vector4, speed, input.From.ToVector2(), input.Speed, num4); float num6 = (float)array[0]; Vector2 vector5 = (Vector2)array[1]; if (vector5.IsValid() && num6 >= num4 && num6 <= num4 + num5) { if (vector5.DistanceSquared(vector4) >= 20f) { Vector2 v3 = vector5 + input.RealRadius * value2; SkillshotType type = input.Type; return(new PredictionOutput { Input = input, CastPosition = vector5.ToVector3(), UnitPosition = v3.ToVector3(), Hitchance = (HitChance.High) }); } break; } else { num4 += num5; j++; } } } Vector2 v4 = path.Last <Vector2>(); return(new PredictionOutput { Input = input, CastPosition = v4.ToVector3(), UnitPosition = v4.ToVector3(), Hitchance = HitChance.Medium }); }
public static PredictionOutput GetPrediction(PredictionInput input) { return(Prediction.GetPrediction(input, true, true)); }