コード例 #1
0
 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);
         }
     }
 }
コード例 #2
0
        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);
        }