public void JumpToDestination(ushort X, ushort Y) { DestinationX = X; DestinationY = Y; CurrentJumpAction = Threads.ActionThread.AddAction(() => { Jump(); }, 500); }
public void Jump() { if (Core.Screen.GetDistance(Original.X, Original.Y, DestinationX, DestinationY) <= 5) { Threads.ActionThread.Actions.TryRemove(CurrentJumpAction.ActionID, out CurrentJumpAction); CurrentJumpAction = null; return; } Enums.ConquerAngle angle = Core.Screen.GetFacing(Core.Screen.GetAngle(Original.X, Original.Y, DestinationX, DestinationY)); Maps.MapPoint point = Packets.MovementPacket.CreateDirectionPoint(Original.X, Original.Y, (byte)angle); if (!Original.Map.ValidCoord(point.X, point.Y)) { return; } const ushort size = 14; for (ushort i = size; i > 0; i--) { Maps.MapPoint npoint = Packets.MovementPacket.CreateDirectionPoint(point.X, point.Y, (byte)angle); npoint = new ProjectX_V3_Game.Maps.MapPoint(0, npoint.X, npoint.Y); if (Original.Map.ValidCoord(npoint.X, npoint.Y)) { point = npoint; } else { break; } } ushort x = point.X; ushort y = point.Y; Packets.GeneralDataPacket general = new ProjectX_V3_Game.Packets.GeneralDataPacket(Enums.DataAction.Jump); general.Id = Original.EntityUID; general.Data1Low = x; general.Data1High = y; general.Data5 = uint.MaxValue; general.Data3Low = Original.X; general.Data3High = Original.Y; general.Data4 = (uint)Original.Map.MapID; general.Timestamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime(); Original.SendToScreen(general, false, false); Original.X = x; Original.Y = y; }