Сценарий Ghub: перетащите мышь вниз и автоматически нажмите левую кнопку мыши (LUA)

avatar
Dainzh
8 августа 2021 в 19:25
709
1
1

Итак, в основном я пытался сделать то, что объясняется в заголовке, используя механику сценариев Ghub Lua, опубликовав ниже код того, что у меня есть rn:

EnablePrimaryMouseButtonEvents(true);
function OnEvent(event, arg)
if IsKeyLockOn("capslock")then
if  IsMouseButtonPressed(1)then
   repeat
   MoveMouseRelative(0,4)
   PressMouseButton(1)
   Sleep(1,2)
   ReleaseMouseButton(1)
   until not IsMouseButtonPressed(1)
end
end
end

Проблема в том, что иногда он просто останавливается на полпути вниз, иногда вообще не щелкает. Пробовали несколько способов обойти это, включая изменение того, какая кнопка нажата на мыши, на данный момент это IsMouseButtonPressed(5), который отлично работает, но моя цель - заставить его работать при нажатии MouseButton(1). Если бы это было возможно, я был бы признателен за любую помощь от вас, ребята, заранее спасибо, надеюсь, я дал вам всю необходимую информацию.

Источник

Ответы (1)

avatar
Egor Skriptunoff
10 августа 2021 в 09:48
0

Проблема в том, что невозможно одновременно имитировать нажатие/отпускание ЛКМ и отслеживать его состояние.
Обходной путь ниже:

Шаг 0.
Вы собираетесь изменить поведение левой кнопки мыши.
Это потенциально опасная операция: вы почти ничего не сможете сделать на своем компьютере без ЛКМ.
Поэтому вы должны создать "запасной ЛКМ".
Например, если вы не используете кнопку мыши 8, вы можете заставить ее работать как клон на ЛКМ.
Перейдите в GHUB (устройство мыши, экран «Назначения», вкладка «СИСТЕМА»).
Назначьте «Основной клик» вашему физическому МБ № 8.
Теперь, если что-то пойдет не так и ваша ЛКМ перестанет работать, вы можете нажать MB#8 вместо ЛКМ.


Шаг 1.
Вы используете кнопку мыши 4 ("назад") в игре?

  • Если ДА (некоторое действие в игре установлено на MB#4), перейдите к "Шаг 2".
  • Если НЕТ (игра игнорирует нажатие MB#4), пропустите «Шаг 2» и перейдите к «Шаг 3».

Шаг 2.
Вам нужно переназначить игровое действие с MB#4 на какую-то другую клавишу.
Сделайте следующее:

  • выберите клавишу клавиатуры, которую вы сейчас не используете в игре
    (предположим, что ключ F12 в настоящее время не используется)
  • перейдите в GHUB (мышь, экран "Назначения", вкладка KEYS);
    назначьте F12 вашему физическому MB#4
  • перейдите в настройки игры;
    установите действие игры на F12 вместо MB#4

Теперь, когда вы нажимаете физический MB#4, игра получает F12 и активирует игровое действие.
Пропустите «Шаг 3» и перейдите к «Шаг 4».


Шаг 3.
Перейдите в GHUB (мышь, экран «Назначения»).
Отменить назначение стандартной команды «Назад» физическому MB#4 (нажмите и выберите «ОТКЛЮЧИТЬ» в раскрывающемся меню).
Отключенный MB#4 будет выглядеть как белый круг с черным внутри.


Шаг 4.
Установите скрипт (см. ниже).


Шаг 5.
Перейдите в GHUB (устройство мыши, экран «Назначения», вкладка «СИСТЕМА»).
Назначьте «Назад» вашей физической ЛКМ.
Вы увидите предупреждение о потенциально опасной операции.
Разрешите эту операцию, потому что у вас есть «запасной ЛКМ», если что-то пойдет не так.

function OnEvent(event, arg)
   if event == "PROFILE_ACTIVATED" then
      EnablePrimaryMouseButtonEvents(true)
   elseif event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
      PressMouseButton(1)
      if IsKeyLockOn("capslock") then
         repeat
            MoveMouseRelative(0,4)
            Sleep(10)
            if not IsMouseButtonPressed(4) then break end
            ReleaseMouseButton(1)
            MoveMouseRelative(0,4)
            Sleep(10)
            PressMouseButton(1)
         until not IsMouseButtonPressed(4)  -- 4 = "Back"
      end
   elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
      ReleaseMouseButton(1)
   elseif event == "PROFILE_DEACTIVATED" then
      ReleaseMouseButton(1)
   end
end
Dainzh
10 августа 2021 в 12:53
0

Отличная идея, но что, если я попытаюсь смоделировать нажатие клавиши, а затем переназначу кнопку огня в игре на кнопку ключа, и это сработает, но в большинстве ситуаций было довольно неудобно переключаться между оружием. В качестве альтернативы я мог бы создать второй профиль, который имитирует нажатие клавиши и просто нажатие клавиши нажатием кнопки мыши 1, но это было бы довольно много профилей, должен сказать))

