Page 1 of 2
unhandled exception in parcer;parse error;abnormal program t
Posted: 2005-03-12 21:43:56
by J17
Проблема:
unhandled exception in parcer; parse error in line XXXX; abnormal program termiation.
У меня есть несколько сложных, но очень отлаженных скриптов.
Но регулярно во время работы скриптов появляется одно из сообщений, что я написал выше, и клиент выснет. Причем, parse error показывает совершенно случайный номер строки - может показать, например, номер 937, когда в скрипте только 700 строк. Синтаксических ошибок в скриптах нет - 100%.
Приходится снимать задачу - client.exe - и запускать заново.
Повторяется на любой машине. Версия инжекта 501.?? (4VI). Клиент 2.0.3.
P.S. Заметил такую закономерность - если комп меньше загружен, то скрипт сможет проработать дольше. Если запустить сразу несколько клиентов, то инжект слетает за 15 минут...
Что это такое? Встречался ли кто-нибудь с чем-то подобным? Может, что-то настроить можно?
Posted: 2005-03-14 11:48:42
by MazaFaka
у меня было такое !
када в команде sayu писались русские слова
и када в скрипт состоял из нескольких функций одна из которых порождала саму себя
Posted: 2005-03-14 11:57:53
by J17
MazaFaka wrote:и када в скрипт состоял из нескольких функций одна из которых порождала саму себя
В смысле рекурсивный вызов?
Хм... рекурсия в этих скриптах и вправду есть... А никто не подскажет, какова у инжекта глубина стека функций? Может, Yoko отпостит?
Posted: 2005-03-14 15:45:19
by Yoko
официально автор скриптового модуля заявил, что любая, пока есть память.
лично я не рискую использовать рекурсию в своих скриптах, стабильность и так низкая.
Posted: 2005-03-15 17:42:16
by Edred
DalamarDword6567614D wrote:MazaFaka wrote:и када в скрипт состоял из нескольких функций одна из которых порождала саму себя
В смысле рекурсивный вызов?
Хм... рекурсия в этих скриптах и вправду есть... А никто не подскажет, какова у инжекта глубина стека функций? Может, Yoko отпостит?
100-150 вызовов без проблем.
А вообще рекомендую взять инжект 312.19 и потестировать эти скрипты на нем (если, конечно, в скриптах не задействованы новые команды). По моим наблюдениям стабильность гораздо выше.
Posted: 2005-03-15 17:53:37
by J17
был код
Code: Select all
if UO.GetDir() == 0 then
...
return
endif
if UO.GetDir() == 1 then
...
return
endif
if UO.GetDir() == 2 then
...
return
endif
if UO.GetDir() == 3 then
...
return
endif
if UO.GetDir() == 4 then
...
return
endif
if UO.GetDir() == 5 then
...
return
endif
if UO.GetDir() == 6 then
...
return
endif
if UO.GetDir() == 7 then
...
return
endif
Заменил на
Code: Select all
var d = UO.GetDir()
if d == 0 then
...
endif
if d == 1 then
...
endif
if d == 2 then
...
endif
if d == 3 then
...
endif
if d == 4 then
...
endif
if d == 5 then
...
endif
if d == 6 then
...
endif
if d == 7 then
...
endif
return
И слетать стало НА ПОРЯДОК реже! Раньше скрипт работал полчаса-час и слетал, а теперь может иногда больше суток работать... Версию инжекта не менял.
Posted: 2005-03-15 17:58:38
by Edred
В первом случае он опрашивает UO.Dir() восемь раз, в втором - 1 раз. То что нестабильность нового инжекта в первую очередь связана с новым алгоритмом расчета движения (или что-то такое), давно уже известно.
Posted: 2005-03-15 18:08:53
by J17
Что это за алгоритм рассчета движения?.. Что он рассчитывает? В инжекте же нету встроенной ходилки...
Posted: 2005-03-17 00:28:10
by Edred
J17 wrote:Что это за алгоритм рассчета движения?.. Что он рассчитывает? В инжекте же нету встроенной ходилки...
Есть ее зачатки. В виде команд на движение Addstep и Adddir. Которые как раз и появились в версиях 4.х.х. И именно тогда и начались проблемы с step warning failure и устойчивостью.
Кстати, еще одна вещь выплыла буквально только что - если в скрипт часто посылает ловушки прицелов на тайлы или статику (мининг например, ламбер) и у тебя быстрый комп - то стоит перед командой установки ловушки прицела и после нее поставить маленькие паузы - 50-100 мс, весьма пользительно для устойчивости инжекта. Причем ловушки прицела как инжекта, так и АСМа.
Posted: 2005-03-17 06:05:59
by Askaneli
Edred wrote:J17 wrote:Что это за алгоритм рассчета движения?.. Что он рассчитывает? В инжекте же нету встроенной ходилки...
Есть ее зачатки. В виде команд на движение Addstep и Adddir. Которые как раз и появились в версиях 4.х.х. И именно тогда и начались проблемы с step warning failure и устойчивостью.
Кстати, еще одна вещь выплыла буквально только что - если в скрипт часто посылает ловушки прицелов на тайлы или статику (мининг например, ламбер) и у тебя быстрый комп - то стоит перед командой установки ловушки прицела и после нее поставить маленькие паузы - 50-100 мс, весьма пользительно для устойчивости инжекта. Причем ловушки прицела как инжекта, так и АСМа.
Я тоже запарился с вылетами этими на ловушках.
Но я только после WTT() ставить стал задержку.
Причём один и тот же скрипт когда рубит логи пахал часами, а когда резал хворост вылетал через 5-6 деревьев.
Posted: 2005-03-18 01:40:10
by Goggy
Askaneli wrote:Edred wrote:J17 wrote:Что это за алгоритм рассчета движения?.. Что он рассчитывает? В инжекте же нету встроенной ходилки...
Есть ее зачатки. В виде команд на движение Addstep и Adddir. Которые как раз и появились в версиях 4.х.х. И именно тогда и начались проблемы с step warning failure и устойчивостью.
Кстати, еще одна вещь выплыла буквально только что - если в скрипт часто посылает ловушки прицелов на тайлы или статику (мининг например, ламбер) и у тебя быстрый комп - то стоит перед командой установки ловушки прицела и после нее поставить маленькие паузы - 50-100 мс, весьма пользительно для устойчивости инжекта. Причем ловушки прицела как инжекта, так и АСМа.
Я тоже запарился с вылетами этими на ловушках.
Но я только после WTT() ставить стал задержку.
Причём один и тот же скрипт когда рубит логи пахал часами, а когда резал хворост вылетал через 5-6 деревьев.
С вылетами на ловушки я нашёл токо то чтот реже выпадает при задержке перед ловушкой...
а при очень большом количестве действий в промежуток времени инжа вилетает реже если окно клиента, а желательно инжи на фоне клиента, то вылатает тоже реже

