Здравствуйте, гость ( Вход | Регистрация )

5 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> -Счётчик, -Lua-
Levo222
сообщение 20.6.2020, 12:08
Сообщение #1


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Как на Lua создать счетчик последовательного выполнения действия с присвоением каждому действию кликов координат? (с досрочным выходом из цикла в случае достижения макс числа)
code

Код
Local TCicleMax = 3 --максимальное кол-во
Count = Count + 1
local H1 = Kleft(100, 200) --первый контейнер
local H2 = Kleft(100, 300) --второй контейнер
local H3 = Kleft(100, 400) --третий контейнер

local h = findwindow("Containtg")
local t = os.clock()
While t > os.clock() do
  while Контейнер не полон (789, 9) ~= 9078784 do --Выполнять до тех пор пока контейнер не полон
    workwindow (h [1][1])
    hint ("Проверяю заполненность")
    wait (100)
    if  Контейнерполон (789, 9) == 9078785 --
    and что-то еще (10, 82) ~= 0  
    then
      hint ("Контейнер полон")
      alarm ("Контейнер полон.wav")
--но вот как узнать какой контейнер по счёту? потому что всего их 3. И если все 3 гонять по кругу это будет тупо.
      --Смотрим счётчик
      wait (10)
      --Если счётчик 3 (т.е. применялись H1, H2, H3)
      break --т.е. все 3 контейнера полны
   alarm ("Все контейнеры наполнены.wav")
    else --счетчик не 3
      --Проверка следующего контейнера--
      for i=1, #h do
        hint ("Открытие")
        workwindow (h[i][1])
        --drawtext(HNDL, '...\r\n...', 70, 300, 48, 'Segoe Print', 65279, 16000000)
        send217 ("5")
        wait (500)
--Здесь нужна какая-то функция открытия того контейнера, которыйне нажимался еще
        Kleft(Контейнер который не нажимался) --Т.е. H2/H3 второй/третий контейнер
        wait (500)
        send217 ("у")
        wait (1500)
        alarm ("Открытие контейнера.wav")
      end
    else
      hint ("Контейнер не заполнен")
      wait (200)
    end
  end
  alarm ("Завершение работы.wav")
  --log("Завершение работы")
  wait (500)

end

Если достигнуто TCicleMax, т.е. где-то в цикле уже прожимались H2 и H3 то цикл полностью завершает свою работу.
Т.е. важно чтобы скрипт помнил какие контейнеры он уже открывал, чтобы больше к ним не возвращаться.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.6.2020, 13:01
Сообщение #2


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Создать массив, в который записывать выполнялось ли действие. Принцип такой:
Код
--lua
local H = {{100, 200}, {100, 300}, {100, 400}}
local count = {0, 1, 0}  -- изначально массив заполняем нулями, для примера действие 2 уже выполнено

log 'clear'  log 'mode compact'
for i=1, 3 do
    if count [i] == 0 then  -- если действие ещё не выполнялось
        -- тут какое-то условие, если истина, то выполнить действие
        log (H[i][1], H[i][2])
        count[i] = 1  -- записываем что он выполнено
    end
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 20.6.2020, 14:23
Сообщение #3


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 20.6.2020, 17:01) *

Создать массив, в который записывать выполнялось ли действие. Принцип такой:
Код
--lua
local H = {{100, 200}, {100, 300}, {100, 400}}
local count = {0, 1, 0}  -- изначально массив заполняем нулями,

log 'clear'  log 'mode compact'
for i=0, 3 do
    if count [i] == 0 then  -- если действие ещё не выполнялось
        -- тут какое-то условие, если истина, то выполнить действие
        log (H[i][1], H[i][2])
        count[i] = 1  -- записываем что он выполнено
    end
end





Код
--lua
local H = {{100, 200}, {100, 300}, {100, 400}}

local count = {0, 1, 0}  -- изначально массив заполняем нулями, для примера действие 2 уже выполнено

log 'clear'  log 'mode compact'
for i=0, 3 do
    if count [i] == 0 then  -- если действие ещё не выполнялось
        -- тут какое-то условие, если истина, то выполнить действие
        log (H[i][1], H[i][2])
        count[i] = 1  -- записываем что он выполнено
    end
