返回列表 发帖

揭开ASPD的面纱(修改版)

本文by snowloveyz 转载麻烦注明作者出处

再未有其他游戏像RO一样用aspd这个参数表述人物的攻击速度
最近终于在日本各网站凑齐了aspd的公式 可以发表一篇全面的文章了

先贴公式
ASPD = 200 - {[(250 - AGI - DEX/4)/250] x (200 - BaseASPD)}

APS(attack per second每秒攻击次数)=50/(200-ASPD)

ASPD'(使用加速技能如加速药后)=ASPD+(200-ASPD)*t%(加速因子如波水为15%)

第三个是凭记忆的 若有不对敬请谅解

一部分日服网站认为 aspd保留至小数点后一位 且RO一次最短攻击时间需要0.02秒
另外 目前官服最高aspd锁定为190

很明显的看出 攻击威力是跟APS直接相关的 而且是线性关系
我们改写一下公式 为什么改写看完就明白了

APS=1/[(200-ASPD)*0.02]

在此 我们改写全部公式 令ADT(attack delay time)=200-ASPD
因为AGI和DEX/4的作用相当 且不管配点可能与否
一个agi100 dex100的人 就当作是agi125来计算是相同的
令AGI'(等效AGI)=AGI+DEX/4

全部公式变成

ADT=(1-AGI'*1/250)* BaseADT  (1)

APS=1/(ADT*0.02)             (2)

使用加速技能/道具后 ADT'=ADT(1-t%)   t为加速因子 (3)

看看上边 公式是不是简单多了

引入ADT的意义是什么呢?
写过计算机程序的人应该有这个概念
如果你是gravity的程序员 我现在要你写一个决定攻击频率的程序
你如何写呢? 你可以直接写某个函数让电脑1秒钟演算15次还是20次攻击么?
实现起来很困难吧 正常人类大概都会使用一个延时的函数或者循环
你要0.1秒攻击一次? ok我写一个函数造成延时0.02秒
每循环或者调用5次就调用一次演算攻击的函数就是了 很简单的方法

若RO最小时间单元设定为0.02秒
那么每次攻击延迟过后隔 ADT个循环之后发出一次攻击动作
也就是每ADT*0.02秒发出一次攻击

熟悉法师的人再仔细看看公式(1) 有没有似曾相识?

ADT=(1-AGI'*1/250)* BaseADT  (1)

施法时间=(1-DEX*1/150)*基础施法时间 (4)

这并不是巧合 同一个小组在设计一个系统的时候往往使用类似形式的公式
或许因为ADT跟攻击速度正好是反比的 gravity认为不够直观
才取了200-ADT作为ASPD的代表吧 总之ASPD看着越大 攻击速度就越高

彻底抛弃ASPD而采用ADT的概念 能使很多事情变得清晰而自然
你的aspd175 我的aspd180比你高5点 嗯 不错 爽
但是高5点aspd差了多少呢? 你能说出来么?
现在好了 看看公式(2) ADT和攻击速度是完全反比的
你的ADT25 我的ADT20 我的攻击频率或者说攻击速度是你的25/20=1.25倍
也就是 单位时间造成的伤害是你1.25倍
BINGO!

再来看看武器的选择
把公式(1)带入公式(2)
APS=1/{0.02*[(1-AGI'*1/250)* BaseADT]}
在人物一定的情况下 APS=1/(k*BaseADT)
换句话说 APS也跟武器的基础ADT成反比
拿常见的铁匠武器选择问题来说
单手斧BaseASPD=135         BaseADT=65
炼锤 BaseASPD=132.5       BaseADT=67.5
因此 无论体铁敏铁均铁打造铁 攻击力相同的情况下单位时间内造成的伤害
使用单手斧是炼锤的67.5/65=1.04倍 比较两种武器直接攻击力再乘这个系数就可以了
次式也同时清楚的说明武器的选择与agi无关

接着看看加速药
喝了波水之后单位时间内伤害增加了多少呢? 15%?
APS'=1/ADT*(1-t%)*0.02 
t=15代入得 APS'=APS*1/0.85=1.18*APS
也就是说 单位时间伤害约增加了18%
而2HQ和速度激发则实际增加了约43%的单位时间伤害
你现在明白铁匠练级该开凶砍还是速度激发了么?
(一般铁匠只能常驻一样且不考虑怪物减算防御)

最后我们来讨论aspd取整问题
大家都知道gravity设计程序很爱取整的 在这一项上也不例外
由公式 APS=1/(ADT*0.02) 和 APS=1/[(200-ASPD)*0.02]          
可以看到 延时函数的调用次数ADT 必须是整数
(以前有人提出过 施法时间=(1-DEX*1/150)*基础施法时间 的最小可分辨时间单元也是0.02秒 所以dex也要凑整5的理论 但是没有验证
个人认为重力社实在没有必要写两个延时函数 除非有特殊理由好的程序员一般不会这么做
所以有可能施法和攻击的最小时间单元相同 考虑到零偷的最小几率0.02%....重力社实在很喜欢0.02这个数 不过有什么内在联系也说不定)


感谢点点滴滴给出的实测和其他网友提供的KE封包
我个人现在基本认为APS=1(ADT*10*0.002)
也就是说 ADT或者是ASPD小数点后保留一位有效数字
从KE的封包来看系统间传送的数据就是ADT*10=(200-ASPD)*10
ASPD只是一个显示数据 很可能运算中根本不碍它的事
ASPD=200-ADT 这个公式里的200实际上是随意定的罢了
如果有一天gravity的程序员心血来潮把所有公式里的200改成300
各位的aspd会显示成275这样 但实际的攻击速度根本没有任何改变
起作用的是锁定ASPD190 或者说是锁定ADT为10 也就锁定了攻击速度的极限是每秒5下
这也从侧面说明了ASPD的数字基本上就是一无用的概念 仅仅拿来看的


若ADT如KE封包和实测中描述的那样是精确到小数点后一位的话
那么实际上可能性比较大的就是运算中对10*ADT那个变量取整
配人物点的时候仍然还要凑整
即是对ADT=BaseADT*(1-AGI'/250) 两边都乘10凑整
也即是 10*ADT=BaseADT*(10-AGI'/25)凑整
对盗贼拿短剑的情形 Base ADT=50 右边为500-2AGI'=500-2AGI-DEX/2
DEX是偶数刚好为整数
而对炼金拿钝器的情形 右边写成
10*ADT=135*(10-AGI'/25)=1350-27*(4agi+dex)/20
也就是说 dex+4agi需要是20的倍数

但是这里略有不同,我们需要ADT尽量小,若在整数的基础上再增加一点dex
则10*ADT则会变成 1799.9XXX这样 小数部分将要舍去
所以在炼金的例子里有可能dex+4agi除20余1是最合算的
重力社确实在给我们发红利 但这个红利实在是太小了
以aspd189.9-aspd190.0来算
增加的0.1aspd提升了0.1/(200-190)=1%的每秒伤害
由于常见的aspd大约是180上下 这时的额外伤害就只有0.5%
估计还不如网络延迟的影响大 基本可以忽略掉
因此结论就是 配点的时候agi和dex随便点就好了 <han2>
这里的问题是0.002秒的时间单元太小了 程序里基本体现不出来
一个比较合理的做法是如点点所说用不均匀的攻击把"丢掉"的攻击次数补回来
这个似乎跟我们平时练功的直观也比较吻合

本文主要是为了提出ADT的概念 让攻击速度的概念更加直观和容易比较而已
其他的有待证实

弓虽

TOP

<@@> <@@>

TOP

本想看明白,可是……

TOP

那个200也许不是随意定的
关系到最大攻击时间的设定问题

记得拳套牧师的aspd不。。。

TOP

好貼一定要頂,讓所有人看到

TOP

最近这个讨论得厉害
怎么浮上来的?

TOP

虽然看的不是很明白,不过我还是顶了

TOP

BS 掘墓的

TOP

顶技术帖
探测器的量子效率η=1,测量带宽△f=1HZ,则信号噪声限制下NEP=2hv.

TOP

微机原理的事情……考完了就丢还给老师了——+
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

神剑捣浆糊,2004-06-23, 00:17:32
楼主一定是数学课代表,反正俺这被子也别想看懂了。。。
请允许我为这样的好帖指出一小错误,第三条的波水是20%,另外还知道 集水/觉水/剑加速/矛加速/速激发/村正 分别是 5/10/20/20/20/8,但8矛不知道。。。
速激 剑加 枪加都是30%
8矛不加速吧
波水是20%么? 可能偶一直都记错了?

TOP

风飞羽,2004-06-22, 20:55:37
最近天2内测。。。因此很长时间没有来小站了。

今天上QQ的时候点点和星月就都给我发了这个帖子的链接。 ^^

去年我就怀疑过ASPD凑整数的必要性,当时还和星月做过测试,结论是:

ASPD没有必要凑整数,实际的攻击时间间隔单位是更小的。
当时并没有进一步的去检测具体数值(基本上也很难确定),也因为种种原因没有把结果整理出来。不过我曾经在某些回帖中简单的提到过。

今年认识点点后也和她讨论过好几次这个问题,她曾经找了好些个日文资料中关于ASPD的测试和推测跟我讨论,基本都是支持攻击速度不是以整数的ASPD来决定的结论。

至于攻击延时的最小时间单位是0.01还是0.02秒,甚至是1ms,我想非常难确定。而且,即使确定了意义也不是很大。因为即使是最高速度的上限,ADT也有0.2秒,0.02和0.01的差别也就在5%之内。不过我倾向于认为,一定是在0.02秒之下的。

至于提到程序在时间上的精确控制,那个是有些钻牛角尖了。因为程序并不需要保证每一次攻击的时间间隔都那么精确,可以采用类似于点点提到的补偿的方法,程序只需要保证在一定的时间内总的攻击次数和计算值吻合就可以了。

对于一般的玩家来说,只需要知道,没有必要为了ASPD凑整数去配点就可以了。

显示的状态栏基本上就是拿来好看的似是而非的东西。攻击也好、防御也好、暴击率也好、ASPD也好。
对普通玩家来说
另外有用的是提供了一个简便并且容易记忆的计算和比较攻击速度的计算方法

其实偶写文的时候主要是为了这个地.....

TOP

直观感觉就是补回来丢掉的攻击次数 呵呵

TOP

点点。。你是微软的么?

TOP

返回列表