Exemple #1
0
        private void OnCreate(InGameObject inGameObject)
        {
            if (!Game.IsInGame)
            {
                return;
            }

            if (ZanderHero.CharName != "Zander")
            {
                return;
            }

            var baseObject = inGameObject.Get <BaseGameObject>();

            if (baseObject != null && baseObject.TeamId == ZanderHero.BaseObject.TeamId)
            {
                if (inGameObject.ObjectName.Equals(SpaceCloneName))
                {
                    SpaceClone = inGameObject;
                }
                else if (inGameObject.ObjectName.Equals(EX2CloneName))
                {
                    EX2Clone = inGameObject;
                }
                else if (inGameObject.ObjectName.Equals(UltiCloneName))
                {
                    UltiClone = inGameObject;
                }
            }
        }
                private static void InGameObject_OnCreate(InGameObject inGameObject)
                {
                    var baseTypes = inGameObject.GetBaseTypes().ToArray();

                    if (baseTypes.Contains("CurveProjectile") || baseTypes.Contains("CurveProjectile2"))
                    {
                        var data = AbilityDatabase.Get(inGameObject.ObjectName);
                        if (data == null)
                        {
                            return;
                        }
                        var pos        = LocalPlayer.Instance.Pos();
                        var projectile = inGameObject.Get <CurveProjectileObject>();

                        var closest = GeometryLib.NearestPointOnFiniteLine(projectile.Position,
                                                                           projectile.TargetPosition, pos);
                        if (pos.Distance(closest) > 6)
                        {
                            return;
                        }

                        var tp = new TrackedCurveProjectile(projectile, data);
                        AddAfterFrame.Add(tp);
                    }
                }
Exemple #3
0
        private static void HealSelf()
        {
            InGameObject cloneToUse = null;

            if (UltiClone != null && ZanderHero.Distance(UltiClone.Get <MapGameObject>().Position) <= M1Range)
            {
                cloneToUse = UltiClone;
            }
            else if (EX2Clone != null && ZanderHero.Distance(EX2Clone.Get <MapGameObject>().Position) <= M1Range)
            {
                cloneToUse = EX2Clone;
            }
            else if (SpaceClone != null && ZanderHero.Distance(SpaceClone.Get <MapGameObject>().Position) <= M1Range)
            {
                cloneToUse = SpaceClone;
            }

            if (cloneToUse != null)
            {
                LocalPlayer.EditAimPosition = true;
                var pred = TestPrediction.GetNormalLinePrediction(cloneToUse.Get <MapGameObject>().Position, ZanderHero, M1Range, M1Speed, M1Radius, true);
                if (pred.CanHit && MiscUtils.CanCast(AbilitySlot.Ability1))
                {
                    LocalPlayer.Aim(pred.CastPosition);
                    LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                }
            }
        }
        private static void OnCreateHandler(InGameObject gameObject)
        {
            if (gameObject == null)
            {
                Console.WriteLine("[AbilityTracker#OnCreateHandler] GameObject is null, please report this to Hoyer");
                return;
            }

            if (LocalPlayer.Instance == null)
            {
                Console.WriteLine("[AbilityTracker#OnCreateHandler] LocalPlayer is null, please report this to Hoyer");
                return;
            }

            var baseTypes = gameObject.GetBaseTypes();

            if (!baseTypes.Contains("BaseObject"))
            {
                return;
            }
            var baseObj = gameObject.Get <BaseGameObject>();

            if (baseObj != null && baseObj.TeamId != LocalPlayer.Instance.BaseObject.TeamId)
            {
                EnemyObjectSpawn.Invoke(gameObject);
            }
        }
Exemple #5
0
        private static bool EnemyProjectileGoingToHitUnit(InGameObject unit, out Projectile closestProj)
        {
            var unitPos    = unit.Get <MapGameObject>().Position;
            var unitRadius = unit.Get <SpellCollisionObject>().SpellCollisionRadius;
            var enemyProjs = EntitiesManager.ActiveProjectiles.Where(x => x.BaseObject.TeamId != KaanHero.BaseObject.TeamId).OrderBy(x => x.MapObject.Position.Distance(unitPos));

            foreach (var enemyProj in enemyProjs)
            {
                if (Geometry.CircleVsThickLine(unitPos, unitRadius, enemyProj.StartPosition, enemyProj.CalculatedEndPosition, enemyProj.Radius, false))
                {
                    closestProj = enemyProj;
                    return(true);
                }
            }

            closestProj = null;
            return(false);
        }
