DNF游戏信息

当前位置:7k7k小游戏 > 资讯频道 > DNF > 综合经验 > 装备研究

从网络传输角度剖析DNF仇恨BUG(2)

责任编辑:老A原作者:老A2011-06-11 09:06:35

 

  那么仇恨是什么呢?没错,仇恨就是在这时候建立在A和M之间的联系,通俗点说就是此时怪M是在A的机器上进行运算的,这就叫做怪M的仇恨在A身上。

  为什么呢?

  试想这么一种情况,全图只有一个怪,有四个人,那么这四个人无论是谁,每对怪进行一次攻击就需要向其他三人发送数据以保证怪血量和状态的一致性,假设每人打两下就能干掉这个怪,那么四人间总共需要发送4(四个人)*3(每次攻击向另三人发送数据)*2(两刀)=24次数据。并且每个人的机器都要对这个怪的实时状态进行伤害的计算。如果大家都全力输出这个数据的负载量可想而知。

  于是就有了一种简便的方法,对怪进行第一次攻击的人(就是A)获得怪的仇恨,以后所有伤害都在A的机器上进行运算。而此时,其他人对怪只传来一个伤害数值,统一在A的机器上运算之后将状态发送给其他三人并在最终将结果上报主机。这样除了A以外的其他人只需要向A发送攻击的伤害状态,每个人打两下只要发送六次数据就可以解决问题节省了3/4的数据传输量。

  有什么证据呢?没错,我想大家已经想到了,那就是很多时候组队时出现的白色尸体只有少数几个,或者会有个别怪怎么打都打不到,而可能有个人退了之后就恢复正常。

  这是因为怪的仇恨目标因为网络原因无法将怪的状态数据正常的传送给服务器和其他玩家,所以造成了卡怪这种事情的发生。

  然后就是最关键的问题,为什么很多装备会因为仇恨失去效果,并且测试起来无比困难。

  为什么呢?没错,因为如果组队的时候仇恨的目标不是你,那么你的所有攻击都只会将一个攻击方式和伤害量传送给仇恨者的电脑,然后由其运算后得到结果。而因为传送的只是伤害数值,所以附加伤害的增加数值并不会被运算在内,因而造成装备失效。

  那么为什么这个问题不容易测试呢?

  很简单,因为仇恨并没有一个很明确的计算方式。

  不怕大家笑话,act1的时候我也是个开过科技的白手,那个时候不需要闪电大奔神罗天征,只需要直接修改人物的属性就可以达到秒怪的效果。单刷的时候这个效果无比好,但是在组队的时候会出现问题,当队友攻击怪或者离得很近的时候就会出现伤害还原的情况。

  为什么呢?很简单,就是因为挂修改的是本地数据,而这个数据只在本地运算的时候被体现出来,一旦数据被发送出去,伤害数值会立刻还原,挂也就失效了。

  没错就是这样,dnf的仇恨很可能会因为哪怕位置上的接近就发生交换,而且怪的攻击目标未必是仇恨目标(当然,这两者在通常情况下是一致的),所以说在测试的过程中会遇到很多莫名其妙的数据导致数据很难准确的被记录下来。

  所以。。。想要那些装备发挥作用么?那离怪近点并且拼命砍吧。。。