Yoko

All sides of Injection
It is currently 2024-04-19 05:46:15

All times are UTC+02:00




Post new topic  Reply to topic  [ 4 posts ] 
Author Message
PostPosted: 2012-02-11 03:46:39 
Offline

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

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

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

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

Собственно, сам скрипт:
Code:
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


Top
   
PostPosted: 2012-02-11 03:56:52 
Offline

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

Code:
    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


Решил еще и Армс Лор на посохе поучить :)
В отдельную функцию решил не пихать для удобства.


Top
   
PostPosted: 2012-02-11 07:01:04 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
ты в своих хитрых паузах запутался.

Смотри:

Code:
   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:
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:
sub backpack()
   var n
   for n=0 to 200
      if uo.injournal('a backpack') then
         return 1
      endif
      wait(200)
   next
endsub

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

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

Code:
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:

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2012-02-11 14:03:40 
Offline

Joined: 2012-02-10 15:17:10
Posts: 53
А чего хитрых? :) По одной паузе на действие - каждая ищет свою строку в журнале.

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

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

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

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

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

Code:
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.

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 4 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: Google [Bot] and 48 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited