Скрипт не останавливает только клавиатуру

#lua #logitech #logitech-gaming-software

#lua #logitech #logitech-gaming-программное обеспечение

Вопрос:

Привет всем, у меня есть клавиатура G105
, я пытаюсь создать небольшой скрипт, он работает, но он не хочет останавливаться.
я хотел бы включить G1 и выключить G2. спасибо

 

**Macro LIST**

  

     skill Selfbuff -- use after any playmacro "Petx" after reuse time
     1 PlayMacro(selfbuff1) Sleep (1800000) --30 minutes
     2 PlayMacro(selfbuff2) Sleep (600000) -- 10 minutes
     -- add more
     

     Skill Empower -- use after any playmacro "Petx" if none of then are 
  runing, can be at same time with  "Skill Sellbuff" list

       1 PlayMacro(Boost1) Reuse time = 480 seconds,Boosting time = 60 seconds
       2 PlayMacro(Boost2) Reuse time = 600 seconds, Boosting time = 180 seconds
       -- add more


  -- G1 = 2pet
  -- G2 = 3pet

 local function interruptable_sleep(delay)
   local tm = GetRunningTime()   delay
   repeat
      if IsKeyLockOn("scrolllock") then return true end
      local t = tm - GetRunningTime()
      if t > 0 then Sleep(math.min(t, 100)) end
   until t <= 0
 end

 function OnEvent(event, arg)
   if event=="G_PRESSED" and arg==1 then
      repeat
         local exit
         for _, phase in ipairs{
            {macro = "Basicos1", sleep_macro = 16000, },
            {macro = "Pick",     sleep_macro = 2000,  },
            {macro = "Pet1",     sleep_macro = 2000,  },
         -- if  on reuse PlayMacro(selfbuff1),PlayMacro(Selfbuff2), may add more
         -- if  on reuse PlayMacro(boots1),PlayMacro(boost2) may add some
            {macro = "Basicos1", sleep_macro = 16000, },
            {macro = "Pick",     sleep_macro = 2000,  },
            {macro = "Pet2",     sleep_macro = 2000,  },
         -- if  on reuse PlayMacro(selfbuff1),PlayMacro(Selfbuff2), may add more
         -- if  on reuse PlayMacro(boots1),PlayMacro(boost2) may add some
            {macro = "Basicos1", sleep_macro = 16000, },
            {macro = "Pick",     sleep_macro = 2000,  },
         } do
            PlayMacro(phase.macro)
            exit = interruptable_sleep(phase.sleep_macro)
            AbortMacro()
            if exit then break end
         end
      until exit
      PressAndReleaseKey("scrolllock")
   end
 end
 

Я действительно ценю вашу помощь, но я не могу хорошо понять,
Я думаю, что предыдущего объяснения было недостаточно
Я знаю, что не очень разбираюсь в программировании, но кое-что я понял

Это мой полный скрипт для вас

 local function interruptable_sleep(delay)
local tm = GetRunningTime()   delay
 repeat
  if IsKeyLockOn("scrolllock") then return true end
  local t = tm - GetRunningTime()
  if t > 0 then Sleep(math.min(t, 100)) end
until t <= 0
end

