|
|
|
-Счётчик, -Lua- |
|
|
Levo222 |
27.6.2020, 4:56
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 21.6.2020, 22:48) Код --lua local window_name = {'Блокнот', 'Калькулятор', 'Lineage2'} -- имена окон
log 'clear' log 'mode compact'
for i=1, #window_name do local W = findwindow(window_name[i]) log('Имя окна: ' .. window_name[i]) if W then log('Найдено окон: ' .. tostring(#W)) for j=1, #W do send (x) -- Тут не совсем закрыть окно, а убрать в нём признаки жизни - там есть специальные клавиши end else log('Найдено окон: 0') end log() end И вот теперь мне снизу понадобилось обратно активировать их, чтобы после паузы продолжить работу: Код --lua local window_name = {'Блокнот', 'Калькулятор', 'Lineage2'} -- имена окон
log 'clear' log 'mode compact'
for i=1, #window_name do local W = findwindow(window_name[i]) log('Имя окна: ' .. window_name[i]) if W then log('Найдено окон: ' .. tostring(#W)) for j=1, #W do send (x) -- вернуть обратно активность окну end else log('Найдено окон: 0') --у меня ощущение, что else должна стоять после end - for j=1, #W do... что-то тут не так? end log() end Мне нужно перед новым циклом for обнулять переменную i? Или она не видна уже в этом пространстве? Т.е. получается то тоже самое кодом ниже после паузы, но уже на обратную активацию окон. Тут непонятно, если он не найдёт окно, ему не присвоится 1 в счетчике? И он так и будет гонять верхний цикл по кругу? Или бросит поиск окон и они так и останутся неактивированными?... --------- Короче он ошибку выдаёт, если не находит достаточное количество окон. пишет Table index is nil П.С.: Можно как-то изменить дефолт расположения звуков проигрываемым пилотом? А то там такая музыкальная коллекция собралась, что ничего другого не видно уже.
|
|
|
|
Levo222 |
28.6.2020, 5:55
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 27.6.2020, 15:42) Где скрипт, который выдаёт такую ошибку?
Вобщем нагородил говна, а в какой очередности его воспроизводить незнаю. -
Код --lua log 'clear' log 'mode compact' ----------------Convert_Time--------------- function time (t) local m = math.floor( (math.floor(t) % 3600) / 60) local s = (math.floor(t) % 3600) % 60 return string.format("%02d:%02d", m, s) end --- FIX -------- end end Вобщем есть 3 основных параметра в которые упирается скрипт - Это 1. Оставшееся время 2. Заполненность всех контейнеров(их разрушение индентично заполненности) 3. И проверка текущего статуса Окна(Т.е. идентификация что мы и где мы) При любом нарушении условий одного из этих параметров должен происходить выход. Но в то же время внутри них должен находиться рабочий цикл Я взял за основу время Код while t > os.clock() do
end --while t > os.clock() do И в него поместил счетчик событий Код while t > os.clock() do for forcount=1, 3 do log (count[forcount]) if count [forcount] == 0 then left (H[forcount][1], H[forcount][2]) --если нету свободных (все count = 1) break --выход из for и далее цикл процесса end -- end
end --while t > os.clock() do А перед ним проверку статуса окна, но она же стоит и после, для выхода из основного рабочего цикла для пуска на новый круг проверки статуса окна и проверки значения счётчика Код while t > os.clock() do if WindowLoad (441, 561) == 3026224 for forcount=1, 3 do log (count[forcount]) if count [forcount] == 0 then -- если какой-то контейнер пуст --Выбор (H[forcount][1], H[forcount][2]) break --выход из for в случае и далее цикл процесса else --текущий контейнер полон??? end -- else end end while 1 do -- основной рабочий процесс --в случае нарушения каких-либо параметров из него выкидывает if u = 0 then break else end end end --while t > os.clock() do
И вот получилось то - что получилось вверху. Но сам процесс находится после него, и у меня скрипт постоянно выдаёт ошибку из-за разбросанности end-ов, т.к. циклы и вложенные в них проверки не совпадают по закрытию. Склоняюсь что команда break работает не так, как я думаю и переводит скрипт не в те места где я ожидаю.
|
|
|
|
Levo222 |
28.6.2020, 11:00
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 28.6.2020, 14:45) Код if count == {0, 0, 0} then Это что? А, одно = лишнее)) ИсправилА вот и не лищнее. Это проверка наличия свободных контейнеров при запуске скрипта. Но там не в этом проблема, а в том что цепочка циклов запуталась. Очень мало примеров и практического применения repeat, хотя мне как кажется в таких случаях она бы очень хорошо пригодилась. Цитата(cirus @ 28.6.2020, 14:45) Надо не городить, а понимать что в каком порядке должно выполняться.
Было бы чем понимать.
|
|
|
|
Levo222 |
29.6.2020, 7:11
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Не могу понять, Вот такая конструкция: Код while do
if then else end
if then else end
end
Не работает чтоли? Цитата(cirus @ 28.6.2020, 14:45) if count == {0, 0, 0} then Это что?
А разве таким образом нельзя получать состояние переменных в таблице?
|
|
|
|
Levo222 |
5.7.2020, 11:29
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 6:44) Если пишет значит есть ошибка. Выкладывайте код или ищите ошибку.
Ну Вот: 8
Код --lua log 'clear' log 'mode compact' ----------------Convert_Time--------------- function time (t) local m = math.floor( (math.floor(t) % 3600) / 60) local s = (math.floor(t) % 3600) % 60 return string.format("%02d:%02d", m, s) end do
-------------------Контейнеры---------------- --local H = {{693, 78}, {696, 262}, {685, 451}} -- local H = {{696, 120}, {692, 404}, {704, 491}} -- local window_name = {'W1', 'W2', 'W3', 'W4', 'W5', 'W6'} --ОКНА
local count = {0, 0, 0} ----------------------------------------------------------- log 'clear' log 'mode compact' ----------------time-------------------- local minute = 2.1 -- х.х local t = os.clock() + minute * 60 ----------------------------------------- ----------------Window--------------------- local h = findwindow("W0") local w1 = findwindow("W1") local w2 = findwindow("W2") local w3 = findwindow("W3") local w4 = findwindow("W4") local w5 = findwindow("W5") local w6 = findwindow("W6") -------------------Spot_x---------------------- function HC(x, y) return(color (x, y)) end function NС(x, y) return(color (x, y)) end
function D(x, y) return(color (x, y)) end function D1(x, y) return(color (x, y)) end
function IW(x, y) return(color (x, y)) end function IW1(x, y) return(color (x, y)) end
function PS(x, y) return(color (x, y)) end function AW(x, y) return(color (x, y)) end
function WL(x, y) return(color (x, y)) end function WL2(x, y) return(color (x, y)) end ---------------------------------------------------- workwindow (h [1][1]) ------------- ------------------------- --if (H[1][1], H[1][2]) == (696, 120) then --else (H[1][1], H[1][2]) == (693, 78) then --end -------------------------------------------------------- end --do
------------------- СТАТУС-------------------------------- while t > os.clock() do if h > 0 then log ("окно существует") alarm ("Проверяю загрузку.wav") if IW (10, 100) ~= 0 --НЕ загружен
then log ("Не загружен") if D (58, 575) == 0 and D1 (408, 572) == 1250075 then log ("Сбой") ---------------------------Выключение окон -------------------- for i=1, #window_name do local W = findwindow(window_name[i]) log('Имя окна: ' .. window_name[i]) if W then log('Найдено окон: ' .. tostring(#W)) for j=1, #W do if ActivW(317, 81) == 0 then --окно активно send217 ("выключить") else Wcount[j] = 1 -- записываем если неактивно hint ("Окно неактивно") end end else log('Найдено окон: 0') end end break else end -----------------Список выбора-------------------------------------- log ("Проверяю экран") if WL (441, 561) == 3026224 and WL2 (134, 580) == 1054234 then alarm ("Окно.wav") log ("Список") for forcount=1, 3 do log (count[forcount]) if count [forcount] == 0 then log (H[forcount][1], H[forcount][2]) log (count[forcount]) alarm ("Выбор контейнера.wav") move (H[forcount][1], H[forcount][2]) wait(100) left (H[forcount][1], H[forcount][2]) wait(300) send217 ("Enter") wait(100) while InWorld (10, 100) ~= 0 do --ждём загрузку if InWorld (10, 100) == 0 then break else end wait(200) end --count[forcount] = 1 --присвоили break else end end else end else end
while 1 == 1 do --Выполнять до тех пор пока не будут полны/не произойдёт сбоя hint ("Проверяю") wait (200) hint ("Проверка сбоя") if PS(11, 124) == 16579836 then log ('Сбой') --Send ("выход") wait (500) workwindow (h[1][1]) send217 ("5") wait (500) send217 ("5") wait (5000) send217 ("5") alarm ("выхожу.wav") count[forcount] = 1 -- записываем что он заполнен/бракованный --Выхожу из тех окон ---------------------------Выключение окон -------------------- for i=1, #window_name do local W = findwindow(window_name[i]) log('Имя окна: ' .. window_name[i]) if W then log('Найдено окон: ' .. tostring(#W)) for j=1, #W do if ActivW(317, 81) == 0 then --окно активно send217 ("5") wait(200) else Wcount[j] = 1 -- записываем если неактивно hint ("Окно неактивно") end end else log('Найдено окон: 0') end end --паузу 15 мин-- log ("Делаю паузу 15 мин") wait (150000) if t < os.clock() then break else end wait (20) ---------------------------Включаем ОКНА ОБРАТНО-------------------- for ii=1, #window_name do local WX = findwindow(window_name[ii]) log('Имя окна: ' .. window_name[ii]) if WX then log('Найдено окон: ' .. tostring(#WX)) for jj=1, #W do if ActivW(317, 81) ~= 0 then --окно неактивно send217 ("Enter") wait (2000) --alarm ("Захожу.wav") else Wcount[jj] = 1 -- записываем если активно hint ("Окно ктивно") end --if ActivW(317, 81) end else log('Найдено окон: 0') end end ------После включения окон ------------ break else wait (200) hint ("Нет сбоя") if HC (828, 11) == 7368192 --полон then hint ("Выхожу") workwindow (h[1][1]) alarm ("выхожу.wav") send217 ("5") wait (500) send217 ("5") wait (5000) send217 ("5") count[forcount] = 1 -- запиcываем что Бак на этом шаге счетчика полон break else end -- не полон!... (цикл продолжается) end end else break end end --вышли из цикла времени
if h then hint ("Окно существует") workwindow (h [1][1]) if (D (58, 575) == 0 and D1 (408, 572) == 1250075) then while (D (58, 575) == 0 and D (408, 572) == 1250075) do alarm ("сигнал.wav") wait (1000) alarm (".wav") hint ("Сбой") wait (1000) end else if count == 1 then while count == 1 do alarm ("сигнал.wav") wait (1000) hint ('Баки полны') wait (1000) end else if t < os.clock() then while t < os.clock() do wait (1000) hint ("Время истекло") wait (1000) alarm ("Время истекло.wav") end else end end end else while h < 1 do alarm ("Окно не существует.wav") wait (1000) hint ("Окно не существует") wait (1000) end end
|
|
|
|
Levo222 |
5.7.2020, 11:49
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 15:36) Он же пишет в какой строке ошибка.
Криво скопировано, там будет then Код Вот этого окна он у меня не находит впринципе, пишет nil Хотя теперь не появляется ошибка о нехватке enda, видимо при копировании что-то из "лишних" строк снёс, зато теперь h не находит - уже прогресс)
|
|
|
|
Levo222 |
5.7.2020, 12:08
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(cirus @ 5.7.2020, 16:03) В какой этой?
Немного разница есть в ошибках: Когда пишет nil 56: attempt to compare number with nil где её проверяют, а когда окна вообще нету он на этапе присвоения на h nil пишет 47: attempt to index local 'h' (a nil value) Даже когда задаешь условие не связанное с h в этой строке такая ошибка 56: attempt to compare number with nil
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|