Page 1 of 1

ламбер

Posted: 2012-07-26 14:39:27
by Emper1o
Нашел скрипт на авто ламбер+ходилку.
Решил прикрутить всякие плюшки типа рекола в дом, побега, зарядкой чара ресами и так далее. Вроде всё написал что хотел и это даже работает, по отдельности... а вот в месте не хочет, то парсит при реколе, то при начале рубки, а может и пол часа проработать до краша.

Я уже даже не знаю в какую сторону "копать". Подскажите, где ошибся.

Code: Select all

var bandage = 500
var cf = 100
var food='0x097B'
var cc = '0x472DDA3A'
var wr = 0
var collrun = 6
var les1 = '601'
var les2 = '602'
var les3 = '603'
var les4 = '604'
var les5 = '605'
var les6 = '606'
var les7 = '7'
var les8 = '8'
var les9 = '9'
var les10 = '611'
var ghHeal = 1
var fishHeal = 1
var vortHeal = 0
var proc = 0 
var hpgh = 70
var hpfish = 30
var hpvort = 40
var checklogs = 1
var logs = 500
var Axe = "0x13AF"
var run = '109'


sub main()
   uo.setglobal('Recall', '0')
   uo.setglobal('goles', '0')
   uo.setglobal('DlayrDetect', '0')
   CheckAll()
   uo.say(',exec Heal')
end sub

############################### Заправка на базе ###############################
sub CheckAll()
   uo.useobject(cc)
   wait(3000)
   GetGHAF()
   if val(uo.getglobal('Recall')) == 1 then
      GetRegs()
   else
      Recharge()
   endif
   if uo.count('0x0E20') > 0 then
      uo.waittargetground('0x0E7B')
      uo.usetype('0x0E20')
   endif
   var b
   if uo.count('0x0E21') < bandage then
      b = bandage - uo.count('0x0E21')
      UO.FindType('0x0E21', '-1', cc)
      If UO.FindCount() > 0 Then
         UO.MoveItem('finditem', b)
         wait(500)
      endif
   endif
   var f
   if uo.count(food) < cf then
      f = cf - uo.count(food)
      UO.FindType(food, '-1', cc)
      If UO.FindCount() > 0 Then
         UO.MoveItem('finditem', f)
         wait(500)
      endif
   endif
   WarModeCheck()
   RecalltoLes()
end sub

Sub WarModeCheck()
   if uo.WarMode() == 0 then
      uo.WarMode(1)
   endif
end sub

Sub GetGHAF()
   DIM GHAF[2]
   GHAF[0] = '0x0F0E'
   GHAF[1] = '0x0DD6'
   VAR i
   For i = 0 To 1
      If UO.Count( GHAF[ i ] ) < 1 Then
         UO.FindType( GHAF[ i ], '-1', cc )
         If UO.FindCount() > 0 Then
            UO.MoveItem( 'finditem', '1' )
            wait(500)
         Endif
      Endif
   Next
end sub

Sub GetRegs()
   DIM Regs[3]
   Regs[0] = '0x0F7A'
   Regs[1] = '0x0F7B'
   Regs[2] = '0x0F86'
   VAR i
   For i = 0 To 2
      If UO.Count( Regs[ i ] ) < 2 Then
         UO.FindType( Regs[ i ], '-1', cc )
         If UO.FindCount() > 0 Then
            UO.MoveItem( 'finditem', '2' )
            wait(500)
         Endif
      Endif
   Next
end sub

Sub Recharge()
   Uo.exec("set norbcheck 1")
   uo.exec("set norbcalc 1")
   uo.waittargetground('0x1F4C')
   uo.recall('Runebook','800')
   wait(5000)
end sub
################################################################################
################################ Рекол в лес ###################################
Sub RecalltoLes()
   var i
   var p
   dim les[10]
   les[0] = les1
   les[1] = les2
   les[2] = les3
   les[3] = les4
   les[4] = les5
   les[5] = les6
   les[6] = les7
   les[7] = les8
   les[8] = les9
   les[9] = les10
   
   i = val(uo.getglobal('goles'))
   if val(uo.getglobal('DlayrDetect')) == 1 then
      uo.setglobal('DlayrDetect', '0')
      i = i + 1
      if i >= collrun then
         i = 0
      endif
      uo.setglobal('goles', i)
   endif
   disarm()
   if val(uo.getglobal('Recall')) == 0 then
      uo.recall('Runebook',les[i])
   else
      uo.cast('Recall', les[i])
   endif
   CheckLoc()
   
end sub

Sub disarm()
   while UO.ObjAtLayer('Lhand')<>"" and UO.ObjAtLayer('Rhand')<>"" 
      uo.msg('.disarm')
      wait(500)
   wend
end sub

Sub CheckLoc()
   var x = uo.getx()
   var y = uo.gety()
   repeat
      wait(1000)
   until not x == uo.getx()
   uo.msg('.disarm')
   uo.say(',exec PlayerControl')
   uo.say(',exec autoLumber')
