Code: Select all
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
############################ КОНЕЦ СКРИПТА ###################