Exemple #6
0
        private void OnCreate(InGameObject gameObject)
        {
            if (!Game.IsInGame)
            {
                return;
            }

            var matchedSpecial = SpecialCircleObjects.FirstOrDefault(x => x.Name.Equals(gameObject.ObjectName));

            if (matchedSpecial != null)
            {
                var baseObject = gameObject.Get <BaseGameObject>();
                if (baseObject != null && baseObject.TeamId != JadeHero.BaseObject.TeamId)
                {
                    matchedSpecial.Active   = true;
                    matchedSpecial.Position = gameObject.Get <MapGameObject>().Position;
                }
            }
        }
                private static void InGameObject_OnCreate(InGameObject inGameObject)
                {
                    var data = AbilityDatabase.GetObstacle(inGameObject.ObjectName);

                    if (data == null)
                    {
                        return;
                    }
                    AddAfterFrame.Add(new TrackedObstacleObject(inGameObject.Get <MapGameObject>(), data));
                }
 private static void InGameObject_OnCreate(InGameObject inGameObject)
 {
     if (inGameObject.GetBaseTypes().Contains("TravelBuff"))
     {
         var travelObj = inGameObject.Get <TravelBuffObject>();
         var data      = travelObj.Data();
         if (data == null || data.AbilityType != AbilityType.CircleJump)
         {
             return;
         }
         if (LocalPlayer.Instance.Pos().Distance(travelObj.TargetPosition) > 5)
         {
             return;
         }
         var tcj = new TrackedCircularJump(travelObj, data);
         AddAfterFrame.Add(tcj);
     }
 }
 private static void InGameObject_OnCreate(InGameObject inGameObject)
 {
     if (inGameObject.GetBaseTypes().Contains("Throw"))
     {
         var throwObj = inGameObject.Get <ThrowObject>();
         var data     = throwObj.Data();
         if (data == null)
         {
             return;
         }
         if (LocalPlayer.Instance.Pos().Distance(throwObj.TargetPosition) > 5)
         {
             return;
         }
         var tto = new TrackedThrowObject(throwObj, data);
         AddAfterFrame.Add(tto);
     }
 }
                private static void InGameObject_OnCreate(InGameObject inGameObject)
                {
                    var baseTypes = inGameObject.GetBaseTypes().ToArray();

                    if (baseTypes.Contains("Dash"))
                    {
                        var dashObj = inGameObject.Get <DashObject>();
                        var data    = dashObj.Data();
                        if (data == null)
                        {
                            return;
                        }
                        var pos     = LocalPlayer.Instance.Pos();
                        var closest = GeometryLib.NearestPointOnFiniteLine(dashObj.StartPosition,
                                                                           dashObj.TargetPosition, pos);
                        if (pos.Distance(closest) > 5)
                        {
                            return;
                        }
                        var dash = new TrackedDash(dashObj, data);
                        AddAfterFrame.Add(dash);
                    }
                }
        /// <summary>
        /// Gets the prediction.
        /// </summary>
        /// <param name="fromPos">Position where projectile gets fired from.</param>
        /// <param name="targetUnit">The target unit.</param>
        /// <param name="range">The ability range.</param>
        /// <param name="speed">The ability speed.</param>
        /// <param name="radius">The ability radius (for collision).</param>
        /// <param name="fixedDelay">The fixed delay. If greater than 0, will use this fixed delay for calculations instead of getting normal best position prediction</param>
        /// <param name="maxEnemyReactionTime">The maximum enemy reaction time in seconds to calculate HitChance.</param>
        /// <param name="checkCollision">If set to <c>true</c> [check collision].</param>
        /// <param name="ignoreFlags">The ignore flags for collision calculations.</param>
        /// <returns>TestOutput</returns>
        public static TestOutput GetPrediction(Vector2 fromPos, InGameObject targetUnit, float range, float speed,
                                               float radius               = 0f,
                                               float fixedDelay           = 0f,
                                               float maxEnemyReactionTime = 1.75f,
                                               bool checkCollision        = false,
                                               CollisionFlags ignoreFlags = CollisionFlags.Bush | CollisionFlags.NPCBlocker)
        {
            MapGameObject         mapGameObject         = targetUnit.Get <MapGameObject>();
            NetworkMovementObject networkMovementObject = targetUnit.Get <NetworkMovementObject>();

            if (mapGameObject == null)
            {
                Logs.Error("TestPrediction: Object of name " + targetUnit.ObjectName + " has no MapGameObject model");
                return(new TestOutput()
                {
                    CanHit = false,
                    Hitchance = TestHitchance.Impossible,
                    CastPosition = Vector2.Zero,
                });
            }

            var targetPos = mapGameObject.Position;

            if (networkMovementObject == null)
            {
                Logs.Error("TestPrediction: Object of name " + targetUnit.ObjectName + " has no NetworkMovementObject model");
                return(new TestOutput()
                {
                    CanHit = targetPos.Distance(fromPos) <= range ? true : false,
                    Hitchance = targetPos.Distance(fromPos) <= range ? TestHitchance.VeryHigh : TestHitchance.OutOfRange,
                    HitchancePercentage = targetPos.Distance(fromPos) <= range ? 100f : 0f,
                    CastPosition = targetPos,
                });
            }

            var targetVelocity = networkMovementObject.Velocity;
            var targetRadius   = targetUnit.Get <SpellCollisionObject>().SpellCollisionRadius; //TODO: Check if MapCollisionRadius is better

            if (fixedDelay < float.Epsilon)                                                    //No fixed delay
            {
                var predPos = GetStandardPrediction(fromPos, targetPos, speed, targetVelocity);
                if (predPos == Vector2.Zero)
                {
                    return(new TestOutput()
                    {
                        CanHit = false,
                        Hitchance = TestHitchance.Impossible,
                        CastPosition = Vector2.Zero,
                    });
                }


                TestOutput solution = new TestOutput()
                {
                    CanHit       = true,
                    CastPosition = predPos,
                };

                var targetCollision = CollisionSolver.CheckThickLineCollision(targetPos, solution.CastPosition, targetRadius);
                if (targetCollision != null && targetCollision.IsColliding)
                {
                    solution.CastPosition = targetCollision.CollisionPoint;
                }

                if (solution.CastPosition.Distance(fromPos) > range)
                {
                    solution.CanHit    = false;
                    solution.Hitchance = TestHitchance.OutOfRange;
                }

                if (checkCollision)
                {
                    solution.CollisionResult = CollisionSolver.CheckThickLineCollision(fromPos, solution.CastPosition, radius < float.Epsilon ? 0.01f : radius, ignoreFlags);

                    if (solution.CollisionResult.IsColliding)
                    {
                        solution.CanHit    = false;
                        solution.Hitchance = TestHitchance.Collision;
                    }
                }

                solution.HitchancePercentage = GetHitchance(fromPos, solution.CastPosition, speed, maxEnemyReactionTime, false);
                solution.Hitchance           = GetHitchanceEnum(solution.HitchancePercentage);
                return(solution);
            }
            else //WITH fixed delay
            {
                var predPos = GetFixedDelayPrediction(targetPos, fixedDelay, targetVelocity);

                TestOutput solution = new TestOutput()
                {
                    CanHit       = true,
                    CastPosition = predPos,
                };

                var targetCollision = CollisionSolver.CheckThickLineCollision(targetPos, solution.CastPosition, targetRadius);
                if (targetCollision != null && targetCollision.IsColliding)
                {
                    solution.CastPosition = targetCollision.CollisionPoint;
                }

                if (solution.CastPosition.Distance(fromPos) > range)
                {
                    solution.CanHit    = false;
                    solution.Hitchance = TestHitchance.OutOfRange;
                }

                solution.HitchancePercentage = GetHitchance(fromPos, solution.CastPosition, fixedDelay, maxEnemyReactionTime, true);
                solution.Hitchance           = GetHitchanceEnum(solution.HitchancePercentage);
                return(solution);
            }
        }