end sub
################################################################################
########################### Скрипт на детект игроков ###########################
###################### Мониторим радиус облости в 18 тайлов ####################
sub PlayerControl()
   var player
   uo.Set('finddistance','18')
   var i
   var control = 0
   DIM people[2]
   people[0]='0x0190'
   people[1]='0x0191'
   while control == 0
      uo.Ignore('self')
      for i = 0 to 1
         uo.FindType(people[i],'-1','ground')
         player = uo.GetSerial('finditem')
         wait(250)
         if uo.FindCount() then   # Появился игрок! Пытаемся убежать
            var x, y
            var pkx, pky
            pkx = uo.getx('finditem')
            pky = uo.gety('finditem')
            x = uo.getx('self')
            y = uo.gety('self')
            if pkx <= x then
               x = x + 50
            end if
            if pky <= y then
               y = y + 50
            end if
            if pkx > x then
               x = x - 50
            end if
            if pky > y then
               y = y - 50
            end if
            uo.press(run)
            uo.deletejournal()
            control = 1
            uo.setglobal('DlayrDetect', '1')
            uo.Exec('terminate autoLumber')
            uo.say(',exec StepInLife')
            Walker(x, y, 2)
         end if
      next
      wait(250)
   wend
   uo.IgnoreReset()
end sub
############################## Реколимся в дом #################################
sub StepInLife()
   var domx = 3044
   var domy = 115
   var domz = 25
   var t = 0
   var i = 1
   t = 0
   RecallToHome()
   while i == 1
      if domx == uo.getx('self') and domy == uo.gety('self') and domz == uo.getz('self') then
         uo.Exec('terminate PlayerControl')
         uo.press(run)
         i = 0
      else
         wait(100)
      endif
   wend
end sub

Sub RecallToHome()
   disarm()
   if val(uo.getglobal('Recall')) == 0 then
      uo.msg('.recall')
   else
      uo.cast('Recall', 'Runebook')
   endif
end sub
################################################################################
##################################### Heal #####################################
Sub Heal()
   var maxhp = uo.GetMaxHP()
   var hg, hf, hv, i
   uo.print('Авто хилл включен.')
   if proc == 1 then
      hg = maxhp/100*hpgh
      hf = maxhp/100*hpfish
      hv = maxhp/100*hpvort
      uo.print('Работаем по процентному соотношению хит-поинтов.')
   else
      hg = hpgh
      hf = hpfish
      hv = hpvort
      uo.print('Работаем по цифровому соотношению хит-поинтов.')
   endif
   if ghHeal == 1 then
      uo.print("Хилл GH'кой включен")
   else
      uo.print("Хилл GH'кой вЫключен")
   endif
   if fishHeal == 1 then
      uo.print('Хилл Рыбой включен')
   else
      uo.print("Хилл Рыбой вЫключен")
   endif
   if vortHeal == 1 then
      uo.print("Хилл Vortex'сом включен")
   else
      uo.print("Хилл Vortex'сом вЫключен")
   endif
   uo.setglobal('gh', '1')
   uo.setglobal('fish', '1')
   uo.setglobal('vort', '1')
   uo.setglobal('bandage', '1')
   while not uo.dead()
      if ghHeal == 1 then
         if val(uo.getglobal('gh')) == 1 then
            if uo.GetHP() <= hg then
               uo.usetype('0x0F0E', '0x0690')
               uo.setglobal('gh', '0')
               uo.Exec('exec WaitGH')
            endif
         endif
      endif
      if fishHeal == 1 then
         if val(uo.getglobal('fish')) == 1 then
            if uo.GetHP() <= hf then
               uo.usetype('0x0DD6', '0x0009')
               uo.setglobal('fish', '0')
               uo.Exec('exec WaitFish')
            endif
         endif
      endif
      if vortHeal == 1 then
         if val(uo.getglobal('vort')) == 1 then
            if uo.GetHP() <= hv then
               uo.say('.v')
               uo.setglobal('vort', '0')
               uo.Exec('exec WaitVort')
            endif
         endif
      endif
      if val(uo.getglobal('bandage')) == 1 then
         if uo.GetHP() < uo.GetMaxHP() then
            uo.bandageself()
            uo.setglobal('bandage', '0')
            uo.Exec('exec WaitBandage')
         endif
      endif
      wait(100)
   wend
end sub

Sub WaitGH()
   wait(25000)
   uo.setglobal('gh', '1')
end sub

Sub WaitFish()
   wait(25000)
   uo.setglobal('fish', '1')
end sub

Sub WaitVort()
   wait(24500)
   uo.setglobal('vort', '1')
end sub

Sub WaitBandage()
   wait(3000)
   uo.setglobal('bandage', '1')
end sub
################################################################################
############################## Проверка логов\веса #############################
##################################### Еда ######################################
sub CheckLogs()
   if checklogs == 0 then
      if uo.weight >= logs then
         uo.Exec('terminate autoLumber')
         uo.Exec('exec StepInLife')
         uo.print('лимит веса')
      endif
   else
      if uo.count('0x1BDD') >= logs then
         uo.Exec('terminate autoLumber')
         uo.Exec('exec StepInLife')
         uo.print('лимит логов')
      endif
   endif
   eda()
