Page 1 of 1

Кинуть прицел на однотипный предмет

Posted: 2007-10-19 16:32:18
by Denton
Играю я на сервере Махаон. Там есть такой заворот: крафтятся гвозди баночками по пять штук. Для того, чтобы они сложились в стек, необходимо два раза тыкнуть мышей по какой-то из банок и таргетом указать на такую-же банку. Ну никак не могу написать такую макру. Все время получается или не видит гвоздей совсем или тыкает по 1 банке и таргет возвращает на нее-же.
Условие еще такое... гвозди можно складывать только в паке, не в мешочках, не на земле (даже если мешочек лежит в инвентаре).

Вот приведу свои попытки:

Code: Select all

sub Gvozdi()
  if uo.Waiting() then
     uo.CancelTarget()
  endif
  var a,Exit
  dim gvozdi[1]
  gvozdi[0]=0x102E
  uo.Print('Складываем гвозди.')
  wait(500)
  for a=0 to 0
     Exit=0
     repeat
        uo.findtype(gvozdi[a],-1,'backpack')
        if uo.GetQuantity('finditem')>0 then
           uo.waittargettype('0x102E')
           uo.useobject('finditem')
           wait(1500)
        else
           Exit=1
        endif
     until Exit==1
  next
uo.Print('Гвозди сложены.')
end sub

Posted: 2007-10-19 20:40:22
by -=JoKeR=-
Нафига делать массив если в нём один элемент ? =)

Code: Select all

sub Gvozdi()
var gvozdi = '0x102E '
var Exit = 0
  if uo.Waiting() then
     uo.CancelTarget()
  endif
  uo.Print('Складываем гвозди...')
  wait(500)
     repeat
        uo.findtype(gvozdi,-1,'backpack')
        if uo.FindCount() > 0 then
           uo.waittargettype('gvozdi')
           uo.useobject('finditem')
           wait(1500)
        else
           Exit = 1
        endif
     until Exit = 1
  uo.Print('Гвозди сложены.')
end sub

Вроде так, хз, попробуй =)

Posted: 2007-10-19 23:17:54
by Denton
Пробовал так, не работает. Пишет:

Items found: 4
No item found. Next target request will be cancelled.
Укажите коробку, куда пересыпать гвозди.
отменено.


Т.е. гвозди он находит, использует, а вот прицел не бросает на другую коробку (No item found...)

Posted: 2007-10-19 23:25:28
by -=JoKeR=-
Тогда хз =)
К экспертам.

Posted: 2007-10-19 23:33:39
by Denton
Должно же быть какое-то решение...

Posted: 2007-10-20 07:51:14
by Okypok
Попробуй-ка :)

Code: Select all

sub Gvozdi()
var gvo
var gvozdi = '0x102E'

uo.findtype(gvozdi,-1,'backpack')
if uo.findcount() then
uo.CancelTarget()
wait(300)
gvo=UO.GetSerial('finditem')
wait(400)
UO.Ignore('finditem')
wait(100)
uo.findtype(gvozdi,-1,'backpack')
uo.waittargettype('finditem')
wait(100)
uo.useobject(gvo)
 UO.IgnoreReset()
else
return
end if
end sub

Posted: 2007-10-20 08:36:46
by Denton
Есть. Спасибо Окурок, немного подправил твой скрипт и все заработало.

Code: Select all

sub Gvozdi()
 
  var gvo, exit
  var gvozdi = '0x102E'
 
  uo.Print('Складываем гвозди.')
  repeat
    uo.DeleteJournal()
    uo.findtype(gvozdi,-1,'backpack')
    if uo.findcount()>1 then
      uo.CancelTarget()
      wait(300)
      gvo=UO.GetSerial('finditem')
      wait(400)
      UO.Ignore('finditem')
      wait(100)
      uo.findtype(gvozdi,-1,'backpack')
      uo.waittargetobject('finditem')
      wait(100)
      uo.useobject(gvo)
      UO.IgnoreReset()
      repeat
        wait(100)
      until uo.injournal('Вы пересыпали гвозди')
    else
      exit = 1
    end if
  until exit == 1
end sub

Posted: 2007-10-20 08:51:21
by Okypok
А что дает твой Exit? Плохо соображаю с утра :)

Posted: 2007-10-20 08:54:28
by Denton
значение переменной exit - это условие для остановки макроса. Если найденных объектов не больше одного, то выполняется условие прекращения цикла repeat .... until exit == 1

Posted: 2007-10-20 09:10:29
by Okypok
А простой return не подходит?

Posted: 2007-10-20 09:28:37
by Denton
return закрывает макрос. Могу ошибаться, конечно, но у меня не работал как возвратная функция...