public static void MoveSpeedChange(GameClient client, double newMoveSpeed) { if (Data.CheckPositionCheatSpeed) { long startMoveTicks = ClientCmdCheck.GetClientTicks(client, 0L); ClientExtData clientExtData = client.ClientData.ClientExtData; lock (clientExtData) { if (client.ClientData.MapCode == clientExtData.MapCode) { if (!clientExtData.RunStoryboard) { if (clientExtData.EndMoveTicks > clientExtData.StartMoveTicks) { long elapseTicks = startMoveTicks - clientExtData.StartMoveTicks; double factor = (double)elapseTicks / (double)(clientExtData.EndMoveTicks - clientExtData.StartMoveTicks); if (factor < ClientCmdCheck.MinDistanceFactor) { int dx = (int)((double)(clientExtData.ToX - clientExtData.FromX) * (1.0 - factor)); int dy = (int)((double)(clientExtData.ToY - clientExtData.FromY) * (1.0 - factor)); if (Math.Abs(dx) + Math.Abs(dy) > 50) { clientExtData.FromX = (client.ClientData.PosX = clientExtData.ToX - dx); clientExtData.FromY = (client.ClientData.PosY = clientExtData.ToY - dy); dx = clientExtData.ToX - clientExtData.FromX; dy = clientExtData.ToY - clientExtData.FromY; clientExtData.MaxDistance2 = dx * dx + dy * dy; clientExtData.StartMoveTicks = startMoveTicks; clientExtData.ReservedTicks = 0L; if (newMoveSpeed >= 0.05) { clientExtData.MoveSpeed = newMoveSpeed; clientExtData.EndMoveTicks = startMoveTicks + (long)(Math.Pow((double)clientExtData.MaxDistance2, 0.5) / (ClientCmdCheck.MoveSpeedPerMS * clientExtData.MoveSpeed)); } else { clientExtData.StartMoveTicks = startMoveTicks; clientExtData.FromX = client.ClientData.PosX; clientExtData.FromY = client.ClientData.PosY; } } else { clientExtData.StartMoveTicks = startMoveTicks; clientExtData.ToX = client.ClientData.PosX; clientExtData.ToY = client.ClientData.PosY; } } else { clientExtData.StartMoveTicks = startMoveTicks; clientExtData.ToX = client.ClientData.PosX; clientExtData.ToY = client.ClientData.PosY; } } } } } } }
public static void ClientStopMove(GameClient client, int x, int y, long startMoveTicks = 0L) { if (Data.CheckPositionCheat) { startMoveTicks = ClientCmdCheck.GetClientTicks(client, startMoveTicks); bool resetPos = ClientCmdCheck.MoveTo(client, x, y, startMoveTicks, true); if (resetPos) { ClientCmdCheck.ResetClientPosition(client, client.ClientData.PosX, client.ClientData.PosY); } } }
public static void ClientAction(GameClient client, long nowTicks, long reserveTicks) { ClientExtData clientExtData = client.ClientData.ClientExtData; lock (clientExtData) { if (client.ClientData.MapCode == clientExtData.MapCode) { clientExtData.CanMoveTicks = ClientCmdCheck.GetClientTicks(client, 0L) + reserveTicks; } } }