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

3 страниц V < 1 2 3  
Ответить в эту темуОткрыть новую тему
> -Счётчик, -Lua-
Levo222
сообщение 27.6.2020, 4:56
Сообщение #41


*****

Journeyman
Сообщений: 374
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 279
Пользователь №: 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

П.С.: Можно как-то изменить дефолт расположения звуков проигрываемым пилотом? А то там такая музыкальная коллекция собралась, что ничего другого не видно уже.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.6.2020, 11:42
Сообщение #42


**********

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



Цитата
обнулять переменную i? Или она не видна уже в этом пространстве?

Вывести значение переменной в лог и посмотреть.
Цитата
Короче он ошибку выдаёт

Где скрипт, который выдаёт такую ошибку?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 28.6.2020, 5:55
Сообщение #43


*****

Journeyman
Сообщений: 374
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 279
Пользователь №: 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 работает не так, как я думаю и переводит скрипт не в те места где я ожидаю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.6.2020, 10:45
Сообщение #44


**********

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



Цитата
Вобщем нагородил

Надо не городить, а понимать что в каком порядке должно выполняться.
Цитата
if count == {0, 0, 0} then

Это что?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 28.6.2020, 11:00
Сообщение #45


*****

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



Цитата(cirus @ 28.6.2020, 14:45) *

Код
if count == {0, 0, 0} then

Это что?

А, одно = лишнее)) Исправил
А вот и не лищнее. Это проверка наличия свободных контейнеров при запуске скрипта.

Но там не в этом проблема, а в том что цепочка циклов запуталась.

Очень мало примеров и практического применения repeat, хотя мне как кажется в таких случаях она бы очень хорошо пригодилась.

Цитата(cirus @ 28.6.2020, 14:45) *

Надо не городить, а понимать что в каком порядке должно выполняться.

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


*****

Journeyman
Сообщений: 374
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 279
Пользователь №: 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
Это что?

А разве таким образом нельзя получать состояние переменных в таблице?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.6.2020, 11:05
Сообщение #47


**********

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



Цитата
Вот такая конструкция:
Не работает чтоли?

Работает.
Цитата
А разве таким образом нельзя получать состояние переменных в таблице?

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

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

 

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