返回列表 发帖
现在大部分操作系统还是10ms,因为硬件技术更新很慢。
我个人的意见偏向于,服务器用的是另外一种模拟的方法,而不是精确到每下攻击都精确到实时的毫秒级,平时我们战斗来说,180以上的aspd只对于连续性的攻击有用,加上人的反应时间,这个程序完全没有精确到实时的毫秒级的必要,只是做了些处理动作,让人感觉是实时。
用模拟的方法去做,不会对实际结果有太大的出入。却可以大大提升服务器效能。
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

理性思维为零的人参上……
正因为有PARANOIA的存在,世界才更精彩……

TOP

如果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是最合算的?????

TOP

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

TOP

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

TOP

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

TOP

点点真的好厉害,偶像,亲亲

TOP

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君
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

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秒以内,人是根本没法反应的。。。。
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

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

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

TOP

点点滴滴,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一次时钟 到时间就跳出循环来

TOP

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

哎呀哎呀。。。。听起来像是在说我呢
从上次某人提供的ke封包代码来看,我们需要知道的,仅仅是aspd精确到小数点后1位
而加1agi和dex都可以提供在这个精度之内的aspd提升,不用特意去控制agi和dex来取整aspd。
一般玩游戏,到这个程度就可以了
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

水曜日,2004-06-21, 09:05:22
希望楼主能用一句话概括中心思想....
。。什么时候改掉了,应该是这一句:
说明了ASPD的数字基本上就是一无用的概念 仅仅拿来看的
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

希望楼主能用一句话概括中心思想....

TOP

楼主,那个函数是精确到毫秒级,但是做不到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.
听说只要两人一起ALT+F4就能得到幸福哦^_^

TOP

返回列表