actboy168 / YDWE

A Tool to Help the Creation of Warcraft III Map
GNU General Public License v3.0
473 stars 140 forks source link

逆天触发的一个小bug #205

Open ChrisCatCP opened 3 years ago

ChrisCatCP commented 3 years ago

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

actboy168 commented 3 years ago

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

ChrisCatCP commented 3 years ago

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

w4454962 commented 3 years ago

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

actboy168 commented 3 years ago

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

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

ChrisCatCP commented 3 years ago

解决法,把第一个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 直接防止溢出