Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

逆天触发的一个小bug #205

Open
ChrisCatCP opened this issue Jun 20, 2021 · 5 comments
Open

逆天触发的一个小bug #205

ChrisCatCP opened this issue Jun 20, 2021 · 5 comments
Labels

Comments

@ChrisCatCP
Copy link

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

@actboy168 actboy168 added the bug label Jun 21, 2021
@actboy168
Copy link
Owner

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

@ChrisCatCP
Copy link
Author

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

@w4454962
Copy link

w4454962 commented Jul 1, 2021

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

@actboy168
Copy link
Owner

解决法,把第一个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
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants