Как я могу заставить этот скрипт без отдачи выполнять дополнительное движение моей мыши?

#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