|
Start_script - проблема |
|
|
TITaNIC |
15.5.2015, 12:19
|
  
Novice
Сообщений: 67
Регистрация: 2.5.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.450
Возраст: 21

|
После долгой работы кликера удавалось воспроизводить зависания, хотя последнее время они стали появляться реже. Но за эту неделю произошло кое что новенькое: 1. один раз было замечено зависание без ручного включения скрипта(т.е. сначала работало n-е кол-во скриптов, один из них запускает 9й скрипт, он отрабатывает и в конце на запуске второго скрипта зависает с теми же симптомами) 2. пару раз были зависания практически после запуска самого пилота. Т.е. я запустил пилот, включил скрипт, увидел, что забыл раскомментировать строку, остановил все скрипты, исправил, запускаю - зависает. Еще заметил, что если при таком зависании попытаться закрыть пилот - то он вообще повиснет и вырубается только убиванием процесса. Я тут подумал, а не может это быть из-за большого кол-ва скриптов или сложности всей программы? И еще вопрос не в тему: хотел настроить этот скрипт человеку, в итоге: в хроме функции поиска в неактивном окне вообще не работают, в яндексе, если я правильно помню, не работает поиск цвета. Установил ему браузер как у себя(Комодо, у меня в нем все прекрасно работает), не работает поиск картинок. В итоге все более менее заработало в браузере CometBird, с одним но: все поиски работаю через раз, т.е. ставишь, например, определение цвета в заданной точке, после выводишь результат в лог. Картинка на экране статичная. Лог получается примерно такой: Лог
0 0 <корректный цвет> 0 <корректный цвет> 0 и т.д.
в чем может быть проблема? или лучше отдельной темой это запилить?
|
|
|
|
DarkMaster |
15.5.2015, 12:55
|
          
Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Цитата в чем может быть проблема? или лучше отдельной темой это запилить? Думаю да. Скопируйте часть поста и вынесете в новую тему. Я перенесу посты с ответами, если понадобится. Цитата Я тут подумал, а не может это быть из-за большого кол-ва скриптов или сложности всей программы? Некоторые проблемы были из-за количества и скорости обращений между параллельными скриптами, но они лишь усугублялись, а существовали и с 2 вкладками. Понятие сложности скрипта для интерпретатора для меня не очень ясно. Я понимаю, что, например, некоторые конструкции с подстановками генерацией имен переменных из нескольких переменных для пилота являются "сложными" в плане может сожрать, а может не сожрать ибо то, что это работает не более, чем "фича" и возможность не документирована. Но что есть общая сложность? У меня скрипты работали по 1к строк из кучи подпрограмм в одной вкладке и по 5 вкладок +1 вкладка за каждого запущенного чара с самодельными базами данных, координирующими скриптами, контрольными, сборами статистики и т.д. И ничего - шуршало. Были и скрипты которые имели аптайм работы в несколько недель(было бы и больше, но апдейт сильно нарпашивался). В качестве костыля(и в какой-то мере диагностики) могу предложить сделать следующий скрипт: получаем статусы скриптов через get scripts смотрим какие запущены. Заодно можно посмотреть какой статус имеет скрипт в "недозапущенном" состоянии. Если какой-то скрипт не запущен, запускаем его. Так же можно для получения статуса скриптов использовать переменные внутри запускаемый скриптов. Тут есть важный момент: лучше не записывать значения в параллельные скрипты, а считывать их из параллельных. Т.е.: Код Правильно: Скрипт1: set #a 1
Скрипт2: if #a.1 = 1 .... end_if
Лучше не делать: Скрипт1: set #a.2 1
Скрипт2: if #a = 1 ... end_if
По своей сути очень близкие конструкции, однако запись в параллельный скрипт по своей сути гораздо более чревата крашем либо ошибочными данными. На данный момент проблема вроде полностью устранена, но на мой взгляд отсутствие записи в параллельный процесс(в данном случае не процесс, а поток), а только чтение есть правильно и кошерно. Цитата в хроме функции поиска в неактивном окне вообще не работают С разрешения кнайта могу попробовать выдать бетку новой версии. Там есть формочка с тем, что захватил пилот в качестве анализируемого изображения. Возможно это сможет прояснить проблему и заодно будет дополнительный тест хрома. У меня хром древней версии и обновлять я его не хочу - будет вылазить на передний план от кликов мышкой. Цитата 0 0 <корректный цвет> 0 <корректный цвет> 0 и т.д. Кстати совсем забытая проблема. Насколько я понимаю изображение не каждый раз успешно захватывается. Причем если добавить задержек, то скорее всего, проблема решится. В целом хочу обратить внимание на тот факт, что изображения сделанные на одном компьютере могут не подходить на другом. Они могут быть реально разными, но на глаз не отличимыми. Вырежьте изображение на целевой машине и протестируйте на нем. У меня даже на разных учетках на одной винде разные цвета. Сносил дрова видюхи бесчисленное количество раз, сбрасывал настройки отображения и т.д. Так и не понял в чем проблема, но без дополнительно deviation 2-3% я просто не найду изображение.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
TITaNIC |
15.5.2015, 21:47
|
  
