отдохнул один день а вы уж тут "разЪобщались"
Итак...
Code: Select all
sub Bow()
var time
var mess = 'put|fail|skill'
while not FindLogs() == 0
if uo.count('0x1bdd')<7 then ; вот так будет работать.
Trash()
Drag()
else
uo.deletejournal()
time = uo.timer()
uo.waitmenu('What do you want','Bows','Bows','Bow')
uo.waittargettype('0x1bdd')
uo.usetype('0x0F51')
repeat
wait (500) ; паузы меньше 100 делать не стоит дабы не вызывать лишние ошибки в работе скрипта
until uo.injournal(mess) or time + 60 < uo.timer()
endif
wend
uo.print('Кончились логи!')
end sub
sub Trash()
var trash = '0x6666666' ; скобки не нужны
while uo.count('0x13b2') ; >=1 не нужно писать если треба определить количество больше нуля
uo.findtype('0x13b2','backpack')
uo.moveitem('finditem',0,trash) ; в данном случае 1 не обязательно так как предметы и так по одному
wait(500) ; паузу лучше увеличить - средняя пауза перемещения предмета на серверах 300-500
wend
uo.print('Все луки выброшены!')
endsub
; ниже я вообще ничего не понял, зачем такое городить?
sub Drag()
var Box = '0x7777777'
if FindLogs() == 1 then
uo.findtype('0x1bdd','0x0000',Box)
uo.moveitem('finditem',2500,'backpack')
wait(500)
else
uo.findtype('0x1bdd','0x0000',Box)
uo.moveitem('finditem',0,'backpack')
wait(500)
endif
endsub
sub FindLogs()
var Logs = '0x1bdd' # Type логов
var LogsC = '0x0000' # Color логов
var Box = '0x7777777' # ID сундука
uo.findtype(Logs,LogsC,Box)
If UO.FindCount() == 0 Then
return 0
endif
uo.findtype(Logs,LogsC,Box)
If UO.FindCount() >= 2500 Then
return 1
Endif
uo.findtype(Logs,LogsC,Box)
If UO.FindCount() <= 2500 Then
return 2
Endif
endsub
Давайте посмотрим мой пример:
Code: Select all
VAR Container = '0x40B5267F' ;айрон, рыба, инструменты, может быть равен Sunduk 1
VAR Trash = '0x40B52599' #трешка#
VAR log = '0x1BDD'
VAR Dagger = '0x0F51'
VAR Bow = '0x13B1' #лук#
VAR spool = '0x0FA0' #нитки#
VAR LastTimer, timemove
var msg ='You put|положили|fail|не удалось|You broke|сломали'
var printcolour = '1069'
sub Bowcraft()
var menu = "waitmenu 'What do you' 'Bows' 'Bows' 'Bow'"
WHILE NOT UO.Dead()
GET(log, Container, 10, 800) ; если логов меньше 10 добираем 800
GET(spool, Container, 1, 100) ; если ниток меньше 1 добираем 100
Repeat
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.exec( menu )
UO.waittargettype ( log )
UO.Usetype( Dagger )
repeat
wait( 100 )
until UO.InJournal( msg ) or UO.Timer()>LastTimer+60
Until UO.Count( Bow )>0
checklag()
PUT(Bow , Trash)
WEND
end sub
Sub GET(item, cont, min, max) ; предмет, откуда, минимум, сколько брать
If UO.Count( item ) < min Then
UO.FindType( item, '-1', cont )
if UO.FindCount() > 0 Then
uo.charprint(printcolour,'Сырья в сундуке: '+Str(UO.GetQuantity('finditem')) )
itemM=UO.GetSerial('finditem')
timemove=UO.Timer()
while UO.ContainerOf(itemM)==cont && timemove+20>UO.Timer()
uo.moveitem('finditem', max, 'backpack')
wait(300)
wend
else
uo.charprint(printcolour, 'Полностью кончилось сырье' )
UO.CancelMenu()
MyTerminate()
endif
Endif
end sub
Sub PUT(item, cont)
while UO.Count( item ) > 0
UO.FindType( item, -1, -1 )
itemM=UO.GetSerial('finditem')
timemove=UO.Timer()
UO.MoveItem( 'finditem', 0, cont )
while UO.ContainerOf(itemM)=='my' && timemove+20>UO.Timer()
wait(300)
wend
wend
end sub
Sub DeleteJournal(msg)
While UO.InJournal(msg)
UO.SetJournalLine(UO.InJournal(msg) - 1,'')
wend
endsub
Sub MyTerminate()
UO.Set('quiet','1')
UO.CancelMenu()
UO.IgnoreReset()
UO.Set('quiet','0')
UO.Exec('terminate all')
end sub
Sub checklag()
DeleteJournal("ackpack")
UO.Click("backpack")
repeat
wait(100)
until UO.InJournal("ackpack")
end sub
1) все предметы прописаны выше скрипта - проще редактировать если чтото понадобиться изменить.
2) одна процедура для забора сырья, одна процедура для скидывания готового товара. Куда и откуда - как пропишешь туда и кинет.
3) если сырья будет меньше минимума скрипт встанет.
PS мой скрипт это кусок из большого файла. Вроде скопировал без косяков. Если будут ошибки - пишите.