黑暗暴风眼吧 关注:2,569贴子:243,585
  • 15回复贴,共1

【PK教学】对于DNF中PK技能判定的具体细节,难懂,可以挑战

只看楼主收藏回复

看了网上很多人在不知道哪些技能能扯,哪些不能扯,或者觉得下T扯彗星,旋风腿CX扫地扯彗星觉得神奇的,其实大家都是因为对原理不了解才会觉得这些东西奇怪。其实如果知道了原理,很多东西是根本无需试验,自己推理都能得出结果。下面我就教大家,DNF中技能的具体判定是如何判定的,相信学过网络的话,以下内容就很好理解,我尽量用大家都懂的话去说,只要大家认真阅读完,了解个8成,肯定是没什么问题的。当然有些难懂的部分可能需要多次阅读才能明白真正的含义,希望我这个文章能让大部分人恍然大悟。当然如果你本身就懂这些的话,当复习也好。不过本文由于新概念很多,所以可能需要看好几遍才能全懂。不过我可以保证,当你理解了本文,大枪的格林扯,火扯,柔道下踢扯,或者是以后见到更奇葩的扯,都会感到很正常,因为原理就是这么简单——


IP属地:河南1楼2013-08-19 00:43回复
    下面我说一下DNF中技能的分类,判定的识别基本上就是靠技能的分类来处理的。下文所述的网络延迟,指的就是你登录DNF的时候,选区的时候显示的XXms(XX毫秒)


    IP属地:河南2楼2013-08-19 00:43
    回复
      一、1次判定技能
      想要说明什么是一次判定技能,我得先举个例子,上勾拳,前踢,X,下T,都是属于1次判定技能。下面分析一下这类技能DNF是如何判定的。
      比如说上勾拳,你放上勾拳之后,你的主机会发送一个附带有至少一下数据的数据包(下文以后直接称其为攻击数据包):第1类,随机命中结果; 第2类,具体技能;第3类;你角色的一些属性(这个主要用来计算技能伤害和一些异常效果,或者产生浮空,僵直之类的效果),之后经过一倍的网络延迟时间,你的数据包被对方主机接收,对方系统根据程序优先级,首先会看第2类数据包(也就是“具体技能”),并且在对方的机子显示(即对方看到我方出上勾拳),接着系统会处理第1类数据包,如果处理结果是非命中,则直接显示MISS,其他数据包直接丢弃,以免浪费CPU;如果收到的随机结果是命中,那么根据自身的回避属性,继续进行随机,如果随机到回避成功,则处理结果同上,直接显示MISS,其他数据包直接丢弃;如果随机到回避失败,则看第三个数据包,是对于上勾拳这个技能的伤害的运算,处理出一个伤害数据,然后,扣除相应血量,之后开始发送回应数据包,即刚刚所作出的各种运算结果,之后再经过1倍的网络延迟,你的主机接收到这个回应数据包,你才会看到你的上勾拳到底出了MISS,还是命中,并打出多少的伤害。
      就是说,你的上勾拳出招后,经过1倍网络延迟(设为时间段a)之后对方才会看见你的上勾拳,而再次经过一次网络延迟(设为时间段b),你才会看到对方因为你的上勾拳,而出现了什么影响(MISS 或 命中)。而正是因为网络的这种处理方式,也会造成更多的“相杀(双方同时被对方的技能打中)”,网络延迟越大,“相杀”的情况越多,举个例子,


      IP属地:河南3楼2013-08-19 00:44
      回复
        【例①】你和对方离得非常近(两者都在对方的旋风腿攻击范围内),你先放旋风腿,然后过了10毫秒,对方也开始按旋风腿。(假设双方用的都是顶级键盘,键盘延迟都是0)
        下面我会根据不同的网络环境,判定出有可能出现的结果:
        如果说网络延迟值为0(实际上不可能,只是说明一下),那么,对方会在第一时间挨打,并且过了10毫秒后他按下了旋风腿这个技能,但是由于已经处于僵直,旋风腿技能使用不出,于是,本次起手,我方成功;
        如果说双方网络延迟值是4毫秒,那么,当我方出了旋风腿后对方会在4毫秒后挨打,并再过6毫秒后,也按了旋风腿,但是其结果同上,都是因为自身还在僵直,旋风腿出招不能,起手成功的还是我方;
        实际上,只有当网络延迟大于10ms的时候,才会发生变化。比如,网络延迟是11毫秒的时候,结果会是这样:你放了旋风腿之后,经过11毫秒,对方才会收到你的数据包,而实际上你放了旋风腿之后只过了10毫秒他就也按了旋风腿,此时你的数据包还没到他那呢,所以他机子上显示的还是你没有动的状态,这个时候他也出招了旋风腿,并发送了数据包;之后过了1毫秒,你的数据包到达,他的屏幕才看到你的旋风腿;之后他被你的旋风腿击中,他的机子自动发出回应数据包A,然后又经过10毫秒,他之前放旋风腿的数据包终于到达,被你的主机收到,之后你看到他的旋风腿然后,你被攻击,并且发送回应数据包B;又过了1毫秒,他的回应数据包A你的机子接收到,然后你会看到他被你旋风腿集中后的样子,到现在为止,你已经看到了“相杀”的处理结果;但是还没完,又过了10毫秒,对方收到了你的回应数据包B,之后他才看到你被他打旋风腿击中,直到现在,对方才看到了“相杀”结果。
        这只是拿旋风腿做的一个判定结果实例,可以看出,网络延迟对判定起了很大的作用,因为即便你对攻击范围内的对方放了技能,对方也至少有1倍网络延迟的可自由活动时间,也是因为这个“可自由活动时间”,导致出现“相杀”、“霸体技能被非破霸体的技能破除”的情况,但是这都是没有办法的,同步问题一直是即时类游戏的难题。


        IP属地:河南4楼2013-08-19 00:46
        回复
          好了,下面利用这个原理,我们可以做到哪些东西呢?我一个个的说(之后的一切都是依靠这个简单粗糙的【二次判定检查】的漏洞做到的,而这个漏洞是一个程序的良性漏洞,所以不用修复)。
          一、利用X,进行范围扯,看到这里的朋友们,回顾一下我上文提过“非常重要”的语句,所说的内容,然后再看,就会比较好理解了。
          【例②】(假设双方用的都是顶级键盘,键盘延迟都是0,且第三X发动起到其攻击判定出现的时间忽略不计,这里给出一个数据:背摔抓取动作保持时间,大约为300毫秒)当对方处于我方第三下X的极限攻击范围,但不处于背摔抓取范围时(简直是废话,3X极限范围背摔抓取范围无论如何都达不到),连续原地X,当发动第三下X且攻击判定出现之后,经过时间段c后,才按出了背摔。
          下面根据这个例子,我具体说明一下在不同网络延迟环境下可能出现的结果。
          1.假设网络延迟是10ms,我来通过计算,告诉大家时间段c处于什么范围内,才能成功3X扯上背摔吧。连续原地X,当发动第三下X之后,我方向对方发送关于第三下X的身体攻击数据包,经过10ms后,对方收到这个数据包并被攻击,之后发送回应数据包(这个属于身体攻击回应数据包),再次经过10ms我方收到该回应数据包,此时开始进行【二次判定检查】。
          好了说到这里就明白了吧,一旦【二次判定检查】检查到我方处于抓取动作时才会触发该抓取后续动作。那么我方则必须得在【二次判定检查】开始之前,就得按出背摔才行,而第三X的攻击数据包发送,到【二次判定检查】开始之间间隔多少?2倍的延迟:10ms+10ms=20ms,没错,只要X之后,在之后的0ms——20ms时间内放出背摔,就能成功地3X扯上背摔,即0ms<时间段c<20ms的情况下,能成功扯上。经过这个分析,大家应该就知道,一个成功的X扯技必要满足的条件了吧?没错,就是【当X出现攻击判定到使用一个二次判定技能之间的时间间隔,小于双方2倍的网络延迟的时候,X不出现MISS的情况下,之后的2次判定技能必中】当然了,这个仅仅是网络延迟低的时候的,所需要满足的唯一条件。
          但是当网络环境极差,还会出现第二个满足条件,就是说,必须2个条件都满足的情况下,才能形成“扯”,那么下面开始说明吧。
          2.假设网络延迟是160ms,那么先计算第一个满足条件(【当X出现攻击判定到使用一个二次判定技能之间的时间间隔,小于双方2倍的网络延迟的时候,X不出现MISS的情况下,之后的2次判定技能必中】):2倍延迟=160ms*2=320ms,再看看上面,背摔抓取保持时间是300ms,不要忘了这个,试问,如果你在X之后第一时间用了背摔,会出现什么结果?没错,X之后经过320ms你终于收到了身体攻击回应数据包,此时开始【二次判定检查】,但是此时你角色处于什么状态?no,别说处于抓取动作保持状态,因为你的背摔只能保持300ms,你第一时间就放背摔的话,实际上320ms-300ms=20ms,在收到回应数据包之前20ms你的背摔就已经收招了,嗯,所以,收到回应数据包后【二次判定检查】的结果是你处于站立状态,然后判定X扯抓失败(这也是为什么延迟非常大的时候,有时候出现对方虽然在我方攻击范围,但是却抓不到的原因之一,(原因之二是因为延迟,对方有时候模型的时机位置已经不在你看到的那个位置了))。
          那么想要在延迟非常大的情况下,还能X扯背摔,需要满足的时间段c的范围处于:20ms<时间段c<320ms。现在知道第二个条件了吧,那就是得根据你2次判定技能攻击动作的持续时间来判断你什么时候放该2次判定技能。这个实在延迟非常大的时候,需要注意的地方,而正常情况下根本用不着知道这一条,所以大家了解一下即可。


          IP属地:河南6楼2013-08-19 00:51
          回复
            【例③】(假设双方用的都是顶级键盘,键盘延迟都是0,且下段踢发动起到其攻击判定出现的时间忽略不计,这里给出两个数据:一、彗星(它抓取动作持续时间受攻速影响,这里取500ms做例子)抓取动作保持时间,大约为500毫秒;二、下段踢收招时间假设为150ms)对方稳倒于地,并处于我方下段踢攻击范围内,此时我方立即下段踢,收招之后,我方立即使用彗星。
            下面根据网络延迟环境不同,计算下段踢立即彗星,扯技达成所必须满足的延迟范围。
            1.当延迟为10ms,此时我方下段踢之后,发送身体攻击数据包,经过10ms对方收到数据包并随机结果命中,回发回应数据包;再次经过10ms后,我方收到身体回应数据包,系统开始【二次判定检查】,检查结果发现我方正处于下段踢动作中,之后我方角色停顿一帧(约10ms)。检查并没有检查到彗星抓取动作,因此扯技失败;(这之后,下段踢还需要130ms的收招时间,才能释放彗星)
            2.当延迟为76ms时,此时我方下段踢之后,发送身体攻击数据包,经过76ms对方收到数据包并随机结果命中,回发回应数据包;再次经过76ms后,我方收到身体回应数据包,系统开始【二次判定检查】,此时检测到我方处于彗星的抓取保持状态,因此立即触发彗星“判定成功”的结果,于是彗星命中(理由:76+76=152ms,下段踢仅仅需要150ms收招,之后立即放了彗星,也就是说,系统进行【二次判定检查】前的2ms彗星就已经施放,因此判定成功),下段踢扯彗星成功;
            3.当延迟为326ms时,此时我方下段踢之后,发送身体攻击数据包,经过326ms对方收到数据包并随机结果命中,回发回应数据包;再次经过326ms后,我方收到身体回应数据包,系统开始【二次判定检查】,此时系统检查到我方处于站立(彗星已经收招)状态,因此判定结果为让我方角色停顿一帧。(理由:2倍延迟=2*326=652ms,而下段踢出招到收招,再到彗星出招到收招,需要150+500=650ms,也就是说,【二次判定检查】前2ms,我方彗星刚刚收招完毕)
            综上所述,再本例的环境下,下段踢扯彗星想要成功,网络延迟d要求:76ms<d<325ms(延迟不能是325到326之间,那个时候彗星都已经收招了才开始【二次判定检查】,因此必须小于{150+500}/2=325ms)


            IP属地:河南7楼2013-08-19 00:52
            回复
              好了,今天已经详细讲述了DNF中对于一个攻击如何判定的具体的过程,有兴趣研究的,可以看一下


              IP属地:河南8楼2013-08-19 00:53
              回复
                @_蚂蚁小七
                纯属原创,求精


                IP属地:河南10楼2013-08-19 01:04
                回复
                  9楼哪里去了


                  来自手机贴吧11楼2013-08-19 01:28
                  收起回复
                    看不懂。。扯技我都是凭感觉的。。


                    IP属地:河南来自Android客户端12楼2013-08-19 01:40
                    收起回复
                      同跨六,求教


                      IP属地:河南来自Android客户端13楼2013-08-19 01:40
                      收起回复


                        14楼2014-06-18 18:22
                        回复