我在一个基于图块的MMORPG中工作,遇到了一个问题。
每个用户始终有一个固定的位置(一个磁贴),因此其他用户可以在那里看到他,并且无法移动到该磁贴。所以每个图块中只有一个对象或用户。
如果用户变得不可见,其他用户就看不到他,但仍然无法移动到他的磁贴。
我的问题是,客户是否应该知道所有用户(甚至不可见用户)的位置?这种方法的问题在于,一些用户设法破解了客户端并看到了不可见的用户。
我的一个想法是,客户机不应该知道用户的位置,在移动之前,请询问服务器Hi要移动到的磁贴是否可用,但问题是我们有延迟。
仅供参考,客户机/服务器协议是用TCP/IP构建的。
最佳答案
您一定要遵循第二种方法来获得一个安全的MMORPG。
实际上,客户机和服务器之间的逻辑应该完全分离。而客户应该
一种能渲染世界的“视觉事物”
允许玩家执行动作的输入接口
服务器应该处理所有其他事务。
因此,例如,您应该以如下方式处理移动:
用户试图在客户端中移动播放器
客户机向服务器发送带有“移动请求”的数据包
服务器检查移动是否合法,并根据移动更新其内部映射
如果移动是合法的,只需发送所有客户的更新状态(新职位)
如果移动是非法的,只要警告试图这样做的客户
这种方法更重要的是:客户机不负责将玩家实际移动到新的位置,它只接收一个新的地图状态。
忘记这一点:
客户询问移动是否合法
如果服务器说是,则客户端将更新位置