Page 1 of 2

Инжект при работа массивных скриптов выдает странную ошибку

Posted: 2007-04-17 09:21:01
by Sanch
Пишу скриптовый массив на впв, сразу работают 2 скрипта, следующего типа:

Code: Select all

   while
       if **** then
          ****
       else
          if **** then
            ****
          else
             if **** then
                ****
             else
                if **** then
                   ****
                else
                   if **** then
                      ****
                   else
                      wait(100)
                   endif
                 endif
             endif
          endif
       endif
   wend


При этом в первом ,который отвечает за синхронизацию процедур if..endif 6шт изложенный подобный образом, во втором около 50, тк он отслеживает все сообщения в журнале о пвп, будь по филз, атака тебя или удачный хил.

Скрипты работают через раз, при этом выдавая страшную непонятную ошибку, кто нить знает с чем это связано?

Posted: 2007-04-17 11:27:42
by Scripts Writer
Еще б понять что делает твой скрипт. Мб из-за несовместимости 2х циклов. Мб из-за наложения одного условия в одном скрипте на условие в другом.

Posted: 2007-04-18 03:43:53
by Ururu
попробуй объеденить некоторые сообщения при одинаковом действии на них.

Code: Select all

uo.injournal("see") or uo.injournal("heavy")

или

Code: Select all

uo.injournal('see') || uo.injournal('heavy')

или

Code: Select all

uo.injournal("see|heavy")

Posted: 2007-04-18 13:33:46
by Sanch
Уруру, спасибо за подсказку, правда я уже сделал сам через ... or ..., ща поменяю на uo.injournal('||||||'), если их там будет порядка 50, это никак не скажется на работоспособности скрипта?

И исче вопрос, если получать сериал сообщения в журнале когда оно там отсутстует, к чему это мжет привести, вот пример, if uo.getserial(uo.journalserial(uo.injournal('In Flam Grav'))) == ... ?

Posted: 2007-04-18 14:17:52
by to4a
Sanch wrote:Уруру, спасибо за подсказку, правда я уже сделал сам через ... or ..., ща поменяю на uo.injournal('||||||'), если их там будет порядка 50, это никак не скажется на работоспособности скрипта?

И исче вопрос, если получать сериал сообщения в журнале когда оно там отсутстует, к чему это мжет привести, вот пример, if uo.getserial(uo.journalserial(uo.injournal('In Flam Grav'))) == ... ?

заменить на |, всё это конечно можно но единственный толк от этого - скрипт будет выглядить менее массивно, выполнятся от этого он лучше не станет, на работоспособности не как не отобразится.
Краши скрипта связанны скорее всего это с тем что парсер в инже хиленький, и не расчитан на такие массивные скрипты и скорее всего единсвенный вариант решить проблему - выкинуть лишнее.

по поводу uo.getserial(uo.journalserial(uo.injournal('In Flam Grav'))):
uo.getserial - лишний, от него никакого эффекта не будет journalserial и так вернёт айди "виновника" строки в журнале, причём этот айди будет не айди кастующего ФайрФилд(чего, как я полагаю ,хотелось добится) а айди объекта связанного со следующей строкой журнала, а то чего ты хотел добится делается так:

uo.journalserial(uo.injournal('In Flam Grav')-1)

Posted: 2007-04-18 14:42:43
by Sanch
Мне нужен ID именно кастующего чара, сравнивать я собрался с uo.getserial('laststatus'). Что делает "-1", если не секрет? Предположительная причина ошибок парсера я думаю связана с количеством процедур, коих количество я смогу уменьшить до 3.

Posted: 2007-04-18 14:46:35
by to4a
Sanch wrote:Мне нужен ID именно кастующего чара. Что делает "-1", если не секрет?

как ни странно, вычитает единицу))
зы: http://yoko.netroof.net/help/help.php?l ... rnalSerial

Posted: 2007-04-18 14:52:17
by Sanch

Code: Select all

if uo.getserial('laststatus') == uo.journalserial(uo.injournal('In Flam Grav')-1) then
  uo.cast('Magic Arrow', 'laststatus')


так?

Posted: 2007-04-18 14:56:49
by to4a
ну да

Posted: 2007-04-18 15:08:07
by Sanch
Спасибо огромное за хелп.

