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

 
Ответить в эту темуОткрыть новую тему
> Как перезапустить текущий скрипт (самого себя), Знаю что есть restart_script, но там нет нужного параметра
zumas
сообщение 16.4.2019, 11:09
Сообщение #1


**

Neophyte
Сообщений: 15
Регистрация: 16.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.295
Возраст: 38



Всем привет.
Использую синтаксис Lua, т.е. вначале скрипта пишу
--lua
и погнали...

Итак пишу один кликер. Кликер работает с отдельным их (конторка раскрутки) клиентом (браузерным окном). Скрипт запускает клиент. Делает вход. Выбирает категорию и начинает выполнять работу в зависимости от категории.

Но!!! Иногда этот клиент подвисает.

Я по фону через точку bg_color = color (14, 88) определяю, что прога зависла. Запускаю цикл на 15 итераций с проверкой каждую секунду и если фон нифига не изменился, значит оно зависло.

Далее завершаю работу этого клиента через следующие две строки:
local title_window = getwindowtext (workwindow())
terminate (title_window)


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

Читаю документацию:
Прикрепленное изображение

И вижу, что я могу перезапустить либо всё (а мне не нужно всё, а только текущий),
либо все скрипты, кроме текущего (а мне нужно наоборот только текущий, а все остальные оставить в своём рабочем состоянии)

Попытки перезапустить текущее окно: restart_script (0) , не перезапускает скрипт, а ведёт себя как-то странновато, типа всё подвисает что-ли. Приходиться вручную нажимать кнопку стоп несколько раз. Скорее всего это потому что просто программа не предусматривает дальнейшее выполнение, а считает, что скрипт должен перезапуститься заново, но он не перезапускается и поэтому скрипт продолжает мониторить окно, которого уже нет.

Попытки перезапустить скрипт по имени: restart_script ("test.lua") , а это название тестового скрипта, вообще ничего не делает, а переходит к следующей строке, а она у меня простая:
log ("конец выполнения скрипта")
и поэтому я сразу вижу, что ничего не происходит.

Подскажите как мне перезапустить текущий скрипт без затрагивания других вкладок.

для теста во вкладе 1 создал скрипт и сохранил его под именем test.lua

так не сработало
Код

--lua
log ("скрипт запущен")
wait ("2s")
restart_script (1)
log ("конец выполнения, которого вроде как не должно быть")


и так не сработало:
Код
--lua
log ("скрипт запущен")
wait ("2s")
restart_script ("test.lua")
log ("конец выполнения, которого вроде как не должно быть")


Прикрепленное изображение

Как сделать чтобы заработало?

С уважением.

p.s.
UOpilot v.2.41 WK
windows 10 64 bit, запускаю пилот под администратором,
Intel Core i5,
оперативка 32гб,
SSD и второй HDD заполнены на 60% и на 70%,

т.е вроде как всего хватает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.4.2019, 13:30
Сообщение #2


**********

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



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

Может проще вернуться в начало скрипта.
Код
--lua
while true do
    log ("Начало скрипта")
    while true do
        log ("скрипт запущен" .. "\r\n")
        wait ("2s")
        if 1 == 1 then  -- условие при котором нужно начать скрипт сначала
            break
        end
        log ("конец выполнения, которого вроде как не должно быть")
    end
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
zumas
сообщение 16.4.2019, 14:47
Сообщение #3


**

Neophyte
Сообщений: 15
Регистрация: 16.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.295
Возраст: 38



Цитата(cirus @ 16.4.2019, 13:30) *

Может проще вернуться в начало скрипта.


ну я сделал что-то подобное, правда через repeat, хотя это далеко не проще оказалось.

Дело в том, что у меня куча пользовательских функций. И я рассчитывал, что рестарт я буду вызывать просто в нужной мне функции, а теперь приходиться плясать с бубном через return true|false. А т.к. цепочка функций у меня пока максимум 4, то чтобы вернутся в программу и рестартануть нужно целую кучу кода написать по передаче возврата.

Я же рассчитывал просто на restart_script в в любой своей функции при необходимости. Ох печалька, что restart_script не работает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 17.4.2019, 10:23
Сообщение #4


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1318
Пользователь №: 18.346
Возраст: 25



ну есть несколько вариантов сделать примочки с PID, запустить отдельный скрипт который контролировал ошибки и перезапускал нужный в момент ошибки, переписать на базовый язык пилота...можно решить так
Код

log 1
restart_script 12  // перезапустить скрипт в 12 вкладке
// оставляем пустую строку что бы в лог не вывело log 2
//убираем слежение. не знаю почему но оно снижает шанс ошибки
log 2

даже на стандартном языке пилот дает сбой, но это уже хоть что-то, ведь с lua он сходит сума.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
zumas
сообщение 17.4.2019, 10:29
Сообщение #5


**

Neophyte
Сообщений: 15
Регистрация: 16.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.295
Возраст: 38



Цитата(FREEON @ 17.4.2019, 10:23) *

ну есть несколько вариантов сделать примочки с PID, запустить отдельный скрипт который контролировал ошибки и перезапускал нужный в момент ошибки, переписать на базовый язык пилота...можно решить так


а что такое PID?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 17.4.2019, 10:51
Сообщение #6


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1318
Пользователь №: 18.346
Возраст: 25



Цитата(zumas @ 17.4.2019, 10:29) *

а что такое PID?

https://uopilot.tati.pro/index.php?title=Workwindowpid_(Lua)
Еще минус lua в том что если нет циклов то код будет выполнен в разовом исполнении, а на языке пилота он будет зацикливаться.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
zumas
сообщение 17.4.2019, 12:03
Сообщение #7


**

Neophyte
Сообщений: 15
Регистрация: 16.4.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.295
Возраст: 38



Цитата(FREEON @ 17.4.2019, 10:51) *

https://uopilot.tati.pro/index.php?title=Workwindowpid_(Lua)
Еще минус lua в том что если нет циклов то код будет выполнен в разовом исполнении, а на языке пилота он будет зацикливаться.


ну честно сказать я даже не использовал этот PID. Дело в том, что у меня окно постоянно меняет название, хотя начало остаётся всегда неизменным. Поэтому я использую вариант:
Код
local title_window = getwindowtext (workwindow())
terminate (title_window)


А циклы меня НЕ пугают. Сделать конструкцию типа (как ниже) вообще не вызывает вопросов:
Код

global_cycle = 0
end_cycle = 100 -- чтобы можно было настраивать количество циклов (100 хватает на 2-е суток)
repeat
    log ("clear")
    -- основная программа
    -- ...
until global_cycle == end_cycle
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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