Page 1 of 3

Майнинг останавливается

Posted: 2008-03-09 19:05:39
by Виталь
Такая проблема:
Чар заканчивает обращение к клетке (будь то "You put", "too far", "loosen" — с любым результатом) и просто останавливается. Как будто проверку на сообщение в журнале вообще отключили. Проявляется это совершенно спонтанно — копал-копал и перестал, но скрипт висит.
Если копнуть вручную, действие выполняет и продолжает работу скрипта, как ни в чем не бывало.

Гляньте, пожалуйста. Мож я напортачил чего.

Code: Select all

sub mining()
   var mx, my, mz, i, j
   mining:
      uo.deletejournal()
      mx = uo.getx("self")
      my = uo.gety("self")
      mz = uo.getz("self")
      
      uo.deletejournal()
      for i = mx-4 to mx+4
      for j = my-4 to my+4
         
         uo.print("Копаем в координатах: "+str(mx-i)+" "+str(my-j))
         counter()
         
         while not UO.InJournal("no ore here|location|far away|in rock|beyond|loosen|target")   
            hide()
            
            if uo.waiting() then
               uo.canceltarget()
            endif
            
            uo.waittargettile("1341", str(i), str(j), str(mz))
            uo.usetype(Shovel)
            while not uo.injournal("You put|heavy|location|no ore|but fail|far away|in rock|nothing")
               wait (200)
            wend
            
            if uo.weight >= maxweight then
               end()
            endif
         wend
         uo.deletejournal()
      next
      next
      goto mining
end sub

sub hide()
   while not uo.hidden()
      uo.deletejournal()
      if uo.injournal("preoccupied") then
         uo.exec("warmode '1'")
         wait(100)
         uo.exec("warmode '0'")
      endif
      uo.print("Прячемся...")
      uo.useskill("Stealth")
      wait(4000)
   wend
end sub

Posted: 2008-03-10 02:23:14
by Edred
Ну, быстрее всего, не при любом сообщении, а именно при "loosen". Потому как в внутреннем цикле ожидания (динамической паузе) это сообщение не упомянуто. Поэтому когда оно выскочит, чар остановится и будет ждать. А когда снова копнешь вручную, появится другое сообщение, вот скрипт и продолжит работу.

Code: Select all

while not uo.injournal("You put|heavy|location|no ore|but fail|far away|in rock|nothing")

Posted: 2008-03-10 02:27:35
by Виталь
Edred, спасибо, что посмотрел!

Но останавливается на самом деле независимо от сообщения. Может выкопать и остановиться.

Хайдинг не может быть причиной?

Posted: 2008-03-10 12:34:35
by Grin
"А может все было наоборот..."
Возможно длальше второго цикла никуда и не уходим... потому как сообщения не соответствуют действительность -> в журнали клилоки

wait (200) в полне достаточно чтобы паралельный скрипт стер журнал... но это 1 раз... каждый раз такое врятли удастся...

Posted: 2008-03-10 14:15:07
by Edred
Ха, так хайдинг запущен параллельно? Автору - напоминание: телепаты в отпуске. Нужна помощь - будь добр подробнейше описать все, что делается.

Журнал у инжекта один, если второй скрипт стирает журнал, то первому никаких сообщений не достанется. Проблема наверняка в этом. Решение - зачем во втором скрипте стирать журнал? Переделать.

Posted: 2008-03-10 14:21:09
by Grin
Эд там цикл стирания раз в 4 сек...
унего же 0.2 сек проверка...
что бы совпало, надо постаратся.

Posted: 2008-03-10 14:31:44
by grundick
Хайд у него запускается не параллеьно, а перед самой копкой.так что все в норме. Автор, в первом While вставь еще проверку по таймеру ,чтоб он у тебя на одном тайле больше определенного времени не копал. Проблема отпадет...

Code: Select all

t=uo.Timer()
while not (UO.InJournal("bla bla bla") or ((t + 3000) < UO.Timer()))

Posted: 2008-03-10 14:46:38
by Виталь
Grin wrote:wait (200) в полне достаточно чтобы паралельный скрипт стер журнал... но это 1 раз... каждый раз такое врятли удастся...

