Вот мой старый скрипт похожий. На Антаресе им копаю в НТ
Это пример выдирания из чужих скриптов. Просто встань у банка, положи в пак кирку и запусти скрипт. Пока не выключишь, он так и будет ходить туда, сюда и копать.
Code:
VAR i = 1
VAR Ore = '0x19B9' ; Тип кучки руды
VAR Picsar = '0x0E85' ; кирка
VAR SteikFat = '0x097B' ; рыбные стейки
VAR Sunduk = '0x40801FE0' ; ИД сундука с инструментом (кирка)
VAR Sunduk2 = '0x40801FE0' ; ИД сундука для ресурсов
sub hustle()
While i < 3
Main()
wait(5000)
Wend
end sub
Sub Main()
;идем к банку
GoToTile( 363, 332, 1, False )
wait( 5000 ) ; пауза
UO.Say( 'Bank' ) ; открываем банк
wait( 5000 ) ; пауза
; ищем что поесть
If UO.Count( SteikFat ) < 10 Then ; проверяем наличие стейков в паке
UO.FindType( SteikFat,'-1',Sunduk) ; ищем стейки в сундуке
If UO.FindCount () > 0 Then ; проверяем нашли или нет
UO.MoveItem( 'finditem','10' ) ; берем 10 стейков в пак
wait (1000) ;пауза
Else ; иначе
UO.Print( 'Нет стейков' ) ; ругаемся
Endif
Endif
; едим
UO.UseType( SteikFat )
wait (1000) ;пауза
UO.UseType( SteikFat )
wait (1000) ;пауза
UO.UseType( SteikFat )
wait (1000) ;пауза
; ищем кирку
If UO.Count( Picsar ) < 2 Then ; проверяем наличие кирки в паке
UO.FindType( Picsar,'-1',Sunduk) ; ищем кирку в сундуке
If UO.FindCount () > 0 Then ; проверяем нашли или нет
UO.MoveItem( 'finditem','2' ) ; берем 2 кирки в пак
wait (1000) ;пауза
Else ; иначе
UO.Print( 'Нет кирки' ) ; ругаемся
Endif
Endif
; начинаем копать
; идем на старт
GoToTile( 250, 266, 1, False )
wait(1000) ; пауза
; идем к точке копания №1
GoToTile( 243, 267, 1, False )
wait(1000) ; пауза
;запускаем скрипт на мининг вокруг чара
Mining()
wait(1000) ; пауза
; идем к точке копания №2
GoToTile( 234, 266, 1, False )
wait(1000) ; пауза
;запускаем скрипт на мининг вокруг чара
Mining()
wait(1000) ; пауза
; идем к точке копания №3
GoToTile( 234, 272, 1, False )
wait(1000) ; пауза
;запускаем скрипт на мининг вокруг чара
Mining()
wait(1000) ; пауза
; идем к точке копания №4
GoToTile( 242, 271, 1, False )
wait(1000) ; пауза
;запускаем скрипт на мининг вокруг чара
Mining()
wait(1000) ; пауза
; идем к точке копания №5
GoToTile( 243, 267, 1, False )
wait(1000) ; пауза
;запускаем скрипт на мининг вокруг чара
Mining()
wait(1000) ; пауза
; идем к банку
GoToTile( 363, 332, 1, False )
wait(3000) ; пауза
UO.Say( 'Bank' ) ; открываем банк
wait( 5000 ) ; пауза
UO.MoveItem( '0x19B9','-1','Sunduk2' )
wait( 1000 ) ; пауза
DropOre()
wait( 1000 ) ; пауза
end sub
Sub GoToTile( OX, OY, N, S )
VAR myx, myy, MD, J
VAR Lx1, Ly1
VAR Lx2, Ly2
VAR Sx, Sy
VAR T
VAR Des = N
VAR MoveDelay = 100
J = 1
MD = MoveDelay * 1.5
myx = uo.getx()
myy = uo.gety()
MoveOnce( GetDir( uo.getx(), uo.gety(), ox, oy), MD, False)
Sx = 0
Sy = 0
Lx1 = uo.getx() / 2
Ly1 = uo.gety() / 2
Lx2 = Lx1 / 2
Ly2 = Ly1 / 2
T = UO.Timer()
If (GetDistance(ox, oy) <> N) OR ( (NOT S) AND GetDistance(ox, oy) > N ) Then
UO.Exec('exec PermResend')
EndIf
While ( (GetDistance(ox, oy) <> N) OR ((NOT S) and GetDistance(ox, oy) > N) ) and ( OX >= 0 ) and ( OY >= 0 )
If ( (UO.Timer() - T) * 15 > MoveDelay ) Then
T = UO.Timer()
Lx2 = Lx1
Ly2 = Ly1
Lx1 = myx
Ly1 = myy
myx = uo.getx()
myy = uo.gety()
endIf
MD=MoveDelay
If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then
MD = MD * 3 / GetDistance( ox, oy )
EndIf
wait(MD)
If GetDistance( OX, OY ) > Des Then
MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False)
Else
If S Then
If GetDistance(OX,OY)<Des Then
If GetDistance(OX,OY)<>0 Then
MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False)
Else
MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False)
EndIf
EndIf
EndIf
EndIf
If GetDistance(OX,OY)<>Des Then
If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then
If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then
J=1
EndIf
J=J+1
UO.Resend()
Sx = uo.getx()
Sy = uo.gety()
Stun(ox,oy,J)
EndIf
EndIf
Wend
UO.Exec( 'terminate PermResend' )
endsub
;
; ============ MOVEONCE ===
; Процедура MoveOnce - хождение в определённую сторону
; Направления:
; Система направлений по клавишам Нумпада
; 8 = 1 | 2 = -1
; 9 = 2 | 1 = -2
; 6 = 3 | 4 = -3
; 3 = 4 | 7 = -4
;
; Такая система позволяет с лёгкостью получать направление, обратное
; данному...
;
Sub MoveOnce( Dir, Del, Rev )
VAR Num
Var MoveNumber = 1
If Rev Then
Num = MoveNumber + 1
Else
Num = MoveNumber
EndIf
If ( Num > 0 ) and ( Dir <> 0 ) Then
If Dir == 1 Then
UO.Press( 38, Num, Del )
EndIf
If Dir == 2 Then
UO.Press( 33, Num, Del )
EndIf
If Dir == 3 Then
UO.Press( 39, Num, Del )
EndIf
If Dir == 4 Then
UO.Press( 34, Num, Del )
EndIf
If Dir == -1 Then
UO.Press( 40, Num-1, Del )
EndIf
If Dir == -2 Then
UO.Press( 35, Num, Del )
EndIf
If Dir == -3 Then
UO.Press( 37, Num, Del )
EndIf
If Dir == -4 Then
UO.Press( 36, Num, Del )
EndIf
If Rev Then
If Dir <> -1 Then
UO.Press( 40, 1, Del )
EndIf
EndIf
EndIf
endsub
;
; ============== GETDIR ===
; Функция GetDir возвращает направление, по которому надо идти
; к координате
;
Sub GetDir( myx, myy, ox, oy )
VAR I, J
J = 0
VAR X = ox - myx
VAR Y = oy - myy
I = GetQDir( Abs(X), Abs(Y) )
If X >= 0 Then
If Y >= 0 Then
If I == 1 Then
J = -2
Else
If I == 2 Then
J = -1
Else
If I == 3 Then
J = 4
EndIf
EndIf
EndIf
Else
If I == 1 Then
J = 2
Else
If I == 2 Then
J = 3
Else
If I == 3 Then
J = 4
EndIf
EndIf
EndIf
EndIf
Else
If Y >= 0 Then
If I == 1 Then
J = -2
Else
If I == 2 Then
J = -3
Else
If I == 3 Then
J = -4
EndIf
EndIf
EndIf
Else
If I == 1 Then
J = 2
Else
If I == 2 Then
J = 1
Else
If I == 3 Then
J = -4
EndIf
EndIf
EndIf
EndIf
EndIf
RETURN J
endsub
;
; =============== GETQDIR ===
;
;
Sub GetQDir( x, y )
VAR Ep = 0.172
VAR J = 0
If X == 0 Then
J = 1
Else
If ( Y / X ) < Ep Then
J = 3
Else
If ( X / Y ) < Ep Then
J = 1
Else
J = 2
EndIf
EndIf
EndIf
RETURN J
endsub
;
; ============== GETDISTANCE ===
; Функция GetDistance возвращает расстояние до координат
; (как UO.GetDistance - до объекта)
;
; Почему так - потому что учим математику :)
;
Sub GetDistance( X, Y )
VAR A, B, C
A = abs( X - UO.GetX() )
B = abs( Y - UO.GetY() )
If A > B Then
C = A
Else
C = B
EndIf
Return C
endsub
;
; ============= PERP ===
; Функция Perp возвращает направление, перпендикулярное введённому
;
Sub Perp( Dir )
VAR D = Dir
If Dir == 1 Then
D = 3
EndIf
If Dir == 2 Then
D = 4
EndIf
If Dir == 3 Then
D = -1
EndIf
If Dir == 4 Then
D = -2
EndIf
If Dir == -1 Then
D = -3
EndIf
If Dir == -2 Then
D = -4
EndIf
If Dir == -3 Then
D = 1
EndIf
If Dir == -4 Then
D = 2
EndIf
RETURN D
endsub
;
; =============== STUN ===
; Обход препятствий
;
Sub Stun( X, Y, N )
VAR I
VAR myx
VAR myy
VAR MoveDelay = 100
myx = uo.getx()
myy = uo.gety()
For I=1 to N
MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False)
Next
Wait(MoveDelay)
UO.Resend()
If (myx==uo.getx()) and (myy==uo.gety()) Then
For I=1 to N
MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False)
Next
Wait(MoveDelay)
UO.Resend()
EndIf
If (myx==uo.getx()) and (myy==uo.gety()) Then
For I=1 to N
MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False)
Next
Wait(MoveDelay)
Stun(x,y,N)
EndIf
endsub
;
; ============= ABS ===
; Убирает знак минуса в отрицательных числах
;
Sub abs( a )
VAR b
If a < 0 Then
b = -a
Else
b = a
endif
return b
endsub
;
; ============== PERMRESEND ===
;
Sub PermResend()
Var Mn = 9
VAR MoveDelay = 100
Repeat
UO.Resend()
Wait( MoveDelay * Mn )
Until ( 1 > 2 )
endsub
Sub Mining()
var x,y,z, n
VAR LastTimer
UO.Set('finddistance','3')
n=0
z=UO.GetZ("self")
for x=-3 to 3
for y=-3 to 3
UO.Print(str(x)+" "+str(y))
Repeat
if UO.InJournal('TORMOZ') then
pause()
endif
UO.DeleteJournal()
UO.Warmode("0")
UO.WaitTargetTile("1341",STR(UO.GetX()+x),STR(UO.GetY()+Y),str(z))
UO.UseType('0x0E85')
LastTimer=UO.Timer()
Repeat
wait(500)
Until UO.InJournal("You put") or UO.InJournal("can't see") or UO.InJournal("heavy") or UO.InJournal("location") or UO.InJournal("no ore") or UO.InJournal("but fail") or UO.InJournal("far away") or UO.InJournal("in rock") or UO.InJournal("must wait") or UO.InJournal("nothing") or UO.InJournal("elsewhere") or UO.InJournal("where it") OR UO.Timer()>LastTimer+200
if UO.InJournal("You put") then
n=0
else
n=n+1
endif
Until UO.InJournal("nothing") or UO.InJournal("elsewhere") or UO.InJournal("no ore here") or UO.InJournal("location") or UO.InJournal("far away") or UO.InJournal("in rock") or UO.InJournal("where it") or n>=5
next
next
end sub
;скрипт на выкладывание руды
Sub DropOre()
uo.Print('Начинаем разгрузку.')
if uo.Waiting() then
uo.CancelTarget()
end if
var a,Exit
dim Ruda[1]
Ruda[0]=0x19B9
uo.Print('Выкладываем руду.')
uo.SetReceivingContainer(Sunduk2)
wait(500)
for a=0 to 0
Exit=0
repeat
uo.FindType(Ruda[a])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
Exit=1
end if
until Exit==1
next
if SteikFat==1 then
SteikFat()
end if
uo.UnSetReceivingContainer(Sunduk2)
uo.Print('Руда Выложена.')
end sub
Sub SteikFat()
ToEat()
end sub
Sub ToEat()
uo.SetReceivingContainer('backpack')
Open(Sunduk)
uo.FindType(SteikFat,'-1',Sunduk)
uo.Grab('5','finditem')
wait(500)
repeat
Checklag()
uo.UseType(SteikFat)
wait(1000)
until uo.InJournal('You are simply too full to eat any more!')
uo.UnsetReceivingContainer()
end sub
Sub CheckLag()
if uo.Waiting()>0 then
uo.Exec('canceltarget')
end if
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub