YDWE icon indicating copy to clipboard operation
YDWE copied to clipboard

逆天触发的一个小bug

Open ChrisCatCP opened this issue 3 years ago • 5 comments

今天查bug的时候偶然发现的 handle * step 可能会等于 另一个有效handle 发生碰撞 1050425*662385 = 1061673 我碰上了1050425这个触发的逆天变量key等于1061673这个计时器 然后触发运行结束把计时器的逆天变量全清空了 导致出现了问题

ChrisCatCP avatar Jun 20 '21 16:06 ChrisCatCP

很久没有维护ydwe了,欢迎提供PR

actboy168 avatar Jun 21 '21 02:06 actboy168

暂时没想到如何解决这个问题。。我不太了解step的作用

ChrisCatCP avatar Jun 21 '21 03:06 ChrisCatCP

解决法,把第一个key的算法 由直接handle*step改成就是key = (((handle-0×100000) & 0×ffff )<<16) | (step & 0×ffff) 并且每一次step+3改成+1 这样区分高低位就不会冲突了, yd由jass的位运算函数, 不知道效率怎么样。

w4454962 avatar Jul 01 '21 00:07 w4454962

解决法,把第一个key的算法 由直接handle*step改成就是key = (((handle-0×100000) & 0×ffff )<<16) | (step & 0×ffff) 并且每一次step+3改成+1 这样区分高低位就不会冲突了, yd由jass的位运算函数, 不知道效率怎么样。

不错的思路。将handle放在低位,step在高位,可以减少一些运算。例如 key = handle + (step << 16)

actboy168 avatar Jul 01 '21 01:07 actboy168

解决法,把第一个key的算法 由直接handle*step改成就是key = (((handle-0×100000) & 0×ffff )<<16) | (step & 0×ffff) 并且每一次step+3改成+1 这样区分高低位就不会冲突了, yd由jass的位运算函数, 不知道效率怎么样。

不错的思路。将handle放在低位,step在高位,可以减少一些运算。例如 key = handle + (step << 16)

我打算直接限制step大小为30000 直接防止溢出

ChrisCatCP avatar Jul 01 '21 01:07 ChrisCatCP