#lua #logitech-gaming-software
Вопрос:
function OnEvent(event, arg)
OutputLogMessage("event = %s, arg = %dn", event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
elseif event == "PROFILE_DEACTIVATED" then
ReleaseMouseButton(2) -- to prevent it from being stuck on
elseif event == "MOUSE_BUTTON_PRESSED"
and (arg == 5 or arg == 4) then
recoil = recoil ~= arg and arg
elseif event == "MOUSE_BUTTON_PRESSED"
and arg == 1 and recoil == 5 then
MoveMouseRelative(0, -3)
for i = 1, 17 do
MoveMouseRelative(0, 2)
Sleep(15)
if not IsMouseButtonPressed(1) then return end
end
elseif event == "MOUSE_BUTTON_PRESSED"
and arg == 1 and recoil == 4 then
MoveMouseRelative(0, -3)
for i = 1, 35 do
Sleep(15)
MoveMouseRelative(0, 2)
if not IsMouseButtonPressed(1) then return end
end
if not IsMouseButtonPressed(1) then return end
end
end
Это сценарий Lua , мне интересно, как я могу получить начальную позицию мыши и после этого вернуться в исходное положение.
Я попытался добавить MoveMousePosition(x,y)- (32767, 32767 ) в нижней части сценария, но в игре это не сработало . Только на рабочем столе ..
Я просто хочу после перемещения, когда я отпущу щелчок мыши, чтобы вернуться в центр или в первую позицию .
Комментарии:
1. @Егор Скриптунофф — пожалуйста , помогите мне, я знаю вашего эксперта по этим вопросам lua.
2. У меня все еще кружится голова от вашего форматирования, но я думаю, что главная проблема здесь в том, что вы не можете устанавливать абсолютные позиции в относительном режиме (например, в играх). Так ли это на самом деле? Если да, просто используйте
MoveMouseRelative
и отмените свое движение. Итак, для вашего первого сценарияMoveMouseRelative(0, 3 - 17 * 2)
3. я пробовал это раньше, но если я просто нажму на кнопку, похожую на огонь, в течение 2 секунд, она увеличится быстрее, чем в тот момент, когда я захочу, из положения отмены . и если я хочу продолжать нажимать дольше, чем я не могу, потому что функция перемещения(0, 3 — 17 * 2) начнется после того, как «для утверждения» закончится. Мне нужно в этом сценарии ввести , когда щелчок находится на позиции записи, и когда щелчок отпущен, чтобы вернуть эту позицию, в обоих сценариях я хочу добавить это. В любом случае спасибо за информацию об отмене , я подумаю в будущем, чтобы сделать ее с помощью оператора отмены
4. Мне кажется, я понимаю. Следите за общей перемещенной позицией. например, после вызова
MoveMouseRelative
увеличенияMouseMovedY
или чего-то еще (возможно, введете функцию, выполняющую и то, и другое). Затем, всякий раз, когда вы хотите сбросить, используйте сохраненное значение и сбросьте его до 0 (в основном вашеundo()
).5. Я понимаю, что вы сказали, но не могли бы вы привести мне пример ? Я начинаю с этого , мне нужна какая-то переменная, чтобы получить 1, когда мышь перемещается по оси Y, а когда не нажата кнопка(1), чтобы вернуть первую позицию ?
Ответ №1:
Как сказал Luke100000, вам нужно движение «отменить» (то же расстояние с противоположным знаком).
function OnEvent(event, arg)
OutputLogMessage("event = %s, arg = %dn", event, arg)
if event == "PROFILE_ACTIVATED" then
EnablePrimaryMouseButtonEvents(true)
elseif event == "MOUSE_BUTTON_PRESSED" and (arg == 5 or arg == 4) then
recoil = recoil ~= arg and arg
elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and recoil == 5 then
MoveMouseRelative(0, -3)
local n = 0
for i = 1, 17 do
n = n 1
MoveMouseRelative(0, 2)
Sleep(15)
if not IsMouseButtonPressed(1) then break end
end
repeat -- wait for LMB release
until not IsMouseButtonPressed(1)
for i = 1, n do
MoveMouseRelative(0, -2)
end
MoveMouseRelative(0, 3)
elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 and recoil == 4 then
MoveMouseRelative(0, -3)
local n = 0
for i = 1, 35 do
Sleep(15)
n = n 1
MoveMouseRelative(0, 2)
if not IsMouseButtonPressed(1) then break end
end
repeat -- wait for LMB release
until not IsMouseButtonPressed(1)
for i = 1, n do
MoveMouseRelative(0, -2)
end
MoveMouseRelative(0, 3)
end
end
Ответ №2:
Для отмены любых операций нам нужна стопка, в которой вы помните все, что сделали. Но так как у нас есть только одна позиция, и поэтому порядок не имеет значения, мы используем вместо этого простое число для хранения общего числа перемещений x и y.
local movedX = 0
local movedY = 0
function move(x, y)
MoveMouseRelative(x, y)
movedX = movedX x
movedY = movedY y
end
Теперь вы используете, например move(0, 2)
, только.
Чтобы отменить, мы делаем обратное, так как у нас есть число, только вычитая его.
function undo()
MoveMouseRelative(-movedX, -movedY)
movedX = 0
movedY = 0
end
Не связанные, но в вашем цикле не используйте return
«но break
«. Таким образом, вы можете дойти до конца мероприятия и добавить undo()
туда.
Комментарии:
1. Я понял , что мне следует делать, но, как я уже сказал, мне трудно реализовать это в этом сценарии . Даже с первым сценарием мне оказали большую помощь. Я не знаю, как включить это в свой сценарий
2. Надеюсь, это не прозвучит слишком грубо, но я хочу, чтобы вы изучили основы программирования. Stackoverflow может не просто кодировать для вас, а только помогать 🙂