Exemple #1
0
        public void FaceUnit(WowPlayer player, WowPosition positionToFace)
        {
            float angle = BotMath.GetFacingAngle(player.Position, positionToFace);

            TrashMem.Write(player.BaseAddress + OffsetList.OffsetPlayerRotation, angle);
            SendKey(new IntPtr(0x41), 0, 0); // the "S" key to go a bit backwards TODO: find better method 0x53
        }
Exemple #2
0
        private void UpdatePath()
        {
            WowPosition myPosition        = StateMachine.WowDataAdapter.ActivePlayerPosition;
            Vector3     myPosAsVector     = new Vector3(myPosition.x, myPosition.y, myPosition.z);
            Vector3     targetPosAsVector = new Vector3(UnitToFollow.Position.x, UnitToFollow.Position.y, UnitToFollow.Position.z);

            List <Vector3> waypoints = new List <Vector3> {
                targetPosAsVector
            };

            if (StateMachine.PathfindingClient != null)
            {
                waypoints = StateMachine.PathfindingClient.GetPath(myPosAsVector, targetPosAsVector, StateMachine.WowDataAdapter.MapId);
                AmeisenBotLogger.Instance.Log($"[{StateMachine.WowActionExecutor.ProcessId.ToString("X", CultureInfo.InvariantCulture.NumberFormat)}]\tFound Path with {waypoints.Count} nodes", LogLevel.Verbose);
            }

            foreach (Vector3 pos in waypoints)
            {
                WowPosition wpos = new WowPosition(pos);
                if (pos.X != myPosAsVector.X && pos.Y != myPosAsVector.Y && pos.Z != myPosAsVector.Z && CurrentPath != null && !CurrentPath.Contains(wpos))
                {
                    CurrentPath.Enqueue(wpos);
                }
            }

            if (targetPosAsVector.X != myPosAsVector.X && targetPosAsVector.Y != myPosAsVector.Y && targetPosAsVector.Z != myPosAsVector.Z)
            {
                CurrentPath.Enqueue(new WowPosition(targetPosAsVector));
            }
        }
Exemple #3
0
 public void MoveToPosition(WowPosition targetPosition, ClickToMoveType clickToMoveType = ClickToMoveType.Move, float distance = 1.5f)
 {
     TrashMem.Write(OffsetList.StaticClickToMoveX, targetPosition.x);
     TrashMem.Write(OffsetList.StaticClickToMoveY, targetPosition.y);
     TrashMem.Write(OffsetList.StaticClickToMoveZ, targetPosition.z);
     TrashMem.Write(OffsetList.StaticClickToMoveDistance, distance);
     TrashMem.Write(OffsetList.StaticClickToMoveAction, (int)clickToMoveType);
 }
Exemple #4
0
        public void IsFacingTest()
        {
            WowPosition a = new WowPosition()
            {
                x = 0, y = 0, z = 0, r = 1
            };
            WowPosition b = new WowPosition()
            {
                x = 10, y = 10, z = 10, r = 1
            };

            Assert.IsTrue(BotMath.IsFacing(a, b));
        }
Exemple #5
0
        public void GetDistanceTest()
        {
            WowPosition a = new WowPosition()
            {
                x = 0, y = 0, z = 0
            };
            WowPosition b = new WowPosition()
            {
                x = 1, y = 0, z = 0
            };

            Assert.AreEqual(1, BotMath.GetDistance(a, b));
        }
        public bool IsUnitInFollowRange(WowUnit unitToFollow)
        {
            WowUnit wowPlayer = (WowUnit)ObjectManager.GetWowObjectByGuid(WowDataAdapter.PlayerGuid);

            if (wowPlayer != null && unitToFollow != null)
            {
                WowPosition myPosition = wowPlayer.Position;
                return(BotMath.GetDistance(myPosition, unitToFollow.Position) >= UnitFollowThreshold);
            }
            else
            {
                return(false);
            }
        }
Exemple #7
0
        public void GetFacingAngleTest()
        {
            WowPosition a = new WowPosition()
            {
                x = 0, y = 0, z = 0, r = 2
            };
            WowPosition b = new WowPosition()
            {
                x = 10, y = 10, z = 10, r = 1
            };

            double angle = BotMath.GetFacingAngle(a, b);

            Assert.AreEqual(0.79, Math.Round(angle, 2));
        }
        public static float GetFacingAngle(WowPosition position, WowPosition targetPosition)
        {
            float angle = (float)Math.Atan2(targetPosition.y - position.y, targetPosition.x - position.x);

            if (angle < 0.0f)
            {
                angle += (float)Math.PI * 2.0f;
            }
            else if (angle > (float)Math.PI * 2)
            {
                angle -= (float)Math.PI * 2.0f;
            }

            return(angle);
        }
        public void Execute()
        {
            if (!IsUnitValid(ActiveTarget))
            {
                ActiveTarget = SelectNewTarget();
                AmeisenBotLogger.Instance.Log($"[{WowActionExecutor?.ProcessId.ToString("X" , CultureInfo.InvariantCulture.NumberFormat)}]\tNew ActiveTarget is: {ActiveTarget?.Name}");
                return;
            }

            WowPosition positionToMoveTo = MovementProvider?.GetPositionToMoveTo(WowDataAdapter.ActivePlayerPosition, WowDataAdapter.GetPosition(ActiveTarget.BaseAddress)) ?? new WowPosition();

            WowActionExecutor.MoveToPosition(positionToMoveTo);

            WowUnit player = (WowUnit)WowDataAdapter.ObjectManager.GetWowObjectByGuid(WowDataAdapter.PlayerGuid);

            if (ActiveTarget?.Guid != 0 &&
                player.TargetGuid != ActiveTarget.Guid)
            {
                WowActionExecutor.TargetGuid(ActiveTarget.Guid);
            }

            WowActionExecutor.AttackUnit(ActiveTarget);
            /*SpellStrategy?.GetSpellToCast(player, ActiveTarget);*/
        }
