【问题标题】:How can current and future MMO JavaScript games stop players from cheating the system? [closed]当前和未来的 MMO JavaScript 游戏如何阻止玩家作弊? [关闭]
【发布时间】:2014-04-09 00:57:51
【问题描述】:

基于 JS 的在线浏览器游戏似乎是游戏行业即将到来的新事物,我对开发人员如何应对每个玩家都可以访问控制台的游戏环境中出现的以下具体问题有一些疑问可以即时操纵游戏。


物品和货币转移

通过诸如游戏内货币购买或销售之类的事情,我们可以让服务器根据玩家的转移尝试验证玩家存储的货币和库存数据,以确保他不会尝试转移他并不真正拥有的资源.

我知道这是如何处理的。


实时事件通信

当玩家处于战斗状态时,他可能会改变他的假定等级并执行他还没有能力的动作或增加他的健康、法力等。

如果我们要等待服务器对此类数据值进行验证,然后再将其流式传输到所涉及的每个客户端,这将导致无法接受的延迟并破坏实时流程。

了解这是如何处理的。


问题:

如何在具有实时交互的 JS 多人游戏中解决此问题?

【问题讨论】:

  • 许多“较新”的游戏利用 websocket 等从服务器获取更新
  • 哎呀..我说错了吗?
  • @jt0dd 这个问题对于 SO 的格式来说太宽泛了。快来聊天室讨论:chat.stackoverflow.com/rooms/17/javascript
  • @qwertynl 所以你建议玩家的数据在实时交互过程中不断更新或由服务器验证..?
  • @jt0dd 基本上...是的

标签: javascript validation real-time multiplayer


【解决方案1】:

对于任何类型的现代 Web 应用程序,其中更多的逻辑被转移到客户端,确实需要精心规划安全性,因为实际上,您必须做好准备,以防有人出于恶意目的重写您的整个界面.

你是对的,验证每一个移动服务器端确实会引入延迟,但是正如上面 qwertynl 所提到的,你可以使用 websockets 来最小化它。开发人员已经制作了具有实时通信(例如 FPS)的多人游戏已经有很长一段时间了,所以你会假设那里有大量的算法和策略来最大化带宽和最小化延迟。如果您的游戏涉及任何类型的实时通信,则您已经需要低延迟解决方案,因此添加一些验证不是问题。

对于更多事务性游戏,这会变得容易得多,因为没有必要是实时的。界面知道您的经验值、法力值等,因此当您执行操作时,应用程序会将操作添加到您的出站队列并做出响应,并预测结果,就像操作成功一样。

当动作被发送到服务器时,如果实际结果与客户端预期的不同,由于人们篡改了他们的魔法值,失去了另一个玩家的连接等,那么这个动作不会应用到你的内部服务器端游戏状态,服务器以忽略您过去操作的游戏状态响应。

此方法可能会导致您在玩游戏时出现奇怪的行为,接下来您过去几分钟的游戏玩法就会消失,但请记住,此验证是为了保护游戏免受滥用者和网络连接不良的影响,并且不会遇到这种情况深受广大用户的喜爱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2016-11-07
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多