Exemple #12
0
 public static int EnemiesAroundAlive(this InGameObject gameObj, float distance)
 {
     return(EntitiesManager.EnemyTeam.Count(x => !x.Living.IsDead && x.Distance(gameObj.Get <MapGameObject>().Position) <= distance));
 }
Exemple #13
0
        private static void HealOthers()
        {
            var possibleAllies = EntitiesManager.LocalTeam.Where(x => !x.IsLocalPlayer && !x.Living.IsDead);

            //var allyToHealM1 = possibleAllies.Where(x => x.Distance(ZanderHero) < M1Range)
            //    .OrderBy(x => x.Living.Health)
            //    .FirstOrDefault(x => x.Living.Health < x.Living.MaxRecoveryHealth);

            var allyToHealEX1 = possibleAllies.Where(x => x.Distance(ZanderHero) < EX1Range)
                                .OrderBy(x => x.Living.Health)
                                .FirstOrDefault(x => x.HasHardCC() && x.EnemiesAroundAlive(5f) > 0);

            var nearMouseAllyZander = TargetSelector.GetAlly(TargetingMode.NearMouse, M1Range);
            var nearMouseAllySpace  = SpaceClone == null ? null : TargetSelector.GetAlly(TargetingMode.NearMouse, M1Range, SpaceClone.Get <MapGameObject>().Position);
            var nearMouseAllyEX2    = EX2Clone == null ? null : TargetSelector.GetAlly(TargetingMode.NearMouse, M1Range, EX2Clone.Get <MapGameObject>().Position);
            var nearMouseAllyUlti   = UltiClone == null ? null : TargetSelector.GetAlly(TargetingMode.NearMouse, M1Range, UltiClone.Get <MapGameObject>().Position);

            var isCastingOrChanneling = ZanderHero.AbilitySystem.IsCasting || ZanderHero.IsChanneling;

            if (isCastingOrChanneling && LastAbilityFired == null)
            {
                LastAbilityFired = CastingIndexToSlot(ZanderHero.AbilitySystem.CastingAbilityIndex);
            }

            var myPos = ZanderHero.MapObject.Position;

            if (isCastingOrChanneling)
            {
                LocalPlayer.EditAimPosition = true;
                switch (LastAbilityFired)
                {
                case AbilitySlot.Ability1:
                    if (nearMouseAllyZander != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, nearMouseAllyZander, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                        else
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                        }
                    }
                    else if (nearMouseAllyUlti != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(UltiClone.Get <MapGameObject>().Position, nearMouseAllyUlti, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                        else
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                        }
                    }
                    else if (nearMouseAllySpace != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(SpaceClone.Get <MapGameObject>().Position, nearMouseAllySpace, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                        else
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                        }
                    }
                    else if (nearMouseAllyEX2 != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(EX2Clone.Get <MapGameObject>().Position, nearMouseAllyEX2, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                        else
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                        }
                    }
                    break;

                case AbilitySlot.EXAbility1:
                    if (allyToHealEX1 != null)
                    {
                        var pred = TestPrediction.GetPrediction(myPos, allyToHealEX1, EX1Range, 0f, EX1Radius, EX1AirTime);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                    }
                    break;
                }
            }
            else
            {
                LocalPlayer.EditAimPosition = false;
                LastAbilityFired            = null;
            }

            if (HealMenu.GetBoolean("heal.useEX1.CC") && MiscUtils.CanCast(AbilitySlot.EXAbility1))
            {
                if (LastAbilityFired == null && allyToHealEX1 != null && allyToHealEX1.Living.HealthPercent <= HealMenu.GetSlider("heal.useEX1.CC.minHealth"))
                {
                    var pred = TestPrediction.GetPrediction(myPos, allyToHealEX1, EX1Range, 0f, EX1Radius, EX1AirTime);
                    if (pred.CanHit)
                    {
                        LocalPlayer.PressAbility(AbilitySlot.EXAbility1, true);
                    }
                }
            }

            if (HealMenu.GetBoolean("heal.useM1") && MiscUtils.CanCast(AbilitySlot.Ability1))
            {
                if (LastAbilityFired == null)
                {
                    if (nearMouseAllyUlti != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(UltiClone.Get <MapGameObject>().Position, nearMouseAllyUlti, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                        }
                    }
                    else if (nearMouseAllyZander != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, nearMouseAllyZander, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                        }
                    }
                    else if (nearMouseAllySpace != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(SpaceClone.Get <MapGameObject>().Position, nearMouseAllySpace, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                        }
                    }
                    else if (nearMouseAllyEX2 != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(EX2Clone.Get <MapGameObject>().Position, nearMouseAllyEX2, M1Range, M1Speed, M1Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                        }
                    }
                }
            }
        }