如何使随机数在函数的每次迭代中填充?

我正在创建我的第一个编码项目,使用Lua为我的Logitech鼠标创建宏,我有一个重复函数(autoclick),我希望生成点击之间的随机延迟。

我希望它具有以下特点:

  • 可以使用"scroll lock"切换
  • 实时调整延迟
  • 简单地左键单击并保持单击即可使用

我的代码如下:

    --用于打开/关闭快速射击的按钮
rfLock="scrolllock"

--随机化/逼真使用的快速射击值,以毫秒(ms)为单位
rfLo=45
rfHi=75

EnablePrimaryMouseButtonEvents(true);

function RapidFire()
    if (rfLock==true) then
    if (IsMouseButtonPressed(1)==true)then
    repeat
    ReleaseMouseButton(1)
    sleep (math.random(rfLo,rfHi))
    PressMouseButton(1)
    until not IsMouseButtonPressed(1)

function OnEvent(event, arg)

if IsKeyLockOn(rfLock)then
        rFire=true
    else
        rFire=false
    end

end

我还有另一种方法来处理这个问题吗? 它目前什么也做不了。 我仍在努力弄清楚它,只是想从这里的”大佬”们那里获取知识。提前感谢您。

点赞
用户1847592
用户1847592

我假设你正在使用GHUB(但在LGS中也可以做到)。

步骤0。

你将要修改左键鼠标的行为。

这是一个潜在的危险操作:没有了 LMB,你无法在电脑上做任何事情。

因此你必须创建一个 "备用 LMB"。

例如,如果你不使用 Mouse Button 8,你可以让它像 LMB 一样工作。

前往 GHUB(鼠标设备,"分配" 屏幕,系统选项卡)。

绑定 "Primary click" 到你的物理 MB#8 上。

现在,如果出现问题导致 LMB 停止工作,你可以按 MB#8 而不是 LMB。

也许你不想为 "备用 LMB" 消耗一个鼠标按钮,因为所有的鼠标按钮都用于一些重要的事情。

如果你有一个罗技键盘,你可以使用一个 G-按钮作为 "备用 LMB"(键盘设备,"分配" 屏幕,系统选项卡)。


步骤1。

你在游戏中使用鼠标按钮4("back")吗?

  • 如果是(在游戏中分配了某个动作给 MB#4),则继续执行 "步骤2"。
  • 如果不是(游戏忽略了 MB#4 按下),则跳过 "步骤2" 并继续执行 "步骤3"。

步骤2。

你需要将游戏动作从 MB#4 重新映射到其他键上。

做以下操作:

  • 选择你当前不在游戏中使用的键盘按钮(假设 F12 没有使用)
  • 前往 GHUB(鼠标设备,"分配" 屏幕,键盘选项卡);
  • 绑定 F12 到你的物理 MB#4 上;
  • 在游戏选项中分配游戏动作到 F12,而不是 MB#4。

现在,当你按下物理 MB#4,游戏会收到 F12 并激活游戏动作。

跳过 "步骤3" 并继续执行 "步骤4"。


步骤3。

前往 GHUB(鼠标设备,"分配" 屏幕)。

取消绑定物理 MB#4 上的 "Back"(点击并从下拉菜单中选择 "DISABLE")。

被禁用的 MB#4 将会显示为白色圆形和黑色内部。


步骤4。

设置脚本(见下文)。


步骤5。

前往 GHUB(鼠标设备,"分配" 屏幕,系统选项卡)。

将 "Back" 绑定到你的物理 LMB 上。

你会看到一个关于潜在危险操作的警告。

由于有 "备用 LMB",请允许此操作。

--Button used to turn rapid fire on/off
local rfLock = "scrolllock"

--Rapid fire values used in randomization/realism, in ms (milleseconds).
local rfLo = 45
local rfHi = 75

function OnEvent(event, arg)
   if event == "PROFILE_ACTIVATED" then
      EnablePrimaryMouseButtonEvents(true)
   elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
      PressMouseButton(1)
      if IsKeyLockOn(rfLock) then
         repeat
            Sleep(math.random(rfLo,rfHi))
            if not IsMouseButtonPressed(4) then break end
            ReleaseMouseButton(1)
            Sleep(math.random(rfLo,rfHi))
            PressMouseButton(1)
         until not IsMouseButtonPressed(4)  -- 4 = "Back"
      end
   elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
      ReleaseMouseButton(1)
   end
end
2021-01-28 08:08:22