Exemple #10
0
 public Vector3(WowPosition pos) : this()
 {
     X = pos.x;
     Y = pos.y;
     Z = pos.z;
 }
Exemple #11
0
        public static bool IsFacing(WowPosition position, WowPosition targetPosition, double minRotation = 0.7, double maxRotation = 1.3)
        {
            float f = GetFacingAngle(position, targetPosition);

            return((f >= (position.r * minRotation)) && (f <= (position.r * maxRotation)));
        }
Exemple #12
0
 public static double GetDistance(WowPosition a, WowPosition b)
 => Math.Sqrt(((a.x - b.x) * (a.x - b.x))
              + ((a.y - b.y) * (a.y - b.y))
              + ((a.z - b.z) * (a.z - b.z)));
Exemple #13
0
 public void FaceUnit(WowPlayer player, WowPosition positionToFace)
 {
     // Empty for tests
 }
Exemple #14
0
 public void MoveToPosition(WowPosition targetPosition, ClickToMoveType clickToMoveType = ClickToMoveType.Move, float distance = 1.5F)
 {
     // Empty for tests
 }
Exemple #15
0
        public override void Execute()
        {
            if (StateMachine.IsMeInCombat() || StateMachine.IsPartyInCombat())
            {
                StateMachine.SwitchState(typeof(BotStateCombat));
                return;
            }

            WowUnit player = ((WowUnit)StateMachine.ObjectManager.GetWowObjectByGuid(StateMachine.WowDataAdapter.PlayerGuid));

            if (UnitToFollow == null || UnitToFollow == player || !StateMachine.IsUnitInFollowRange(UnitToFollow))
            {
                StateMachine.SwitchState(typeof(BotStateIdle));
                return;
            }

            if (CurrentPath.Count == 0)
            {
                UpdatePath();
                if (CurrentPath.Count == 0)
                {
                    return;
                }
            }

            ActiveTargetPosition = CurrentPath.Peek();
            StateMachine.WowActionExecutor?.MoveToPosition(new WowPosition()
            {
                x = ActiveTargetPosition.x, //+ XOffset,
                y = ActiveTargetPosition.y, //+ YOffset,
                z = ActiveTargetPosition.z
            });

            // get position directly from memory
            WowPosition myPosition = StateMachine.WowDataAdapter.ActivePlayerPosition;

            if (BotMath.GetDistance(myPosition, CurrentPath.Peek()) < 6)
            {
                CurrentPath.Dequeue();
            }

            double distanceTraveled = BotMath.GetDistance(myPosition, LastPosition);

            AmeisenBotLogger.Instance.Log($"[{StateMachine.WowActionExecutor.ProcessId.ToString("X", CultureInfo.InvariantCulture.NumberFormat)}]\tDistance traveled {distanceTraveled}m", LogLevel.Verbose);

            if (distanceTraveled > 0 && distanceTraveled < 0.1)
            {
                AmeisenBotLogger.Instance.Log($"[{StateMachine.WowActionExecutor.ProcessId.ToString("X", CultureInfo.InvariantCulture.NumberFormat)}]\tTrying to unstuck", LogLevel.Verbose);
                float newX = (float)Math.Cos(myPosition.r + (Math.PI / 2)) + 4 + myPosition.x;
                float newY = (float)Math.Sin(myPosition.r + (Math.PI / 2)) + 4 + myPosition.y;
                StateMachine.WowActionExecutor?.MoveToPosition(new WowPosition()
                {
                    x = newX, y = newY, z = myPosition.z
                });
            }
            else if (distanceTraveled > 0 && distanceTraveled < 0.2)
            {
                AmeisenBotLogger.Instance.Log($"[{StateMachine.WowActionExecutor.ProcessId.ToString("X", CultureInfo.InvariantCulture.NumberFormat)}]\tTrying to jump", LogLevel.Verbose);
                StateMachine.WowActionExecutor?.Jump();
            }

            LastPosition = myPosition;
        }
 public WowPosition GetPositionToMoveTo(WowPosition currentPosition, WowPosition targetPosition, List <WowUnit> unitsToStayAwayFrom)
 {
     return(targetPosition);
 }
 public WowPosition GetPositionToMoveTo(WowPosition currentPosition, WowPosition targetPosition)
 {
     return(targetPosition);
 }