Code:
### Taming для дрв. ################################
# 4776528 Nmy.
####################################################
# переменные каторые НЕнадо менять:
var Serial, flag
# переменные каторые надо менять:
var shrink = '0x0F0E' ; Тип шринка.
var colourshrink = '0x0388' ; цвет шринка.
var Chest = '0x401DBE20' ; ИД сундука.
var RuneBook = '0x402C19F1' ; ИД рунбуки.
var Tbeast = '0x00DC' ; Тип зверя каго тамим.
var staff = '0x13F8' ; Тип палки для таминга.
var type = '0x20F6' ; Тип зверя после шринка.
var nomer1 = 21 ; Номер руны к зверю. (см. ниже)
var nomer2 = 33 ; Номер руны домой. (см. ниже)
var fish = '0x097B'
####################################################
# Номера для рекола по рунбуку номера:
# руна 1 это 21
# руна 2 это 33
# руна 3 это 46
# руна 4 это 58
# руна 5 это 64
# руна 6 это 73
# руна 7 это 88
# руна 8 это 94
# руна 9 это 1025
####################################################
sub main()
while 1
checklag()
uo.print('Летим к ламе')
GoPlace(nomer1)
checklag()
flag=0
repeat
wait(2800)
getbeast()
ws()
uo.msg('guards a criminal!')
until flag==1
uo.print('Летим домой')
GoPlace(nomer2)
checklag()
uo.print('Выгружаем зверя')
UnLoadBeast()
wend
endsub
sub getbeast()
uo.set('finddistance','7')
uo.findtype(Tbeast,-1,'ground')
if uo.findcount() then
uo.print('Нашли ламу')
Serial=uo.getserial('finditem')
flag=taming(Serial)
endif
endsub
sub UnLoadBeast()
grab()
if uo.objatlayer('Horse') then
uo.useobject('self')
checklag()
wait(1000)
uo.findtype(shrink,colourshrink,'backpack')
if uo.findcount() then
uo.waittargetobject(Serial)
uo.useobject('finditem')
checklag()
wait(1000)
endif
uo.set('finddistance','2')
uo.findtype(type,-1,'ground')
if uo.findcount() then
uo.moveitem('finditem',0,Chest)
checklag()
wait(1000)
endif
endif
endsub
sub taming(kago)
var uflag=0
repeat
repeat
checklag()
cancelwaiting()
uo.warmode(0)
uo.waittargetobject(kago)
uo.usetype(staff)
uflag=tamingresult()
until uflag<>0
if uflag==1 then
uo.msg('all come')
WalkN(0,0,Serial)
while not uo.objatlayer('Horse')
if uo.getx(Serial)==0 and not uo.objatlayer('Horse') then
return 0
endif
uo.useobject(kago)
wait(1000)
if uo.injournal('own that horse') then
return 0
endif
wend
endif
if uflag==4 then
return 0
endif
if uflag==3 then
WalkN(0,0,kago)
endif
until uflag==1
return 1
endsub
sub cancelwaiting()
if uo.waiting() then
uo.canceltarget()
endif
endsub
sub tamingresult()
var n
for n=0 to 30
wait(500)
ws()
if uo.injournal('It seems') then
return 1
endif
if uo.injournal('fail') then
return 2
endif
if uo.injournal('see the creature') then
return 3
endif
if uo.injournal('already tame|see the target') then
return 4
endif
next
return 0
endsub
sub GoPlace(num)
checklag()
var oldX=uo.getx('self')
var oldY=uo.gety('self')
uo.recall(RuneBook,num)
repeat
wait(1000)
ws()
until oldX<>uo.getx('self') && oldY<>uo.gety('self')
endsub
sub grab()
uo.useobject(Chest)
checklag()
wait(1000)
uo.findtype(shrink,colourshrink,'backpack')
if not uo.findcount() then
uo.findtype(shrink,colourshrink,Chest)
if uo.findcount() then
uo.moveitem('finditem','1','backpack')
wait(1000)
else
uo.msg('Нету шринков! Скрипт остановлен.')
uo.exec('terminate all')
endif
endif
toeat()
endsub
sub toeat()
uo.findtype(fish,-1,Chest)
if uo.findcount() then
uo.moveitem('finditem','50','backpack')
checklag()
wait(1000)
repeat
uo.usetype(fish)
wait(400)
until uo.injournal('full to eat')
endif
uo.findtype(fish,-1,'backpack')
if uo.findcount() then
uo.moveitem('finditem',0,Chest)
checklag()
wait(1000)
endif
endsub
sub CheckLag()
repeat
UO.DeleteJournal()
UO.Click('backpack')
until backpack()==1
end sub
sub backpack()
var n
for n=0 to 100
if uo.injournal('a backpack') then
return 1
else
wait(1000)
endif
ws()
next
return 0
endsub
sub ws()
if uo.journal(0)=='World is saving now...' then
repeat
wait(1000)
until uo.journal(0)<>'World is saving now...'
endif
endsub
sub WalkN(x,y,Target) ########################################## Ходилка
VAR LastTimer
LastTimer=UO.Timer()
VAR i
VAR dir,ldir,rdir,key,olddir
VAR dx,dy,Exit=0
VAR CacheLimit=9,CacheIndex="Text"
DIM CacheX[10], CacheY[10]
CacheX[0]="Test"
While Exit<>1
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<4 OR LastTimer+200<UO.Timer() Then
wait(1000)
return
Endif
Else
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 OR LastTimer+200<UO.Timer() Then
return
Endif
Endif
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then ; GoSE
dir=3
ldir=2
rdir=4
key=40 ; DownArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=0
rdir=1
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=5
rdir=6
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx>0 AND dy<0 Then ; GoNE
dir=1
ldir=0
rdir=2
key=39 ; RightArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=6
rdir=7
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 AND dy>0 Then ; GoSW
dir=5
ldir=4
rdir=6
key=37 ; LeftArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==6 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 AND dy<0 Then ; GoWN
dir=7
ldir=6
rdir=0
key=38 ; UpArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then ; GoE
dir=2
key=34 ; PgDown
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoNE
dir=1
ldir=1
rdir=0
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 Then ; GoW
dir=6
key=36 ; Home key
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then ; GoS
dir=4
key=35 ; End
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=6
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dy<0 Then ;GoN
dir=0
key=33 ; PgUp
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoWN
dir=7
ldir=7
rdir=6
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
Wend
end sub
sub StepEdit(x,y,dir,key)
VAR walkwait=300
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
If x==UO.GetX() AND y==UO.GetY() Then
;zatik
ErrLevel=1
Endif
Endif
Return ErrLevel
end sub
sub StepArrow(x,y,dir,ldir,rdir,key)
VAR walkwait=300
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then
CheckLag()
Endif
Endif
If UO.GetX()==x AND UO.GetY()==y Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
CheckLag()
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
; zatik
ErrLevel=1
Endif
Endif
Endif
Return ErrLevel
end sub