Novice
Сообщений: 67
Регистрация: 2.5.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.450
Возраст: 21

|
Цитата Заодно можно посмотреть какой статус имеет скрипт в "недозапущенном" состоянии. он в состоянии running Цитата С разрешения кнайта могу попробовать выдать бетку новой версии. Там есть формочка с тем, что захватил пилот в качестве анализируемого изображения. Возможно это сможет прояснить проблему и заодно будет дополнительный тест хрома можно попробовать, но, как я понимаю, если функции возвращают 0 - значит будет черный квадрат Цитата будет вылазить на передний план от кликов мышкой. о, спасибо! как раз вспомнил, у одного человека такая проблемка была) теперь ясно, что дело в хроме Цитата Причем если добавить задержек, то скорее всего, проблема решится. если вы говорите про задержки между вызовом функции поиска, то там везде в районе 4х секунд стоят Цитата В целом хочу обратить внимание на тот факт, что изображения сделанные на одном компьютере могут не подходить на другом да, это первое, о чем я подумал, после проверки координат и хендлов) результата это не дало
|
|
|
|
DarkMaster |
17.5.2015, 12:23
|
          
Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Цитата если вы имеете ввиду проверять скрипты и включать те, что не включились(из-за зависания), то не выйдет. сейчас опять завис скрипт на запуске второго, создал новый скрипт, который запускает второй скрипт и останавливается - он тоже зависает. создал еще один - и этот завис.
А запускаемый скрипт, который недозапустился перед этим останавливали? Он же по сути является running, т.е. ему сначала надо сделать stop_script, потом уже start_script. Кстати возможно поможет pause|resume_script. Прошу потратить немного времени и все-таки обрезать скрипт до пары строчек, которые будут вызывать зависание. Это в 1 очередь даст возможность выпустить фикс, ну и мне будет существенно легче сделать временный обход, сейчас я просто не могу сесть и писать, т.к. проблема у меня не воспроизвелась.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
TITaNIC |
17.5.2015, 13:21
|
  
Novice
Сообщений: 67
Регистрация: 2.5.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.450
Возраст: 21

|
Цитата А запускаемый скрипт, который недозапустился перед этим останавливали? зависание происходило и при выключенном скрипте и при работающем Цитата Прошу потратить немного времени и все-таки обрезать скрипт до пары строчек, которые будут вызывать зависание. Скрипт 1 Код Скрипт 2 Код set linedelay 20 wait 5s
set #handle findwindow (Darkorbit - Comodo Dragon)
Врядли это вам поможет, т.к. я не могу точно воспроизводить зависания. Они появляются случайно(либо я не вижу связи между их появлением). Как правило, когда скрипты работают примерно полдня, то если остановить их и начать включать\выключать 1й скрипт, то зависания периодически появляются, но было пару раз, когда после долгой работы скриптов и, примерно, 20 включений\выключений 1го скрипта, зависаний так и не было. Я могу вам скинуть архив с моим пилотом, скриптами. Возможно, если они у вас поработают "вхолостую", то вы сможете воспроизвести зависания. P.S. как вариант, при следующем зависании, могу дать покопаться в своем компе)
|
|
|
|
TITaNIC |
20.5.2015, 4:12
|
  
Novice
Сообщений: 67
Регистрация: 2.5.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.450
Возраст: 21

