Networking 基于分片的MMORPG移动协议

Networking 基于分片的MMORPG移动协议,networking,udp,tcp,protocols,Networking,Udp,Tcp,Protocols,我在一个基于磁贴的MMORPG中工作,我遇到了一个问题 每个用户始终有一个固定的位置(一个磁贴),因此其他用户可以在那里看到他,并且不能移动到该磁贴。因此,每个磁贴中只有一个对象或用户 如果一个用户不可见,其他用户就看不到他,但他们仍然无法移动到他的互动程序 我的问题是,客户是否应该知道所有用户(即使是不可见用户)的位置?这种方法的问题是,一些用户设法破解了客户端并看到了不可见的用户 我的一个想法是,客户端不应该知道用户的位置,在移动之前,询问服务器hi想要移动到的磁贴是否可用,但问题是我们有延

我在一个基于磁贴的MMORPG中工作,我遇到了一个问题

每个用户始终有一个固定的位置(一个磁贴),因此其他用户可以在那里看到他,并且不能移动到该磁贴。因此,每个磁贴中只有一个对象或用户

如果一个用户不可见,其他用户就看不到他,但他们仍然无法移动到他的互动程序

我的问题是,客户是否应该知道所有用户(即使是不可见用户)的位置?这种方法的问题是,一些用户设法破解了客户端并看到了不可见的用户

我的一个想法是,客户端不应该知道用户的位置,在移动之前,询问服务器hi想要移动到的磁贴是否可用,但问题是我们有延迟


仅供参考,客户机/服务器协议是使用TCP/IP构建的。

您绝对应该遵循第二种方法来获得安全的MMORPG

实际上,客户机和服务器之间的逻辑应该完全分离。而客户应该

  • 能够渲染世界的“视觉事物”
  • 一个允许玩家执行动作的输入接口
服务器应该负责其他所有事情

因此,例如,您应该以如下方式处理移动:

  • 用户试图在客户端移动播放器
  • 客户端向服务器发送带有“移动请求”的数据包
  • 服务器检查移动是否合法,并根据它更新其内部映射
  • 如果移动是合法的,只需向所有客户端发送更新状态(使用新位置)
  • 如果移动是非法的,只需警告试图这样做的客户端
这种方法更重要的一点是:客户端不负责将玩家实际移动到新位置,它只接收一个新的地图状态

忘记这一点:

  • 客户询问一个举动是否合法
  • 如果服务器说是,则客户端更新位置

用户移动到某个磁贴时,除了被占用外,是否还有其他原因会阻碍用户移动?不,没有。它可以被“阻塞”对象或用户占用,仅此而已。很好,这是我想要实现的方法,但用户输入和移动之间存在很大的延迟,至少在TCP中是这样。在这种情况下使用UDP是不安全的,不是吗?UDP不是不安全的,只是不可靠。。这取决于你想传递什么样的信息。例如,如果每秒10次将映射状态从服务器传输到客户端,只需使用UDP发送即可。其中一些可能会在旅行中丢失,但这不会影响真正的游戏。。TCP用于所有操作,因此如果协议被压缩(自适应huffman?)并且ping是可接受的,它应该工作得非常快。通常,对于“正常操作”,您的客户机将假定命令将通过,并相应地更新UI。然后,如果服务器发回一个“你发送了一些无效的命令,这就是地图的外观”,用户界面将补偿(通常是以某种不吸引人的方式,但是是的)ping是问题所在,协议非常轻量级。这就是为什么我想知道是否可以使用UDP@坦泽拉克斯:那太没用了