Code: var kirka, a, goback, name var myXX, myYY VAR CraftChest='0x402C32D2' VAR OreBox = "0x4050B366" ;Контейнер для руды VAR HiOreBox = "0x4050B362" ;Контейнер для "выхи" var kalitka='0x0847' ;Тип закрытой калитки var door='0x06A5' ;Тип закрытой дверей var n = 2 var maxN = 10 var numer = 1 var maxnumer = 4 kirka = "0x0E85" ;Тип кирки.
################################################################ sub vertijok() UO.Say("Ukajite Runbuk N 1") UO.AddObject('RuneB1') While UO.Targeting()==2 wait(500) Wend wait(1000) min() end sub ################################################################ sub min() wait(3000) uo.exec('exec main') end sub ################################################################ sub f() if numer == 1 then uo.Print('Реколимся Рунбука № 1, рунка № '+str(n)) RunebookRecalla(n) end if end sub ################################################################ sub main() uo.exec('exec start') uo.exec('exec ControlOfDanger') end sub ################################################################ sub start() f() Walker(0,0,0) ; Тут если надо захадить в шахту wait(1000) while not uo.dead() Walker(0,0,0) ; Тут координаты где будет копать kopka() Walker(0,0,0) kopka() wend end sub ################################################################ sub kopka() hiding() myXX=uo.getX(); запоминает место откуда начал копать myYY=uo.getY(); var PX, PY, PZ, IX, IY, IZ PX=0 PY=0 UO.DeleteJournal() PX = UO.GetX() PY = UO.GetY() PZ = UO.GetZ() For Iy=-4 to 4 For Ix=-4 to 4 For Iz=-4 to -2 if UO.Weight <= (uo.str*4+20) then while not UO.InJournal('There is no ore') and not UO.InJournal("You have no line") and not UO.InJournal("That is to far away") and not UO.InJournal("You can't think") and not UO.InJournal("You have no line of") and not UO.InJournal("too far away") and not UO.InJournal("mining in rock.") UO.DeleteJournal() if not uo.hidden() then autohide() while not uo.injournal("You have hidden") wait(200) wend endif ws() UO.WaitTargetTile(-1,Str(PX+Ix),Str(PY+Iy),Str(PZ+IZ)) uo.usetype(kirka) while not UO.InJournal("You put the") and not UO.InJournal("You loosen some") and not UO.InJournal("You can't think") and not UO.InJournal("That is to far away") and not UO.InJournal("There is no ore") and not UO.InJournal("You have no line of") and not UO.InJournal("too far away") and not UO.InJournal("mining in rock.") Wait(200) wend wend endif UO.DeleteJournal() next next next if UO.Weight > (uo.str*4+20) then RunebookRecalla(1) UO.exec('exec GotoHomeT') else endif end sub ################################################################ Sub hiding() var ms1="You have hidden" var ms2="You can't" repeat uo.deletejournal() uo.useskill('Stealth') repeat wait(100) until uo.injournal(ms1) or uo.injournal(ms2) until uo.injournal(ms1) end sub
sub autohide() if not uo.hidden() then uo.exec("warmode 0") uo.useskill("Stealth") endif uo.deletejournal() while not uo.injournal("You have been revealed|You can't seem") wait(100) wend uo.exec("terminate all") end sub ################################################################ Sub ws() if uo.injournal("world is saving now...") then while not uo.injournal("world data saving") wait(100) wend endif CheckLag() end sub ################################################################ sub ControlOfDanger() Var Elemental while 1 UO.DeleteJournal() while not UO.InJournal('Elemental') wait(100) wend Elemental=UO.JournalSerial(UO.InJournal("Elemental")-1) if UO.GetGraphic(Elemental)=='0x0010' then UO.exec('terminate start') wait(1000) KillElem(Elemental) end if wend end sub ################################################################ Sub KillElem(Elemental) Var Vortex,ElementalX,ElementalY UO.warmode(0) uo.exec('usetype 0x0f0e 0x0631') wait(300) uo.cast('Energy Vortex',Elemental) repeat wait(400) until UO.InJournal("Energy Vortex") Vortex=UO.JournalSerial(UO.InJournal("Energy Vortex")-1) repeat ElementalX=UO.GetX(Elemental) ## Следим за координатами Элема, что бы не убежал ElementalY=UO.GetY(Elemental) ## Следим за координатами Элема, что бы не убежал wait(500) UO.Isnpc(Elemental) ## Ждём пока Элем умрёт uo.cast('Dispel',Vortex) repeat wait(600) until not UO.Isnpc(Vortex) ## Ждём пока Вортекс умрёт Walker(ElementalX,ElementalY,0) ## Идём к месту смерти Элема Looting() ## Лутаем UO.exec("exec start") end sub
Sub CastSpel(spel,object) Var LastMana Cast: while UO.Mana<50 if UO.Count('0x0F0E','0x09DF') then UO.UseType ('0x0F0E','0x09DF') endif wait(4000) wend UO.WaitTargetObject(object) UO.Cast(spel) LastMana=UO.Mana repeat wait(200) until UO.Mana < LastMana if UO.InJournal("fizzles") then uo.deletejournal() goto Cast end if end sub
################################################################
################################################################ Sub Looting() Var i dim Item[5] Item[1] = 0x19B9 ## Item[2] = 0x19B7 ## Item[3] = 0x19BA ## Item[4] = 0x19B8 ## Item[5] = 0x0EED ## for i=1 to 5 UO.FindType(Item[i],-1,'ground') if UO.FindCount() then UO.MoveItem('finditem','0','backpack') wait(600) CheckLag() end if next end sub sub WaitForChange() var Text1=uo.GetName()+': You loosen some rocks but fail to find any useable ore.' var Text2='There is no ore here to mine.' var Text3="You can't reach this." var Text4="That is too far away." var Text5="You can't do much in your current state." var Text6="You have no line of sight to that location" var Text7="You can't see the target" var Text8="Try mining in rock." var Text9="You put the Iron Ore in your pack." var Text10="You put the Rusty Ore in your pack." var Text11="You put the Old Copper Ore in your pack." var Text12="You put the Dull Copper Ore in your pack." var Text13="You put the Copper Ore in your pack." var Text14="You put the Bronze Ore in your pack." var Text15="You put the Silver Ore in your pack." var Text16="You put the Gold Ore in your pack." var Text17="You put the Rose Ore in your pack." var mess for var i=0 to 200 mess=uo.Journal(0) if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text6 or uo.Journal(0)==Text7 or uo.Journal(0)==Text8 or uo.Journal(0)==Text9 or uo.Journal(0)==Text10 or uo.Journal(0)==Text11 or uo.Journal(0)==Text12 or uo.Journal(0)==Text13 or uo.Journal(0)==Text14 or uo.Journal(0)==Text15 or uo.Journal(0)==Text16 or uo.Journal(0)==Text17 then return 1 end if if uo.Journal(0)==Text1 then wait(1000) return 0 end if if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5] =='u' and mess[6]=='t' then return 0 end if wait(50) next return 0 end sub ################################################################ sub Reconnector() var ReconnectTime, RFlag ReconnectTime = '0' RFlag = 1 Repeat While (UO.ObjAtLayer('Bpack') == '') if RFlag Then ReconnectTime = MakeTime() RFlag = 0 endif Wait(20000) # WorldSave Protection UO.Say('') Wait(3000) UO.Say('') Wait(3000) UO.Say('') Wait(3000) UO.LDblClick(357,164) UO.LClick(616,459) Wait(3000) WEnd Wait(3000) if (RFlag == 0) and (ReconnectTime <> '0') Then uo.exec('terminate start') uo.exec('terminate autohide') uo.exec('terminate ControlOfDanger') wait(1000) UO.Exec('exec main') UO.TextOpen() UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) RFlag = 1 ReconnectTime = '0' endif Until false end sub
sub MakeTime() VAR D, T, Ret, i Ret = STR(UO.Time()) T = "" For i = 0 To Len(Ret) T = Ret[Len(Ret)-i] + T If (I == 2) OR (I == 4) Then T = ":" + T EndIf Next Ret = STR(UO.Date()) D = "" For i = 0 To Len(Ret) D = Ret[Len(Ret)-i] + D If (I == 2) OR (I == 4) Then D = "." + D EndIf Next Ret = T + " @ " + D RETURN Ret end sub ################################################################ Sub RunebookRecalla(n) var OldX, OldY, time OldX=uo.GetX() OldY=uo.GetY() repeat uo.Exec('warmode 0') uo.UseObject('RuneB1') CheckLag() uo.LClick(135, n*15+55) CheckLag() time=uo.Timer() repeat wait(500) until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or time+200<uo.Timer() until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') uo.exec('terminate main') end sub ################################################################ sub med() UO.print('Meditation') while UO.mana < UO.int UO.UseSkill("Meditation") injournal("You are at peace|You lose your concentration",60) wend endsub ################################################################ Sub DelTextInJournal(msg) ; msg это параметр, см. выше как его передают var nom=UO.InJournal(msg) ; ищем сообщение и в переменную его if nom>0 then UO.SetJournalLine(Nom - 1," ") ; подменим сообщение DelTextInJournal(msg) ; вызов функцией самой себя, рекурсия endif endsub ################################################################ sub move() UO.useobject(CraftChest) CheckLag() UO.print('MOVEORE') wait(2000) var e dim a[4] a[0] = 0x19B7 a[1] = 0x19BA a[2] = 0x19B8 a[3] = 0x19B9 UO.useobject(OreBox) CheckLag() for e = 0 to 3 repeat UO.findtype(a[e],-1,'backpack') UO.moveitem('finditem',0,OreBox) wait(900) CheckLag() until UO.findcount()==0 next wait(1000) MoveHi() endsub ################################################################ Sub MoveHi() var e, c dim a[4],x[19] a[0] = 0x19B9 ;4 and more ore a[1] = 0x19B7 ;1 ore a[2] = 0x19BA ;2 ore a[3] = 0x19B8 ;3 ore
x[0] = '0x09B9' ;Acid ore x[1] = '0x09A4' ;Cristaline ore x[2] = '0x0085' ;Dragon ore x[3] = '0x09D3' ;Steel ore x[4] = '0x09E6' ;Elvin ore x[5] = '0x09F0' ;Gorgan ore x[6] = '0x008F' ;Send rock ore x[7] = '0x04C2' ;Blood rock ore x[8] = '0x09DA' ;Vulcan ore x[9] = '0x0028' ;Obsidian ore x[10] = '0x08AF' ;Plutonium ore x[11] = '0x09EC' ;Blood crest ore x[12] = '0x0455' ;Black rock ore x[13] = '0x010F' ;Krynite ore x[14] = '0x0BA7' ;Eldar ore x[15] = '0x00CE' ;Valorite ore x[16] = '0x052D' ;Mitheril ore x[17] = '0x07D5' ;Verite ore x[18] = '0x0060' ;Aqua ore UO.useobject(HiOreBox) wait(700) CheckLag() for e=0 to 3 for c=0 to 18 repeat UO.findtype(a[e],x[c],OreBox) if UO.findcount()>0 then UO.moveitem('finditem',0,HiOreBox) CheckLag() wait(400) endif wait(100) until UO.findcount()==0 next next UO.exec('terminate all; exec main') endsub
################################################################ Sub CheckLag() DelTextInJournal("backpack") ; вытрим ТОЛЬКО нужные нам сообщения в журнале UO.Click('backpack') ; одиночный клик по вашему backpack #InJournal("backpack",0) while not UO.InJournal("backpack") wait(100) wend endsub
################################################################ sub GotoHomeT() UO.exec('terminate start') uo.exec('terminate ControlOfDanger') uo.set('finddistance',4) uo.print('Go to Home') if type(kalitka)==true then uo.press(121) CheckLag() else wait(200) endif walker(1831,797,0) uo.press(121) CheckLag() if type(kalitka)==false then walker(1831,798,0) uo.press(121) CheckLag() endif wait(200) walker(1836,798,0) if type(door)==true then uo.press(121) CheckLag() else wait(200) endif walker(1836,794,0) uo.press(121) CheckLag() wait(500) if type(door)==false then uo.press(121) CheckLag() else wait(200) endif CheckLag() move() end sub ################################################################ Sub type(tip) uo.findtype(tip,-1,'ground') if uo.findcount()>0 then return true else return false endif end sub
Sub type(tip) UO.findtype(tip,-1,'ground') if UO.findcount()>0 then return true else return false endif endsub
########################### ХОДИЛКА 3 ########################## #var Prec=3 # Как близко следует подойти к цели (Precision) #var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву. #var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1. #var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места. #UO.SetGlobal("Logging","1") # - показывать отладочные сообщения. #UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ. #В функции IsPass, содержиться список проходимых тайлов.
#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден) #Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата: #1 - влево вниз #2 - вниз #3 - вправо вниз #4 - вправо #5 - вправо вверх #6 - вверх #7 - влево вверх #8 - влево #Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода).
##################################################### # 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 MaxTraceDistance=10 var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет). var Speed=1 var StepTimeOut=600 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга. # Для ходьбы - 500+Ping # Для бега/ходьбы на лошади - 300+Ping # Бег на лошади - 150 + Ping var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС. var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
Sub Walker(GoX,GoY,Prec) UO.warmode(0) UO.SetGlobal("Logging","0") UO.SetGlobal("BlindWalk","0") var LastDir var MoveRes var TracerCnt UO.SetGlobal("GlobalGoX",str(GoX)) UO.SetGlobal("GlobalGoY",str(GoY)) while not IsEnd(GoX,GoY,Prec) TracerCnt = MaxTraceDistance repeat LogInfo('Just walking') LastDir=GoUntilHit(GoX,GoY,Prec) if IsEnd(GoX,GoY,Prec) then return 1 endif LogInfo('Tracing') MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt) if TracerCnt > LimitTrace then return 0 endif TracerCnt = TracerCnt + TraceLoopIncrease until MoveRes == 1 wend return 1 endsub
Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace) var LineX=UO.GetX() var LineY=UO.GetY() var CurDir=StartDir var Direction=CountDirection(GoX,GoY,CurDir,Prec) var StartX,StartY var MovesDone=0 repeat StartX=UO.GetX() StartY=UO.GetY() CurDir=Tracer(CurDir,Direction,Prec) if (CurDir==GetDir(GoX,GoY,Prec)) then return 1 endif if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then return 1 endif MovesDone=MovesDone+1 CurDir=AddToDir(CurDir,-Direction,Prec) until MovesDone>MaxTrace return 0 endsub
Sub CountDirection(GoX,GoY,StartDir,Prec) var GoDir=GetDir(GoX,GoY,Prec) var MyX=UO.GetX() var MyY=UO.GetY() if GoDir<StartDir then return -1 endif if GoDir>StartDir then return 1 endif 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 endif else if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then return -1 else return 1 endif endif endsub
Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec) 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,Prec) endsub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec) if x1==x3 and y1==y3 then return false endif 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 endif endsub
Sub IsDiap(X,X0,X1,Prec) if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then return true endif return false endsub
Sub GoUntilHit(GoX,GoY,Prec) var LastDir LastDir=GetDir(GoX,GoY,Prec) var CouldMove repeat LastDir=GetDir(GoX,GoY,Prec) if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then CouldMove=TryDir(LastDir,Prec) endif until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove return LastDir endsub
Sub IsEnd(GoX,GoY,Prec) if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then LogInfo('END FOUND') return true else if Abs(UO.GetX()-GoX)>=100 and Abs(UO.GetY()-GoY)>=100 then LogInfo('END FOUND') return true else return false endif #return false endif endsub
Sub GetDir(GoX,GoY,Prec) 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 endif else if (DiffY/(DiffX+0.1))>=2 then if (MyY>GoY) then GoDir=5 else GoDir=1 endif 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 endif endif endif endif endif endif return GoDir endsub
Sub Tracer(StartDir,Direction,Prec) var CurDir=StartDir var Result repeat Result=TryDir(CurDir,Prec) if not Result then CurDir=AddToDir(CurDir,Direction,Prec) endif until Result return Result endsub
Sub AddToDir(Dir,Cnt,Prec) var NewDir=Dir NewDir=NewDir+Cnt while NewDir>8 NewDir=NewDir-8 wend while NewDir<1 NewDir=NewDir+8 wend return NewDir endsub
Sub TryDir(Dir,Prec) 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 endif return TurnAndGoDir(Dir,Prec) endsub
Sub XFromDir(Dir) if Dir==2 OR Dir==3 Or Dir==4 then return (UO.GetX()+1) endif if Dir==6 OR Dir==7 Or Dir==8 then return (UO.GetX()-1) endif return (UO.GetX()) endsub
Sub YFromDir(Dir) if Dir==8 OR Dir==1 Or Dir==2 then return (UO.GetY()+1) endif if Dir==4 OR Dir==5 Or Dir==6 then return (UO.GetY()-1) endif return (UO.GetY()) endsub
Sub TurnAndGoDir(Dir,Prec) var StartDir=GetDirToDir(UO.GetDir(),Prec) var StartX=UO.GetX() var StartY=UO.GetY() var EndDir var Counter=0 var TestCounter=CheckCnt #Direction Test repeat Counter = 0 LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter)) PressDir(Dir) repeat EndDir=GetDirToDir(UO.GetDir(),Prec) wait(DynamicPause) Counter=Counter+1 until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause TestCounter = TestCounter - 1 LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter)) until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause if Counter>=StepTimeOut/DynamicPause then LogInfo('Direction timeout reached') return 0 endif #End direction Test if StartY<>UO.GetY() or StartX<>UO.GetX() then return Dir endif #Start Primary test TestCounter=CheckCnt repeat GoDir(Dir,Prec) Counter=0 repeat wait(DynamicPause) Counter=Counter+1 until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause TestCounter = TestCounter - 1 until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause #End primary test if Counter>=StepTimeOut/DynamicPause then LogInfo('Step timeout reached') return 0 else return Dir endif endsub
Sub GetDirToDir(GotDir,Prec) var ChangedDir=-GotDir ChangedDir=AddToDir(ChangedDir,5,Prec) return ChangedDir endsub
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]) endsub
Sub PressDir(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 UO.Press(Dirs[Dir],1) endsub
Sub GoDir(Dir,Prec) 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) endsub
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 endif next return false endsub
Sub LogInfo(Line) if not UO.GetGlobal("Logging")=="0" then UO.TextOpen() UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line); kopka() endif endsub
Sub Abs(X) if X>0 then return X else return (-X) endif endsub ############################ КОНЕЦ СКРИПТА ###################
|