Egor Skriptunoff
10 августа 2021 в 15:43
0

Метод переназначения кнопки огня в игре обычно не работает: если вы назначите две разные кнопки для огня, эти две кнопки не будут работать независимо (игра не позволяет вам нажать 2-ю кнопку огня, пока нажата 1-я кнопка огня).

Dainzh
10 августа 2021 в 18:57
0

Я думаю, что ваша душа - лучшее, что я когда-либо мог получить, правда, но мне каким-то образом удалось сделать только два отдельных профиля для игры, один с автокликом и нажатием мыши, другой просто эмулирует нажатие огнемета и просто тянет мышь вниз, работает, просто прокручивая их с помощью кнопки DPI. Я думаю, что ваше решение слишком сложное, но если у меня возникнут проблемы с моей «установкой», я просто воспользуюсь вместо этого вашим. При всей признательности, я рад, что кто-то действительно ответил с рабочим решением не через 3 года или около того на такую ​​конкретную проблему, еще раз спасибо, приятель)

Egor Skriptunoff
11 августа 2021 в 08:36
0

@Dainzh - one being autoclicking - Интересно. Как именно работает ваш профиль? Как отображаются кнопки огня в игре? Какие аргументы вы передаете PressMouseButton и IsMouseButtonPressed?

Dainzh
11 августа 2021 в 14:09
0

Это для автоклика и перетаскивания вниз: EnablePrimaryMouseButtonEvents(true); function OnEvent(event, arg) if IsKeyLockOn("capslock")then if IsMouseButtonPressed(1)then repeat Sleep(1,2) PressKey("v") MoveMouseRelative(0,3) Sleep(1,2) ReleaseKey("v") until not IsMouseButtonPressed(1) end end end

Dainzh
11 августа 2021 в 14:11
0

Это для простого перетаскивания: EnablePrimaryMouseButtonEvents(true); function OnEvent(event, arg) if IsKeyLockOn("capslock")then if IsMouseButtonPressed(1)then repeat MoveMouseRelative(0,4) PressKey("v") Sleep(1,2) until not IsMouseButtonPressed(1) ReleaseKey("v") end end end

Dainzh
11 августа 2021 в 14:11
0

Я просто сопоставил клавишу для запуска в игре, и теперь я переключаюсь между этими двумя профилями с помощью кнопки DPI. И у меня еще есть свой функциональный ЛКМ, просто нужно отключить капслок.

Egor Skriptunoff
11 августа 2021 в 15:21
0

@Dainzh - Хорошо, вы сопоставили V для огня. Но куда в игре привязывается ЛКМ? Если и V, и ЛКМ сопоставлены для огня, то это означает, что игра позволяет им работать независимо (V работает, пока ЛКМ не работает), что неверно в других играх.

Dainzh
11 августа 2021 в 15:39
0

ЛКМ в игре ни на что не назначена, она работает как обычно в главном меню, но игра также позволяет назначить только одну клавишу на конкретное действие. Ваш вариант полезен, если игра не позволяет это изменение, что, я говорю, весьма полезно.

Egor Skriptunoff
11 августа 2021 в 17:29
0

Спасибо. Да, ваш способ проще и на 100% работоспособен. Проблема только в том, что при нажатии ЛКМ в текстовом поле (например, чтобы ввести свое имя в начале игры) туда автоматически вставляется символ v, поэтому приходится временно отключать скрипт CapsLock.