Until и uo.waittargetobject

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Until и uo.waittargetobject

Post by xarek »

Здрасте, появилось два вопроса:
Как то глупо, но все же, что делает

Code: Select all

Until UO.InJournal


и можо ли таргет кидать на finditem

Code: Select all

uo.FindType(iten,'-1','backpack') 
uo.waittargetobject('finditem')


или

Code: Select all

var item = '0x000'

uo.waittargetobject('item')
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Until и uo.waittargetobject

Post by Mirage »

Как то глупо ;)
Until UO.InJournal повторять до сообщения в журнале



uo.FindType(iten,'-1','backpack')
uo.waittargetobject('finditem')

так и кидают


Code: Select all

var item = '0x000'
uo.waittargetobject('item')

Ожидание прицела на ОБЪЕКТ. Объект задается по ID а не по типу. Если у item будет ID то можно.

http://yoko.com.ua/help/ тебе в помощь
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Re: Until и uo.waittargetobject

Post by Kynep »

xarek wrote:Здрасте, появилось два вопроса:
Как то глупо, но все же, что делает

Code: Select all

Until UO.InJournal

Это условие выхода из цикла

Code: Select all

repeat
until

Ждет указанною стоку строку в журнале:

Code: Select all

repeat
   ...тут что-то делается...
   wait(100)
until UO.InJournal('Чорд!')

xarek wrote:и можо ли таргет кидать на finditem

Можно, почему нет, только сначала нужно убедиться, нашел или нет, иначе краш:

Code: Select all

uo.FindType(iten,'-1','backpack') 
If UO.FindCount() > 0 then
    uo.waittargetobject('finditem')
   ...
endif

xarek wrote:или

Code: Select all

var item = '0x000' 
uo.waittargetobject('item')

А вот так нельзя, команда

Code: Select all

UO.WaitTargetObject()

в качестве аргументов принимает только серийники:

Code: Select all

var item = '0x00000000'
uo.waittargetobject('item')

Надеюсь доступно обьяснил? Эта инфа есть в Уроках скриптинга.
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Да, конечно понятно:) Спасибо вам.
И спасибо за ссылочку на уроки:)
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Появился еще вопросик:( намучался:)

вот

Code: Select all

.......

If UO.InJournal('привет') then     
 ... делается1
If UO.InJournal('пока') then
     вот как сделать тут что если замечено "пока" то уже не надо дальше идти по скрипту а просто начать сначало и ждать "привет"
            Endif
....делается2

 Endif
......
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

xarek wrote:Появился еще вопросик:( намучался:)
вот как сделать тут что если замечено "пока" то уже не надо дальше идти по скрипту а просто начать сначало и ждать "привет"


Code: Select all

sub blah()
var a = 0
while NOT UO.Dead()
   If UO.InJournal('привет') then
      UO.DeleteJournal()
      repeat
         ...
         If UO.InJournal('пока') then
            ...
            a = 5
         endif
      until UO.InJournal('покакаеш дома') OR a = 5
   endif
wend
end sub


Вот основная конструкция, с выходом по двум условиям, естественно условий может быть больше, дальше настраивай под себя сам.
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Kynep wrote:
xarek wrote:Появился еще вопросик:( намучался:)
вот как сделать тут что если замечено "пока" то уже не надо дальше идти по скрипту а просто начать сначало и ждать "привет"


Code: Select all

sub blah()
var a = 0
while NOT UO.Dead()
   If UO.InJournal('привет') then
      UO.DeleteJournal()
      repeat
         ...
         If UO.InJournal('пока') then
            ...
            a = 5
         endif
      until UO.InJournal('покакаеш дома') OR a = 5
uo.say('1')
endif
wend
end sub





а при таком раскладе, он сначало скажет 1 а потом уже начнет опять ждать?
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Да. Если тока если поставишь say после endif.
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Простите, но я вас еще потревожу, калупаюсь 3 день и бестолку.

Code: Select all

Uo.Warmode(0)
while uo.Targeting()
    wait(500)
  wend
uo.findtype(animal,"-1","ground")
 

         
           
    while not uo.InJournal('It seems')and not uo.InJournal('is already')
   
   

           
      uo.DeleteJournal()
   
      uo.waittargetobject('finditem')
      wait(200)
      uo.UseType('0x13F9')
               
   
   repeat
      walk(0,0,'finditem')


 
            Endif
        wait(500)
      until uo.InJournal('You fail') or uo.InJournal('It seems')  or uo.InJournal('is already')
    wend
   uo.UseObject('finditem')


вся проблема с

Code: Select all

or uo.InJournal('is already')
и

Code: Select all

and not uo.InJournal('is already')

почему то после добавленияэтих условий у меня стало зацикливаться

Code: Select all

uo.UseObject('finditem') 
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

