#lua #scripting #mouse #logitech-gaming-software #aim
#lua #сценарии #мышь #logitech-игры-программное обеспечение #цель
Вопрос:
Я новичок в написании сценариев и понятия не имею, что я делаю. Нашел приведенный ниже код в Интернете и хочу внести в него коррективы. Итак, в принципе, в fallout 4, допустим, изначально отдача пистолета идет вверх и влево, но затем на полпути к выстрелу она уходит вправо. Я хочу, чтобы сценарий изначально мог перемещать мышь вниз и вправо, а затем (когда отдача оружия начнет идти в другом направлении) двигаться влево. Возможно ли это?
EnablePrimaryMouseButtonEvents (true);
function OnEvent(event,arg)
if IsKeyLockOn("numlock")then
if IsMouseButtonPressed(3)then
repeat
if IsMouseButtonPressed(1) then
repeat
MoveMouseRelative(-1,13)
Sleep(75)
until not IsMouseButtonPressed(1)
end
until not IsMouseButtonPressed(3)
end
end
end
Выше приведен сценарий, который я использую для перемещения мыши вниз при нажатии кнопок съемки в Fallout 4, потому что у меня есть проблемы, которые мешают мне противостоять отдаче.
Я хочу, чтобы скрипт не только перемещался вниз и немного влево (MoveMouseRelative (-1,13)), но я хочу иметь возможность указать, что через определенное время я хочу, чтобы скрипт двигался в другом направлении, которое, опять же, я могу указать.
Как бы я это сделал? Я полагаю, что это сценарий LUA или что-то в этом роде, и я использую мышь logitech
Ответ №1:
EnablePrimaryMouseButtonEvents(true)
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 1 and IsMouseButtonPressed(3) and IsKeyLockOn("numlock") then
-- first group of moves: 10 steps in direction (-1,13), total group time = 750 ms
for i = 1, 10 do
MoveMouseRelative(-1,13)
Sleep(75)
if not IsMouseButtonPressed(1) then return end
end
-- second group of moves: 5 steps in direction (1,12), total group time = 375 ms
for i = 1, 5 do
MoveMouseRelative(1,12)
Sleep(75)
if not IsMouseButtonPressed(1) then return end
end
-- you can add more groups
end
if event == "MOUSE_BUTTON_PRESSED" and arg == 1 and IsMouseButtonPressed(3) and IsKeyLockOn("scrolllock") then
-- first group of moves: 10 steps in direction (-1,13), total group time = 750 ms
for i = 1, 10 do
MoveMouseRelative(-1,13)
Sleep(75)
if not IsMouseButtonPressed(1) then return end
end
-- second group of moves: 5 steps in direction (1,12), total group time = 375 ms
for i = 1, 5 do
MoveMouseRelative(1,12)
Sleep(75)
if not IsMouseButtonPressed(1) then return end
end
-- you can add more groups
end
end
Обновить:
Шаг 0.
Вы собираетесь изменить поведение левой кнопки мыши.
Это потенциально опасная операция: вы почти ничего не можете сделать на своем компьютере без LMB.
Поэтому вы должны создать «запасной LMB».
Например, если вы не используете кнопку мыши 8, вы можете заставить ее действовать как клон на LMB.
Перейдите к большому изображению мыши в LGS иназначьте команду «Щелкнуть левой кнопкой мыши» вашему физическому MB # 8.
Теперь, если что-то пойдет не так, и ваш LMB перестанет работать, вы можете нажать MB # 8 вместо LMB.
Шаг 1.
Используете ли вы кнопку мыши 4 («Назад») в игре?
- Если ДА (для какого-либо действия в игре установлено значение MB # 4), перейдите к «Шагу 2».
- Если НЕТ (игра игнорирует нажатие MB # 4), пропустите «Шаг 2» и перейдите к «Шагу 3».
Шаг 2.
Вам нужно переназначить игровое действие с MB # 4 на какой-либо другой ключ.
Выполните следующие действия:
- выберите клавишу клавиатуры, которую вы в данный момент не используете в игре
(предположимF12
, что клавиша в данный момент не используется) - перейдите к большому изображению мыши в LGS и назначьте команду
F12
своему физическому MB # 4 - перейдите в настройки игры и установите игровое действие
F12
вместо MB # 4
В результате, когда вы нажимаете физический MB # 4, игра получает F12
и активирует игровое действие.
Теперь пропустите «Шаг 3» и перейдите к «Шагу 4».
Шаг 3.
Перейдите к большому изображению мыши в LGS.
Отмените назначение стандартной команды «Назад» из физического MB # 4 (выберите «Отменить назначение» из выпадающего меню).
Шаг 4.
Установите скрипт (см. Ниже).
Шаг 5.
Перейдите к большому изображению мыши в LGS.
Назначьте команду «Назад» своему физическому LMB.
Вы увидите предупреждение о потенциально опасной операции.
Разрешите эту операцию, потому что у вас есть «запасной LMB», если что-то пойдет не так.
-- rapid fire (CAPSLOCK) is independent from anti-recoil (NUMLOCK and SCROLLLOCK)
local rapid_fire_interval = 30 -- milliseconds between LMB press/release simulation
local LMB_down, rapid_fire, prev_time, next_LMB_time
local function PressOrReleaseLMB(only_release)
if LMB_down then
ReleaseMouseButton(1)
LMB_down = false
elseif not only_release then
PressMouseButton(1)
LMB_down = true
end
end
local function Sleep_with_rapid_fire(ms)
-- returns true if LMB was released by user
prev_time = prev_time ms
while GetRunningTime() < prev_time do
Sleep(10)
if not IsMouseButtonPressed(4) then
return true
end
while rapid_fire and GetRunningTime() >= next_LMB_time then
next_LMB_time = next_LMB_time rapid_fire_interval
PressOrReleaseLMB() -- press LMB (if it's up) or release LMB (if it's down)
end
end
end
function OnEvent(event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
elseif event == "PROFILE_DEACTIVATED" or event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
PressOrReleaseLMB(true) -- release LMB
elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
PressOrReleaseLMB() -- press LMB
prev_time = GetRunningTime()
next_LMB_time = prev_time rapid_fire_interval
rapid_fire = IsKeyLockOn("capslock")
if IsMouseButtonPressed(3) then -- RMB pressed
if IsKeyLockOn("numlock") then
-- first group of moves: 10 steps in direction (-1,13), total group time = 750 ms
for i = 1, 10 do
MoveMouseRelative(-1,13)
if Sleep_with_rapid_fire(75) then return end
end
-- second group of moves: 5 steps in direction (1,12), total group time = 375 ms
for i = 1, 5 do
MoveMouseRelative(1,12)
if Sleep_with_rapid_fire(75) then return end
end
-- you can add more groups
elseif IsKeyLockOn("scrolllock") then
-- first group of moves: 10 steps in direction (-1,13), total group time = 750 ms
for i = 1, 10 do
MoveMouseRelative(-1,13)
if Sleep_with_rapid_fire(75) then return end
end
-- second group of moves: 5 steps in direction (1,12), total group time = 375 ms
for i = 1, 5 do
MoveMouseRelative(1,12)
if Sleep_with_rapid_fire(75) then return end
end
-- you can add more groups
end
end
Sleep_with_rapid_fire(math.huge) -- until user released LMB
end
end
Комментарии:
1. Что означает часть «for i = 1, 10 do»? И как я буду вносить изменения? Например, скажем, в течение 2 секунд я хотел бы, чтобы мышь тянулась вниз, а затем через 2 секунды я хочу, чтобы она тянулась вверх?
2.
What does the "for i = 1, 10 do" part mean?
— Это означает «повторить 10 раз».10*75 = 750ms
Если вам нужно 2 секунды, попробуйте27*75
3.
MoveMouseRelative(0,12)
— вниз,MoveMouseRelative(0,-12)
— вверх4. Я просто хочу сказать, что я действительно ценю помощь и поэтому за любые глупые вопросы, хахах! Как я могу заставить скрипт просто продолжать самый последний ‘MoveMouseRelative’ бесконечно, пока я не отпущу кнопки мыши 1 и 3? В исходном сценарии у меня был MoveMouseRelative, который продолжался вечно, пока я не изменил отпустить мышь 1 и 3, чего я также хотел бы достичь здесь
5.
How would I make the script just continue the very last 'MoveMouseRelative' infinitely
— Установить очень большой предел цикла, например,for i = 1, 1000000 do