end

как её проверить? Чтобы массив последовательно перебрался?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.6.2020, 17:21
Сообщение #4


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
Чтобы массив последовательно перебрался?

Код
--lua
local H = {{100, 200}, {100, 300}, {100, 400}}

log 'clear'  log 'mode compact'

for i=1, #H do
    log (H[i][1], H[i][2])
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 20.6.2020, 21:37
Сообщение #5


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 20.6.2020, 21:21) *

Код
--lua
local H = {{100, 200}, {100, 300}, {100, 400}}

log 'clear'  log 'mode compact'

for i=1, #H do
    log (H[i][1], H[i][2])
end


Я имел ввиду как действием нажать те координаты, которые еще не нажимались?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.6.2020, 21:45
Сообщение #6


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
как действием нажать те координаты

Вместо log использовать move.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 20.6.2020, 22:02
Сообщение #7


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 21.6.2020, 1:45) *

Вместо log использовать move.

Всё работает вродебы.
Или нет. НиX@я не работает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.6.2020, 22:21
Сообщение #8


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
Тогда нажимаются сразу 2, мне одно надо нажать

break для выхода из цикла.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 20.6.2020, 22:44
Сообщение #9


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 21.6.2020, 2:21) *

break для выхода из цикла.

Тут вот какая проблема, переменная count видна только внутри того цикла for в котром рассчитывается, а когда я выношу её за цикл, то она выдаёт ошибку
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.6.2020, 22:51
Сообщение #10


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
переменная count видна только внутри того цикла for в котром рассчитывается

Объявить её до цикла да и всё.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 20.6.2020, 23:19
Сообщение #11


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 21.6.2020, 2:51) *

Объявить её до цикла да и всё.

Как инициировать полную остановку скрипта?
А то у меня столько breakov получилось, что не поймёшь какой из-них куда ведёт.
В идеале то конечно goto каким-то образом применить, но он вроде не работает?

Если я напишу
Код
if 1 then
1
  else
if 2 then
   2
  else
   if 3 then
    break
   else
   end
end
end

То break выведет скрипт и из двух последних End тоже? Или так и будет гонять их по кругу?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.6.2020, 23:36
Сообщение #12


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
Как инициировать полную остановку скрипта?

Код
end_script()
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 20.6.2020, 23:51
Сообщение #13


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 21.6.2020, 3:36) *

Код
end_script()


Так, а теперь есть скрипт чтобы инициировать очистку мозгов с рабочего стола от разрыва головы пока я писал скрипт?

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.6.2020, 0:02
Сообщение #14


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
То break выведет скрипт и из двух последних End тоже?

break прерывает цикл.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 21.6.2020, 0:04
Сообщение #15


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 21.6.2020, 4:02) *

break прерывает цикл.

То есть в if он не будет работать и сразу выведет за ближайший end "while/for"?

--Upd--
Кажется я знаю зачем придумали
Код
Repeat
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 21.6.2020, 0:42
Сообщение #16


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



почему мне
Код
log (count[i])

Выдаёт nil?
Как его проверить?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.6.2020, 0:47
Сообщение #17


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
Выдаёт nil?

Значит нет такой переменной.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 21.6.2020, 0:49
Сообщение #18


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Мне надо чтобы гоняло цикл пока count полностью не будет перебран

Цитата(cirus @ 21.6.2020, 4:47) *

Значит нет такой переменной.

Так и count[H] тоже выдаёт nil

МММ угу
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.6.2020, 0:56
Сообщение #19


**********

Elder
Сообщений: 2.908
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 18415
Пользователь №: 16.971
Возраст: 29



Цитата
Так и count[H] тоже выдаёт nil

Ответ тот же.
Цитата
Мне надо чтобы гоняло цикл пока count полностью не будет перебран

Где скрипт?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 21.6.2020, 1:00
Сообщение #20


*****

Journeyman
Сообщений: 388
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 297
Пользователь №: 18.689



Цитата(cirus @ 21.6.2020, 4:56) *

Где скрипт?

Вроде дошло
Цитата


Код

while count[i] = 0 do

end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

5 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 10.7.2020, 19:02
Designed by Nickostyle