Code:
#При работе должна быть "отжата" кнопка NumLock
Var Pickaxe=0x0E85 # Pichaxe
Var Ore=0x19B9
Var Ingot=0x1BF2
Var Iron=0x0000
Var MoveDelay=150 # Промежуток между шагами
Var MoveNumber=1 # Количество шагов при смене дислокации
Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный.
Var FileName='C:\Mining2.dat' # В каждой строке файла тайл дерева
Sub Main()
UO.SetGlobal('process','no')
repeat
if UO.GetGlobal('process')=='no' then
GoToTile(1920,369,0,False)
GoToTile(1918,374,0,False)
UO.DeleteJournal()
UO.Exec('exec Lumb')
endIf
Wait(3000)
until (1==0)
EndSub
Sub Lumb()
Var Tl,T,X,Y,Z,srl
var wei
UO.SetGlobal('process','yes')
Var F=File(FileName)
F.Open()
Beg:
DeleteJournal('no mine')
Tl=safecall F.Readln()
Tl=Trim(Tl)
If Tl=='File read error' Then
GoTo Ext
EndIf
T=GetNumb(Tl,0)
X=GetNumb(Tl,1)
Y=GetNumb(Tl,2)
Z=GetNumb(Tl,3)
UO.Print('next mine')
UO.Print('Tile '+Tl)
GoToTile(X,Y,1,False)
Repeat
uo.DeleteJournal()
UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))
While uo.Waiting()
Emil()
If UO.Dead() Then
Ress()
UO.WarMode( 0 )
GoToTile(X,Y,1,false)
UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))
Emil()
endif
WEND
repeat
Wait(1000)
If UO.Dead() Then
Ress()
UO.WarMode( 0 )
GoToTile(X,Y,1,False)
UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))
Emil()
endif
#if uo.count(Ore)>170 then
wei = ( UO.Str * 4 ) - 50
if UO.Weight > wei then
GoToTile(1920,373,0,False)
GoToTile(1920,366,0,False)
GoToTile(1951,362,0,False)
GoToTile(1951,367,0,False)
Plav()
wait(1000)
Exist()
wait(1000)
GoToTile(1952,368,0,False)
GoToTile(1951,367,0,False)
GoToTile(X,Y,1,False)
UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))
UO.UseObject(UO.ObjAtLayer('Rhand'))
endif
Until UO.InJournal("There is no ore here to mine.") or UO.InJournal("There is no ore here to mine")
Until UO.InJournal("There is no ore here to mine.") or UO.InJournal("There is no ore here to mine")
If UO.InJournal("There is no ore here to mine.") or UO.InJournal("There is no ore here to mine") then
Goto Beg
EndIf
Ext:
F.Close()
UO.SetGlobal('process','no')
EndSub
###############################################################
#Определение что есть ж)
###############################################################
sub Exist()
#############Iron
If UO.Count(0x1BF2, 0x0000) > 0 Then
ProDrop(0x1BF2, 0x0000)
EndIF
############Rasty
If UO.Count(0x1BF2,0x0750) > 0 Then
ProDrop(0x1BF2,0x0750)
EndIF
############Bronze
If UO.Count(0x1BF2, 0x0488) > 0 Then
ProDrop(0x1BF2, 0x0488)
EndIF
############Old Copper
If UO.Count(0x1BF2, 0x0949) > 0 Then
ProDrop(0x1BF2, 0x0949)
EndIF
############Dull Copper
If UO.Count(0x1BF2, 0x060A) > 0 Then
ProDrop(0x1BF2, 0x060A)
EndIF
############Copper
If UO.Count(0x1BF2, 0x0641) > 0 Then
ProDrop(0x1BF2, 0x0641)
EndIF
############Pirit
If UO.Count(0x1BF2, 0x09EE) > 0 Then
ProDrop(0x1BF2, 0x09EE)
EndIF
############Silver
If UO.Count(0x1BF8, 0x0482) > 0 Then
ProDrop(0x1BF8, 0x0482)
EndIF
############Gold
If UO.Count(0x1BEC, 0x0000) > 0 Then
ProDrop(0x1BEC, 0x0000)
EndIF
############Shadow
If UO.Count(0x1BF2, 0x0770) > 0 Then
ProDrop(0x1BF2, 0x0770)
EndIF
############Verit
If UO.Count(0x1BF2, 0x0947) > 0 Then
ProDrop(0x1BF2, 0x0947)
EndIF
############Agapit
If UO.Count(0x1BF2, 0x0400) > 0 Then
ProDrop(0x1BF2, 0x0400)
EndIF
############Blood
If UO.Count(0x1BF2, 0x04C2) > 0 Then
ProDrop(0x1BF2, 0x04C2)
EndIF
############Azurit
If UO.Count(0x1BF2, 0x04DF) > 0 Then
ProDrop(0x1BF2, 0x04DF)
EndIF
############Mithril ore
If UO.Count(0x19B9, 0x052D) > 0 Then
ProDrop(0x19B9, 0x052D)
EndIF
############Valorite ore
If UO.Count(0x19B9, 0x0515) > 0 Then
ProDrop(0x19B9, 0x0515)
EndIF
############Winter ore
If UO.Count(0x19B9, 0x0481) > 0 Then
ProDrop(0x19B9, 0x0481)
EndIF
############Black Rock Ore
If UO.Count(0x19B9,0x0455) > 0 Then
ProDrop(0x19B9,0x0455)
EndIF
############Ambers
If UO.Count(0x0F25,0x0000) > 0 Then
ProDrop(0x0F25,0x0000)
EndIF
end sub
###############################################################
#Умный дроп
###############################################################
sub ProDrop(T,C)
UO.FindType(T,C,'backpack')
Var b = UO.GetSerial("finditem")
UO.FindType(T,C,'ground')
Var g = UO.GetSerial("finditem")
UO.MoveItem(b, "0", g,str(uo.getx(g)),str(uo.gety(g)),"0")
Wait(500)
If Uo.Count(T,C) > 0 Then
Clear(T,C)
endIF
end sub
###############################################################
#Конец умного дропа
###############################################################
###############################################################
#Умный дроп 2
###############################################################
sub ProDrop2(T,C)
UO.FindType(T,C,'backpack')
If C < 0 Then
C = UO.GetColor('finditem')
endif
Var b = UO.GetSerial('finditem')
UO.FindType(T,C,'ground')
Var g = UO.GetSerial('finditem')
UO.MoveItem(b, '0', g,str(uo.getx(g)),str(uo.gety(g)),'0')
Wait(500)
If Uo.Count(T,C) > 0 Then
Clear(T,C)
endIF
end sub
###############################################################
#Конец умного дропа 2
###############################################################
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,Rev)
Var Num
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
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 abs(a)
Var b
If a<0 Then
b=-a
Else
b=a
endif
return b
endsub
Sub PermResend()
Var Mn=4
Repeat
# UO.Resend()
Wait(MoveDelay*Mn)
Until (1>2)
EndSub
sub max(A,B)
Var C
If A>B Then
C=A
Else
C=B
EndIf
Return C
EndSub
sub GetDistance(X,Y)
return max(abs(X-uo.getx()),abs(Y-uo.gety()))
endsub
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
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()
# UO.Print(Str(uo.getx())+' '+Str(uo.gety())+' '+Str(ox)+' '+Str(oy)+' '+Str(GetDir(uo.getx(),uo.gety(),ox,oy))+' '+Str(T))
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
Sub Stun(X,Y,N)
Var I
Var myx
Var myy
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
Sub DeleteJournal(What)
Var T,J
J=False
If UO.InJournal(What) Then
J=True
UO.DeleteJournal()
EndIf
RETURN J
EndSub
sub Plav()
UO.Set('finddistance','2')
UO.FindType(0x0FB1,-1,'ground')
If UO.FindCount() <> 0 Then
repeat
UO.FindType(0x19B9)
IF UO.FindCount() > 0 Then
If UO.GetColor('finditem') == '0x0455' Then #BlackRock
ProDrop(0x19B9,0x0455)
else
If UO.GetColor('finditem') == '0x0515' Then #Vailorite
ProDrop(0x19B9,0x0515)
else
If UO.GetColor('finditem') == '0x052D' Then #Mifril
ProDrop(0x19B9,0x052D)
else
If UO.GetColor('finditem') == '0x0481' Then #Winter
ProDrop(0x19B9,0x0481)
else
If UO.GetColor('finditem') == '0x04C2' Then #BloodRock
ProDrop(0x19B9,0x04C2)
else
If UO.GetColor('finditem') == '0x04DF' Then #Azurite
ProDrop(0x19B9,0x04DF)
else
If UO.GetColor('finditem') == '0x0947' Then #Verite
ProDrop(0x19B9,0x0947)
else
If UO.GetColor('finditem') == '0x0400' Then #Agapite
ProDrop(0x19B9,0x0400)
else
UO.UseObject('finditem')
wait(1200)
end If
end If
end If
end If
end If
end If
end If
end If
EndIf
until UO.FindCount() == 0
UO.Print("-=-= END =-=-")
else
UO.Print("Forge not found")
endIf
end sub
sub count()
UO.Print(str(UO.Count(ore)))
end sub
Sub BS()
#0x1B7B - Metal shield
#0x13BF - chainmail tunic
#0x1415 - грудина
while true
UO.FindType(0x1415, -1,'ground')
wait(2000)
If UO.FindCount() > 0 Then
uo.waittargetobject('finditem')
Uo.UseType(0x0FBB)
wait(5000)
endif
WEND
end sub
sub Emil()
IF (UO.GetGraphic(UO.ObjAtLayer("Rhand"))) <> '0x0E85' Then
If UO.Count('0x0E85') > 0 Then
UO.UseType('0x0E85')
endif
else
UO.UseObject(UO.ObjAtLayer('Rhand'))
EndIf
wait(2000)
end sub
sub Clear(T,C)
Var Count = UO.Count(T,C)
UO.FindType(T,C,'backpack')
Var b = UO.GetSerial("finditem")
UO.FindType(T,C,'ground')
Var g = UO.GetSerial("finditem")
Wait(500)
UO.MoveItem(b, "0", g,str(uo.getx(g)),str(uo.gety(g)),"0")
Wait(500)
If UO.Count(T,C) == Count Then
If (UO.Count('finditem')+Count) < 60000 Then
uo.ignore('finditem')
ProDrop(T,C)
endIf
endIf
end sub
sub Ress()
While UO.Dead()
wait(1000)
UO.WarMode( 1 )
WEND
end sub
sub Count()
#UO.Print('Iron : '+Str(UO.Count(0x19B9, 0x0000)))
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Bronze : '+Str(UO.Count(0x19B9, 0x0488)))
#UO.Print('Rasty : '+Str(UO.Count(0x19B9, 0x0750)))
#UO.Print('-=-=-=-=-=-=-=-')
#wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Old Copper : '+Str(UO.Count(0x19B9, 0x0949)))
#UO.Print('Dull Copper : '+Str(UO.Count(0x19B9, 0x060A)))
#UO.Print('Copper : '+Str(UO.Count(0x19B9, 0x0641)))
#UO.Print('-=-=-=-=-=-=-=-')
#wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Pirit : '+Str(UO.Count(0x19B9, 0x09EE)))
#UO.Print('Silver : '+Str(UO.Count(0x19B9, 0x0482)))
#UO.Print('Shadow : '+Str(UO.Count(0x19B9, 0x0770)))
#UO.Print('Gold : '+Str(UO.Count(0x19B9, 0x04AA)))
#UO.Print('-=-=-=-=-=-=-=-')
#wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Verit : '+Str(UO.Count(0x19B9, 0x0947)))
#UO.Print('Agapit : '+Str(UO.Count(0x19B9, 0x0400)))
#UO.Print('Blood : '+Str(UO.Count(0x19B9, 0x04C2)))
#UO.Print('Azurit : '+Str(UO.Count(0x19B9, 0x04DF)))
#UO.Print('-=-=-=-=-=-=-=-')
Wait(4000)
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('Mithril : '+Str(UO.Count(0x19B9, 0x052D)))
#UO.Print('Valorite : '+Str(UO.Count(0x19B9, 0x0515)))
#UO.Print('Winter : '+Str(UO.Count(0x19B9, 0x0481)))
#UO.Print('-=-=-=-=-=-=-=-')
#UO.Print('BlackRock : '+Str(UO.Count(0x19B9, 0x0455)))
#UO.Print('-=-=-=-=-=-=-=-')
end sub
sub play()
Var Co = 0
While true
If UO.Life < UO.Str then
If Co < 10 then
uo.playwav("D:\cap000.wav")
wait(1500)
Co = Co + 1
else
wait(60000)
Co = 0
endif
end if
wait(1000)
wend
sub Lot()
repeat
UO.FindType(0x19B9,-1,'ground')
IF UO.FindCount() > 0 Then
Uo.Grab(0,'finditem')
wait(1000)
end if
until UO.FindCount() == 0
end sub
Вот весь срипт. в чем все дело, он работает у определной копалки, для которой написан.
А когда я его перенастраиваю под свою копалку он не может дойти, перенастраиваю меняю маршрут...он начинает глючить...