Lua script loop keys press - lua

I have a logitech g102 mouse and i want to create a lua script which will press a different key every time i press the mouse button 4. Specifically i want each time i click the mouse button 4 to loop around 3 keyboard strokes (5,6,7). So if i click the first time my mouse button 4 it will press the number 3, the second time the number 4, third time number 5 and then repeat this as many times i press mouse button 4. I have already tried some code but didnt get anywhere. Can somebody help me?

local keys = {"h", "e", "l", "l", "o"} -- cycle of keys
local idx
local tm = -math.huge
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 4 then
if GetRunningTime() - tm > 2000 then
idx = 0
end
idx = idx % #keys + 1
PressKey(keys[idx])
elseif event == "MOUSE_BUTTON_RELEASED" and arg == 4 then
ReleaseKey(keys[idx])
tm = GetRunningTime()
end
end

Related

Logitech Script: 1st click, 2nd click, 1st click, 2nd click event

what I want to do is if I press the button on my mouse it uses a key like "E" and if I press the button again it uses the key "W", one more time press button "e", and again "w".
Is that possible?
I find this but it's not realy what i want:
https://stackoverflow.com/a/62067519/17803151
local prev_tm_btn5 = -math.huge
function OnEvent(event, arg, family)
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
local tm = GetRunningTime()
local key = tm - prev_tm_btn5 > 2000 and "e" or "w"
prev_tm_btn5 = tm
PressKey(key)
Sleep(15)
ReleaseKey(key)
end
end
thank you !
Try:
local key
function OnEvent(event, arg, family)
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
key = key == "w" and "e" or "w"
PressKey(key)
Sleep(15)
ReleaseKey(key)
end
end

How to make repeated intermitten movement while holding "x" key --> LUA --- LOGITECH

I got this code that makes my mouse drag down if i press mouse 5 while numlock is active, but i want to make my mouse go right and press D at same time for half a second then switch to mouse left and press A at same time and keep repeating this untill i stop pressing mouse5 --- Mouse 5 is IsMouseButtonPressed(5) if youre not familiar with the API
function OnEvent(event, arg)
if IsKeyLockOn("numlock" )then
if IsMouseButtonPressed(5) then
repeat
MoveMouseRelative(0,5)
Sleep(5)
until not IsMouseButtonPressed(1)
end
end
end
How do i make it
Try this code:
local keydir = {[-1]="A", [1]="D"}
local speed = 1
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 and IsKeyLockOn("numlock") then
local dir = -1
repeat
dir = -dir
local time0 = GetRunningTime()
repeat
MoveMouseRelative(dir*speed, 0)
Sleep(15)
until GetRunningTime() - time0 > 500
PressAndReleaseKey(keydir[dir])
Sleep(15)
until not IsMouseButtonPressed(5)
end
end

run simultaneous repeat loops Lua Script Logitech GHUB