Deletejournal стоял в майнинге, прямо перед хайдом. Я перенес его в хайд в надежде, что это решит проблему, правда сейчас смотрю - и понимаю, что проблемы это не решило и не решит xD

В смысле проблема осталась и после переноса делита в хайд.

Posted: 2008-03-10 14:51:19
by Виталь
Edred wrote:Нужна помощь - будь добр подробнейше описать все, что делается.

Описал настолько подробно, насколько я в курсе этой проблемы.
Чар может остановиться и на третьей клетке, после запуска скрипта, и на двадцать третьей. Хоть после третьего рекола в дом и последующего возврата в шахту.

Скрипт просто висит запущенным и ждет (насколько я понял) сообщения в журнале, как будто его не было.

Posted: 2008-03-10 14:54:00
by Виталь
Grin wrote:Эд там цикл стирания раз в 4 сек...
унего же 0.2 сек проверка...
что бы совпало, надо постаратся.

Стирание стояло непоследственно в начале цикла:

Code: Select all

while not UO.InJournal("no ore here|location|far away|in rock|beyond|loosen|target")
uo.deletejournal()
hide()


В хайде стирания вообще не было. Я перенес стирание в хайд в надежде, что это решит проблему. К тому же реакция на "preoccupied" не срабатывала.

Posted: 2008-03-10 14:55:37
by Виталь
grundick wrote:Автор, в первом While вставь еще проверку по таймеру ,чтоб он у тебя на одном тайле больше определенного времени не копал. Проблема отпадет...

Code: Select all

t=uo.Timer()
while not (UO.InJournal("bla bla bla") or ((t + 3000) < UO.Timer()))

Спасибо, а worldsave таймеру не помешает?

Posted: 2008-03-10 15:33:43
by grundick
а почему он ему должен помешать? ну даже если очень длинный будет сейв, перескочит он через пару клеток...300с=5мин...

Posted: 2008-03-10 15:39:51
by Виталь
Об этом я и спрашивал.
Ну, проблемы избежали, спасибо grundick. А как ее все-таки решить? Могут ли лаги быть виной тому, что сообщение-результат пропускается скриптом?

Posted: 2008-03-10 15:50:20
by grundick
Блин, проверку ВО ВТОРОМ WhiLe НАДО! Что то я туплю :) А хз что тому виной.Тоже сталкивался с такой проблемой.То ли от сервера мессага не приходит, то ли инжект её не читает. :roll:

Posted: 2008-03-10 15:51:08
by grundick
Гринушка, займись делом :) Прошу тебя :)

Posted: 2008-03-10 15:52:18
by Grin
Grin wrote:"А может все было наоборот..."
Возможно длальше второго цикла никуда и не уходим... потому как сообщения не соответствуют действительность -> в журнали клилоки

Posted: 2008-03-10 16:17:48
by Виталь
grundick wrote:Блин, проверку ВО ВТОРОМ WhiLe НАДО! Что то я туплю :)

Да всё в порядке, во второй бы и вставил *)

Posted: 2008-03-10 16:20:40
by Виталь
Grin wrote:"А может все было наоборот..."
Возможно длальше второго цикла никуда и не уходим... потому как сообщения не соответствуют действительность -> в журнали клилоки

Какие клилоки — я же написал, что останавливается совершенно спонтанно. Не после первого копания, и даже не после первой клетки. Это может быть «4,2» или «-2,3» — что угодно.

Posted: 2008-03-10 21:04:36
by Виталь
[quote="Grin"][/quote]
Извини, что-то резковато получилось *)

Posted: 2008-03-10 23:49:54
by Edred
"Подробнейше" - это значит, что начать стоит с версии инжекта, клиента, названия и адреса шарда. Так, для затравки.

Также меня весьма интересует, правда ли на этом шарде можно копать квадрат 9х9 вокруг чара, или, все-таки, 5х5 как на большинстве шардов, а автор просто ошибся. Потому как если последнее - то на самом деле чар не стоит, он пытается достать до указанных тайлов, но не может. Вот и стоит и перебирает их. 5х5 - это 25 тайлов, 9х9 - это 81. То есть 56 тайлов лишних.