1) а что ты вообще ваяешь?
2)можно делать так while not uo.InJournal('It seems|is already')
3)у тебя цикл While выполняется пока не будет в журнале фразы которая еще и завершает цикл repeat. Потом естественно будет делаться только последняя строка
4) если ты хочешь сделать цикл бесконечно повторяющийся то можно сделать так:

Code: Select all

while not uo.dead() # <---
 ...
  uo.DeleteJournal()
  ...
   repeat
    ...
   until (чтото в журнале)
wend

Тебе же про это выше писали :)
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Mirage wrote:1) а что ты вообще ваяешь?
2)можно делать так while not uo.InJournal('It seems|is already')
3)у тебя цикл While выполняется пока не будет в журнале фразы которая еще и завершает цикл repeat. Потом естественно будет делаться только последняя строка
4) если ты хочешь сделать цикл бесконечно повторяющийся то можно сделать так:

Code: Select all

while not uo.dead() # <---
 ...
  uo.DeleteJournal()
  ...
   repeat
    ...
   until (чтото в журнале)
wend

Тебе же про это выше писали :)

Если бы я хотел сделать бесконнечно повторяющийся я бы не заморачивался с фразами:)
тамилку делаю т.к. подходящей для себя не нашел
мне просто нужно сделать, что бы при is already делались те же действия при It seems
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

опиши алгоритм чего ты хочешь делать по пунктам.
1) вижу животину
2)тамлю
3)подхожу
4)убиваю...

типо того. Наверняка то что тебе нужно либо есть либо тебе так скорее помогут.
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

то что я скинул, это уже после того как была найдена животина,
Темит пока не затемит, если затемил не ты или конь уже затемлен то дальше т.е. после того что я выложил скрипт продолжается дальше.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

xarek wrote:то что я скинул, это уже после того как была найдена животина,
Темит пока не затемит, если затемил не ты или конь уже затемлен то дальше т.е. после того что я выложил скрипт продолжается дальше.


Нифига не понял :) Если не хочешь писать тут напиши ПМ

PS Добавь uo.DeleteJournal() перед while
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Скрывать нечего, просто нужна тамилка животного. С проверкой, свободна живка или нет, если она уже занята, то в игнор ее:)
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

Ну вот смотри. В определенном пространстве есть толпа животных. Животинки после таминга и релиза забывает хозяина минут за 15-20. По этой причине необходимо собрать штук 40-50 (например кур или ворон). После приручения тварюшка прячется и игнориться чтобы не смущать. Когда все притамлены ресинком они появляются и опять во кругу.

Code: Select all


sub AnimalTaming()
   VAR n=1, corpse
   var animal1 = '0x00D0' #тип животного
   UO.Set('quiet','1')
   uo.ignorereset()
uo.warmode('0')
Repeat
   uo.Set('finddistance', 8)
   uo.FindType(animal1, -1, 'ground')
   if uo.FindCount()>0 then
      uo.warmode(0)
      UO.DeleteJournal()
      UO.WaitTargetObject('finditem') 
      UO.Useskill('Animal Taming')
         repeat
            wait(100)
         until UO.InJournal('fail|It seems|already|rememb|creature') or uo.GetX('finditem')==0
            If Uo.InJournal('It seems|already|creature') Then
                   UO.Hide('finditem')
                  UO.Ignore('finditem')
                uo.say('all release')
            endif
   else
      uo.ignorereset()
      UO.Msg(".resync")
      wait(500)
   endif
   wait(500)
Until uo.Dead()
end sub


Простой таминг с осёдлыванием:

Code: Select all

sub AnimalTaming()
UO.Print('Где эта скотина?')
UO.Exec('addobject Animal')
  while uo.Targeting()
     wait(100)
  wend
UO.DeleteJournal()
while not UO.InJournal('It seems|see the creature|already|rememb')
  UO.DeleteJournal()
  UO.WaitTargetObject('Animal') 
  UO.Useskill('Animal Taming')
     repeat
        wait(100)
     until UO.InJournal('fail|It seems|already|rememb')
        wait(500)
If Uo.InJournal('It seems|already') Then
        wait(1500)
uo.useobject('Animal')
return
Endif
wend
end sub

Наверное тебе нужнее второй скрипт?

PS
у нас на сервере (как и обычно) животное подходит к хозяину после приручения, не обязательно к нему подходить. Лишь бы не заходило за препятствия. А из того же леса его можно ударив вывести потом спрятаться и пока он на поле топчется уже тамить.
xarek
Posts: 115
Joined: 2006-03-08 20:53:28

Post by xarek »

Спасибо, да мне нужен был второй, ну и первым я воспользуюсь:)
Я поставил подход для того, что бы живка не убежала пока я ее темить буду:)
Post Reply