Posted: 2007-04-18 15:26:01
by Ururu
А если ты не 1 а с другом бегаешь. Друг кидает парализ на врага и ты стрелку в друга =)
Можно создать динамичный массив и заносить туда ид чаров атакующих тебя(по журналу) а потом стрелку кидать только в чаров из массива.

Posted: 2007-04-18 16:19:51
by to4a
Ururu wrote:А если ты не 1 а с другом бегаешь. Друг кидает парализ на врага и ты стрелку в друга =)

только в случае если друг под ластстатусом, а хрена ему там делать?

Posted: 2007-04-18 16:23:39
by Sanch
Уруру, ты не так понял принцип работы скрипта, атакуя или отводя в сторону статус чара его ID прописывается в laststatus, только если он начинает кастовать, в него же и летит стрелка, на все остальные касты скрипт внимания обращать не будет.

Posted: 2007-04-19 11:07:08
by Sanch
глюк браузера :)

Posted: 2007-04-19 11:07:17
by Sanch
Потестил сегодня данную мысль, есть 2 проблемы, если со времени входа в игру не был задействован ни 1 статус, то при запуске скрипта он пишет неверный сериал и до выделения какого либо статуса и последующего перезапука скрипта работать отказывается, как выяснить находится ся ли чей то ID в laststatus'e

Code: Select all

if uo.getserial('laststatus') == true 


Может быть так??? Вторая проблема в том что цикл

Code: Select all

while not uo.dead()
  if uo.getserial('laststatus') == uo.journalserial(***)-1) then
    uo.deletejournal()
    uo.cast(....


не может обойтись без предварительного определения наличия сообщения в журнале и его последующего удаления после проверки ID, тк если сообщение имело место, то каст будет проиводиться при последующем выделении статуса того кто когда то его скастовал, но эту то проблему я уже понял как решить

Code: Select all

while not uo.dead()
  if uo.injo.... then
    if uo.getserial('laststatus') == uo.journalserial(***)-1) then
      uo.deletejournal()
      uo.cast(....
    else
      uo.deletejournal()
    endif

Posted: 2007-04-19 12:25:14
by Savage
Не стоит упираться в ластстатус, большинство крашей возникает от этого, то есть от стаскивания статуса. Попробуй лучше переделать свой алгоритм под ластатак.

Posted: 2007-04-19 12:44:40
by Sanch
Надо будет попробовать, просто ластстатус немного удобнее в использовании.

Posted: 2007-04-20 08:52:08
by Sanch
Вобщем с определением сериала ластстатуса или того же ластатака возникли траблы, захожу в уо, запускаю скрипт:

Code: Select all

sub test()
var a
uo.waittargetobject('lastattack')
uo.cast('Clumsy')
wait(2000)
a = uo.getserial('lastattack')
uo.print('ID '+a)
end sub


Он кидает кламси, выводит ID 0х0000000 и так постоянно, кламси кидает, но ID показывает кривой, тот же самый эфект если ластатак заменить на ластстатус, при этом что самое интересное, если кликнуть на статус чара ,info и он выведет достоверную инфу о чаре, причем только со второго раза, то скрипт начинает показывать то что нужно, как он ведет себя в дальнейшем при смене цели не извесно, пока не проверял, подскажите чтонибудь люди добные, инжект у мну стоит последний, последняя ддл, клиент 2.0.3, не скаченный с сайта шарда дрв, старый ихний же, пропатченый через яму. Подскажите что мне делать?

Posted: 2007-04-20 09:04:19
by to4a
1. Включить track world items на вкладке main
2. Проще каставать так: uo.cast('Clumsy','lastattack')

Posted: 2007-04-20 11:24:11
by Sanch
Биг спс за хелп, она у мну точно отключена, я думал так лагов меньше будет :) , что касается второго то разницы вроде никакой нет между

Code: Select all

uo.waittargetobject('lastattack') 
uo.cast('Clumsy')


и

Code: Select all

uo.cast('Clumsy','lastattack')


Есть ли разница между?

Code: Select all

if uo.getserial('laststatus') == uo.journalserial(uo.injournal('In Nox|An Nox')-1) then


Code: Select all

var a = uo.getserial('laststatus')
if a == uo.journalserial(uo.injournal('In Nox')-1) or a == uo.journalserial(uo.injournal('An Nox')-1) then


Я знаю что говарили "нет", просто одно работает а другое нет, не успел выяснить почему, на работу опаздывал.