好像从来都是有时快时慢的啊~
还有这文章有什么意义?
是不是AGI超过一定数值就浪费了呢? [/QUOTE]
这个就要考虑是网络通信条件造成的还是程序本身就这么写的了
呵呵 楼主,那个函数是精确到毫秒级,但是做不到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. 希望楼主能用一句话概括中心思想.... [QUOTE]水曜日,2004-06-21, 09:05:22
希望楼主能用一句话概括中心思想.... [/QUOTE]
。。什么时候改掉了,应该是这一句:
[color=blue]说明了ASPD的数字基本上就是一无用的概念 仅仅拿来看的[/color] [QUOTE]
我并不是说各位有伪造数据的倾向 由于我本人是搞学术的
这是一个人类心理学的问题 记数和记时类实验不象测攻击力 电脑给个清楚的数字在那里
是多少就是多少 需要人工记录频率和时间的实验受心理因素影响比各位想象的要大的多
[/QUOTE]
哎呀哎呀。。。。听起来像是在说我呢 :lol:
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了 :lol: [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. [/QUOTE]
只要一个延时循环的执行速度小过1ms就可以了
然后每个循环check一次时钟 到时间就跳出循环来 [QUOTE]点点滴滴,2004-06-21, 09:14:13
[QUOTE]
我并不是说各位有伪造数据的倾向 由于我本人是搞学术的
这是一个人类心理学的问题 记数和记时类实验不象测攻击力 电脑给个清楚的数字在那里
是多少就是多少 需要人工记录频率和时间的实验受心理因素影响比各位想象的要大的多
[/QUOTE]
哎呀哎呀。。。。听起来像是在说我呢 :lol:
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了 :lol: [/QUOTE]
呵呵 偶是对事不对人
但是我不知道KE封包的那回事..... B)
你说的从封包里看出aspd包括小数后一位是说客户端送出的aspd信息包括小数点后一位
还是说决定封包里含有攻击指令的频率可以精确到aspd小数点后一位? [QUOTE]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. [/QUOTE]
只要一个延时循环的执行速度小过1ms就可以了
然后每个循环check一次时钟 到时间就跳出循环来 [/QUOTE]
只要一个延时循环的执行速度小过1ms就可以了
这个。。。比较麻烦而且没必要。。。
该函数是返回毫秒级的系统时间,如果做循环,执行两次这个函数相减得到才是时钟周期,这个一般的系统硬件自己都不支持1ms的精度。。。
用其他软件方法去做,虽然可以得到百微秒的精度,但是太累,何况一部机器要算多少人的。。。用这种方法耗用资源太大了。。。
我倒宁愿相信是采用系统周期或她的倍数作时钟,然后计算相对误差,每当误差积累到一定限度自动做补正的方法。这个比较正常也省力
不过推测这个。。相对的说来已经没有太大意义了。。。
对配点来说只有一句话,不用去调整agi和dex凑整aspd。。事实上。。0.1秒以内,人是根本没法反应的。。。。 [QUOTE]snowloveyz,2004-06-21, 09:23:11
[QUOTE]点点滴滴,2004-06-21, 09:14:13
[QUOTE]
我并不是说各位有伪造数据的倾向 由于我本人是搞学术的
这是一个人类心理学的问题 记数和记时类实验不象测攻击力 电脑给个清楚的数字在那里
是多少就是多少 需要人工记录频率和时间的实验受心理因素影响比各位想象的要大的多
[/QUOTE]
哎呀哎呀。。。。听起来像是在说我呢 :lol:
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了 :lol: [/QUOTE]
呵呵 偶是对事不对人
但是我不知道KE封包的那回事..... B)
你说的从封包里看出aspd包括小数后一位是说客户端送出的aspd信息包括小数点后一位
还是说决定封包里含有攻击指令的频率可以精确到aspd小数点后一位? [/QUOTE]
[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位的说法是正确的 [/QUOTE]
这张帖子http://bbs.pastein.net/index.php?showtopic=91035
里的原话,出自20楼的rufus君 点点真的好厉害,偶像,亲亲 如你所说 这样系统资源开销很大
所以需要有一个RO程序的系统周期 每次所有人物的运算都随这个周期的开始而同步开始
所以只需要有一个全局控制程序在那里数timer
只要每个人物的运算都小过系统周期 先运算完的自然结束并且在下一个RO周期到来之前不发出动作就可以了
至于有人物的运算大过系统周期怎么补这个除了把ro服务器端反汇编出来估计看不出 [QUOTE]snowloveyz,2004-06-21, 09:35:27
如你所说 这样系统资源开销很大
所以需要有一个RO程序的系统周期 每次所有人物的运算都随这个周期的开始而同步开始
所以只需要有一个全局控制程序在那里数timer
只要每个人物的运算都小过系统周期 先运算完的自然结束并且在下一个RO周期到来之前不发出动作就可以了
至于有人物的运算大过系统周期怎么补这个除了把ro服务器端反汇编出来估计看不出 [/QUOTE]
只有1个Timer是应当的。。。
反汇编么。。。侵犯版权的事情。。偶是不想去做。。。 偶像啊
KE封包那段明显看出来ASPD只是一个显示值
所谓的val即是ADT 那么系统攻击间隔应当是写成ADT*10*0.002
最小可区分的间隔2ms........ 如果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是最合算的????? 理性思维为零的人参上……
正因为有PARANOIA的存在,世界才更精彩…… 现在大部分操作系统还是10ms,因为硬件技术更新很慢。
我个人的意见偏向于,服务器用的是另外一种模拟的方法,而不是精确到每下攻击都精确到实时的毫秒级,平时我们战斗来说,180以上的aspd只对于连续性的攻击有用,加上人的反应时间,这个程序完全没有精确到实时的毫秒级的必要,只是做了些处理动作,让人感觉是实时。
用模拟的方法去做,不会对实际结果有太大的出入。却可以大大提升服务器效能。 点点。。你是微软的么? 直观感觉就是补回来丢掉的攻击次数 呵呵 [QUOTE]风飞羽,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秒之下的。
至于提到程序在时间上的精确控制,那个是有些钻牛角尖了。因为程序并不需要保证每一次攻击的时间间隔都那么精确,可以采用类似于点点提到的补偿的方法,程序只需要保证在一定的时间内总的攻击次数和计算值吻合就可以了。
[color=red]对于一般的玩家来说,只需要知道,没有必要为了ASPD凑整数去配点就可以了。[/color]
显示的状态栏基本上就是拿来好看的似是而非的东西。攻击也好、防御也好、暴击率也好、ASPD也好。 [/QUOTE]
对普通玩家来说
另外有用的是提供了一个简便并且容易记忆的计算和比较攻击速度的计算方法
其实偶写文的时候主要是为了这个地..... [QUOTE]神剑捣浆糊,2004-06-23, 00:17:32
楼主一定是数学课代表,反正俺这被子也别想看懂了。。。
请允许我为这样的好帖指出一小错误,第三条的波水是20%,另外还知道 集水/觉水/剑加速/矛加速/速激发/村正 分别是 5/10/20/20/20/8,但8矛不知道。。。 [/QUOTE]
速激 剑加 枪加都是30%
8矛不加速吧
波水是20%么? 可能偶一直都记错了? 微机原理的事情……考完了就丢还给老师了——+ 顶技术帖 BS 掘墓的 虽然看的不是很明白,不过我还是顶了 最近这个讨论得厉害
怎么浮上来的? 好貼一定要頂,讓所有人看到 那个200也许不是随意定的
关系到最大攻击时间的设定问题
记得拳套牧师的aspd不。。。 本想看明白,可是…… <@@> <@@> 弓虽
页:
1
[2]