function OnEvent(event, arg)
 if event=="G_PRESSED" and arg==1 then
  repeat
     local exit
     for _, phase in ipairs{
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
        {macro = "Pet1",     sleep_macro = 2000,  },
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
        {macro = "Pet2",     sleep_macro = 2000,  },
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
     } do
        PlayMacro(phase.macro)
        exit = interruptable_sleep(phase.sleep_macro)
        AbortMacro()
        if exit then break end
     end
  until exit
    Sleep(250)
  PressAndReleaseKey("scrolllock")
  elseif event=="G_PRESSED" and arg==2 then
  repeat
     local exit
     for _, phase in ipairs{
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
        {macro = "Pet1",     sleep_macro = 2000,  },
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
        {macro = "Pet2",     sleep_macro = 2000,  },
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
        {macro = "Pet3",     sleep_macro = 2000,  },
        {macro = "Basicos1", sleep_macro = 16000, },
        {macro = "Pick",     sleep_macro = 2000,  },
     } do
        PlayMacro(phase.macro)
        exit = interruptable_sleep(phase.sleep_macro)
        AbortMacro()
        if exit then break end
     end
  until exit
    Sleep(250)
  PressAndReleaseKey("scrolllock")
  elseif event=="G_PRESSED" and arg==3 then
  repeat
     local exit
     for _, phase in ipairs{
        {macro = "Basicos1",    sleep_macro = 13000, },
        {macro = "Pick",        sleep_macro = 1000,  },
        {macro = "PetLargo1",   sleep_macro = 2800,  },
        {macro = "Basicos1",    sleep_macro = 13000, },
        {macro = "Pick",        sleep_macro = 1000,  },
        {macro = "PetLargo2",   sleep_macro = 2800,  },
     } do
        PlayMacro(phase.macro)
        exit = interruptable_sleep(phase.sleep_macro)
        AbortMacro()
        if exit then break end
     end
  until exit
    Sleep(250)
  PressAndReleaseKey("scrolllock")
  elseif event=="G_PRESSED" and arg==4 then
  repeat
     local exit
     for _, phase in ipairs{
        {macro = "Basicos1",    sleep_macro = 16000, },
        {macro = "Pick",        sleep_macro = 2000,  },
        {macro = "PetLargo1",   sleep_macro = 2800,  },
        {macro = "Basicos1",    sleep_macro = 16000, },
        {macro = "Pick",        sleep_macro = 2000,  },
        {macro = "PetLargo2",   sleep_macro = 2800,  },
        {macro = "Basicos1",    sleep_macro = 16000, },
        {macro = "Pick",        sleep_macro = 2000,  },
        {macro = "PetLargo3",   sleep_macro = 2800,  },
        {macro = "Basicos1",    sleep_macro = 16000, },
        {macro = "Pick",        sleep_macro = 2000,  },
     } do
        PlayMacro(phase.macro)
        exit = interruptable_sleep(phase.sleep_macro)
        AbortMacro()
        if exit then break end
     end
    until exit
    Sleep(250)
    PressAndReleaseKey("scrolllock")
    elseif event=="G_PRESSED" and arg==5 then
    repeat
     local exit
     for _, phase in ipairs{
        {macro = "Basicos1",    sleep_macro = 16000,},
        {macro = "Pick",        sleep_macro = 500,},
     } do
        PlayMacro(phase.macro)
        exit = interruptable_sleep(phase.sleep_macro)
        AbortMacro()
        if exit then break end
     end
    until exit
    Sleep(250)
   PressAndReleaseKey("scrolllock")
  end
 end
 

Сделано для разных мест в игре для автофермерства

Комментарии:

1. вы забыли задать вопрос

2. в руководстве по API не указано ни одной функции для опроса текущего состояния клавиш G. Вы получаете только событие нажатия и отпускания. Но поскольку вы обрабатываете нажатое событие, вы не можете получить другое событие.

Ответ №1:

Я хотел бы включить G1 и выключить G2.

IMO, невозможно остановить ваш скрипт с помощью G2 или G1.
Но вы можете использовать клавишу прокрутки, чтобы остановить скрипт:

Изначально индикатор блокировки прокрутки не горит.
Вы нажимаете G1, скрипт запускается.
Во время выполнения скрипта вы нажимаете ScrollLock, его индикатор загорается.
Скрипт завершает свою работу и выключает индикатор блокировки прокрутки.

 function OnEvent(event, arg)
    if event=="G_PRESSED" and arg==1 then
        repeat
            for _, Fkey in ipairs{"F1", "F2"} do
                PlayMacro("Basicos")
                for t = 1, 20 do
                    Sleep(1000)
                    if IsKeyLockOn("scrolllock") then break end
                end
                AbortMacro()
                PressAndReleaseKey(Fkey)
                if IsKeyLockOn("scrolllock") then break end
                Sleep(1500)
            end
        until IsKeyLockOn("scrolllock")   -- is ScrollLock LED on?
        PressAndReleaseKey("scrolllock")  -- turn it off
    end
end
 