end sub

Sub eda()
   uo.findtype(food)
   if uo.findcount() then
      uo.usetype(food)
   endif
end sub




















#Lumbjacking с автопоиском деревий (c) Destruction, v1.0
Sub searchTree()
   var i, x, y, t, stp, max_search = 24 ; максимальная дистанция для генерации координат.
   var cx = uo.getX()
   var cy = uo.getY()
   for i = 1 to max_search 
      for x =-i to i 
         stp = 1 
         if not i == abs( x ) then 
            stp = abs( i ) * 2 
         endif 
         for y = -i to i step stp 
            if NOT uo.getGlobal( 't:' + str( x + cx ) + "," + str( y + cy ) ) == "empty" then
               t = IsTreeTile( x + cx, y + cy )
               if not t == false then
                  uo.setGlobal( "tree_x", str( x + cx ) )
                  uo.setGlobal( "tree_y", str( y + cy ) )
                  uo.setGlobal( "tree_t", str( t ) )
                  return false
               else
                  uo.setGlobal( 't:' + str( x + cx ) + "," + str( y + cy ), 'empty' )
               endif
            endif
         next
      next
   next
   uo.print( "Found no tree, exit." )
   uo.exec( "terminate autoLumber" )
   return false
endsub

sub autoLumber()
   searchTree()
   doMineTree()
endsub

Sub doMineTree()
   var x, y, t, LastTimer
   var end = "There's not|You cannot|Cancelled|stop"
   var try = "You have found some deadwood"
   repeat
      x = val( uo.getGlobal( "tree_x" ) )
      y = val( uo.getGlobal( "tree_y" ) )
      t = val( uo.getGlobal( "tree_t" ) )
      uo.setGlobal( 't:' + str( x ) + "," + str( y ), "empty" )
      Walker( x, y, 1 )
      uo.exec( "exec searchTree" )
      repeat
         if uo.waiting() then
            uo.canceltarget()
         endif
         deljournal( try + "|" + end )
         uo.waittargettile( str( t ), str( x ), str( y ), 0 )
         uo.usetype( Axe )
         LastTimer=UO.Timer()
         CheckLogs()
         repeat
            wait( 100 )
         until uo.injournal( try + "|" + end ) || UO.Timer()>LastTimer+50 
      until uo.injournal( end )
      while uo.getGlobal( "tree_x" ) == str( x ) && uo.getGlobal( "tree_y" ) == str( y )
         wait( 100 )
      wend
   until false
endsub

Sub deljournal( msg )
   while uo.injournal( msg )
      uo.setjournalline( uo.injournal( msg ) -1, '' )
   wend
endsub

Sub IsTreeTile( x, y )
   var i, tree_count = 20
   DIM tree[ val( str( tree_count ) ) ]
   tree[0] = 3274
   tree[1] = 3275
   tree[2] = 3276
   tree[3] = 3277
   tree[4] = 3280
   tree[5] = 3283
   tree[6] = 3286
   tree[7] = 3289
   tree[8] = 3291
   tree[9] = 3292
   tree[10] = 3294
   tree[11] = 3295
   tree[12] = 3296
   tree[13] = 3299
   tree[14] = 3302
   tree[15] = 3394
   tree[16] = 3395
   tree[17] = 3417
   tree[18] = 3440
   tree[19] = 3461
   for i = 0 to tree_count -1
      if uo.privategettile( x, y, -1, tree[i], tree[i] ) then
         return tree[i]
      endif
   next
   return false
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 StepTimeOut=500 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping

var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.

#sub ttt()
#walker(x, y, 0)
#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)) 
   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 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,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 
   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,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))  
   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 
         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 ##########################

Re: ламбер

Posted: 2012-07-26 17:48:49
by ZeroDX
Не закрытые скобки, кавычки, многоядерный процессор, баг с игнором и прочее(например for закрытый endif). Скрипт большой и... жесть кароче =D

Также что-то Грин писал в теме с ламбером про краш, при обновременном обращение к глобалки или что-то в этом роде.

Re: ламбер

Posted: 2012-07-26 18:52:45
by Emper1o
ZeroDX wrote:Не закрытые скобки, кавычки, многоядерный процессор, баг с игнором и прочее(например for закрытый endif). Скрипт большой и... жесть кароче =D

Также что-то Грин писал в теме с ламбером про краш, при обновременном обращение к глобалки или что-то в этом роде.
всё так печально?

тойсть, проще подобное на стелсе навоять?

Re: ламбер

Posted: 2012-07-26 19:11:08
by ZeroDX
Ну это кому как больше нравится. Со стелсом могу помочь, если скрипт будет на питоне.

Re: ламбер

Posted: 2012-07-26 23:43:45
by Emper1o
к сожалению я не знаю ни питона, ни паскаля... разбираться в падлу, растроелся :cry:

мб после морей возьмусь с новыми силами за енто дело

Re: ламбер

Posted: 2014-02-21 07:47:03
by tyca7
у меня берет топор к дереву подходит и не рубит что смотреть?? не чего не пишет вообще просто стоит и все(