예제 #1
0
 public void JumpToDestination(ushort X, ushort Y)
 {
     DestinationX      = X;
     DestinationY      = Y;
     CurrentJumpAction = Threads.ActionThread.AddAction(() => {
         Jump();
     }, 500);
 }
예제 #2
0
        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;
        }