Скрипт работает нормльно. Но после того как проходит весь массив и он начинает заново, то выдает ошибвку в строке f.open. Это самое начало практически
Code:
sub main()
var Ms1 = "There is no ore here to mine"
var Ms2 = "You got hit"
var Ms3 = "You cannot mine that"
var f=file("C:\kopka2.dat") ## - Путь к файлу в котором будут хранится координаты
var k,wei
DIM Gx[82]
DIM Gy[82]
uo.say('.macro on')
while 1<2
f.open()
for k=1 to 82
Beg:
uo.deletejournal()
Gx[k]=safe call f.ReadNumber()
Gy[k]=safe call f.ReadNumber()
uo.print('Idem kopat v to4ku X=' + str(Gx[k]))
uo.print('Idem kopat v to4ku Y=' + str(Gy[k]))
Walker(Gx[k],Gy[k])
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) <> '0x0E85' Then
UO.Equipt( 'Rhand', '0x0E85' )
repeat
wait(200)
until UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == '0x0E85'
Endif
If UO.Waiting() Then
UO.CancelTarget()
Endif
uo.waittargetself()
wait(200)
uo.usetype('0x0E85')
repeat
wait(500)
until UO.InJournal(ms1) or UO.InJournal(ms2) or UO.InJournal(ms3)
if UO.InJournal(ms2) then
uo.deletejournal()
UO.Exec("playwav C:\alarm1")
while UO.Life < UO.STR or UO.InJournal(ms1)
wait(200)
if UO.Life < 1 then
uo.warmode( 1 )
repeat
wait(200)
until UO.Life < 1
goto Beg
end if
wend
end if
wei = ( UO.Str * 4 ) - 120
if UO.Weight > wei then
Razgruz()
end if
wait(4000)
next
f.close()
uo.print('1 cikl zaverwen')
wait(1000)
wend
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(1000)
end sub
Sub Razgruz()
Walker(2426,176)
Walker(2449,176)
UO.Set('finddistance','2')
UO.FindType(0x0FB1,-1,'ground')
wait(200)
If UO.FindCount() <> 0 Then
repeat
UO.FindType('0x19B9')
wait(200)
IF UO.FindCount() > 0 Then
If UO.GetColor('finditem') == '0x04AA' Then #Gold
ProDrop(0x19B9,0x04AA)
end if
wait(200)
If UO.GetColor('finditem') == '0x0455' Then #BlackRock
ProDrop(0x19B9,0x0455)
end if
wait(200)
If UO.GetColor('finditem') == '0x0515' Then #Vailorite
ProDrop(0x19B9,0x0515)
end if
wait(200)
If UO.GetColor('finditem') == '0x052D' Then #Mifril
ProDrop(0x19B9,0x052D)
end if
wait(200)
If UO.GetColor('finditem') == '0x0481' Then #Winter
ProDrop(0x19B9,0x0481)
end if
wait(200)
If UO.GetColor('finditem') == '0x04C2' Then #blud
ProDrop(0x19B9,0x04C2)
end if
wait(200)
If UO.GetColor('finditem') == '0x04DF' Then #azur
ProDrop(0x19B9,0x04DF)
end if
wait(200)
If UO.GetColor('finditem') == '0x0947' Then #verit
ProDrop(0x19B9,0x0947)
end if
UO.UseObject('finditem')
wait(1200)
EndIf
until UO.FindCount() == 0
UO.Print("Tenepb pa3/\o>|<uM")
else
UO.Print("Forge not found")
endIf
#############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
############Shadow
If UO.Count(0x1BF2, 0x0770) > 0 Then
ProDrop(0x1BF2, 0x0770)
EndIF
############Agapit
If UO.Count(0x1BF2, 0x0400) > 0 Then
ProDrop(0x1BF2, 0x0400)
EndIF
############Ambers
If UO.Count(0x0F25,0x0000) > 0 Then
ProDrop(0x0F25,0x0000)
EndIF
############karti
If UO.Count(0x14ED) > 0 Then
while uo.count('0x14ED')
uo.findtype('0x14ED','-1','Bpack')
wait(200)
uo.moveitem('finditem','-1','0x5BFD8B81')
wait(1000)
wend
EndIF
uo.print('UgeM KonaTb :-)')
Walker(2426,176)
end sub
#####################################################
# WW W WW AA LL Kk KK EE EE RRR #
# WW W WW AA A LL Kk K EEE R R #
# WW W WW AA A LL KKK EEEEE R R #
# WW WW WW AAAA LL KKK EEE RRR #
# WWW WWW AA A LLLL KK Kk EE EE R RR #
#####################################################
var Prec=0
var MaxTraceDistance=15
var Speed=2
var StepTimeOut=600
Sub Walker(GoX,GoY)
UO.SetGlobal("Logging","0")
UO.SetGlobal("BlindWalk","0")
var LastDir
UO.SetGlobal("GlobalGoX",str(GoX))
UO.SetGlobal("GlobalGoY",str(GoY))
while not IsEnd(GoX,GoY)
LogInfo('Just walking')
LastDir=GoUntilHit(GoX,GoY)
if not IsEnd(GoX,GoY) then
LogInfo('Tracing')
FullAroundTrace(LastDir,GoX,GoY)
end if
wend
end sub
Sub FullAroundTrace(StartDir,GoX,GoY)
var LineX=UO.GetX()
var LineY=UO.GetY()
var CurDir=StartDir
var Direction=CountDirection(GoX,GoY,CurDir)
var StartX,StartY
var MovesDone=0
repeat
StartX=UO.GetX()
StartY=UO.GetY()
CurDir=Tracer(CurDir,Direction)
if (CurDir==GetDir(GoX,GoY)) then
return
endif
if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir()),LineX,LineY,GoX,GoY,StartX,StartY) then
return
end if
MovesDone=MovesDone+1
CurDir=AddToDir(CurDir,-Direction)
until MovesDone>MaxTraceDistance
end sub
Sub CountDirection(GoX,GoY,StartDir)
var GoDir=GetDir(GoX,GoY)
var MyX=UO.GetX()
var MyY=UO.GetY()
if GoDir<StartDir then
return -1
end if
if GoDir>StartDir then
return 1
end if
if Abs(MyX-GoX)>Abs(MyY-GoY) then
if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then
return -1
else
return 1
end if
else
if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
return -1
else
return 1
end if
end if
end sub
Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY)
var x3,y3,x4,y4
x3=StartX
y3=StartY
x4=StartX+(XFromDir(Dir)-StartX)*Speed
y4=StartY+(YFromDir(Dir)-StartY)*Speed
return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4)
end sub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4)
if x1==x3 and y1==y3 then
return false
end if
var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
if z1*z2>0 then
return false
else
LogInfo('Vector info:')
LogInfo('x1= '+str(x1))
LogInfo('y1= '+str(y1))
LogInfo('x2= '+str(x2))
LogInfo('y2= '+str(y2))
LogInfo('x3= '+str(x3))
LogInfo('y3= '+str(y3))
LogInfo('x4= '+str(x4))
LogInfo('y4= '+str(y4))
return true
end if
end sub
Sub IsDiap(X,X0,X1)
if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then
return true
end if
return false
end sub
Sub GoUntilHit(GoX,GoY)
var LastDir
LastDir=GetDir(GoX,GoY)
var CouldMove
repeat
LastDir=GetDir(GoX,GoY)
if LastDir<>0 and not IsEnd(GoX,GoY) then
CouldMove=TryDir(LastDir)
end if
until LastDir==0 or IsEnd(GoX,GoY) or not CouldMove
return LastDir
end sub
Sub IsEnd(GoX,GoY)
if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
LogInfo('END FOUND')
return true
else
return false
end if
end sub
Sub GetDir(GoX,GoY)
var MyX=UO.GetX()
var MyY=UO.GetY()
var DiffX=Abs(UO.GetX()-GoX)
var DiffY=Abs(UO.GetY()-GoY)
var GoDir=0
if (DiffX/(DiffY+0.1))>=2 then
if (MyX>GoX) then
GoDir=7
else
GoDir=3
end if
else
if (DiffY/(DiffX+0.1))>=2 then
if (MyY>GoY) then
GoDir=5
else
GoDir=1
end if
else
if (MyX>GoX) and (MyY>GoY) then
GoDir=6
else
if (MyX>GoX) and (MyY<GoY) then
GoDir=8
else
if (MyX<GoX) and (MyY>GoY) then
GoDir=4
else
if (MyX<GoX) and (MyY<GoY) then
GoDir=2
end if
end if
end if
end if
end if
end if
return GoDir
end sub
Sub Tracer(StartDir,Direction)
var CurDir=StartDir
var Result
repeat
Result=TryDir(CurDir)
if not Result then
CurDir=AddToDir(CurDir,Direction)
end if
until Result
return Result
end sub
Sub AddToDir(Dir,Cnt)
var NewDir=Dir
NewDir=NewDir+Cnt
while NewDir>8
NewDir=NewDir-8
wend
while NewDir<1
NewDir=NewDir+8
wend
return NewDir
end sub
Sub TryDir(Dir)
var BegX=UO.GetX() # Ia?aeuiia O
var BegY=UO.GetY() # Ia?aeuiia Y
var Counter=0
var GoX=BegX
var GoY=BegY
GoX=XFromDir(Dir)
GoY=YFromDir(Dir)
if not IsPass(GoX,GoY) then
LogInfo(str(GoX)+':'+str(GoY)+' is not passable')
return false
end if
return TurnAndGoDir(Dir)
end sub
Sub XFromDir(Dir)
if Dir==2 OR Dir==3 Or Dir==4 then
return (UO.GetX()+1)
end if
if Dir==6 OR Dir==7 Or Dir==8 then
return (UO.GetX()-1)
end if
return (UO.GetX())
end sub
Sub YFromDir(Dir)
if Dir==8 OR Dir==1 Or Dir==2 then
return (UO.GetY()+1)
end if
if Dir==4 OR Dir==5 Or Dir==6 then
return (UO.GetY()-1)
end if
return (UO.GetY())
end sub
Sub TurnAndGoDir(Dir)
var StartDir=GetDirToDir(UO.GetDir())
var StartX=UO.GetX()
var StartY=UO.GetY()
var EndDir
var Counter=0
GoDir(Dir)
repeat
EndDir=GetDirToDir(UO.GetDir())
wait(100)
Counter=Counter+1
until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=8
if Counter>=8 then
return 0
end if
if StartY<>UO.GetY() or StartX<>UO.GetX() then
return Dir
else
GoDir(Dir)
repeat
wait(100)
Counter=Counter+1
until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/100
if Counter>=StepTimeOut/100 then
LogInfo('Step timeout reached')
return 0
else
return Dir
end if
end if
end sub
Sub GetDirToDir(GotDir)
var ChangedDir=-GotDir
ChangedDir=AddToDir(ChangedDir,5)
return ChangedDir
end sub
Sub DirToInj(Dir)
dim Dirs[9]
Dirs[1]=1
Dirs[2]=2
Dirs[3]=3
Dirs[4]=6
Dirs[5]=9
Dirs[6]=8
Dirs[7]=7
Dirs[8]=4
return (Dirs[Dir])
end sub
Sub GoDir(Dir)
dim Dirs[9]
Dirs[1]=35
Dirs[2]=40
Dirs[3]=34
Dirs[4]=39
Dirs[5]=33
Dirs[6]=38
Dirs[7]=36
Dirs[8]=37
var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX")))
var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY")))
var GoDistance
if (DistanceX-Prec)<Speed then
GoDistance=DistanceX-Prec
else
if (DistanceY-Prec)<Speed then
GoDistance=DistanceY-Prec
else
GoDistance=Speed
endif
endif
UO.Press(Dirs[Dir],GoDistance)
end sub
Sub IsPass(X,Y)
if UO.GetGlobal("BlindWalk") then
return true
endif
dim Types[60]
Types[1]=3
Types[2]=25
Types[3]=51
Types[4]=63
Types[5]=113
Types[6]=140
Types[7]=172
Types[8]=219
Types[9]=232
Types[10]=235
Types[11]=239
Types[12]=243
Types[13]=248
Types[14]=251
Types[15]=264
Types[16]=267
Types[17]=282
Types[18]=289
Types[19]=321
Types[20]=379
Types[21]=420
Types[22]=440
Types[23]=476
Types[24]=499
Types[25]=513
Types[26]=542
Types[27]=578
Types[28]=586
Types[29]=622
Types[30]=700
Types[31]=804
Types[32]=1740
Types[33]=1758
Types[34]=1770
Types[35]=1779
Types[36]=1779
Types[37]=1881
Types[38]=1886
Types[39]=1801
Types[40]=1805
Types[41]=1813
Types[42]=1820
Types[43]=1831
Types[44]=1833
Types[45]=1843
Types[46]=1850
Types[47]=1873
Types[48]=1876
Types[49]=1885
Types[50]=1888
Types[51]=1946
Types[52]=1969
Types[53]=2500
Types[54]=2539
for var i=1 TO 53 STEP 2
if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then
return true
end if
next
return false
end sub
Sub LogInfo(Line)
if not UO.GetGlobal("Logging")=="0" then
UO.TextOpen()
UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
end if
end sub
Sub Abs(X)
if X>0 then
return X
else
return (-X)
end if
end sub