Posted: 2005-03-18 08:44:22
by J17
С ловушками реально помогло!

Спасибо.
А, вот, с окном клиента и инжи - что-то не понял...
Posted: 2005-03-19 07:20:20
by Goggy
J17 wrote:С ловушками реально помогло!

Спасибо.
А, вот, с окном клиента и инжи - что-то не понял...
ну я имел ввиду, когда стоит перс на скрипте, желательно чтобы окно УО было развёрнуто, а активным окном держать окошко инжи(т.е. поверх клиента)
ЗЫ По крайней мере у меня это реально заметно
P.P.S. тока вот облом, больше ничего на компе в при таком варианте делать несможешь

Posted: 2005-03-30 01:37:45
by J17
Провел ряд эксперементов с активностью окна... Падает одинаково, что развернуто УО, что свернуто, что активно окно инжекта, что не активно...
По крайней мере, у меня так.
Posted: 2005-03-31 09:47:26
by J17
Заменил AutoMenu и CancelMenu на WaitMenu. Стало значительно стабильней работать.
Posted: 2005-03-31 11:01:16
by Sfagnum
J17 wrote:Заменил AutoMenu и CancelMenu на WaitMenu. Стало значительно стабильней работать.
AutoMenu крайне стабильно у меня. CancelMenu пользую как правило ток в начале скрипта
нее ну в конце ессно тож стоит... но как правило до этого не доходит.
не мог бы показать где и как юзаешь?
Posted: 2005-03-31 11:07:48
by J17
Было:
Code: Select all
sub CreateItem()
UO.AutoMenu('Cloth', 'Shirts')
UO.AutoMenu('Shirts', 'plain dress')
var Waiting
repeat
NeedResource(ClothType , ItemCloth)
NeedResource(ThreadType , ItemThreads)
NeedResource(LeatherType, ItemLeather)
NeedResource(SwKitType, 1)
UO.DeleteJournal()
CheckLag()
Wait(100)
UO.WaitTargetType(ClothType)
Wait(100)
UO.UseType(SwKitType)
while UO.Waiting()
Wait(100)
wend
CheckLag()
Waiting = 0
repeat
Waiting = Waiting + 1
wait(1000)
until UO.InJournal('You put') or UO.InJournal('fail') or UO.InJournal('You broke') or Waiting > 30
until UO.InJournal('You put')
UO.CancelMenu()
endsub
Стало:
Code: Select all
sub CreateItem()
var Waiting
repeat
NeedResource(ClothType , ItemCloth)
NeedResource(ThreadType , ItemThreads)
NeedResource(LeatherType, ItemLeather)
NeedResource(SwKitType, 1)
UO.WaitMenu('Cloth', 'Shirts', 'Shirts', 'plain dress')
UO.DeleteJournal()
CheckLag()
Wait(100)
UO.WaitTargetType(ClothType)
Wait(100)
UO.UseType(SwKitType)
while UO.Waiting()
Wait(100)
wend
CheckLag()
Waiting = 0
repeat
Waiting = Waiting + 1
wait(1000)
until UO.InJournal('You put') or UO.InJournal('fail') or UO.InJournal('You broke') or Waiting > 30
until UO.InJournal('You put')
endsub
Первая реализация стабильно слетает в течение часа. Вторая - пока еще ни разу не слетела *три раза плюет через левое плечо

*.
Posted: 2005-03-31 11:36:01
by Sfagnum
хех...
этот сутками работатет.... не глючит
у меня по крайней мере.
ИМХО в чём то другом трабла.
Posted: 2005-03-31 11:43:15
by J17
Ну, может, и правда, в чем-то другом дело...
Наверное, когда я заменил AutoMenu на WaitMenu, звезды уже были расположены по-другому, и инжект перестал слетать...
Posted: 2005-03-31 13:51:36
by Sfagnum
я вот не совсем понимаю зачем у тебя вот это:
NeedResource(ClothType , ItemCloth)
NeedResource(ThreadType , ItemThreads)
NeedResource(LeatherType, ItemLeather)
NeedResource(SwKitType, 1)
вернее 1 строку и последнюю я понимаю зачем... а вот посередине 2 у вас что так много ресов надо для пошива
