Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты Спотыкаются На Ровном Месте
UoKit.com Форумы > Кликер > UO Pilot
Piloter
Скрипт постоянно выполняется, в нем находятся команды start_script 1 (2,3,4 и т.д.) - время от времени происходит запуск простых скриптов из пары строк, при этом часто вылезают ошибки:
Цитата
UOPilot Message (1: Скриптик.txt)
(0): Ошибка! Проверьте правильность скрипта! EExternal stop_script

и так со всеми вкладками скриптов, код скрипта составлен верно.
еще бывает:
Цитата
uopilot
Invalid pointer operation

Версия пилота 2.18.2, новую (2.18.7) испытывать не хочу, там для меня более критичный баг. Вкладок не переключаю и к пилоту вообще не прикасаюсь до возникновения ошибок.
Скрипты, запускаемые командами start_script 1 (2,3,4 и т.д.) привязаны к различным окнам.
Привязка многих окон к одному скрипту не возможна? Как решить проблему с ошибками?
Piloter
Решил проблему, заменив start_script на:

set #v findwindow (PID окна)
set workwindow #v
и содержимым скрипта

Но set workwindow (PID окна) не работает по непонятным мне причинам.
DarkMaster
какой критичный баг на 18.7, которого нет на 18.2?

set #UOpilot findwindow (UoPilot v2.18.7 WK) //Сворачиваем пилот
showwindow #UOpilot minimize
set workwindow #UOpilot
wait 2s
showwindow // без параметров вытаскивает рабочее окно
stop_script

Прекрасно работает на 2.18.7. Раньше подобного бага не видел. На 2.18.2 так же все проходит в штатном режиме. Проверь корректность возвращаемого хендла.
Piloter
В версии 18.2 скрипт при проверке массива определяет в нем символ, совершает действие (send) и изменяет содержимое массива (на пустой файл). В 18.7 после успешной замены файла скрипт продолжает выполнять команду после if, которая выполнялась до замены, как будто в массиве все еще находится тот символ, до тех пор пока скрипт не будет остановлен и запущен заново.

