В качестве самой копалки взят стандартный скрипт НА мининг Олмера, я дописал ходилку по шахте (с помощью стандартного скрипа walker с форума yoko ), леталку в дом/шахту и выгрузку в сундук.
Скриптингу под инжу только учусь так что могут быть косяки, но вроде работает нормально.
Как настроить:
1) Вначале скрипта указать все ID и type переменным (переменные описаны), Обратите внимание, что в шахту летит он по звезде(советую маркать как можно ближе к первой точки которую будет копать персонаж), а домой по рунбуке.
2) В sub GOTOXY() - указываем координаты шахты, на данный момент работает под шахту в гз (столица), а так же количество элементов массива var count=54 ;индекс последнего элемента массива (POSX[index]) +1 так как первая координата 0)
Вроде все
![Razz :P](./images/smilies/icon_razz.gif)
P.S Можно сразу затестить на шахте в Столице, главное замените все ID и Type в переменных сверху. Если что пишите.
Code: Select all
var book='0x400C3F55'; ID рунбуки
var mark=2; Номер записи в рунбуке к дому
var Chest='0x40648F9E' ; Id Сундука куда скидываем руду (Ставить возле места телепортации к дому)
var pickaxeBag='0x40670747'; Сумка с кирками, должна быть в сундуке для руды
var pickaxe='0x0E85'; тип кирки
var star='0x4007FE02' ; ID звезды в шахту
var MaxWeight=750 ; Максимальный вес
sub start()
RecallHome()
UO.SetGlobal('pos',0)
UO.SetGlobal('n', 1)
UO.SetGlobal('flag',0)
var n1,pos
while not UO.Dead()
n1=val(UO.GetGlobal('n'))
pos=val(UO.GetGlobal('pos'))
wait(100)
uo.findtype(pickaxe,-1,'backpack')
wait(100)
if UO.Weight<MaxWeight and uo.findcount()> 0 then
if val(UO.GetGlobal('flag'))==1 then
UO.SetGlobal('n', n1-1)
UO.SetGlobal('flag',0)
endif
if pos<>n1 then
GOTOXY()
wait(100)
else if pos==n1 then
n1=val(UO.GetGlobal('n'))+1
UO.SetGlobal('n', n1)
UO.SetGlobal('n', n1)
startMin()
endif
else
RecallHome()
endif
wend
end sub
sub RecallHome()
uo.unequip('Rhand')
wait(100)
UO.Print('Летим домой!');
UO.WarMode(False)
uo.recall(book, mark)
wait(5500);
unloadOres();
end sub
sub unloadOres()
var i
DIM OreType[4]
OreType[0]=0x19B9
OreType[1]=0x19BA
OreType[2]=0x19B7
OreType[3]=0x19B8
UO.Print('Выгрузка');
uo.useobject(Chest)
For i=0 to 3
uo.findtype(OreType[i],-1,'backpack')
repeat
if uo.findcount() then
uo.MoveItem('finditem','0',Chest)
endif
wait(800)
uo.findtype(OreType[i],-1,'backpack')
until uo.findcount()==0
Next
uo.findtype(pickaxe,-1,'backpack')
if uo.findcount() <2 then
uo.useobject(pickaxeBag)
wait(400)
for i=0 to 1
uo.findtype(pickaxe,-1,'backpack')
wait(50)
if uo.findcount() <2 then
uo.findtype(pickaxe,-1,pickaxeBag)
uo.MoveItem('finditem','0','backpack')
wait(400)
endif
next
endif
ToMine()
end sub
sub ToMine()
UO.SetGlobal('pos',0)
UO.Print('Летим в шахту!');
UO.WarMode(False)
uo.useobject(star)
wait(5500)
end sub
sub GOTOXY() ;Координаты шахты (Столица империи)
var n=val(UO.GetGlobal('n'))
var pos=val(UO.GetGlobal('pos'));
var count=54 ;индекс последнего массива (POSX[index]) +1
DIM POSX[int(count)]
DIM POSY[int(count)]
POSX[0]=1251
POSY[0]=2043
POSX[1]=1251
POSY[1]=2038
POSX[2]=1247
POSY[2]=2038
POSX[3]=1247
POSY[3]=2042
POSX[4]=1243
POSY[4]=2042
POSX[5]=1243
POSY[5]=2038
POSX[6]=1243
POSY[6]=2034
POSX[7]=1243
POSY[7]=2030
POSX[8]=1240
POSY[8]=2026
POSX[9]=1240
POSY[9]=2030
POSX[10]=1240
POSY[10]=2034
POSX[11]=1240
POSY[11]=2038
POSX[12]=1240
POSY[12]=2042
POSX[13]=1236
POSY[13]=2042
POSX[14]=1236
POSY[14]=2038
POSX[15]=1236
POSY[15]=2034
POSX[16]=1236
POSY[16]=2030
POSX[17]=1236
POSY[17]=2026
POSX[18]=1236
POSY[18]=2021
POSX[19]=1233
POSY[19]=2018
POSX[20]=1233
POSY[20]=2021
POSX[21]=1233
POSY[21]=2026
POSX[22]=1233
POSY[22]=2030
POSX[23]=1233
POSY[23]=2034
POSX[24]=1233
POSY[24]=2039
POSX[25]=1233
POSY[25]=2042
POSX[26]=1228
POSY[26]=2045
POSX[27]=1228
POSY[27]=2042
POSX[28]=1228
POSY[28]=2039
POSX[29]=1228
POSY[29]=2035
POSX[30]=1228
POSY[30]=2030
POSX[31]=1228
POSY[31]=2026
POSX[32]=1228
POSY[32]=2021
POSX[33]=1228
POSY[33]=2017
POSX[34]=1223
POSY[34]=2017
POSX[35]=1223
POSY[35]=2022
POSX[36]=1223
POSY[36]=2026
POSX[37]=1223
POSY[37]=2030
POSX[38]=1223
POSY[38]=2035
POSX[39]=1223
POSY[39]=2039
POSX[40]=1223
POSY[40]=2043
POSX[41]=1223
POSY[41]=2049
POSX[42]=1219
POSY[42]=2049
POSX[43]=1219
POSY[43]=2043
POSX[44]=1219
POSY[44]=2039
POSX[45]=1219
POSY[45]=2035
POSX[46]=1219
POSY[46]=2030
POSX[47]=1219
POSY[47]=2026
POSX[48]=1215
POSY[48]=2030
POSX[49]=1215
POSY[49]=2035
POSX[50]=1215
POSY[50]=2039
POSX[51]=1215
POSY[51]=2043
POSX[52]=1215
POSY[52]=2049
POSX[53]=1215
POSY[53]=2055
if n>count then
UO.SetGlobal('n',1)
ToMine()
endif
n=val(UO.GetGlobal('n'))
pos=val(UO.GetGlobal('pos'));
uo.print("шаг = "+str(pos)+" Точка = "+str(n))
Walker(POSX[pos],POSY[pos],1)
pos=pos+1
UO.SetGlobal('pos', pos)
end sub
sub test()
uo.SAY(uo.weight);
end sub
#?????? ?????? ????????? ????????????? ???????? ???? ????????? ???? ?????? ????????? 5?5.
#????????????? ??????? ??????? ????????? ??? ??????? ?????????? ??????.
### ????????? ????????? ??????????(1), ??????????(2)
VAR SoundOnOff = 1
### ????? ??? ????????? ??????????
VAR WavWarn = "C:\" ; ?????????? ? ????????? ?? ?????????
VAR WavFin = "C:\" ; ?????????? ? ????????? ?????
### ???? ???? ?? ?????, ??????????????? ????????? ??????.
sub startMin()
if SoundOnOff == 1 then
uo.exec("exec WC")
main()
uo.exec("terminate WC")
uo.PlayWav(WavFin)
else
main()
endif
endsub
Sub main()
VAR x,y,p=0
uo.print('Olmer auto mining 5x5 bot v.2.0')
var Exit=0;
for y=-2 to 2
for x=-2 to 2
if CheckPos(x, y) == 'true' then
uo.Print("Сейчас копаем: "+str(x)+" "+str(y))
repeat
if uo.Dead() then
uo.playwav(WavWarn)
return
endif
UO.DeleteJournal()
UO.WaitTargetTile('1343', STR( UO.GetX() + x ), STR( UO.GetY() + y ), STR( UO.GetZ('self')))
UseTool()
p=Wait4Result()
until not p or UO.Weight>MaxWeight
endif
next
next
end sub
sub WC()
VAR CurrHP = uo.getHP('self')
repeat
if uo.GetHP('self') < CurrHP and uo.GetMaxHP('self') > CurrHP then
uo.playwav(WavWarn)
uo.exec("terminate All")
endif
wait(500)
until uo.Dead()
endsub
Sub CheckPos(x, y)
uo.findtype(pickaxe,-1,'backpack')
if UO.Weight>MaxWeight or uo.findcount() < 1 then
UO.SetGlobal('flag',1)
uo.exec("terminate WC")
return 'false'
endif
if x == -2 and y == - 2 or x == 2 and y == 2 or x == 2 and y == - 2 or x == -2 and y == 2 then
return 'false'
else
return 'true'
endif
endsub
sub dfg()
uo.msg('ou fail to find anything useful')
end sub
Sub Wait4Result()
var allmsg='ичего полезного откопать не удалось|не поля зрения|лишком далеко|ужно использовать лопату или кирку|опайте в скале|десь нет руды|ы не можете копать под собой жe|опать верхом|ry mining elsewhere|here is nothing here to mine for|here is no ore here to mine|ry mining in rock|ou cannot mine so close to yourself|hat is too far away|ou put the|ou fail to find anything useful|here is so close|ou can not see that|ou do not have a pickax'
var endmsg='не поля зрения|лишком далеко|ужно использовать лопату или кирку|опайте в скале|десь нет руды|ы не можете копать под собой жe|опать верхом|ry mining elsewhere|here is nothing here to mine for|here is no ore here to mine|ry mining in rock|ou cannot mine so close to yourself|hat is too far away|here is so close|ou can not see that'
var errmsg='ужно использовать лопату или кирку|опать верхом|ou must use a shovel or pick|ou put the|ou fail to find anything useful|ou do not have a pickax'
var w=uo.weight
while true
w=uo.weight
if not Wait4Msg(allmsg) and w==uo.weight then
if not Wait4Msg(allmsg) and w==uo.weight then
return 0
endif
endif
if uo.injournal(errmsg) then
if uo.injournal('опать верхом') then
uo.useobject('self')
wait(300)
endif
return 1
endif
if uo.injournal(endmsg) then
return 0
endif
wait(1000)
wend
end sub
Sub Wait4Msg(msg)
var i
for i=0 to 15
wait(1000)
if uo.injournal(msg) then
return 1
endif
next
return 0
end sub
Sub UseTool()
dim t[4]
t[0]='0x0E85'
t[1]='0x0E86'
t[2]='0x0F39'
t[3]='0x0F3A'
var i,obj=''
obj=uo.objatlayer('Rhand')
if obj<>'' then
for i=0 to 3
if uo.getgraphic(obj)==t[i] then
uo.useobject(obj)
return
endif
next
endif
for i=0 to 3
if uo.count(t[i]) then
uo.usetype(t[i])
return
endif
next
end sub
########################################## ??????? 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=15#??????? ????? ? ??? ??????? ?? ????????? ????? ?????? ?????????? ??????? (?????? ???).
var Speed=2
var StepTimeOut=500#??????? ????. ????????????? ?? ? ?????? ?????, ? ? ?????? ???? + ?????? ?????.
# ??? ?????? - 500+Ping
# ??? ????/?????? ?? ?????? - 300+Ping
# ??? ?? ?????? - 150 + Ping
var CheckCnt=1 #?????????? ?????? ????????. ??????????? ? ??????? ??? ???????. ???????????? ?????? ?? ??????? ?? ???????????? ????????. ??? ??????? ????? ????? ????.
var DynamicPause=30 #??????????? ????? ? ??????. ??? ?????? ????? - ??? ?????? ?????? ? ??? ?????? ???????? ??????????.
sub ttt()
walker(2886-5,757+4,1)
end sub
Sub Walker(GoX,GoY,Prec)
UO.SetGlobal("Logging","0")
UO.SetGlobal("BlindWalk","0")
var LastDir
var MoveRes
var TracerCnt
UO.SetGlobal("GlobalGoX",str(GoX))
UO.SetGlobal("GlobalGoY",str(GoY))
UO.SetGlobal("WISFixGoX",str(GoX))
UO.SetGlobal("WISFixGoY",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
end if
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
end sub
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
end if
MovesDone=MovesDone+1
CurDir=AddToDir(CurDir,-Direction,Prec)
until MovesDone>MaxTrace
return 0
end sub
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
end if
if GoDir>StartDir then
return 1
end if
if Abs(MyX-GoX)>Abs(MyY-GoY) then
if (GoDir==3) OR (GoDir==7) then
return -1
else
return 1
end if
else
if (GoDir==1) or (GoDir==5) then
return -1
else
return 1
end if
end if
end sub
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)
end sub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
if x1==x3 and y1==y3 then
return false
end if
LogInfo('Start cross check')
var ua1=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3)
var ub1=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
var ua2=(x2-x1)*(y1-y3)-(y2-y1)*(x1-x3)
var ub2=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1)
#Check for parallel lines
if (ub1 == 0) or (ub2 == 0) then
return false
end if
var u1=ua1/ub1
var u2=ua2/ub2
if IsDiap(u1,0,1,0.01) and IsDiap(u2,0,1,0.01) then
LogInfo('Vectors crossing 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
else
LogInfo('End cross check')
return false
end if
end sub
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
end if
return false
end sub
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)
end if
until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
return LastDir
end sub
Sub IsEnd(GoX,GoY,Prec)
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,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
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,Prec)
var CurDir=StartDir
var Result
repeat
Result=TryDir(CurDir,Prec)
if not Result then
CurDir=AddToDir(CurDir,Direction,Prec)
end if
until Result
return Result
end sub
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
end sub
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
end if
return TurnAndGoDir(Dir,Prec)
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,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))
if IsEnd(val(UO.GetGlobal("WISFixGoX")),val(UO.GetGlobal("WISFixGoY")),Prec) then
return Dir
endif
until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
if Counter>=StepTimeOut/DynamicPause then
LogInfo('Direction timeout reached')
return 0
end if
#End direction Test
if StartY<>UO.GetY() or StartX<>UO.GetX() then
return Dir
end if
#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
end if
end sub
Sub GetDirToDir(GotDir,Prec)
var ChangedDir=-GotDir
ChangedDir=AddToDir(ChangedDir,5,Prec)
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 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)
end sub
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)
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
if uo.gettilexym(X,Y,val(uo.getglobal('MapIDX')),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
########################################## ????? ??????? 3 ##########################