Page 1 of 1

Animal Lore с плюшками

Posted: 2012-02-11 03:46:39
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

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

Posted: 2012-02-11 03:56:52
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
Решил еще и Армс Лор на посохе поучить :)
В отдельную функцию решил не пихать для удобства.

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

Posted: 2012-02-11 07:01:04
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:

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

Posted: 2012-02-11 14:03:40
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.
Я делал по другому всегда
А как ты делаешь?