这篇文章只是初步分析4.5秒3稳固2自动的运作机制,其中涉及到客户端与服务器端的数据传输问题,且并不能给出明确的判断和结论,结论党们可能要失望了。
不过对于正在尝试新版宏的猎人们提一个小建议:无论是兽王还是射击、生存,都不要放弃加速。加速可以减少自动被吃掉的几率,提高攻击频率,从而提高DPS。龙脊、强化鹰守是非常实用和重要的东东。
那么进入正题。我在上一个帖子里面分析了3稳固3自动的情况,但是由于“武器速度1.5秒”这个要求过高,多数猎人特别是射击、生存很难做到,所以只能退而求其次,选择3稳固2自动甚至2稳固1自动。2稳固1自动由于效率不高且耗蓝问题严重,暂且搁在一边,先来分析疑问重重的3稳固2自动。
不少人在测试的时候已经发现3稳固2自动存在一些不合常理的地方。我分析了skyforhp给我的数据,具体如下:
测试环境:延迟30-60,最稳定延迟为50左右;使用AutoHotkey 运行宏,step=20。箭袋和子弹袋加速均为15%,41/20标准PVE兽王天赋,装备急速等级0。
武器为原始速度2.7,经加速后1.96的狼枪
数据有2组,均非常稳定地表现为“稳固-自动-稳固-自动-稳固”循环,其中只有2次自动被吃掉。平均循环时间如下(括号内为平均间隔时间,单位秒):
上一个循环的稳固 (1.244) 稳固1 (0.38) 自动1 (1.135) 稳固2 (0.709) 自动2 (1.091) 稳固3 (1.244) 下一个循环的稳固1’
原始数据地址:http://pickup.mofile.com/3717411924784852
http://pickup.mofile.com/0875091888134606
或者在: http://hunters.ys168.com/ 右侧“测试数据”目录
这个循环中有3个常理(以前的理论)无法解释的地方:
1。整个循环的时间平均为(1.244)+(0.38)+(1.135)+(0.709)+(1.091)=4.559秒,等于只放3个稳固的时间。
2。两个连续稳固的间隔为1.244秒,小于GCD。
3。自动1与自动2的间隔为1.844秒,小于武器速度1.96。
如果按照以前的理论,兽王天赋下1.96速度狼枪连续使用稳固的时间轴如下图:
关键在第2个自动与第3个稳固开始这个地方,按照以前的理论,第2个自动是放不出来的,会被第3个稳固打断。
有些人认为新版宏是自动优先,第2个自动优先与第3个稳固释放,不会被打断。这种想法是错误的,有两个理由反驳:
1。测试得到循环的平均时间为4.559秒,等于只放了3个稳固的时间。如果第2个自动优先了,第3个稳固造成的GCD就会被延迟,于是下一个循环的稳固1'开始时间被延后,使得整个循环时间远大于4.5秒。
2。已经有不少人出现连续3个以上稳固无自动的情况,射击、生存天赋由为明显。比如杀神这篇帖子里的测试数据 [ http://bbs.ngacn.com/read.php?tid=1554473&fpage=2 ] 射击41天赋、装备0加速属性、3.0原始速度武器,得到的稳固次数:自动次数=50:12,远远大于2:1。(为什么自动没有全部被打断?因为他按得不够快,有时候按慢了一点点,自动就出去了。)
所以说,新版宏并不优先自动,自动会被稳固打断。
那么,如果自动会被稳固打断的话,3稳固2自动里面的第2个自动不是就永远放不出来了吗,就变成了2稳固1自动这样循环了。那怎么skyforhp和论坛上面不少人的测试都出现3稳固2自动。什么原因造成了理论和实际的巨大差异呢?dryxp最早做出了猜测:这很可能是由于打开自动射击之后插入稳固的模式引起了服务器端对自动射击序列处理的虫子。是的,如果理论和实际都没有错,那么就只能在网络传输这方面找突破口了。
在继续分析前,我需要先下几个经验上的定论:
1。法术GCD在客户端判定,“判定法术是否因为GCD未冷却而无法开始施放”由客户端进行。如果判定可以施放,则客户端发送“xx法术开始释放”的指令给服务器。服务器收到指令后开始运行该法术。
2。每一个稳固后都会开始施放自动射击,且该判定由服务器自动做出,网络延迟对该过程的影响为0。
3。自动射击会一直循环运行,直到客户端发送“自动射击被打断或停止”的指令给服务器。
4。Combat.log内的记录全部为服务器端回馈给客户端的信息。
然后,我还需要做一个假设:由于某个神秘的原因,自动1与自动2的间隔为1.844秒,小于武器速度1.96。
Ok,根据以上4个我凭自己经验总结出来的定论和1个假设,把具体3稳固2自动的运行过程画成图(网络延迟为0.05)。为了省力点只画第2个自动和第3个稳固这部分:
在这个图里面,“稳固2放出”这个时间点定为第0秒。数据从客户端传输到服务器,然后再传回客户端,记录成combat.log。(经天赋、箭袋加速后,稳固施法1.087s,自动施法0.362s)
最关键的第2个自动和第3个稳固在服务器端出现了有趣的情况。由于网络延迟和“每一个稳固后都会开始施放自动射击,且该判定由服务器自动做出,网络延迟对该过程的影响为0”这两个原因共同作用,当“稳固3开始”指令从客户端传到服务器的时候,服务器已经自动开始运行“自动2开始”这个指令。原本应该是先运行的稳固3,到了服务器却成了迟到者。于是,稳固只能排在自动射击后面运行,在0.706秒的时候开始施放。
那么,稳固只比自动慢了0.069秒,为什么没有打断自动呢?因为这是在服务器,服务器不负责判定自动是否被打断,它只有在接收到客户端发送的“自动射击被打断或停止”指令后,才会停止运行自动射击。客户端在0.394秒才接受到服务器传回的“自动2开始”指令,而客户端的稳固3在之前就已经开始运行了。
现在在神奇的网络延迟作用下出现两种情况,客户端:稳固3比自动2早;服务器端:自动2比稳固3早。那么最后听谁的呢,当然是听服务器的,因为最后的Combat.log都是由服务器返还的数据生成的。服务器说稳固3在自动2后面运行,那稳固3就只能跟在自动2后面运行。于是,服务器判定稳固3在0.706s自动2施法完成后开始,第1.739秒放出。第1.863秒客户端GCD结束,发送“稳固1’”指令给服务器;第3秒服务器“稳固1’放出”。
根据上图的时间,我们可以算出:
1。整个循环的时间为4.5秒。
2。稳固3于下一个循环的稳固1’间隔1.207秒。
比较skyforhp测得的数据:
1。整个循环的时间平均为(1.244)+(0.38)+(1.135)+(0.709)+(1.091)=4.559秒,等于只放3个稳固的时间。
2。两个连续稳固的间隔为1.244秒,小于GCD。
误差只有0.059秒和0.037秒!符合度非常之高!
Ok,这样就能解释3稳固2自动测到的数据为什么不符合“常理”了,原来都是网络延迟惹的祸。
慢着慢着,还有一个问题没解释清楚呢,为什么“自动1与自动2的间隔为1.844秒,小于武器速度1.96”?这个……我只能说是因为某个非常非常非常神秘的原因造成的,神秘到只有IQ250以上的人才能理解。很遗憾我的IQ还不及格。咳,有谁及格的请举手,这个艰巨的任务就交给你了。