Animal Lore с плюшками

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Animal Lore с плюшками

Post by Nearga »

Смерджил такой вот скриптик. Основная идея:
- запраживаем подобпытное существо (в данном случае - запертая кошка)
- ищем в инвентаре/руках посохи (напугала идея о том, что он может сломаться :) )
- распускаем всех тварей
- тамим кошку
- проверяем Animal Lor'ом ее голод, если голодная - кормим
- ну и, чего уж там, кидаем на себя Anatomy

Вроде все качается помалу:
Image

Собственно, 2 вопроса:
1)
Image
Откуда может браться вот это, если используется динамическая задержка (вызвали скилл - ждем строки в журнале).
2)
Image
Что обозначает "Auto target cancelled"? Ну и почему ниже идет "Targeting cancelled"? Ведь, по идее, все должно идти последовательно: запустили скилл - дождались завершения - запустили другой.

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

Собственно, сам скрипт:

Code: Select all

sub AnimalTaming()

UO.Print('Где кошка?')
UO.Exec('addobject Animal')
  while uo.Targeting()
     wait(100)
  wend                   

# ищем стафф
   var s, n
   Dim staff[2]
   staff[1]='0x13F8'
   staff[2]='0x13F9'
   for n=1 to 2
      uo.findtype(staff[n],-1,'backpack')
      if uo.findcount() then
         s=uo.getserial('finditem')
      else
      uo.findtype(staff[n],-1,'my')
      if uo.findcount() then
         s=uo.getserial('finditem')
      endif
      endif
   next

# таминг, лог и анатомия на себя
   while not uo.dead()
      uo.msg('all release')
      checklag()
      uo.waittargetobject('Animal')
      uo.useobject(s)
      tamingresult()

      uo.waittargetobject('Animal')
      uo.useskill('Animal Lore')
      loreresult()

      UO.UseSkill('Anatomy','self')
      anatomyresult()
   wend

endsub







sub anatomyresult()
   var n
   for n=0 to 200
      wait(400)
      if uo.injournal('looks|think')  then
         return
      endif
   next
   checklag()
endsub

sub loreresult()
   var n
   for n=0 to 200
      wait(400)
      if uo.injournal('think|it')  then
         return
        if uo.injournal('hungry')  then
            wait(500)
            uo.moveitem('0x09f1',1,'Animal')
            uo.Print("Animal is Fed")
            wait(500)
        endif
      endif
   next
   checklag()
endsub

sub tamingresult()
   var n
   for n=0 to 200
      wait(400)
      if uo.injournal('It seems|fail to tame|see the creature|already tame')  then
         return
      endif
   next
   checklag()
endsub

sub checklag()
   repeat
      UO.DeleteJournal()
      UO.Click('backpack')
   until backpack()==1
   wait(100)
endsub

sub backpack()
   var n
   for n=0 to 200
      if uo.injournal('a backpack') then
         return 1
      endif
      wait(200)
   next
endsub
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Animal Lore с плюшками

Post by Nearga »

ЗЫ: пока вставил 3-секундные интервалы, ибо глаза слипаются... вроде все работает нормально, но вопрос остается в силе: как правильно делать динамические задержки?

Code: Select all

    while not uo.dead()
      uo.msg('all release')
      checklag()

     UO.WaitTargetObject( s )
      UO.UseSkill( 'Arms Lore' )
      k = 0
      repeat
      wait(300)
         k = k + 1
      until UO.InJournal( 'This' ) OR UO.InJournal( 'uncertain' ) OR k > 30

      #uo.useskill('Spirit Speak')
      uo.waittargetobject('Animal')
      uo.useobject(s)
      tamingresult()

      uo.waittargetobject('Animal')
      uo.useskill('Animal Lore')
      loreresult()
      wait(3000)

      UO.UseSkill('Anatomy','self')
      anatomyresult()
      wait(3000)
   wend


Решил еще и Армс Лор на посохе поучить :)
В отдельную функцию решил не пихать для удобства.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Animal Lore с плюшками

Post by Mirage »

ты в своих хитрых паузах запутался.

Смотри:

Code: Select all

   for n=1 to 2
      uo.findtype(staff[n],-1,'backpack')
      if uo.findcount() then
         s=uo.getserial('finditem')
      else
         uo.findtype(staff[n],-1,'my')
         if uo.findcount() then
            s=uo.getserial('finditem')
         endif
      endif
   next

Тут слишком много. Можно искать сразу по 'my', в серийник тоже не обязательно переводить - типы же есть. Причем типы как правило одинаковые.

Основная ошибка тут:

Code: Select all

