Board logo

标题: 揭开ASPD的面纱(修改版) [打印本页]

作者: snowloveyz    时间: 2004-6-20 21:27     标题: 揭开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的概念 让攻击速度的概念更加直观和容易比较而已
其他的有待证实
作者: 死蚂蚁simy    时间: 2004-6-20 21:32

找个人过来加精!
把路径复制下,贴上面去!
好贴……
作者: ¢零℃    时间: 2004-6-20 21:38

顶技术贴
作者: papanda    时间: 2004-6-20 21:40

精华!
作者: 烽云之学生    时间: 2004-6-20 21:41

看了下~确实分析很完整~~

那能否告诉下~现今大陆官服的最大可能性是那一种呢?~~?
取整?还是整数多0.1?比如170.1,180.1等等
作者: 寒婷    时间: 2004-6-20 21:42

assassin template的例子

Q ASPDの小数点ってあるの? ▲

あります。
Lv85/AGI122/DEX60な暗殺ですが、表示が177のままにもかかわらず体感では
AGI120/DEX60─(上昇)→AGI121/DEX60─(上昇)→AGI122/DEX60
な感じでした。
今会社なので家に帰ったら検証して見たいと思います。
検証方法はMISS表示ONで不死か毒属性の敵にEP後攻撃、MISSの回数で比較でOKですよね?
ステータス:Lv85/AGI120~122/DEX60
検証方法:EP3をかけて不死に当てたMISS回数を測定(各10回測定)
AGI120/DEX60(ASPD177):58-59-59-59-58-59-58-60-59-59(計588)
AGI121/DEX60(ASPD177):61-62-61-61-61-61-60-62-61-62(計612)
AGI122/DEX60(ASPD177):63-62-63-63-63-63-62-63-63-63(計628)
微妙に誤差はありますがASPDが上がってるので間違いないかと思います
AGI120の状態で残りSP尽きるまで試してみましたが、59を超えることは
ありませんでした。
作者: 十字伤    时间: 2004-6-20 21:43

补1个.
二刀刺客的情形则为
ASPD = 200 - [ 1.4* (仅装备右手武器时的ASPD+仅装备左手武器时的ASPD)/ 2]

其他的正在研究ing ... 晚上有事做了.呼呼.
麻烦楼上的4D大大每次发日文资料都翻译成中文好么.
实在头疼.都要发给偶老婆翻译 ....


作者: 我就是上海C的Tony J    时间: 2004-6-20 21:45

似乎在那里看见过 类似的帖
但不可否认 是好贴
作者: gdd    时间: 2004-6-20 21:45

“考虑到零偷的最小几率0.02%”

这个是真的?
作者: snowloveyz    时间: 2004-6-20 21:47

gdd,2004-06-20, 21:45:35
“考虑到零偷的最小几率0.02%”

这个是真的?
这里说的不清楚
我的意思是零偷的基础是建立在最小偷窃几率为0.02%基础上的
所以0.02这个数字确实很受gravity钟爱
赫赫
作者: gdd    时间: 2004-6-20 21:49

有这种故事……
有没有根据

以前想过0偷的问题,猜来猜去感觉要实现这个bug实在要满足很多条件,韩国人居然都满足了着实令我吃惊,不过假如真的设定一个最低值倒是可以理解,这个程序员感觉太好了,完全没有想到外挂的力量……
作者: 寒婷    时间: 2004-6-20 21:51

BTW:ADT的概念早就是公认的了。。。。一直都没去想过ASPD的问题。。只是个相对比较直观的观赏数字而已。。
关键是0.02,真的确认是0.02吗。。。。。——+
作者: 寒婷    时间: 2004-6-20 21:54

十字伤,2004-06-20, 21:43:30
补1个.
二刀刺客的情形则为
ASPD = 200 - [ 1.4* (仅装备右手武器时的ASPD+仅装备左手武器时的ASPD)/ 2]

其他的正在研究ing ... 晚上有事做了.呼呼.
麻烦楼上的4D大大每次发日文资料都翻译成中文好么.
实在头疼.都要发给偶老婆翻译 ....

汗。。。主要是我懒得打字了。。。我承认我很懒。。。所以很多东西都拖着。。。
作者: 龙亲亲    时间: 2004-6-20 22:03

说明了ASPD的数字基本上就是一无用的概念 仅仅拿来看的

最后一句话看懂勒..
作者: sensj    时间: 2004-6-20 22:26

这贴一定要顶
作者: hwank    时间: 2004-6-20 22:41

虽然偶是从不考虑所谓公式问题D(从来只是边砍边喝水再说的)但不可否认是个精华技术贴~~~
作者: 北风破    时间: 2004-6-20 23:06

