Yoko

All sides of Injection
It is currently 2024-04-27 09:32:31

All times are UTC+02:00




Post new topic  Reply to topic  [ 6 posts ] 
Author Message
 Post subject: ламбер
PostPosted: 2012-07-26 14:39:27 
Offline

Joined: 2006-11-10 12:26:11
Posts: 7
Нашел скрипт на авто ламбер+ходилку.
Решил прикрутить всякие плюшки типа рекола в дом, побега, зарядкой чара ресами и так далее. Вроде всё написал что хотел и это даже работает, по отдельности... а вот в месте не хочет, то парсит при реколе, то при начале рубки, а может и пол часа проработать до краша.

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

Code:
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 ##########################


Top
   
 Post subject: Re: ламбер
PostPosted: 2012-07-26 17:48:49 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Не закрытые скобки, кавычки, многоядерный процессор, баг с игнором и прочее(например for закрытый endif). Скрипт большой и... жесть кароче =D

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


Top
   
 Post subject: Re: ламбер
PostPosted: 2012-07-26 18:52:45 
Offline

Joined: 2006-11-10 12:26:11
Posts: 7
ZeroDX wrote:
Не закрытые скобки, кавычки, многоядерный процессор, баг с игнором и прочее(например for закрытый endif). Скрипт большой и... жесть кароче =D

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


всё так печально?

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


Top
   
 Post subject: Re: ламбер
PostPosted: 2012-07-26 19:11:08 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Ну это кому как больше нравится. Со стелсом могу помочь, если скрипт будет на питоне.


Top
   
 Post subject: Re: ламбер
PostPosted: 2012-07-26 23:43:45 
Offline

Joined: 2006-11-10 12:26:11
Posts: 7
к сожалению я не знаю ни питона, ни паскаля... разбираться в падлу, растроелся :cry:

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


Top
   
 Post subject: Re: ламбер
PostPosted: 2014-02-21 07:47:03 
Offline
User avatar

Joined: 2012-12-22 19:14:29
Posts: 125
у меня берет топор к дереву подходит и не рубит что смотреть?? не чего не пишет вообще просто стоит и все(


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 6 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 29 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited