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 деревьев.


С вылетами на ловушки я нашёл токо то чтот реже выпадает при задержке перед ловушкой... :roll:
а при очень большом количестве действий в промежуток времени инжа вилетает реже если окно клиента, а желательно инжи на фоне клиента, то вылатает тоже реже :wink:

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

А, вот, с окном клиента и инжи - что-то не понял...

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

А, вот, с окном клиента и инжи - что-то не понял...


ну я имел ввиду, когда стоит перс на скрипте, желательно чтобы окно УО было развёрнуто, а активным окном держать окошко инжи(т.е. поверх клиента) :wink:

ЗЫ По крайней мере у меня это реально заметно :roll:

P.P.S. тока вот облом, больше ничего на компе в при таком варианте делать несможешь :lol:

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
хех... этот сутками работатет.... не глючит :roll:
у меня по крайней мере.
ИМХО в чём то другом трабла.

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 у вас что так много ресов надо для пошива :o