技术贴兼精华贴,不顶对不起观众啊。。。。。
作者: Yoyo∏糖糖    时间: 2004-6-20 23:08

不错滴
作者: snowloveyz    时间: 2004-6-20 23:30

点点滴滴,2004-06-20, 21:51:59
BTW:ADT的概念早就是公认的了。。。。一直都没去想过ASPD的问题。。只是个相对比较直观的观赏数字而已。。
关键是0.02,真的确认是0.02吗。。。。。——+
0.02是按照公式和日本网站公布的数字推算的
还需要实测支持 呵呵
作者: 寒婷    时间: 2004-6-20 23:36

记得有个地方说到Ro的动作是分成50个frame每秒的……
似乎……
作者: snowloveyz    时间: 2004-6-20 23:46

点点滴滴,2004-06-20, 23:36:37
记得有个地方说到Ro的动作是分成50个frame每秒的……
似乎……
这倒有可能
而且我觉得ro绝大多数时候肯定没有50fps......
作者: snowloveyz    时间: 2004-6-21 00:37

呵呵
偶怎么能不给飞雪大大面子?
作者: GTN    时间: 2004-6-21 05:18

迷惑了,那到底aspd是配1xx.01呢还是1xx.02?
作者: syj911    时间: 2004-6-21 06:07

楼上的问题我也想知道?楼主能否说一下?
作者: 奇迹的杨    时间: 2004-6-21 07:58

笑傲天骄,2004-06-21, 06:09:21
[QUOTE]syj911,2004-06-21, 06:07:58
楼上的问题我也想知道?楼主能否说一下?
楼主不在,不厚道 [/QUOTE]
天骄最厚道...
作者: snowloveyz    时间: 2004-6-21 08:24

那一部分是推测....缺乏实际根据
如果纯按以前的"实测"来说应该是aspd有效到小数点后一位
也就是说 是否整数都无所谓
但这种测试跟测攻击力不同 没保证双盲的情况下结果很难有说服力
因为aspd=188 和aspd=189也只相差约9%而已
而一般测试的aspd是选180左右 180和181只差5%
已经在统计学误差范围之内了 所以偶觉得以前这方面的实测都有些缺陷
作者: snowloveyz    时间: 2004-6-21 08:27

如果真如点点所说和我以前所知
RO每秒能表示的动作不超过50桢
那程序不可能均匀的表示出小数点一位后aspd的动作
aspd不是整数时我们将可以看到时快时慢的攻击
作者: 吉吉降头仔    时间: 2004-6-21 08:48

好像从来都是有时快时慢的啊~
还有这文章有什么意义?
是不是AGI超过一定数值就浪费了呢?
作者: 寒婷    时间: 2004-6-21 08:50

首先,如果真的是用延时循环,我所知道的timestamp可以在winnt下得到的精度10~15毫秒(根据硬件),一般情况下,我可以得到15毫秒,这是winnt的时钟周期,如果稍微使用软件方法,大约是几百微秒的精度。保证0.02秒的精度不是不可能
其次,winnt有时间调节函数,可以控制100纳秒为单位的偏差。用来保证软件时间的同步
还有,我们应该把动画和实际运算分割开来。很多时候本地机器看到的并不是真实的东西。。。
作者: snowloveyz    时间: 2004-6-21 08:57

唉...不明白为什么写出来都关注在后边
偶都说了是按照日版公式做的推测
不过 偶实在看不明白飞雪贴过来的那个网友想说什么
VC里的接口函数timeGetTime()本身可精确至1ms
写一个循环 不停调用此函数至增加20ms跳出循环即可实现0.02s延时了
干该死的CMOS什么事情
或者说 gravity可能是在执行本次攻击动作的相关程序前开始计时
执行完之后检查时钟 不到20ms的就loop去补足20ms
这样攻击速度不会随服务器配置而变化
某些很古老的单机游戏拿到现在的电脑和操作系统上运行
游戏速度会变得特别快 游戏设计者不可能允许这种情况发生
这个20ms的上限很可能是放宽了他服务器和网络条件的最低配置而设定的
当然上限可能根本就不是20ms 这个0.02是日本的funs实测或者估计出来的
他也有可能是0.019秒这样 靠爱好者肉眼的计数已经区别不出了
作者: snowloveyz    时间: 2004-6-21 08:59

吉吉降头仔,2004-06-21, 08:48:51
好像从来都是有时快时慢的啊~
还有这文章有什么意义?
是不是AGI超过一定数值就浪费了呢?
这个就要考虑是网络通信条件造成的还是程序本身就这么写的了
呵呵
作者: 寒婷    时间: 2004-6-21 09:03

