Answers:
我在研究一些在线CCG时遇到了这个问题。我见过的最佳解决方案:
1)玩家必须连接到服务器,而不是直接彼此连接,并且永远不要在传送给玩家的数据中传递对手的IP地址。这可以防止拒绝服务攻击,在这种攻击中,玩家会迫使对手离线以赢得胜利。
2)连接中断=您输了,对手赢了。我们必须假设,如果您放弃了,那是为了避免某些损失而放弃。
3)断开连接以尝试重新连接一段时间,以便轻微的打h并不会迫使您不会因自己的过失而迷失。理想情况下,时间足够长,以防有人不小心踢了电缆,但又足够短,以使对手在等待时不会感到沮丧和入睡。我认为我们发现大约45到60秒感觉不错。
4)允许玩家报告他们的对手。这是必须采取的措施,以防止任何人在您的保单中找到烦人的方法。就像,也许是在口头上骂人,以至于对手掉下来只是为了离开那里,或者不断地断开连接并重新连接以延长游戏的长度,或者是为了避免损失而围墙,等等。您无法阻止所有不良行为,但是可以包括一个游戏内机制来报告该问题,然后让您的客户支持部门处理其余问题。
我曾经在一个在线赛车游戏中解决过这个问题,在该游戏中,输了的玩家经常会关闭游戏机,以避免损失出现在他们的记录中。但是,它适用于任何PvP情况。
我的解决方案是这样的:
在比赛开始时,一旦所有玩家都加入并开始比赛,请计算如果我们的玩家输掉比赛将会有什么结果。在我们的赛车游戏中,“迷失”是指“排在最后一位”,通常的结果是“从玩家排名中减去N分”。
将结果保存到安全位置(Savegame,排行榜,在线数据区域等)。
与结果一起存储“ GameStarted”标志。这仅表示游戏已经开始。我们稍后将需要它。
游戏结束后,计算实际结果并将其应用于玩家得分/统计数据。取消设置“ GameStarted”标志。这是正常的游戏完成过程。
但是,如果玩家断开连接,拔出电缆或关闭电源,最终他们将返回到游戏菜单。在菜单代码中,我们检查“ GameStarted”标志。如果已设置,我们确定我们已经检测到较早的游戏内断开连接。然后,我们可以将存储的结果应用于球员的得分/状态。就像玩家输了游戏一样。发出警报通知玩家发生的事情也是一个好主意。然后,一旦他发现断开游戏中途会产生后果,您将看到行为开始改变。
我认为实现这一目标的唯一方法将取决于游戏的结构。有两种方法可以使作弊变得不那么理想:惩罚或奖励。因此,如果您不希望受到不利的处罚,请想办法奖励那些没有摔倒的球员。
取而代之的是,PvP的奖励不是被征服者的尸体的战利品(这使得掉落一件非常糟糕的事情),而是让获胜者获得一些奖励,例如经验,金币或其他全部奖励(积分?排名?)。如果其中一名球员被踢开,则其余的球员将获得奖励,而被踢出的球员则一无所获,却一无所获。除非是排名系统,否则离开的玩家可能会失去一些排名积分。
世袭II这样做:
就我个人而言,我会做类似的事情,只允许玩家预先定义其角色正在断开连接的动作(保持战斗,逃到最近的安全区以避免仇恨,使用常规的逃生滚动,使用有福的滚动逃脱,...),并且即使玩家未登录,角色也仍然存在于游戏世界中。
EVE Online处理此问题的方式如下:
断开连接后15秒钟,船舶开始翘曲。如果是扭曲的,船将不会扭曲。(您的角色的飞船将在15秒后开始“逃跑”,除非它被另一名玩家“困住”了)
PVP计时器(直到玩家在进行PvP战斗时“逃跑”为止的时间)设置为3分钟。(这是为了应对许多其他计时器)。
NPC计时器停留在1分钟,但15秒后船将翘曲离开,除非翘曲被NPC扰乱。
当船只被玩家锁定目标时,它应该切换到pvp计时器(如果在设置了计时器之前无法定位的情况下断开连接,则使用1分钟计时器来对付它)。
如果您有一种方法可以模拟玩家在战斗中的惯常模式,则可以将其设置为AI模式,直到他们重新连接或战斗结束为止。但是,除非战斗在X时间内返回,否则不要给他们任何战斗奖励(经验,物品等)。
我会实现某种迟滞。您可以使用胡萝卜和棍子。但是,可以根据跟踪记录来选择要使用的内容(您也可以分析它们的联系和当前的“双赢”,并使用它们。)这就是您希望亲自进行的方式。简单模型:
您可以滥用它。但是,这样做可能需要付出更多的努力,而不仅仅是硬着头皮。(例如,如果花费了2个DC来弥补,则从技术上讲,您可以摆脱一半的损失。但是,这确实减轻了一些滥用,并且在所有滥用行为少于聪明球员的情况下)。
使用此授予,表示计分板的总和不会达到100%。由于您可以在保持良好状态的同时保持DC,而不需要记录损失。但是另一位好玩家可以取得胜利。同样不等于100%的意思是2名玩家可以合作关闭DC玩家以获得堆叠胜利。
因此,并非万无一失,而是添加了对游戏状态和连接的贝叶斯分析,可能会检测到时髦并使得该方案防弹。(您可以击败贝叶斯分析,但人类并不擅长这样做,大多数人都无法进行数学计算,更不用说花费时间来“准备”一场战斗以克服DC了。)