sub loreresult()
   var n
   for n=0 to 200
      wait(400)
      if uo.injournal('think|it')  then   ; ЕСЛИ В ЖУРНАЛЕ СООБЩЕНИЕ ТОЛЬКО ТОГДА ВЫПОЛНЯЕТСЯ ВСЕ НИЖЕ НАПИСАННОЕ!!!
         return   ; ВЫХОДИ ИХ ФУНКЦИИ!!!
         if uo.injournal('hungry')  then   ; не выполняющийся набор букоф!
            wait(500)
            uo.moveitem('0x09f1',1,'Animal')
            uo.Print("Animal is Fed")
            wait(500)
         endif
      endif
   next
   checklag()
endsub

Надо было разбить на два.

И чисто из косметики:

Code: Select all

sub backpack()
   var n
   for n=0 to 200
      if uo.injournal('a backpack') then
         return 1
      endif
      wait(200)
   next
endsub

У рюкзака есть свойства называется Рюкзак. Журнал ловит по любой букве но к регистру он очень чувствителен.
+ я бы расставил на всякий случай стиралки журнала перед ретурнами.

Получается что-то типо такого:

Code: Select all

var staff1 = '0x13F8'
var staff2 = '0x13F9'
var n

sub AnimalTaming()
   UO.Print('Где кошка?')
   UO.Exec('addobject Animal')
   while uo.Targeting()
      wait(100)
   wend                   
   
   # таминг, лог и анатомия на себя
   while not uo.dead()
      uo.msg('all release')
      checklag()
      uo.waittargetobject('Animal')
      if UO.Count( staff1 ) || UO.Count( staff2 ) then
         if UO.Count( staff1 ) then
            UO.UseType( staff1 )
         else
            UO.UseType( staff2 )
         endif
      else
         UO.Print('А посоха то нет!')
         return
      endif
      tamingresult()
      uo.useskill('Animal Lore,'Animal')
      loreresult()
      UO.UseSkill('Anatomy','self')
      anatomyresult()
   wend
endsub
Sub anatomyresult()
   for n=0 to 200
      wait(400)
      if uo.injournal('looks|think')  then
         return
      endif
   next
   checklag()
endsub
Sub loreresult()
   for n=0 to 200
      wait(400)
      if uo.injournal('hungry')  then
         uo.moveitem('0x09f1',1,'Animal')
         uo.Print("Animal is Fed")
         wait(500)
      endif
      if uo.injournal('think|it')  then
         return
      endif
   next
   checklag()
endsub
Sub tamingresult()
   for n=0 to 200
      wait(400)
      if uo.injournal('It seems|fail to tame|see the creature|already tame')  then
         return
      endif
   next
   checklag()
endsub
Sub checklag()
   repeat
      UO.DeleteJournal()
      UO.Click('backpack')
   until backpack()==1
   wait(100)
endsub
Sub backpack()
   for n=0 to 200
      if uo.injournal('ackpack') then
         return 1
      endif
      wait(200)
   next
endsub


Ох уж эти паузы ломающие мой мозг по утру... Я делал по другому всегда :(

* машу Nmy рукой :mrgreen:
Nearga
Posts: 53
Joined: 2012-02-10 15:17:10

Re: Animal Lore с плюшками

Post by Nearga »

А чего хитрых? :) По одной паузе на действие - каждая ищет свою строку в журнале.

Можно искать сразу по 'my'

вроде, если My - он только на папердоле ищет.. задумка была такая, чтоб искать посохи и в рюкзаке, и на себе :)
Если посох лежал в рюкзаке, он возвращал что-то типа
найдено: 1
найдено: 0
найдено: 0
найдено: 0

Тоесть в рюкзаке находил, а в руке- нет.

в серийник тоже не обязательно переводить - типы же есть.

Учту, спасибо) Пока еще не до конца вкурил типы и серийники, но уже почти :)

Code: Select all

if uo.injournal('think|it')  then   ; ЕСЛИ В ЖУРНАЛЕ СООБЩЕНИЕ ТОЛЬКО ТОГДА ВЫПОЛНЯЕТСЯ ВСЕ НИЖЕ НАПИСАННОЕ!!!
         return   ; ВЫХОДИ ИХ ФУНКЦИИ!!!
         if uo.injournal('hungry')  then   ; не выполняющийся набор букоф!

омфг, какую хрень я пишу в 4 утра :D

За пофиксеный скрипт спасибо - ближе к вечеру попробую.
А вот с паузами не все ясно.. но это слегка другой топик, давайте переберемся сюда http://forum.yoko.com.ua/viewtopic.php?f=20&t=16897.

Я делал по другому всегда

А как ты делаешь?
Post Reply