Code: Select all
#При работе должна быть "отжата" кнопка NumLock
Var MoveDelay=1000 # Промежуток между шагами
Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный.
Sub CheckLag()
DeleteJournal('backpack')
UO.Click('backpack')
While not UO.InJournal('backpack')
Wait(100)
Wend
EndSub
sub abs(a)
Var b
If a<0 Then
b=-a
Else
b=a
endif
return b
endsub
sub max(A,B)
Var C
If A>B Then
C=A
Else
C=B
EndIf
Return C
EndSub
sub DeleteJournal(St)
While UO.InJournal(St)
UO.SetJournalLine(UO.InJournal(St)-1,'')
Wend
endsub
Sub GetSome(What,Where,Count)
UO.UseObject('backpack')
While UO.GetSerial('lastcontainer')<>UO.GetSerial('backpack')
Wait(100)
Wend
UO.UseObject(Where)
While UO.GetSerial('lastcontainer')<>UO.GetSerial(Where)
Wait(100)
Wend
UO.FindType(What,'-1',Where)
UO.Click('finditem')
While UO.GetName('finditem')==''
Wait(100)
Wend
If UO.Count(What)+UO.GetQuantity('finditem')<Count Then
UO.Print('Not enouth '+UO.GetName('finditem')+'s')
Else
If UO.Count(What)<Count THen
Wait(1000)
Var Jo=UO.GetQuantity('finditem')
Var Ao=UO.ContainerOf('finditem')
UO.MoveItem('finditem',Str(Count-UO.Count(What)),'backpack')
While (Jo==UO.GetQuantity('finditem')) and (Ao==UO.ContainerOf('finditem'))
Wait(1000)
Wend
endif
EndIf
EndSub
Sub OpenBank()
DeleteJournal('your Bank Box')
UO.ServerPrint('I want to see my account in thy bank')
Wait(3000)
If not UO.InJournal('your Bank Box') Then
UO.ServerPrint('Hey! Where is my bank account?')
Wait(3000)
If not UO.InJournal('your Bank Box') Then
UO.ServerPrint('Hurry! My bank account!!!')
Wait(3000)
EndIf
EndIf
If not UO.InJournal('your Bank Box') Then
OpenBank()
EndIf
EndSub
Sub Meditate()
While UO.Mana<UO.Int
UO.UseSkill('Meditation')
Wait(8000)
Wend
EndSub
Sub GetNumb(C,I)
var J,T,K
J=0
K=1
While K>0
J=J+1
If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then
If I==0 Then
T=Val(Left(C,J))
Else
T=GetNumb(Right(C,Len(C)-J-1),I-1)
EndIf
K=0
EndIf
wend
UO.Print(T)
return T
endsub
Sub Perp(Dir)
Var D
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
Sub MoveOnce(Dir,Del)
Var D=UO.GetDir(),X=UO.GetX(),Y=UO.GetY(),T=UO.Timer()
If (Dir<>0) Then
If Dir==1 Then
UO.Press(38)
EndIf
If Dir==2 Then
UO.Press(33)
EndIf
If Dir==3 Then
UO.Press(39)
EndIf
If Dir==4 Then
UO.Press(34)
EndIf
If Dir==-1 Then
UO.Press(40)
EndIf
If Dir==-2 Then
UO.Press(35)
EndIf
If Dir==-3 Then
UO.Press(37)
EndIf
If Dir==-4 Then
UO.Press(36)
EndIf
While (Del>(UO.Timer()-T)*100) and (X==UO.GetX()) and (Y==UO.GetY()) and (D==UO.GetDir())
Wait(100)
Wend
If D<>UO.GetDir() Then
MoveOnce(Dir,Del-(UO.Timer()-T)*100)
EndIf
EndIf
EndSub
Sub GetQDir(x,y)
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
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
sub GetDistance(X,Y)
return max(abs(X-uo.getx()),abs(Y-uo.gety()))
endsub
Sub GoodDist(OX,OY,N,S)
If ((GetDistance(OX,OY)<=N) and (not S)) or ((GetDistance(OX,OY)==N) and S) Then
Return True
Else
Return False
EndIf
EndSub
Sub MoveTo(X,Y,O)
If (GetDistance(X,Y)>O-1) Then
MoveOnce(GetDir(UO.GetX(),UO.GetY(),X,Y),MoveDelay/O)
Else
MoveOnce(GetDir(UO.GetX(),UO.GetY(),X,Y),MoveDelay)
Wait(MoveDelay*(GetDistance(X,Y)-O+1))
EndIf
EndSub
sub GoToTile(OX,OY,N,S)
If not GoodDist(OX,OY,N,S) Then
Var X=UO.GetX()
Var Y=UO.GetY()
Var LX=X/2
Var LY=Y/2
Var LLX=LX/2
Var LLY=LY/2
Var Dir,AX,AY,Bol,DR,Dis
While not GoodDist(OX,OY,N,S)
While (not GoodDist(OX,OY,N,S)) and (not GoodDist(LLX,LLY,0,True))
UO.Print('aaaAAAaaa')
MoveTo(OX,OY,3)
CheckLag()
LLX=LX
LLY=LY
LX=X
LY=Y
X=UO.GetX()
Y=UO.GetY()
UO.Print('aaAAaa')
Wend
If not GoodDist(OX,OY,N,S) Then
UO.Print('aAa')
AX=UO.GetX()
AY=UO.GetY()
Dir=GetDir(AX,AY,OX,OY)
DR=Dir
If Mod(DR,2)==1 Then
DR=(Abs(DR)+1)*Abs(DR)/DR
EndIf
Bol=True
X=AX
Y=AY
While (Abs(DR-GetDir(UO.GetX(),UO.GetY(),OX,OY))<=1) or ((AX==UO.GetX()) and (AY==UO.GetY()) and Bol)
MoveOnce(DR,MoveDelay)
MoveOnce(DR,MoveDelay)
CheckLag()
UO.Print(Str(DR))
Wait(MoveDelay)
If Bol and ((AX<>UO.GetX()) or (AY<>UO.GetY())) Then
Bol=False
EndIf
If (X==UO.GetX()) and (Y==UO.GetY()) Then
DR=-Perp(DR)
EndIf
X=UO.GetX()
Y=UO.GetY()
Wend
If not GoodDist(OX,OY,N,S) Then
EndIf
EndIf
Wend
EndIf
endsub
Sub a()
GoToTile(3244,651,0,True)
EndSub
Sub b()
GoToTile(1497,1760,0,True)
EndSub
Sub c()
GoToTile(1428,1700,0,True)
EndSub
sub NearTile(Obj,Des,S)
endsub