Набросок универсального крафта выглядит примерно так:
Code: Select all
VAR Container = '0x40B5267F' ;айрон, рыба, инструменты, может быть равен Sunduk 1
VAR Sunduk1 = '0x40B5267F' ;пустые мешки
VAR Sunduk2 = '0x40B52599' ;полные
VAR Instrum = '0x1EBC' ;набор жестянщика
VAR hammer = '0x13E3' ;кузнечный молоток
VAR saw = '0x1034' ;пила
VAR Ing = '0x1BEF'
VAR log = '0x1BDD'
VAR key = '0x1010'
VAR Lock = '0x14FB'
VAR Bottle = '0x0F0E'
VAR Dagger = '0x0F51'
VAR club = '0x13B3'
VAR Bow = '0x13B1' #лук#
VAR spool = '0x0FA0' #нитки#
VAR Сap = '0x171C' #колпак#
VAR cloth = '0x175D' #ткань#
VAR Skit = '0x0F9D' #швейный набор#
VAR Deed = '0x14EF'
VAR Meshok = '0x0E76' ;тип мешка
var havka = '0x097B'
VAR MeshSer, d, LastTimer, timemove, itemM, i
var quantity = 150; количество предметов в 1 мешке
var msg ='You put|положили|fail|не удалось|You broke|сломали'
var printcolour = '1069'
VAR HIDE = 1; если 1 прячемся, если 0 нет.
###################
sub TinkKey()
var menu = "waitmenu 'Tinkering' 'Keys' 'Keys' 'Iron key'"
var item = key
var speek_item = 'Ключей'
open_cont()
WHILE NOT UO.Dead()
craft_one(menu, item, speek_item, 1, 0) ; меню, тип предмета, название предмета, брать ли железо для крафта, брать ли дерево для крафта.
wend
end sub
###################
sub TinkerLockpicks()
var menu = "waitmenu 'Tinkering' 'Tools' 'Tools' 'lockpick'"
var item = Lock
var speek_item = 'Отмычек'
open_cont()
WHILE NOT UO.Dead()
craft_stack(menu, item, speek_item, 1, 1)
WEND
end sub
###################
sub TinkerBottle()
var menu = "waitmenu 'Tinkering' 'Tools' 'Tools' 'Empty bottle'"
var item = Bottle
var speek_item = 'Бутылок'
open_cont()
WHILE NOT UO.Dead()
craft_stack(menu, item, speek_item, 1, 0)
WEND
end sub
###################
Sub craft_one(menu, item, speek_item, iron, logs)
UO.CancelMenu()
UO.FindType( Meshok, '-1', Sunduk1 )
MeshSer = UO.GetSerial( 'finditem' )
UO.MoveItem( MeshSer, 0, Sunduk2 )
checklag()
uo.useobject( MeshSer )
eat()
REPEAT
if iron==1 then
GET('железа', ing, Container, 1, 100)
endif
if logs==1 then
GET('дров', log, Container, 1, 100)
endif
GET('Инструментов', Instrum, Container, 2, 2)
Repeat
Hide()
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.exec( menu )
UO.Usetype( Instrum )
repeat
wait( 300 )
until UO.InJournal( msg ) or UO.Timer()>LastTimer+150
Until UO.Count( item ) > 0
checklag()
PUT( item, MeshSer )
UO.FindType( item, -1, MeshSer )
uo.charprint(printcolour,speek_item+' в мешке: '+Str( UO.FindCount()))
UNTIL UO.FindCount()>=quantity
uo.charprint(printcolour,'Берем другую сумку')
wait( 300 )
end sub
###################
Sub craft_stack(menu, item, speek_item, iron, logs)
if iron==1 then
GET('железа', ing, Container, 1, 100)
endif
if logs==1 then
GET('дров', log, Container, 1, 100)
endif
GET('инструментов', Instrum, Container, 2, 2)
Hide()
UO.DeleteJournal()
LastTimer=UO.Timer()
Repeat
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.exec( menu )
UO.Usetype( Instrum )
repeat
wait( 100 )
until UO.InJournal( msg ) or UO.Timer()>LastTimer+150
Until UO.Count( item ) > 0
checklag()
PUT(item, Container)
UO.FindType( item, -1, Container)
uo.charprint(printcolour,speek_item+' в сундуке: '+Str(UO.GetQuantity('finditem')))
end sub
Sub open_cont()
DIM ID[4]
ID[0]='0xFFFFFFFF'
ID[1]=Container
ID[2]=Sunduk1
ID[3]=Sunduk2
for i=1 to 3
if ID[i]<>ID[i-1] then
UO.Useobject( ID[i] )
timemove=UO.Timer()
while uo.GetSerial('lastcontainer')<>ID[i] && timemove+20>UO.Timer()
UO.Useobject( ID[i] )
wait(100)
wend
endif
next
end sub
Sub eat()
GET('рыбы',havka, Container, 1, 20)
REPEAT
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.findtype(havka,-1,'backpack')
If UO.FindCount() > 0 Then
UO.Useobject('finditem')
wait(200)
Else
uo.charprint(printcolour, 'кончилась рыба' )
return 0
end if
Until UO.InJournal("simply too full to eat|stuffed!|think|found|Вы ничего не можете") OR UO.Timer()>LastTimer+200
PUT(havka, Container)
end sub
Sub GET(name_item, type, cont, min, max) ; предмет, откуда, минимум, сколько брать
If UO.Count( type ) < min Then
UO.FindType( type, '-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,'Нет '+name_item)
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 Hide()
VAR LastTimer, n=0, HidFlag=1
if UO.Hidden() then
HidFlag=0
else
end if
while HidFlag
DeleteJournal("can't seem to hide|to perform|stop trying|прекратили|не удалось|удачно|You have hidden yourself well")
LastTimer=UO.Timer()
UO.WarMode(0)
UO.UseSkill('Hiding')
repeat
wait(50)
until UO.InJournal("can't seem to hide|to perform|stop trying|прекратили|не удалось|удачно|You have hidden yourself well") || LastTimer+50<UO.Timer()
if UO.InJournal("0xA5F8|удачно|You have hidden yourself well") then
HidFlag=0
else
n=n+1
if n>3 then
UO.Set('quiet','0')
uo.charprint(printcolour,'Спрятаться не получается!')
UO.Set('quiet','1')
MyTerminate()
end if
end if
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
То же самое только в отдельных модулях (без дополнительных функций):
Code: Select all
sub TinkKey()
var menu = "waitmenu 'Tinkering' 'Keys' 'Keys' 'Iron key'"
var item = key
UO.CancelMenu()
WHILE NOT UO.Dead()
UO.FindType( Meshok, '-1', Sunduk1 )
MeshSer = UO.GetSerial( 'finditem' )
UO.MoveItem( MeshSer, 0, Sunduk2 )
checklag()
uo.useobject( MeshSer )
eat()
REPEAT
GET(ing, Container, 20, 100)
GET(Instrum, Container, 2, 2)
Repeat
Hide()
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.exec( menu )
UO.Usetype( Instrum )
repeat
wait( 300 )
until UO.InJournal( msg ) or UO.Timer()>LastTimer+150
Until UO.Count( item ) > 0
checklag()
PUT( item, MeshSer )
UO.FindType( item, -1, MeshSer )
uo.charprint(printcolour,'Ключей в мешке: '+Str( UO.FindCount()))
UNTIL UO.FindCount()>=quantity
uo.charprint(printcolour,'Берем другую сумку')
wait( 300 )
wend
end sub
###################
sub TinkerLockpicks()
var menu = "waitmenu 'Tinkering' 'Tools' 'Tools' 'lockpick'"
var item = Lock
UO.CancelMenu()
WHILE NOT UO.Dead()
GET(ing, Container, 1, 100)
GET(log, Container, 1, 100)
GET(Instrum, Container, 2, 2)
Hide()
UO.DeleteJournal()
LastTimer=UO.Timer()
Repeat
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.exec( menu )
UO.Usetype( Instrum )
repeat
wait( 100 )
until UO.InJournal( msg ) or UO.Timer()>LastTimer+150
Until UO.Count( item ) > 0
checklag()
PUT(item, Container)
UO.FindType( item, -1, Container)
uo.charprint(printcolour,'Отмычек в банке: '+Str(UO.GetQuantity('finditem')))
WEND
end sub
###################
sub TinkerBottle()
var menu = "waitmenu 'Tinkering' 'Tools' 'Tools' 'Empty bottle'"
var item = Bottle
WHILE NOT UO.Dead()
GET(ing, Container, 10, 100)
GET(Instrum, Container, 2, 2)
Hide()
UO.DeleteJournal()
LastTimer=UO.Timer()
Repeat
UO.DeleteJournal()
LastTimer=UO.Timer()
UO.exec( menu )
UO.Usetype( Instrum )
repeat
wait( 100 )
until UO.InJournal( msg ) or UO.Timer()>LastTimer+150
Until UO.Count( item ) > 0
checklag()
PUT(item, Container)
UO.FindType( item, -1, Container)
uo.charprint(printcolour,'Банок в банке: '+Str(UO.GetQuantity('finditem')))
WEND
end sub
Или все это полуночный бред?
