關于羅技的隨機延遲


總共講四個問題:1種固定延遲 + 3種隨機延遲
(正態(tài)分布隨機數部分參考https://github.com/Github-Afool4U)
(延遲不準部分參考https://github.com/Github-CHN-FengGe)
不講廢話,用得到羅技里面隨機數的,大多出現在需要連點的情況,比如:
這樣是以固定10ms的延遲進行連點,這樣就引出第一個問題

Sleep()函數其實并不準確

Win10 1909系統(tǒng)以前,Sleep(1) = 1ms,之后的Sleep(1) = 15.6 ms
所以你調好的參數,會因為不同系統(tǒng)對Sleep()函數反饋不同,從而導致效果不同
解決方案:利用GetRunningTime() 解決
GetRunningTime() 獲取腳本運行時間,本身就是精確到毫秒的,兩者相減,如果小于我們所需的延遲,那么什么都不干,就相當于延遲??梢员WC沒有上面提到的 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軸代表改數字出現的次數

大致長這個樣子,而人手點出來,一定不是這個樣子。
比如人類穩(wěn)定發(fā)揮可以每5ms點擊一次,
偶爾發(fā)揮失常會大于5ms,鵝偶爾發(fā)揮超長會小于5ms,大部分都在5ms左右:

應當符合正態(tài)分布,所以應該如何實現呢?
解決方案:

定義一個random()來代替羅技自帶的math.random(),使得輸出的隨機數概率符合正態(tài)分布,更像人手點擊,不容易被檢測,前提是你的隨機數范圍是人類能點擊的區(qū)間。

感謝閱讀

