MMORPG移动协议机制

时间:2016-05-18 20:22:33

标签: networking system game-engine

我想从头开始构建一种小型(极小且简单)的MMORPG游戏,在给定网格内点击动作(类似于在线口袋妖怪游戏)。当我单击一个单元格时,玩家将移动到达指向区域(使用路径寻找算法,如A *)。但是,我不知道如何构建运动系统的网络协议。而且,谷歌搜索主题似乎并没有帮助我很多。我需要做出选择: - 每当我从一个小区移动到另一个小区时,我都会向服务器发送一条消息(这根本不是高效的,因为如果我们在一个100毫秒的延迟网络中,我只能感知10个移动/秒如果我要求服务器确认移动它只能做5moves / sec) - 每次玩家想要改变它的方向时我都会发送一条消息(它点击另一个小区)。客户端定期向服务器发送其位置,并检查它是否与目的地一致。

第二个解决方案看起来比第一个解决方案好很多,我认为真正的游戏系统必须实现该战略。我错了吗?

此外,我们如何构建基于该解决方案的系统,该解决方案不允许经过修改(被黑客入侵)的客户端能够发送假位置并在任何他们想要的地方传送?真正的系统是否实现了一些像#"不连贯的发送位置"试图尝试检测并修复这些问题的系统?

或者,是否有更简单的实施方法?非常感谢你

2 个答案:

答案 0 :(得分:1)

在实时游戏中,我会创建一个喘息的机制。我会使用如下公式:Speed * time = distance。

现在如果你在客户端和服务器中运行相同的逻辑,你只需要在开始时发送移动逻辑,服务器可以在行进距离时用完成消息回答。 (最后比较以防止作弊。服务器总是赢)

现在,如果客户取消进入其他地方的运动,则会发送取消喘息和您旅行的时间。改变喘息时也是如此(在这种情况下,你会发送一条盯着新时间和地点的新路径)。

答案 1 :(得分:1)

感谢ScarletMerlin的回答,我认为这是解决我问题的简单方法。

当玩家想要从一个位置(例如0,0)移动到另一个位置(例如10,10)时,它会发送一个" MOVE 10 10"消息到服务器。

然后,只有服务器将应用路径寻找算法,并在每次移动位置后发送给客户端。 (例如,通过消息CURRENTLY_ON X Y)。然后,客户端将更新播放器的位置。

它是从服务器到客户端的一种自动同步。它还解决了第一种解决方案的问题(每次移动一次移动和一次ACK),这要归功于管道连接。例如,如果网络有1000毫秒的延迟并且移动设置为50毫秒,我们将在时间1000,1050,1100,1150接收消息......所以,我们只会感觉到玩家改变方向时的滞后。 当用户从一个方向转换到另一个方向时,用户也会感到有些滞后,但如果我们假设延迟非常低并且是对称的(它似乎不是一个过于强烈的假设),那么它就不会如此非常感知(因为改变方向通常在发送CURRENTLY_ON消息之前到达,并且服务器可以中断其当前操作(直接进行)以处理新的消息)。