Exemplo n.º 1
0
		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>();
		}
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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);
            }
Exemplo n.º 4
0
        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));
 }