罗技Lua自动点击脚本仅单次点击(正态分布实现异常)
问题原因及解决方案
你的正态分布版本脚本只执行一次点击的核心问题出在高斯随机函数的计算逻辑上:
当math.random()返回0时,math.log(u1)会得到负无穷,后续计算出的z0会变成NaN(非数值),最终gaussianRandom返回的结果要么是NaN,要么是无效的负数/非整数。而罗技Lua环境中的Sleep函数无法处理这类无效参数,会直接导致循环异常终止,所以脚本只执行了第一次点击就停了。
而区间随机的math.random(min,max)始终返回有效正整数,不会触发这种异常,因此能正常循环。
修正后的脚本代码
local currentTime = GetRunningTime() math.randomseed(currentTime) function gaussianRandom(mean, stddev) local u1, u2 -- 循环获取u1,确保它大于0,避免math.log(0)报错 repeat u1 = math.random() until u1 > 0 u2 = math.random() local z0 = math.sqrt(-2.0 * math.log(u1)) * math.cos(2.0 * math.pi * u2) -- 确保睡眠时间是正整数,符合Sleep函数的参数要求 local sleepTime = mean + z0 * stddev return math.max(1, math.floor(sleepTime)) end function OnEvent(event, arg) while IsMouseButtonPressed(4) do PressAndReleaseMouseButton(1) Sleep(gaussianRandom(800, 200)) end end
关键修改点
- 增加
repeat-until循环确保u1不为0,彻底避免math.log(0)产生的计算异常 - 对计算出的睡眠时间做处理:用
math.floor()转为整数,math.max(1, ...)保证至少1毫秒,避免Sleep接收到负数、0或非整数参数导致脚本终止
内容的提问来源于stack exchange,提问作者thelxix
相关产品推荐
相关产品推荐