|
Появилась новая инфа Скрипт 6
Код set workwindow #handleFlash.2
:label set $count findimage (0 0 #centerX.2 #centerY.2 (connect.bmp) %arr #handle.2)
if ($count > 80) log Дисконнект call Reconnect %arr[1 1] %arr[1 2] end_if
set $count findimage (0 0 #centerX.2 #centerY.2 (setConnect.bmp) %arr #handle.2)
if ($count > 80) stop_script 3 stop_script 4 pause_script 7 stop_script 5 stop_script 8 pause_script 9 pause_script 10
set $condition $condition.2
set workwindow #handleFlash.2 while ($count > 80) log Обновляю страницу
set workwindow #handle.2 left #refreshX.2 #refreshY.2 stop_script 2 wait 1m
start_script 3 wait 8s set workwindow #handleFlash.2 left #gameStartX.2 #gameStartY.2 wait 25s set $count findimage (0 0 #centerX.2 #centerY.2 (setConnect.bmp) %arr #handle.2) end_while
set $condition.2 $condition
if ($condition = 2142) resume_script 9 else start_script 3 start_script 4 if ($condition = 22) resume_script 8 resume_script 10 end_if if ($condition.2 = 42) start_script 5 end_if end_if resume_script 7
wait 20s goto label
Reconnect #a #b
Код proc Reconnect #a #b set workwindow #handleFlash.2 get windowpos #handleFlash.2 [#x2 #y2[#width #height [#result]]] set #x #a - #x2 set #y #b - #y2
left #x #y wait 20s end_proc Скрипт 2
Код set linedelay 20 wait 5s
set #handle1 findwindow (Darkorbit - Comodo Dragon) set #handle2 findwindow (Darkorbit | Игровой клиент - Comodo Dragon) set #handle #handle1 + #handle2 //log #handle set #handleFlash windowfromcursor
set $petDefense {w} set $jump j
get windowpos #handle [#X1 #Y1 [#width #height [#result]]] get windowpos #handleFlash [#X2 #Y2 [#width #height [#result]]]
set #deltaX #X2 - #X1 set #deltaY #Y2 - #Y1 //log #deltaX #deltaY set $condition
set #countShield 83 set #emptyShield 5263948 set #colorLine 4605510
set #time 6000 set #deltaTime 4000
set #maxDeaths 1
set #EnemyColor1 10087935 set #EnemyColor2 4250111 set #EnemyColor3 3394815 set #EnemyColor4 39935
//Абсолютные set #mapX1 1160 set #mapY1 651 set #mapX2 1435 set #mapY2 861
set #petX1 7 set #petY1 63 set #petX2 273 set #petY2 207
//move #hpX #hpY
set #panelShipX 1438 set #panelShipY 408
set #centerX 957 set #centerY 614
//Относительные set #petStartX 36 set #petStartY 120 set #petMechX #petStartX + 170 set #petMechY #petStartY set #autoCollectX #petMechX set #autoCollectY #petMechY + 84 set #checkPetLeftX #petStartX set #checkPetLeftY #petStartY - 10 //set #checkPetRightX 273 //set #checkPetRightY 201
set #shieldX 757 + #deltaX set #shieldY 333 + #deltaY set #hpX #shieldX set #hpY #shieldY - 5 set #lowHPX 727 set #lowHPY #hpY
//set #base42X 157 //148 //set #base42Y 710 //676
set #base42X 1305 //148 set #base42Y 706 //676
get windowpos #handleFlash #x #y #width #height set #x1 #mapX1 - #x + 40 set #y1 #mapY1 - #y + 60 set #x2 #mapX2 - #x - 20 set #y2 #mapY2 - #y - 25 //log #x1, #y1, #x2, #y2 //pause_script set #gameStartX 718 set #gameStartY 737
set #refreshX 71 set #refreshY 40
set #repButtonX 722 set #repButtonY 595
set #dragMinimapX 217 set #dragMinimapY 605
set #port22to21X 1395 set #port22to21Y 667
set #port21to22X 1395 set #port21to22Y 772 set #port22to24X 1210 set #port22to24Y 770 set #port24to42X 143 set #port24to42Y 777
pause_script
Переписывал тут код, решил кое что в процедурки перенести(вайл тоже был отдельной процедурой). Поясню один момент: в данном случае второе условие может выполнится только если выполнилось первое. Когда переписал, начал тестировать, и внезапно этот скрипт завис на старте 2го скрипта. Включал я тогда и следующие несколько раз 1й скрипт(он запускает несколько скриптов, включая 6й). Убрал вайл из процедуры - всеравно виснет. Попробовал еще несколько раз - стабильно зависает. Написал вначале скрипта остановку 2го, ожидание, старт 2го - не виснет. Зашел в вайл без захода в первое условие - не виснет. Снова попробовал как обычно - повисло. Скинул другу папку с пилотом и скриптами, у него так же зависает. Заменил start_script 2 на start_script 3 - не завис. Поменял обратно - виснет. В первом условии вытащил тело процедуры обратно в скрипт - все стало нормально работать, даже когда обратно все вернул. Завтра в бетке попробую поработать с этими скриптами.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|