Mining 5x5 + ходилка + леталка и выгрузка в доме Inject

Обсуждение вспомогательных программ и скриптов к ним
Post Reply
RagnaR
Posts: 3
Joined: 03 Oct 2018 00:20

Mining 5x5 + ходилка + леталка и выгрузка в доме Inject

Post by RagnaR » 03 Oct 2018 00:39

Всем привет, решил поделиться скриптом на мининг.
В качестве самой копалки взят стандартный скрипт НА мининг Олмера, я дописал ходилку по шахте (с помощью стандартного скрипа walker с форума yoko ), леталку в дом/шахту и выгрузку в сундук.
Скриптингу под инжу только учусь так что могут быть косяки, но вроде работает нормально.

Как настроить:
1) Вначале скрипта указать все ID и type переменным (переменные описаны), Обратите внимание, что в шахту летит он по звезде(советую маркать как можно ближе к первой точки которую будет копать персонаж), а домой по рунбуке.
2) В sub GOTOXY() - указываем координаты шахты, на данный момент работает под шахту в гз (столица), а так же количество элементов массива var count=54 ;индекс последнего элемента массива (POSX[index]) +1 так как первая координата 0)
Вроде все :P не забывайте заряжать книгу и подкладывать кирки в сундук.
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 ##########################
Post Reply