This is my first attempt at LUA so bear with me!
I'm trying to combine a couple of functions that I want to loop at the same time, but I can only get them to run sequentially.
Ideally, the function bound to mouse button 6 would start on press and stop on release (currently it doesn't stop at all!!). Separately the function on mouse button 3 would run when it is pressed and stop on release (this one does stop).
At the moment the button 3 loop works as it should, but the button 6 loop doesn't end.
Ideally, I would like both to work and stop on their respective button press and release, AND for them to BOTH run at the same time when both 3 & 6 are pressed at together.
Can this be done and if so what do I need to change to achieve this?
EnablePrimaryMouseButtonEvents(true);
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 6 then
repeat
MoveMouseRelative(300,0)
Sleep(150)
MoveMouseRelative(-300,0)
Sleep(1500)
until event == "MOUSE_BUTTON_RELEASED" and arg == 6
elseif IsMouseButtonPressed(3) then
repeat
MoveMouseRelative(0,300)
Sleep(1000)
until not IsMouseButtonPressed(3)
end
end
Thanks in advance :D
Step 1.
Make sure you're not using MB#4 ("back") in the game.
If you don't use MB#4 in the game, just skip "Step 1".
If some action is assigned to MB#4 in the game, do the following:
choose keyboard button you don't currently use in the game (for example, F12)
goto GHUB (KEYS tab); bind F12 to your physical MB#4
goto game options; bind the action to F12 instead of MB#4
Now when you press physical MB#4, the game sees F12 and activates your old action.
Step 2.
Goto GHUB (SYSTEM tab)
Unbind "Back" from MB#4
Bind "Back" to MB#6
Step 3.
The script.
local all_buttons = {
[4] = { -- mouse button #6
{time=0, x=50 }, -- at time 0 move mouse right 50 pixels
{time=150, x=-50}, -- at time 150 move mouse left 50 pixels
{time=150+1500}, -- at time 150+1500 repeat the loop
},
[3] = { -- right mouse button
{time=0, y=50}, -- at time 0 move mouse down 50 pixels
{time=1000}, -- at time 1000 repeat the loop
}
}
function OnEvent(event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
elseif event == "MOUSE_BUTTON_PRESSED" then
repeat
Sleep(10)
local tm = GetRunningTime()
local some_loop_is_active
for btn_no, info in pairs(all_buttons) do
if not info.started and IsMouseButtonPressed(btn_no) then
info.started = tm
info.next_step = 1
end
some_loop_is_active = some_loop_is_active or info.started
local next_action = info[info.next_step]
if info.started and tm - info.started >= next_action.time then
info.next_step = info.next_step + 1
local x, y = next_action.x, next_action.y
if x or y then
x, y = x or 0, y or 0
local sx, sy = x < 0 and -1 or 1, y < 0 and -1 or 1
x, y = x*sx, y*sy
while x > 0 or y > 0 do
local px, py = x < 127 and x or 127, y < 127 and y or 127
MoveMouseRelative(px*sx, py*sy)
x, y = x-px, y-py
end
else
info.started = nil
end
end
end
until not some_loop_is_active
end
end
You should know that MoveMouseRelative() is limited by 127 pixels.
To move mouse cursor 300 pixels you should invoke it 3 times:
MoveMouseRelative(0,100);MoveMouseRelative(0,100);MoveMouseRelative(0,100)

Logitech Lua combining Rapid Fire with spray

So basically, this is what my script looks like at the moment, it’s a rapid fire macro and reduces the recoil of the guns, however I can never spray with this script for some reason as it’s very slow because I guess it’s reducing the recoil. I was wondering if I could shoot like 4, 5 bullets without any recoil (only auto shoot while holding mouse 3 not while tapping.) and continue with spray like normal spray without any delays while already holding mouse3. So 4 bullets no recoil and rest the regular spray on the same cycle. If that makes any sense. Any help would be greatly appreciated.
EnablePrimaryMouseButtonEvents(true);
function OnEvent(event, arg)
if IsKeyLockOn("scrolllock")then
if IsMouseButtonPressed(3) then
repeat
if IsMouseButtonPressed(3) then
repeat
PressMouseButton(1)
Sleep(15)
ReleaseMouseButton(1)
until not IsMouseButtonPressed(3)
end
until not IsMouseButtonPressed(3)
end
end
end
local rapid_fire_delay = 15 -- delay between simulation of LMB press/release
local LMB_Pressed
do -- initializing PRNG
local dt = 0
for c in GetDate():gmatch"." do
dt = (dt % 65537 * 23456 + c:byte())
end
math.randomseed(dt)
end
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 2 and IsKeyLockOn("scrolllock") then -- RMB press
for j = 1, math.random(4, 5) do -- first 4-5 bullets as rapid-fire
PressMouseButton(1)
Sleep(math.random(rapid_fire_delay, 2*rapid_fire_delay))
ReleaseMouseButton(1)
Sleep(math.random(rapid_fire_delay, 2*rapid_fire_delay))
if not IsMouseButtonPressed(3) then return end -- is RMB pressed?
end
PressMouseButton(1)
LMB_Pressed = true
elseif event == "MOUSE_BUTTON_RELEASED" and arg == 2 and LMB_Pressed then -- RMB release
ReleaseMouseButton(1)
LMB_Pressed = false
elseif event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
repeat
Sleep(15)
PressKey("SPACEBAR")
Sleep(15)
ReleaseKey("SPACEBAR")
until not IsMouseButtonPressed(5)
end
end
The line for j = 1, math.random(4, 5) do means "a random quantity from 4 to 5 bullets".
If you want exactly 3 bullets change this line to for j = 1, 3 do
EDIT:
This is instruction on how to make the rapidfire turn on only after LMB double-click.
Usual slow LMB click will not trigger rapidfire.
local Prev_LMB_Time, LMB_Pressed = 0
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
if IsKeyLockOn("scrolllock") then
local tm = GetRunningTime()
tm, Prev_LMB_Time = tm - Prev_LMB_Time, tm
if tm < 200 then -- LMB double-click
for j = 1, 100 do
PressMouseButton(1)
Sleep(1)
ReleaseMouseButton(1)
Sleep(1)
if not IsMouseButtonPressed(4) then return end
end
end
end
PressMouseButton(1)
LMB_Pressed = true
elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 and LMB_Pressed then
ReleaseMouseButton(1)
LMB_Pressed = false
elseif event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
repeat
Sleep(15)
PressKey("SPACEBAR")
Sleep(15)
ReleaseKey("SPACEBAR")
until not IsMouseButtonPressed(5)
end
end
Currently you have in GHUB:
Primary Click = G1
Back = G4 G8
What you should do in GHUB (in this order):
Bind "Primary Click" to G8 (from now on, use button#8 instead of LMB)
Bind "Back" to G1
Set the script
Now you should have the following:
Primary Click = G8
Back = G1 G4
Mouse button#8 is now "spare LMB" just in case LMB works incorrectly.

Lua Logitech How to have script NOT repeat when button is pressed?

I'm trying to have the below code execute the MoveMouseRelative function only once when mouse button 1 is pressed or held. I've tried removing the "repeat" line but it breaks the code. Currently when activated and mouse 1 is held the cursor is dragged down constantly.
function OnEvent(event, arg)
OutputLogMessage("event = %s, arg = %d\n", event, arg)
if (event == "PROFILE_ACTIVATED") then
EnablePrimaryMouseButtonEvents(true)
elseif event == "PROFILE_DEACTIVATED" then
ReleaseMouseButton(2) -- to prevent it from being stuck on
end
if (event == "MOUSE_BUTTON_PRESSED" and arg == 5) then
recoilx2 = not recoilx2
spot = not spot
end
if (event == "MOUSE_BUTTON_PRESSED" and arg == 1 and recoilx2) then
if recoilx2 then
repeat
--Sleep(35)
Sleep(5)
MoveMouseRelative(0, 3)
until not IsMouseButtonPressed(1)
end
end
Goal: Lua script for Logitech mouse that performs the following tasks:
When mouse button 5 has been "activated":
- Left clicks once every 1000 milliseconds (time in between shots),
- and also pulls the mouse down once every 1000 milliseconds.
So if I hold left mouse button it continuously shoots but only pulls down when it does shoot
Select a keyboard button you never use in the game and set it as the only way to fire the pistol, this key will be used to fire programmatically.
I assume the key is P, but you can choose any other button: "f12", "backspace", "num9", ...
The game must do nothing on left mouse button press.
local fire_button = "P"
function OnEvent(event, arg)
OutputLogMessage("event = %s, arg = %d\n", event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
elseif event == "PROFILE_DEACTIVATED" then
-- to prevent mouse buttons from being stuck on
for j = 1, 5 do ReleaseMouseButton(j) end
end
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
recoilx2 = not recoilx2
end
if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
PressKey(fire_button)
Sleep(50)
ReleaseKey(fire_button)
if recoilx2 then
while IsMouseButtonPressed(1) do
MoveMouseRelative(0, 25)
local next_shot_time = GetRunningTime() + 1000
local LMB
repeat
Sleep(50)
LMB = IsMouseButtonPressed(1)
until not LMB or GetRunningTime() >= next_shot_time
if LMB then
PressKey(fire_button)
Sleep(50)
ReleaseKey(fire_button)
end
end
end
end
end

Resources