在MMO中​​谁计算AI?


30

我正在建立一个MMO,并想添加NPC。问题是我不知道基本设计。计算是什么,客户端还是服务器?我会理解服务器计算事件和反应的能力,但是当涉及到寻路以及玩家的位置和动作时,谁来计算呢?

谁计算服务器或客户端的AI?我无法想象服务器会计算寻路,位置,运动等。请帮助我了解这一点,谢谢,一切都会有所帮助。


2
注意您的术语-例如,NPC不是参与者。
Kylotan

Answers:


25

出于安全原因,如今大多数MMO在服务器端都有重要的工作。您不能为客户端减轻很多负担,这就是为什么首先要取消AI例程的原因。我认为大多数开发人员通常都将客户端视为可入侵的,而不是例外。

Scalify的Badumna(http://www.scalify.com/badumna.php)试图在客户端上卸载部分代码,因为它们将在客户端进行计算并相互发送;某些数据也将像专用服务器一样,发送到授权对等方进行验证,然后再传递给客户端。问题是,如果您要防止作弊,则必须通过权威对等方发送多人游戏中的所有数据。我提出了Badumna,因为它看起来似乎最接近您想要的东西,但是即使那样也无法捕捉作弊者-它可能会捕捉一些骗子,但是任何关键的事情(即,几乎所有事情)都必须在服务器上完成-侧。

我可能会在Badumna上进行扩展,因为它仍然可以使您发现有用(但是我敦促您重新考虑减轻客户端上的重要负载,因为客户端会作弊)。

Badumna提供了用于数据操作的混合体系结构。它为开发人员提供了完全的控制权,以决定什么是关键(必须验证)和什么不是关键(因此可以由分散式网络发送)。

如果MMO要求每位信息都必须经过验证,则Badumna将充当客户端-服务器解决方案。但是,我相信有不同类别的MMO应用程序具有不同的要求。例如,一个MMO通常会在战斗区域中让玩家作弊,因此必须核实每一个信息。但是,在某些区域中,玩家只能走路/跑步/跳舞/聊天。这样的区域不需要完全验证,并且可以利用Badumna的分散式网络,并从其可提供的可伸缩性中受益。

其次,Basumna提供了开发人员可以访问的其他安全功能,例如身份保护(这样用户就不能假装成为别人),投诉代理(允许客户端配置为向可信任的来源报告恶意/欺诈玩家)和黑名单。 (禁止恶意玩家进入游戏)。

我并没有真正探索Badumna,所以可能有一些我不知道的问题和功能,但是至少我对此有个粗略的浏览。

tl; dr:客户端实际上应该只是连接互联网的键盘和鼠标。


9

简短的答案是对于标准MMO,AI计算始终由服务器执行。

有些游戏会要求客户尝试预测AI,这样NPC的反应似乎会更快,但这只是一种幻想。真正的NPC始终由服务器控制。


5

MMO是面向公共(Internet)的服务器。您希望能够完全控制的所有内容均不应为公众所用,否则您就有冒险让攻击者控制NPC的风险。除非您对命令进行某种形式的加密(这会影响性能),否则您不能相信客户端仅运行自己的代码。

预测客户端上的NPC移动以补偿滞后是一个好主意。从理论上讲,您可以在客户端程序中包含所需的尽可能多的AI行为,并使它们定期同步-但是允许客户端决定NPC的行为将使客户端有可能迷惑游戏世界。如果客户端与服务器上的游戏世界失去同步,那么最终您将获得无法控制的流氓NPC。

实际上,这很可惜,因为在客户端上分发AI可能会影响可伸缩性。


2
加密几乎没有用-客户端需要能够解密发送给它的任何内容,并且可以对客户端进行反向工程。充其量,加密会减慢创建欺诈客户端的人的速度。
亚当

2

通常,服务器应计算或验证传递给客户端或从客户端接收的每个数据。但这取决于您对客户的信任程度以及该计算的重要性。有时,主要计算可以在客户端上完成,服务器也许可以使用简单的方法来验证结果数据。


1

要以其他答案为基础,在验证比原始计算更容易的情况下(或仅偶尔进行抽查足以捕获作弊者的情况下),“卸载并验证”策略确实很有用。

例如,如果您让客户端执行A *寻路并将结果发送到服务器,则服务器只需要做的工作就是检查a)路径是否有效,b)没有更短的路径。检查路径有效性应该很容易,并且比起寻找最佳路径开始,检查最佳性可能要容易得多,因为现在您需要检查的路径长度有一个上限。(特别是,如果客户返回一条直线路径,则只要它是有效的,显然是最佳的。)老实说,我不知道这个特殊的技巧在实践中是否有用,但是我看不到任何基本障碍对它。

但是请注意,如果将NPC AI卸载到客户端,那么被黑客入侵的客户端可能会使用它提前预测NPC行为。对于某些类型的游戏或情况,这可能是一个严重的问题。


1

在服务器端处理一些复杂的非游戏关键操作时,最好在服务器端使用一些简单的AI例程和关键游戏计算。

例如,服务器知道敌对的NPC在哪里以及玩家角色在哪里。当玩家角色进入NPC的范围内时,可以进行服务器端计算以查看NPC是否应攻击玩家,并且可以执行简单的寻路路由来确定NPC到达玩家所需的时间。

将NPC转换为攻击状态后,客户端即可处理动画和细粒度的路径查找。当NPC距离客户端足够近以进行攻击时,服务器可以执行计算以查看攻击是否击中,造成的损害等...

您需要确保真正影响游戏结果的所有计算均由服务器处理并传递给客户端,而非关键性计算则由客户端处理。

在最简单的情况下,您将使客户端与服务器期望的位置保持同步,服务器将进行验证,然后客户端将再次进行计算。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.