代码之家  ›  专栏  ›  技术社区  ›  alcuadrado

基于分片的MMORPG移动协议

  •  3
  • alcuadrado  · 技术社区  · 16 年前

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

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

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

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

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

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

    1 回复  |  直到 16 年前
        1
  •  5
  •   Jack    16 年前

    你绝对应该遵循第二种方法来获得一个安全的MMORPG。

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

    • 能够渲染世界的“视觉事物”
    • 一个允许玩家执行动作的输入接口

    服务器应该负责其他所有事情。。

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

    • 用户试图在客户端移动播放器
    • 客户端向服务器发送带有“移动请求”的数据包
    • 服务器检查移动是否合法,并根据它更新其内部映射
    • 如果移动是合法的,只需向所有客户端发送更新状态(使用新位置)
    • 如果移动是非法的,只需警告试图这样做的客户端

    这种方法更重要的一点是: 客户端不负责将玩家实际移动到新位置,它只接收一个新的地图状态 .

    忘记这一点:

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