load_array %arr F:\QIP\Users\111111111\History\222222222.txt
set #n size (%arr) - 1
set $lastPost %arr [#n]
if $lastPost = 1
send 1
load_array %arr F:\QIP\Users\111111111\History\0.txt
save_array %arr F:\QIP\Users\111111111\History\222222222.txt
end_if
if $lastPost = 2
send 2
load_array %arr F:\QIP\Users\111111111\History\0.txt
save_array %arr F:\QIP\Users\111111111\History\222222222.txt
end_if
if $lastPost = 3
send 3
load_array %arr F:\QIP\Users\111111111\History\0.txt
save_array %arr F:\QIP\Users\111111111\History\222222222.txt
end_if
if $lastPost = 4
send 4
load_array %arr F:\QIP\Users\111111111\History\0.txt
save_array %arr F:\QIP\Users\111111111\History\222222222.txt
end_if
if $lastPost = 5
send 5
load_array %arr F:\QIP\Users\111111111\History\0.txt
save_array %arr F:\QIP\Users\111111111\History\222222222.txt
end_if
Zeleax
Вот еще свежий пример:
В самом начале скрипта 0 вызывается скрипт 1 (только 1 раз). Оба скрипта работают постоянно (замкнутые циклы в каждом).
Активная вкладка - скрипт 0. Если теперь кликнуть на вкладке скрипта 1, то появится окно с сообщением об ошибке (копию скрина приложу чуть позже). При этом оба скрипта все-равно будут работать дальше.
Zeleax
Код
set logging clear
set logging test1 // вот тут зависнет при повторном запуске скрипта
set logging open // появляется окошко лога
stop_script


Если окошко лога закрыть, нажав на крестик справа вверху, то сразу при повторном запуске скрипта UOPilot зависнет намертво

P.S.: куда-то WKnight пропал... (((
DarkMaster
более того фикс уже существует, но версия не выложена. я писал в пм кнайту - молчит.
Zeleax
У меня скрипт иногда не находил цвет в нужном месте, хотя он там точно был.
Долго не мог понять почему так происходит, наконец-то докопался- выкладываю:

Возникновение ошибки:
1) запускаем UOPilot, запускаем скрипт на выполнение - возникает сообщение об ошибке (msg)
Примечание: указанные координата 26, 180 и цвет 16777215 находятся под буквой "О" файла Описание
Изображение

2) закрываем Окошко с сообщением об ошибке. Проверяем, чтоб окно UOPilot было активным, наводим курсор мыши в любую точку окна приложения (хоть на то же слово Описание) и жмем Ctrl+A (определить координаты и цвет). Запускаем скрипт снова - теперь всё работает! Вот такой вот прикол...
Изображение

Т.е. чтобы цвет определялся верно нужно перед стартом скрипта определить с помощью Ctrl+A цвет и координаты любой точки внутри окна приложения.

Теперь UOPilot будет правильно определять цвет точки (до следующего нового запуска УОПилота).

P.S.: WKnight молчит по этому поводу или вообще (и давно)? Может у него что случилось???
Zeleax
Такое впечатление, что if <координаты> <цвет> работает правильно только в одном скрипте - для которого нажимали Ctrl+A (еще не успел проверить точно)
Destruction
Цитата(Zeleax @ 22.11.2010, 16:56) *

Такое впечатление, что if <координаты> <цвет> работает правильно только в одном скрипте - для которого нажимали Ctrl+A (еще не успел проверить точно)

Про абсолютные координаты почитайте.
Zeleax
Цитата(Destruction @ 22.11.2010, 23:07) *

Про абсолютные координаты почитайте.

Вы это к чему? smile.gif
Разве if <коорд> <цвет> имеет несколько режимов работы?
DarkMaster
ну вообще то да.
if 123 321 789 будет искать исходя из того, что точка 0.0 это левый верхний угол рабочего окна.
if 123 321 789 abs будет считать точку 0.0 левую верхнюю точку экрана.
Zeleax
Казалось бы - где может произойти ошибка в нижеуказанном выражении?
Код
set #x ( #dist * #dX / #max ) + #centerX

Все переменные заданы и имеют целый тип. #max<>0
Ошибка вылетела неожиданно и очень меня удивила cool.gif
(402): Пропущено значение (pos:5)

Некоторое время ругался и плевался, пока не понял в чем тут могло быть дело. laugh.gif
Варианты есть?

Завтра отвечу из-за чего произошла ошибка tongue.gif
Destruction
Цитата(Zeleax @ 24.11.2010, 0:03) *

Казалось бы - где может произойти ошибка в нижеуказанном выражении?
Код
set #x ( #dist * #dX / #max ) + #centerX

Все переменные заданы и имеют целый тип. #max<>0
Ошибка вылетела неожиданно и очень меня удивила cool.gif
(402): Пропущено значение (pos:5)

Некоторое время ругался и плевался, пока не понял в чем тут могло быть дело. laugh.gif
Варианты есть?

Завтра отвечу из-за чего произошла ошибка tongue.gif

Проверяйте значения переменных...

Код
set #dist 1
set #dX 2
set #max 3
set #centerX 4
set #x ( #dist * #dX / #max ) + #centerX
end_script


Ошибок нет.
Zeleax
Цитата(Destruction @ 24.11.2010, 0:52) *

Проверяйте значения переменных...

Всё проверено! Все переменные целого типа и не равны нулю. Также они не являются очень большими по модулю величинами
Каждое значение находится в диапазоне от -50 до +50 rolleyes.gif
Destruction
Цитата(Zeleax @ 24.11.2010, 1:06) *

Всё проверено! Все переменные целого типа и не равны нулю. Также они не являются очень большими по модулю величинами
Каждое значение находится в диапазоне от -50 до +50 rolleyes.gif

Пример из моего поста у вас запускается корректно?
Zeleax
Цитата(Destruction @ 24.11.2010, 2:10) *

Пример из моего поста у вас запускается корректно?

Да. Именно поэтому я не мог понять что же тут может не работать, если всё настолько прозрачно
Напоминаю: Причину я уже нашел. Вопрос задал, чтобы людям было не скучно - вдруг похожая проблема появится smile.gif
Ответ скажу днем или вечером wink.gif
DarkMaster
Нельзя умножать отрицательные значения. Юзай скобки. Буквально пару дней назад сия радость меня обошла стороной. Умнажал на отрицательное, но значение было в скобках.
set #dist 1
set #dX -1
set #x #dist * #dX
end_script
Volv_S
Я также сталкиваюсь с проблемой сбоя в работе скриптов. Юзаю два следущих скрипта:
Код

// Part 1__ скрипт для окна ДД  4334608 10828808

set #k 3 // taregt EE
while 50, 58 12406016 // контроль МП у ДД (если условие не выполнено, то ЕЕ сама себя заливает)
End_while
set #k 0
wait 1000
set #k 4 // target DD
While_not 135, 58 12406016  // контроль МП (заливка ДД до положения маны 80-85%)
End_while
set #k 0
wait 1000



Код

// Part 2__скрипт для окна ЕЕ


set #n 0
:0
set timer
send F3 1000 // таргет ЕЕ
send F5 600 // пов
WHILE timer < 24000
  send F3 400 // таргет ЕЕ
  send F2 1000   // заливка МП
  set #n #n + 1
    If #n = 10
       send F3 1000 // таргет ЕЕ
       send F11 1000 // bSpiritshot
       send F1 1000 // хил
       set #n 0
     End_if
END_WHILE
send F4 1000  //таргет ДД
send F5 2000  // пов
START_script 0
wait 300
WHILE timer < 270000
     IF #k.0 = 3
        send F3 400  // таргет ЕЕ
        send F2 1000  // заливка МП
        set #n #n + 1
     END_IF
     IF #k.0 = 4
        send F4 400  //таргет ДД
        send F2 1000  // заливка мп
        set #n #n + 1
     END_IF
     IF #n = 10
         send F3 1000 // таргет ЕЕ
         send F11 1000 // bSpiritshot
         send F1 1000  // хил
         set #n 0
     END_IF
END_WHILE
STOP_script 0
GOTO 0


Определенное время скрипты работают нормально, это можеть быть как одна минута, так несколько часов, но приходит момент и в первом скрипте выдется ошибка и работа стопорится,- нада перезапускать пилот. Ошибки стали вылетать при переходе на пилот версии 2.18. До этого пользовался пилотом 2.15 и никаких проблем не было - перешол на пилот 2.18 так как он работает пошустрее.
DarkMaster
START_script 0
STOP_script 0
на данный момент глючить из-за этого может. все усугубляется, если скрипты друг друга перезапускают.
Zeleax
Цитата(DarkMaster @ 24.11.2010, 7:12) *

Нельзя умножать отрицательные значения. Юзай скобки. Буквально пару дней назад сия радость меня обошла стороной. Умнажал на отрицательное, но значение было в скобках

Совершенно верно! smile.gif
Код
set #x ( #dist * #dX / #max ) + #centerX

Значением #dX было отрицательное число -5. В итоге интерпретатор собрал следующее выражение:
set #x ( 180 * - 5 / 300 ) + 520 И программа спотыкнулась

Поэтому пришлось записать так, чтоб заработало:
Код
set #x ( #dist * ( #dX ) / #max ) + #centerX
Volv_S
тогда почему в пилоте 2.15 все норм работает, а в пилоте 2.18 переодически вылетают ошибки?
DarkMaster
потому что появилась ошибка: при переключении вкладок выелатало окно с ошибкой. когда правили переключение вкладок отломали перезапуск скриптов.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.