Page 1 of 1

Tinkering

Posted: 2004-05-23 13:31:09
by Russian
sub main()
repeat
UO.WaitMenu('Tinkering','Tools','Tools','tinker')
UO.Usetype('0x1EBC')
wait (200)
UO.DeleteJournal()
while not (UO.InJournal("You put") or UO.InJournal("Tinkering failed"))
wait (500)
end sub

Такой вот простенький скрипт, только почему-то не зацикливается. Делает один раз - и застывает. Почему? Ведь repeat стоит...

Posted: 2004-05-23 13:32:38
by Russian
Ответ увидел в следующей теме. :)

Posted: 2004-05-23 13:40:08
by Russian
Странно. Изменил скрипт на:

sub main()
While NOT UO.Dead()
UO.WaitMenu('Tinkering','Tools','Tools','tinker')
UO.Usetype('0x1EBC')
wait (200)
UO.DeleteJournal()
while not (UO.InJournal("You put") or UO.InJournal("Tinkering failed"))
wait (200)
wend
wait (200)
end sub

, но все равно не помогло!

Posted: 2004-05-23 13:51:18
by Russian
Побегав по форуму, "домутил" скрипт до такого вида, и теперь все работает:

sub main()
var i;
tinst:
uo.deletejournal()
UO.WaitMenu('Tinkering','Tools','Tools','tinker')
UO.Usetype('0x1EBC')
i=0
repeat
wait(200)
i=i+1
until uo.injournal("You put") or uo.injournal("failed") or i>50
goto tinst
end sub

Только объясните, пожалуйста, что вообще в этом скрипте означают строки с i (var i, i=0, i=i+1, i>50).

Posted: 2004-05-24 18:31:11
by Edred
Russian wrote:Побегав по форуму, "домутил" скрипт до такого вида, и теперь все работает:

sub main()
var i;
tinst:
uo.deletejournal()
UO.WaitMenu('Tinkering','Tools','Tools','tinker')
UO.Usetype('0x1EBC')
i=0
repeat
wait(200)
i=i+1
until uo.injournal("You put") or uo.injournal("failed") or i>50
goto tinst
end sub

Только объясните, пожалуйста, что вообще в этом скрипте означают строки с i (var i, i=0, i=i+1, i>50).


Счетчик времени. Простейший. Который прерывает цикл ожидания независимо от сообщения если прошло 50*200 миллисекунд (10 сек).

Posted: 2004-05-24 18:36:24
by Edred
Но ты в своем скрипте ограничен весом пака чара, потому лучше сделай так (измени крафт боттлов на то, что тебе надо):

Code: Select all

; Tinker. v.1.00b (c) Edred
;
; Чар берет из сундука инготы, крафтит из них бутылки
; и складывает эти бутылки в этот же сундук.
; Если инги закончились - выход.
;
sub tinker()
   VAR Sunduk = '0x4042B1A1'       ; Сериал сундука
   VAR Ingi = '0x1BEF'          ; Тип ингов
   VAR Instrum = '0x1EBC'      ; Тип инструмента тинкера
   VAR Bottle = '0x0F0E'       ; Тип бутылки
   VAR Kolvo = 200          ; Брать ингов
   VAR k = 0
   While TRUE
      UO.FindType( Ingi, -1, Sunduk )   ; Ищем инги в сундуке
      If UO.FindCount() == 0 Then
         UO.Print("Iron Ingots not found, script terminated")
         return
      Endif
      UO.Grab( Str( Kolvo ), 'finditem' )
      wait( 2000 )
      While UO.Count( Ingi ) > 0
         ; Пока в паке есть инги
         UO.Print('Ostalos ' + Str( UO.Count( Ingi ) ) + ' ingots' )
         UO.DeleteJournal()
         UO.CancelMenu()
         UO.WaitMenu ('Tinkering', 'Tools', 'Tools', 'empty bottle' )
         UO.UseType( Instrum )
         k = 0
         while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 30 )
            k = k + 1
            wait(500)
         wend
         if UO.Count( Bottle ) > 0 then
            UO.FindType( Bottle, -1, -1 )
            UO.MoveItem( 'finditem', 0, Sunduk )
            wait( 1000 )
            UO.Print( 'Bottle moved' )
         end if
      Wend
   Wend
end sub

Posted: 2004-05-25 17:03:36
by ne0s
Edred wrote:Но ты в своем скрипте ограничен весом пака чара, потому лучше сделай так (измени крафт боттлов на то, что тебе надо):

Code: Select all

; Tinker. v.1.00b (c) Edred
;
; Чар берет из сундука инготы, крафтит из них бутылки
; и складывает эти бутылки в этот же сундук.
; Если инги закончились - выход.
;
sub tinker()
   VAR Sunduk = '0x4042B1A1'       ; Сериал сундука
   VAR Ingi = '0x1BEF'          ; Тип ингов
   VAR Instrum = '0x1EBC'      ; Тип инструмента тинкера
   VAR Bottle = '0x0F0E'       ; Тип бутылки
   VAR Kolvo = 200          ; Брать ингов
   VAR k = 0
   While TRUE
      UO.FindType( Ingi, -1, Sunduk )   ; Ищем инги в сундуке
      If UO.FindCount() == 0 Then
         UO.Print("Iron Ingots not found, script terminated")
         return
      Endif
      UO.Grab( Str( Kolvo ), 'finditem' )
      wait( 2000 )
      While UO.Count( Ingi ) > 0
         ; Пока в паке есть инги
         UO.Print('Ostalos ' + Str( UO.Count( Ingi ) ) + ' ingots' )
         UO.DeleteJournal()
         UO.CancelMenu()
         UO.WaitMenu ('Tinkering', 'Tools', 'Tools', 'empty bottle' )
         UO.UseType( Instrum )
         k = 0
         while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 30 )
            k = k + 1
            wait(500)
         wend
         if UO.Count( Bottle ) > 0 then
            UO.FindType( Bottle, -1, -1 )
            UO.MoveItem( 'finditem', 0, Sunduk )
            wait( 1000 )
            UO.Print( 'Bottle moved' )
         end if
      Wend
   Wend
end sub

Что надо дописть , что бы чар складывал бутылки не в сундук ...
А в паки , причем разные паки .... менял бы он паки после переполнения прошлого .
Буду очень благодарен

Posted: 2004-05-25 19:04:49
by Edred
Что надо дописть , что бы чар складывал бутылки не в сундук ...
А в паки , причем разные паки .... менял бы он паки после переполнения прошлого .
Буду очень благодарен


Поройся тут, я кидал свои скрипты на ламбер и тейлор, там именно так и организовано... В тинкере мне такой необходимости не было, боттлы суммируются и их не надо раскладывать...