Скрипт работает нормльно. Но после того как проходит весь массив и он начинает заново, то выдает ошибвку в строке 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
|