Обновить

 local function interruptable_sleep(delay)
   local tm = GetRunningTime()   delay
   repeat
      if IsKeyLockOn("scrolllock") then return true end
      local t = tm - GetRunningTime()
      if t > 0 then Sleep(math.min(t, 100)) end
   until t <= 0
end

function OnEvent(event, arg)
   if event=="G_PRESSED" and arg==1 then
      repeat
         local exit
         for _, phase in ipairs{
            {macro = "Basicos", sleep_macro = 13000, fkey = "F1", sleep_fkey = 2000},
            {macro = "Basicos", sleep_macro = 15000, fkey = "F2", sleep_fkey = 1800},
            {macro = "BUFF",    sleep_macro = 5000,  fkey = "F3", sleep_fkey = 2500},
         } do
            PlayMacro(phase.macro)
            exit = interruptable_sleep(phase.sleep_macro)
            AbortMacro()
            if exit then break end
            PressAndReleaseKey(phase.fkey)
            exit = interruptable_sleep(phase.sleep_fkey)
            if exit then break end
         end
      until exit
      PressAndReleaseKey("scrolllock")  
   end
end
 

ОБНОВЛЕНИЕ # 2

 -- G1 = 2pet
-- G2 = 3pet

local function interruptable_sleep(delay)
   local tm = GetRunningTime()   delay
   repeat
      if IsKeyLockOn("scrolllock") then return true end
      local t = tm - GetRunningTime()
      if t > 0 then Sleep(math.min(t, 100)) end
   until t <= 0
end

function OnEvent(event, arg)
   if event=="G_PRESSED" and arg==1 then
      repeat
         local exit
         for _, phase in ipairs{
            {macro = "Basicos1", sleep_macro = 16000, },
            {macro = "Pick",     sleep_macro = 2000,  },
            {macro = "Pet1",     sleep_macro = 2000,  },
            {macro = "Basicos1", sleep_macro = 16000, },
            {macro = "Pick",     sleep_macro = 2000,  },
            {macro = "Pet2",     sleep_macro = 2000,  },
            {macro = "Basicos1", sleep_macro = 16000, },
            {macro = "Pick",     sleep_macro = 2000,  },
         } do
            PlayMacro(phase.macro)
            exit = interruptable_sleep(phase.sleep_macro)
            AbortMacro()
            if exit then break end
         end
      until exit
      PressAndReleaseKey("scrolllock")
   elseif event=="G_PRESSED" and arg==2 then
      local loop_ctr = 0
      repeat
         local exit
         loop_ctr = loop_ctr   1
         for _, phase in ipairs{
            {macro = "Basicos1", sleep_macro = 16000, skip_on_first_loop = false, },
            {macro = "Pick",     sleep_macro = 2000,  skip_on_first_loop = false, },
            {macro = "Pet1",     sleep_macro = 2000,  skip_on_first_loop = false, },
            {macro = "Basicos1", sleep_macro = 16000, skip_on_first_loop = false, },
            {macro = "Pick",     sleep_macro = 2000,  skip_on_first_loop = false, },
            {macro = "Pet2",     sleep_macro = 2000,  skip_on_first_loop = false, },
            {macro = "Basicos1", sleep_macro = 16000, skip_on_first_loop = false, },
            {macro = "Pick",     sleep_macro = 2000,  skip_on_first_loop = false, },
            {macro = "Pet3",     sleep_macro = 2000,  skip_on_first_loop = false, },
            {macro = "Basicos1", sleep_macro = 16000, skip_on_first_loop = false, },
            {macro = "Pick",     sleep_macro = 2000,  skip_on_first_loop = false, },
         } do
            if loop_ctr > 1 or not phase.skip_on_first_loop then
               PlayMacro(phase.macro)
               exit = interruptable_sleep(phase.sleep_macro)
               AbortMacro()
               if exit then break end
            end
         end
      until exit
      PressAndReleaseKey("scrolllock")
   end
end
 

Комментарии:

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

2. Спасибо за помощь. необходимо иметь возможность изменять время ожидания между

3. Tnx для справки, вы мастер

4. Извините, мастер, я такой нуб, я не могу изменить тот, который вы создаете для mi ,, можете ли вы проверить, не звоню ли я,, спасибо

5. Видишь UPDATE #2