public static bool ClientPosition(GameClient client, int x, int y, long startMoveTicks = 0L) { bool result; if (!Data.CheckPositionCheat) { result = true; } else { bool resetPos = false; ClientExtData clientExtData = client.ClientData.ClientExtData; lock (clientExtData) { if (client.ClientData.MapCode != clientExtData.MapCode) { return(false); } int dx = x - clientExtData.ToX; int dy = y - clientExtData.ToY; if (dx != 0 || dy != 0) { if (!clientExtData.RunStoryboard) { if (clientExtData.StartMoveTicks < clientExtData.EndMoveTicks) { if (startMoveTicks >= clientExtData.EndMoveTicks) { clientExtData.StartMoveTicks = startMoveTicks; client.ClientData.PosX = clientExtData.ToX; client.ClientData.PosY = clientExtData.ToY; } } else if (Math.Abs(dx) + Math.Abs(dy) >= 500) { LogManager.WriteLog(LogTypes.Check, string.Format("ClientPosition位置不匹配#rid={0}", client.ClientData.RoleID), null, true); client.ClientData.PosX = clientExtData.ToX; client.ClientData.PosY = clientExtData.ToY; resetPos = true; clientExtData.StartMoveTicks = startMoveTicks; } } } } if (resetPos) { ClientCmdCheck.ResetClientPosition(client, client.ClientData.PosX, client.ClientData.PosY); result = false; } else { result = true; } } return(result); }
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 bool SpriteMoveCmd(GameClient client, int fromX, int fromY, int toX, int toY, long startMoveTicks, double moveSpeed, List <Point> path, out bool stepMove) { stepMove = false; bool result; if (!Data.CheckPositionCheat) { ClientCmdCheck.SpritePreMove(client, fromX, fromY, toX, toY, startMoveTicks); result = true; } else { ClientExtData clientExtData = client.ClientData.ClientExtData; bool resetPos; lock (clientExtData) { if (client.ClientData.MapCode != clientExtData.MapCode) { return(false); } resetPos = ClientCmdCheck.MoveTo(client, fromX, fromY, startMoveTicks, false); if (!resetPos) { ClientCmdCheck.SpritePreMove(client, fromX, fromY, toX, toY, startMoveTicks); clientExtData.RunStoryboard = false; if (moveSpeed < 0.05) { return(false); } if (path.Count < 2) { LogManager.WriteLog(LogTypes.Check, string.Format("SpriteMoveCmd路径点不足两个#rid={0}", client.ClientData.RoleID), null, true); return(false); } if (path.Count == 2) { if (Math.Abs(path[0].X - path[1].X) > 1.0 || Math.Abs(path[0].Y - path[1].Y) > 1.0) { LogManager.WriteLog(LogTypes.Check, string.Format("SpriteMoveCmd,2点路径非法#rid={0}", client.ClientData.RoleID), null, true); return(false); } toX = (int)path[1].X * 100 + 50; toY = (int)path[1].Y * 100 + 50; } else if (path.Count == 3) { if (path[0].X == path[1].X && path[0].Y == path[1].Y) { if (Math.Abs(path[0].X - path[2].X) + Math.Abs(path[0].Y - path[2].Y) > 2.0) { clientExtData.RunStoryboard = true; } } else { if (path[0].X + path[2].X != path[1].X + path[1].X || path[0].Y + path[2].Y != path[1].Y + path[1].Y) { LogManager.WriteLog(LogTypes.Check, string.Format("SpriteMoveCmd,3点路径非法#rid={0}", client.ClientData.RoleID), null, true); return(false); } if (Math.Abs(path[0].X - path[2].X) > 2.0 || Math.Abs(path[0].Y - path[2].Y) > 2.0) { LogManager.WriteLog(LogTypes.Check, string.Format("SpriteMoveCmd,3点距离非法#rid={0}", client.ClientData.RoleID), null, true); return(false); } } toX = (int)path[2].X * 100 + 50; toY = (int)path[2].Y * 100 + 50; } else { clientExtData.RunStoryboard = true; } clientExtData.FromX = fromX; clientExtData.FromY = fromY; clientExtData.ToX = toX; clientExtData.ToY = toY; clientExtData.StartMoveTicks = startMoveTicks; clientExtData.MaxDistance2 = (toX - fromX) * (toX - fromX) + (toY - fromY) * (toY - fromY); clientExtData.MoveSpeed = moveSpeed; clientExtData.EndMoveTicks = startMoveTicks + (long)(Math.Pow((double)clientExtData.MaxDistance2, 0.5) / (ClientCmdCheck.MoveSpeedPerMS * clientExtData.MoveSpeed)); stepMove = !clientExtData.RunStoryboard; } } if (resetPos) { ClientCmdCheck.ResetClientPosition(client, clientExtData.FromX, clientExtData.FromY); result = false; } else { result = true; } } return(result); }