楼主,那个函数是精确到毫秒级,但是做不到1毫秒的时间间隔的……

timeGetTime

The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.

DWORD timeGetTime(VOID);
Parameters
This function does not take parameters.

Return Values
Returns the system time, in milliseconds.
作者: 水曜日    时间: 2004-6-21 09:05

希望楼主能用一句话概括中心思想....
作者: 寒婷    时间: 2004-6-21 09:06

水曜日,2004-06-21, 09:05:22
希望楼主能用一句话概括中心思想....
。。什么时候改掉了,应该是这一句:
说明了ASPD的数字基本上就是一无用的概念 仅仅拿来看的
作者: 寒婷    时间: 2004-6-21 09:14

我并不是说各位有伪造数据的倾向 由于我本人是搞学术的
这是一个人类心理学的问题 记数和记时类实验不象测攻击力 电脑给个清楚的数字在那里
是多少就是多少 需要人工记录频率和时间的实验受心理因素影响比各位想象的要大的多

哎呀哎呀。。。。听起来像是在说我呢
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了
作者: snowloveyz    时间: 2004-6-21 09:17

点点滴滴,2004-06-21, 09:03:47
楼主,那个函数是精确到毫秒级,但是做不到1毫秒的时间间隔的……

timeGetTime

The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.

DWORD timeGetTime(VOID);
Parameters
This function does not take parameters.

Return Values
Returns the system time, in milliseconds.
只要一个延时循环的执行速度小过1ms就可以了
然后每个循环check一次时钟 到时间就跳出循环来
作者: snowloveyz    时间: 2004-6-21 09:23

点点滴滴,2004-06-21, 09:14:13
[QUOTE]
我并不是说各位有伪造数据的倾向 由于我本人是搞学术的
这是一个人类心理学的问题 记数和记时类实验不象测攻击力 电脑给个清楚的数字在那里
是多少就是多少 需要人工记录频率和时间的实验受心理因素影响比各位想象的要大的多

哎呀哎呀。。。。听起来像是在说我呢
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了 [/QUOTE]
呵呵 偶是对事不对人
但是我不知道KE封包的那回事.....
你说的从封包里看出aspd包括小数后一位是说客户端送出的aspd信息包括小数点后一位
还是说决定封包里含有攻击指令的频率可以精确到aspd小数点后一位?
作者: 寒婷    时间: 2004-6-21 09:26

snowloveyz,2004-06-21, 09:17:34
[QUOTE]点点滴滴,2004-06-21, 09:03:47
楼主,那个函数是精确到毫秒级,但是做不到1毫秒的时间间隔的……

timeGetTime

The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.

DWORD timeGetTime(VOID);
Parameters
This function does not take parameters.

Return Values
Returns the system time, in milliseconds.
只要一个延时循环的执行速度小过1ms就可以了
然后每个循环check一次时钟 到时间就跳出循环来 [/QUOTE]
只要一个延时循环的执行速度小过1ms就可以了
这个。。。比较麻烦而且没必要。。。

该函数是返回毫秒级的系统时间,如果做循环,执行两次这个函数相减得到才是时钟周期,这个一般的系统硬件自己都不支持1ms的精度。。。

用其他软件方法去做,虽然可以得到百微秒的精度,但是太累,何况一部机器要算多少人的。。。用这种方法耗用资源太大了。。。
我倒宁愿相信是采用系统周期或她的倍数作时钟,然后计算相对误差,每当误差积累到一定限度自动做补正的方法。这个比较正常也省力
不过推测这个。。相对的说来已经没有太大意义了。。。

对配点来说只有一句话,不用去调整agi和dex凑整aspd。。事实上。。0.1秒以内,人是根本没法反应的。。。。
作者: 寒婷    时间: 2004-6-21 09:32

snowloveyz,2004-06-21, 09:23:11
[QUOTE]点点滴滴,2004-06-21, 09:14:13
[QUOTE]
我并不是说各位有伪造数据的倾向 由于我本人是搞学术的
这是一个人类心理学的问题 记数和记时类实验不象测攻击力 电脑给个清楚的数字在那里
是多少就是多少 需要人工记录频率和时间的实验受心理因素影响比各位想象的要大的多

