总共讲四个问题:1种固定延迟 + 3种随机延迟
(正态分布随机数部分参考https://github.com/Github-Afool4U)
(延迟不准部分参考https://github.com/Github-CHN-FengGe)
不讲废话,用得到罗技里面随机数的,大多出现在需要连点的情况,比如:
这样是以固定10ms的延迟进行连点,这样就引出
第一个
问题
Sleep()函数其实并不准确
Win10 1909系统以前,Sleep(1) = 1ms,之后的
Sleep(1)
= 15.6 ms
所以你调好的参数,会因为不同系统对Sleep()函数反馈不同,从而导致效果不同
解决方案
:利用GetRunningTime() 解决
GetRunningTime() 获取脚本运行时间,本身就是精确到毫秒的,两者相减,如果小于我们所需的延迟,那么什么都不干,就相当于延迟。可以保证没有上面提到的 1 : 15.6 的差距。
下面说第一种随机延迟
这样就引出
第二个
问题
math.random(m,n)真的是随机数吗
如图,不用过多解释,脚本运行两次,单次里面确实都是随机数,但是第二次与第一次随机的完全重合
如何解决这个问题,就引出
第三个
问题
math.randomseed()随机数种子
可以看到,随机数种子math.randomseed(1) 与 math.randomseed(50),种子不同,得到的随机数也不同,
但我们不可能每运行一次,就手动更改一次种子,所以
GetDate() ,获取当前日期时间,"%H%M%S,输出成时分秒格式,比如现在是下午三点三十分三十秒,输出153030,
这样可以保证每次种子都不同,但是只有秒在变化,153030与153031差别是在太小,所以
:reverse() 逆序,153030,153031 变成了 030351,130351,这样差别就很大了
运行两次,不用手动修改种子,随机数完全不同
第四个
问题
随机数是以怎样的概率分布的
随机分布的,比如math.random(1,10),1ms ~ 10ms 这10个数中,每个数出现的概率是相同的,
如果画一张图,x轴代表数字,y轴代表改数字出现的次数
大致长这个样子,而人手点出来,一定不是这个样子。
比如人类稳定发挥可以每5ms点击一次,
偶尔发挥失常会大于5ms,鹅偶尔发挥超长会小于5ms,大部分都在5ms左右:
应当符合正态分布,所以应该如何实现呢?
解决方案:
定义一个random()来代替罗技自带的math.random(),使得输出的随机数概率符合正态分布,更像人手点击,不容易被检测,前提是你的随机数范围是人类能点击的区间。
感谢阅读