哎呀哎呀。。。。听起来像是在说我呢
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了 [/QUOTE]
呵呵 偶是对事不对人
但是我不知道KE封包的那回事.....
你说的从封包里看出aspd包括小数后一位是说客户端送出的aspd信息包括小数点后一位
还是说决定封包里含有攻击指令的频率可以精确到aspd小数点后一位? [/QUOTE]
Kore源码封包处理段
........
} elsif ($switch eq "00B0" {
$type = unpack("S1",substr($msg, 2, 2));
$val = unpack("S1",substr($msg, 4, 2));
if ($type == 0) {
........
} elsif ($type == 53) {
$chars[$config{'char'}]{'attack_speed'} = 200 - $val/10;
print "Attack Speed: $chars[$config{'char'}]{'attack_speed'}\n" if $config{'debug'};

也就是说服务器返回的封包并不是ASPD,而是一个val
这个val,满足ASPD=200 - val/10,就是这样,所以保留1位的说法是正确的

这张帖子http://bbs.pastein.net/index.php?showtopic=91035
里的原话,出自20楼的rufus君
作者: 奇迹的杨    时间: 2004-6-21 09:32

点点真的好厉害,偶像,亲亲
作者: snowloveyz    时间: 2004-6-21 09:35

如你所说 这样系统资源开销很大
所以需要有一个RO程序的系统周期 每次所有人物的运算都随这个周期的开始而同步开始
所以只需要有一个全局控制程序在那里数timer
只要每个人物的运算都小过系统周期 先运算完的自然结束并且在下一个RO周期到来之前不发出动作就可以了
至于有人物的运算大过系统周期怎么补这个除了把ro服务器端反汇编出来估计看不出
作者: 寒婷    时间: 2004-6-21 09:38

snowloveyz,2004-06-21, 09:35:27
如你所说 这样系统资源开销很大
所以需要有一个RO程序的系统周期 每次所有人物的运算都随这个周期的开始而同步开始
所以只需要有一个全局控制程序在那里数timer
只要每个人物的运算都小过系统周期 先运算完的自然结束并且在下一个RO周期到来之前不发出动作就可以了
至于有人物的运算大过系统周期怎么补这个除了把ro服务器端反汇编出来估计看不出
只有1个Timer是应当的。。。
反汇编么。。。侵犯版权的事情。。偶是不想去做。。。
作者: snowloveyz    时间: 2004-6-21 09:39

偶像啊
KE封包那段明显看出来ASPD只是一个显示值
所谓的val即是ADT 那么系统攻击间隔应当是写成ADT*10*0.002
最小可区分的间隔2ms........
作者: snowloveyz    时间: 2004-6-21 09:52

如果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的倍数

但我觉得从封包里看是对10*ADT取整 因为我们需要ADT尽量小
所以在炼金的例子里dex+4agi除20余1是最合算的?????
作者: Sangria    时间: 2004-6-21 14:00

理性思维为零的人参上……
正因为有PARANOIA的存在,世界才更精彩……
作者: 寒婷    时间: 2004-6-22 12:51

现在大部分操作系统还是10ms,因为硬件技术更新很慢。
我个人的意见偏向于,服务器用的是另外一种模拟的方法,而不是精确到每下攻击都精确到实时的毫秒级,平时我们战斗来说,180以上的aspd只对于连续性的攻击有用,加上人的反应时间,这个程序完全没有精确到实时的毫秒级的必要,只是做了些处理动作,让人感觉是实时。
用模拟的方法去做,不会对实际结果有太大的出入。却可以大大提升服务器效能。
作者: 奇迹的杨    时间: 2004-6-22 12:55

点点。。你是微软的么?
作者: snowloveyz    时间: 2004-6-22 13:12

直观感觉就是补回来丢掉的攻击次数 呵呵
作者: snowloveyz    时间: 2004-6-22 23:43

风飞羽,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也好。
对普通玩家来说
另外有用的是提供了一个简便并且容易记忆的计算和比较攻击速度的计算方法

其实偶写文的时候主要是为了这个地.....
作者: snowloveyz    时间: 2004-6-23 00:45

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

微机原理的事情……考完了就丢还给老师了——+
作者: 波函数    时间: 2004-11-25 14:32

顶技术帖
作者: pole1234    时间: 2004-11-25 15:34

BS 掘墓的
作者: 月夜之幻    时间: 2004-11-25 15:37

虽然看的不是很明白,不过我还是顶了
作者: =幻影=ryj    时间: 2004-11-25 15:58

最近这个讨论得厉害
怎么浮上来的?
作者: 粢飯油條豆漿    时间: 2004-11-25 16:17

好貼一定要頂,讓所有人看到
作者: 水城彩音    时间: 2004-11-25 16:33

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

记得拳套牧师的aspd不。。。
作者: 天邪    时间: 2005-2-26 15:04

本想看明白,可是……
作者: ysydx    时间: 2005-2-26 15:42

<@@> <@@>
作者: 某某    时间: 2005-2-26 15:46

弓虽




欢迎光临 浆糊论坛-RO小站 (http://bbs.rohome.cn/) Powered by Discuz! 7.2