Yoko

All sides of Injection
It is currently 2024-04-19 10:27:32

All times are UTC+02:00




Post new topic  Reply to topic  [ 9 posts ] 
Author Message
PostPosted: 2012-12-17 14:41:10 
Offline

Joined: 2012-12-17 14:37:08
Posts: 17
Скрипт на ламбер ......рубит во круге деревья ......просто рубит с ходилкой.ю..простейший скрипт......

есть скриптик но у него ошибка выходит в

Code:
# ******************************************************
# *** Injection 505.18 ************************ Jikus **
# ******************************************************
sub main()
; + EDIT +++++++++++++++++++++++++++++++++++++++++++++++
var zona = 6;
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++
var m, i, a, tX, tY, tr = 1
tX = UO.GetX('self')
tY = UO.GetY('self')
for i=1 to zona
if tr then
 m = - 5
else
 m = 5
endif
for a=1 to zona
 tY = tY + m
 GotoXY(tX,tY)
 Lamber()
next
tX = tX - 5
if tr then
 tr = 0
else
 tr = 1
endif
next
endsub

sub Lamber()
; + EDIT +++++++++++++++++++++++++++++++++++++++++++++++
var MaxFailCount = 10; fizzle
var MaxRange = 3   ; 3 tiles
var mDebug = false ;
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++

var X, Y, Z, FailCount = 0, LTimer, Tiles
var mX, mY, mZ, TrWeight, TrT, TrW, adX, adY

; ** Debug ***********************
if mDebug then
UO.TextOpen()
UO.TextClear()
endif
; ********************************

mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
for X = MaxRange - ( MaxRange * 2 ) to MaxRange
 Tiles = F_HarvestTiles(mX+X, mY+Y)
 if Tiles then
  adX = mX+X
  adY = mY+Y
  repeat
   F_DelJournalMine();
   UO.Warmode(0)
   UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)

; ********************************
   if UO.Count(0x0F43) then
    UO.UseType(0x0F43); <-- Axe
   else
    return 1
   endif
; ********************************

; ************ Triger ************
; ErrorExitTimer
   LTimer=UO.Timer()
   TrT = UO.Timer() > LTimer + 60; !!! 60/10 = 6 sec !!!
; MyWeight + Ore
   TrWeight = UO.Weight
   TrW = UO.Weight <> TrWeight
; ********************************

   repeat
    wait(100)
   until UO.InJournal("You put the|useable wood|You can|That is too far away|here to chop") || TrT || UO.Dead()

; ********* ON=@FailCount ********
   if TrW then
    FailCount = 0
   else
    FailCount = FailCount + 1
   endif
; ********************************

; ***** Debug Harvest Tiles ******
   if mDebug then
    if TrT then
     UO.TextPrint(Tiles); !Harvest
    else
;       UO.TextPrint(Tiles);  Harvest
    endif
   endif
; ********************************

  until UO.InJournal("here to chop|You can|That is too far away") || FailCount >= MaxFailCount || UO.Dead()
 endif
next
next
UO.Sound(61)
return 0
end sub

sub F_HarvestTiles(X,Y)
var i
if UO.PrivateGetTile(X, Y, -1, 3274, 3302) then
for i=3274 to 3302
 if UO.PrivateGetTile(X, Y, -1, i, i) then

; ***** Patch ********************************************
  if i==3278 || i==3279 || i==3281 || i==3282 then
   return 0
  endif
  if i==3284 || i==3285 || i==3287 || i==3289 then
   return 0
  endif
  if i==3291 || i==3292 || i==3294 || i==3295 then
   return 0
  endif
  if i==3297 || i==3298 || i==3300 || i==3301 then
   return 0
  endif
; ********************************************************

  return i
 end if
next
end if
return 0
end sub

sub F_DelJournalMine()
F_DeleteJournal("You put the")       ;
F_DeleteJournal("useable wood")      ;
F_DeleteJournal("That is too far away");
F_DeleteJournal("You can")           ;
F_DeleteJournal("here to chop")      ;
end sub

sub F_DeleteJournal( string1 )
var nom = UO.InJournal( string1 )
if nom > 0 then
UO.SetJournalLine( Nom - 1, "string replaced" )
F_DeleteJournal( string1 )
endif
end sub
# ******************************************************

sub GotoXY(x,y)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
for i=1 to 60

myX=UO.GetX();
myY=UO.GetY();
if LastX==myX and LastY==myY then
 halt=halt+1
else
 halt=0
end if
if halt>=10 then
 if UO.GetDir()==1 then
  for z=0 to 8
   UO.Press(40)
  next
 end if
 if UO.GetDir()==3 then
  for z=0 to 8
   UO.Press(37)
  next
 end if
 if UO.GetDir()==5 then
  for z=0 to 8
   UO.Press(38)
  next
 end if
 if UO.GetDir()==7 then
  for z=0 to 8
   UO.Press(39)
  next
 end if
 halt=15
end if
if Numb(x-myX)<=1 and Numb(y-myY)<=2 then
 return 1
end if
if x<=myX then
 if y<=myY then
  for z=0 to 3
   UO.Press(38)
  next
 else
  for z=0 to 3
   UO.Press(37)
  next
 end if
else
 if y<=myY then
  for z=0 to 3
   UO.Press(39)
  next
 else
  for z=0 to 3
   UO.Press(40)
  next
 end if
end if
lastX=myX
lastY=myY
wait(200)
next
return 0
end sub

sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub







ошибка вот тут
Code:
if UO.PrivateGetTile(X, Y, -1, 3274, 3302) then
пишет нет такой функции....пытался поменять координаты где я нахожусь где рублю один фиг ходит музыка играет типо видит деревья или что там...но не рубит..а куда то в сторону идет от деревьев и все)))пс скрипт для беста)


Top
   
PostPosted: 2012-12-17 16:19:16 
Offline

Joined: 2012-12-17 14:37:08
Posts: 17
ни одного ответа!ну помогите же!


Top
   
PostPosted: 2012-12-17 16:35:04 
Offline

Joined: 2012-12-17 14:37:08
Posts: 17
Code:
sub Lumber()
   uo.deletejournal()
   while true
      if CheckLumberNow() then
         GetLumberNow()
         GetLumberInstr()
      endif
      wait(1000)
   wend
end sub

Sub GetLumberNow()
   dim msgs[5]
   msgs[0]='in your pack'
   msgs[1]='but fail to'
   msgs[2]='no logs left'
   msgs[3]='That is too far away'
   msgs[4]='You have no line of sight to that location'
   var t=0,f=0
   repeat
      uo.deletejournal()
      uo.waittargettile('lasttile')
      GetLumberInstr()
      t=0
      repeat
         wait(1000)
         t=t+1
      until uo.injournal(msgs[0]) or uo.injournal(msgs[1]) or uo.injournal(msgs[2]) or uo.injournal(msgs[3]) or uo.injournal(msgs[4]) or t>=10
      if uo.injournal(msgs[1]) then
         f=f+1
      else
         f=0
      endif
   until uo.injournal(msgs[2]) or uo.injournal(msgs[3]) or uo.injournal(msgs[4])
   uo.deletejournal()
end sub

Sub CheckLumberNow()
   dim msgs[2]
   msgs[0]='in your pack'
   msgs[1]='but fail to'
   var i
   for i=0 to 1
      if uo.injournal(msgs[i]) then
         return 1
      endif
   next
   return 0
end sub

Sub GetLumberInstr()
   dim instr[4]
   instr[0]='0x0F43'
   instr[1]='0x0F39'
   instr[2]='0x0E85'
   instr[3]='0x0E86'
   var i
   while true
      for i=0 to 3
         uo.findtype(instr[i],-1,'my')
         if uo.findcount() then
            uo.useobject('finditem')
            return
         endif
      next
      uo.print('Не найден инструмент')
      wait(3000)
   wend
end sub



вот этот нашел еще но там бех ходилки и надо самому походить к дереву и прицел на него указывать


Top
   
PostPosted: 2012-12-17 17:09:27 
Offline

Joined: 2012-12-17 14:37:08
Posts: 17
нашел еще один.................рубит .но когда падают в пак логи останавливаюеться и стоит елси на дереве нет логов выходит сообщения и далше идет к дереву))0 когда вырубает не повторят рубку ))))блин искал где в скрипте заложено сообщения на счет продолжения рубки при выхода сообешния типо в пак упали логи не нашел помогите))))
Code:
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( "Здесь полезная древесина кончилась.|Слишком далеко." )
   uo.exec( "terminate autoLumber" )
   return false
endsub

sub autoLumber()
   searchTree()
   doMineTree()
   ttt()
endsub

Sub doMineTree()
   var x, y, t
   var end = "There is nothing here to chop.|That is too far away."
   var try = "That is too far away"
   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 ), str( uo.getZ() ) )
         uo.usetype( 0x0F43 )
         repeat
            wait( 100 )
         until uo.injournal( try + "|" + end )
      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=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))
  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))
  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
   
PostPosted: 2012-12-17 17:42:43 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
Во первых я же тебе давал скрипт на добычу в Мирном. Его не сложно переписать под ламбер.
Во вторых просишь скрипты, а потом будешь жаловаться на то что тебя сажают на сроки.
В третьих ты путью напиши чего тебе от скрипта нужно.
В первом скрипте отсутствует кусок кода. Его можно взять либо из тем Дестракшена либо из моих добывающих скриптов.

PS если тебе нужен скрипт с автопоиском деревьев и хорошей ходилкой то это к стелсу. На инжекте такое крашить будет. на инже лучше использовать координатные скрипты - либо тыкать в стволы либо (как в мининге Мирном) дойти до точки где вокруг много стволов и запустить обруб всего до чего дотянешься.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2012-12-17 17:50:16 
Offline

Joined: 2012-12-17 14:37:08
Posts: 17
ты бы хоть в аське отвечал))ты не довал скрипт тк это было давно а жеский сгорел теперь я его востонавливаю все скрипты))))))ТАк что обнови скриптик плизЗ))


Пс щас на каторгу не сажают)))))Все норма...


пускай крашит ....пофиг ну на стелксе просто следить не удобно)))))))пс....если можешь дай на стел..но мне пока хотяб на мелкие нужны так скриптик что б бегал рубил деревья сам их находил где запушен скрипт и все...........можно пускай на перевесе отрубался бы........мне больше не надо.

все скрипты что перебрал во всех чет не хватает)


Top
   
PostPosted: 2012-12-18 11:02:58 
Offline
User avatar

Joined: 2006-12-08 10:51:50
Posts: 718
Location: Москва
Rowdy wrote:
ошибка вот тут
Code:
if UO.PrivateGetTile(X, Y, -1, 3274, 3302) then
пишет нет такой функции....пытался поменять координаты где я нахожусь где рублю один фиг ходит музыка играет типо видит деревья или что там...но не рубит..а куда то в сторону идет от деревьев и все)))пс скрипт для беста)

Нужен ASM
Rowdy wrote:
блин искал где в скрипте заложено сообщения на счет продолжения рубки при выхода сообешния типо в пак упали логи не нашел помогите))))

Code:
var try = "That is too far away"

в оригинале было так
Code:
var try = "You put|fail"


Top
   
PostPosted: 2012-12-18 13:10:24 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
ZeroDX wrote:
Нужен ASM

Или просто новый инжект. Хотя удивительно как он умудрился на бест со старым инжектом зайти.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2012-12-18 13:32:56 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
Вот скрипт на Мирный переделан под новую добычу. Для копки. Ходит и выкапывает всю шахту под ноль. Потом относит в дом с добором инструментов.
Code:
VAR    bag = '0x4018A728'  ; сундук куда скидывать руду и откуда брать инструменты
VAR    Shovel1   = '0x0F39'
VAR    Shovel2   = '0x0F3A'
VAR    Pickaxe1   = '0x0E85'
VAR    Pickaxe2   = '0x0E86'
VAR    axe1      = '0x0F43'
VAR    axe2      = '0x0F44'
VAR    FPole1   = '0x0DBF'
VAR    FPole2   = '0x0DC0'
VAR    log      = '0x1BDD'
VAR    knife      = '0x0F51'
VAR    Steak      = '0x097A'
VAR    weapon   = '0x1404'
VAR    ore1 = '0x19B7'
VAR    ore2 = '0x19BA'
VAR    ore3 = '0x19B8'
VAR    ore4 = '0x19B9'
VAR    Enemy   = '0x00000000'
VAR MaxVes = 550, printcolour = '1069'
VAR delay1 = 100 , delay2 = 300, delay3 = 700
VAR MaxRangeMining = 2, MaxRangeLumber = 3, MaxRangeFishing = 6
VAR X, Y, Z, i, Tiles, Lasttimer, MaxRange, action, timemove
VAR allmsg = 'в черте города|table|attacking you|%|destroyed|broke|useable|put the|is nothing here to mine|Wthere do you|have no line|mining elsewhere|too far away|so close to yourself|Logs|nothing|ou hack at the tree|no logs|no ore|ou can|reach this|hat is too far away|do much|t appears immune to your blow|cannot|fishing elsewhere|too far away|pull out|anything|no fish|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|выкопали|Вы положили|Вам не удалось|У вас нет|ничего|Тут ничего|Попробуйте|атакует|положили|древесина кончилась|дрова|ударили по дереву|ут нечего рубить|ы не можете до этого достать|ерево слишком далеко|то кажется свободным для вашего удара|поймали|не получилось|нету рыбы|месте|далеко|вытащили удочку'
VAR endmsg = 'в черте города|%|destroyed|is nothing here to mine|have no line|Try mining elsewhere|too far away|so close to yourself|nothing|no logs|no ore|ou can|cannot|fishing elsewhere|no fish|0xAD00|0xA867|0xA2DE|Тут ничего|нет руды|У вас нет|Попробуйте|древесина кончилась|ут нечего рубить|ы не можете до этого достать|ерево слишком далеко|свободным для вашего удара|нету рыбы|в другом месте|далеко|вытащили удочку'
VAR mX = UO.GetX('self'), mY = UO.GetY('self'), mZ = UO.GetZ('self')
sub main()
   repeat
      walker(1874, 267, 0)
      UO.UseObject(bag)
      wait(1000)
      putore()    ; скидываем руду
      getinstr()  ; добираем инструменты
      walker(1874, 267, 0)
      walker(1874, 271, 0)
      walker(1887, 271, 0)
      walker(1897, 271, 0)
      walker(1904, 271, 0)
      Mining()
      walker(1912, 273, 0)
      Mining()
      walker(1916, 281, 0)
      Mining()
      walker(1921, 276, 0)
      Mining()
      walker(1921, 269, 0)
      Mining()
      walker(1924, 264, 0)
      Mining()
      walker(1917, 271, 0)
      walker(1901, 271, 0)
      walker(1887, 271, 0)
      walker(1874, 271, 0)
      walker(1874, 267, 0)
   until UO.Dead()
end sub
Sub getinstr()
   get(Shovel1, bag, 3, 1)
   get(Shovel1, bag, 3, 1)
   get(Shovel1, bag, 3, 1)
endsub
Sub putore()
   put(ore1,bag)
   put(ore2,bag)
   put(ore3,bag)
   put(ore4,bag)
end sub
################################
sub Mining()
   UO.SetGlobal('action','1')
   UO.SetGlobal('MaxRange','2')
   uo.mfgi( 'resend' )
   extraction()
end sub
sub Lumber()
   UO.SetGlobal('action','2')
   UO.SetGlobal('MaxRange','3')
   uo.mfgi( 'resend' )
   extraction()
end sub
sub Fishing()
   UO.SetGlobal('action','3')
   UO.SetGlobal('MaxRange','6')
   uo.mfgi( 'resend' )
   extraction()
end sub
Sub extraction()
   for Y = -val(uo.GetGlobal('MaxRange')) to val(uo.GetGlobal('MaxRange'))
      for X = -val(uo.GetGlobal('MaxRange')) to val(uo.GetGlobal('MaxRange'))
         if val(uo.GetGlobal('action')) == 1 then
            Tiles = MiningTiles(mX+X, mY+Y)
         else
            if val(uo.GetGlobal('action')) == 2 then
               Tiles = Tree(mX+X, mY+Y)
            else
               Tiles = FishTiles(mX+X, mY+Y)
               mZ = 251
            end if
         end if
         if Tiles then
            repeat
               CheckAll()
               UO.DeleteJournal()
               UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
               Tools()
               LastTimer=UO.Timer()
               repeat
                  wait( delay1 )
               until UO.InJournal( allmsg ) || UO.Timer()>LastTimer+delay2 || UO.Weight > MaxVes || UO.Dead()
               CheckAll()
            until UO.InJournal( endmsg ) || UO.Timer()>LastTimer+delay3 || UO.Weight > MaxVes || UO.Dead()
            uo.mfgi( 'add', '6017', mX+X, mY+Y, mZ )
         end if
      next
   next
   UO.Set('quiet','0')
   uo.charprint(printcolour, 'ВСЕ!')
   UO.Sound(100)
end sub
Sub CheckAll()
   UO.Set('quiet','1')
   if UO.InJournal('is attacking you') then
      Enemy = UO.JournalSerial(UO.InJournal("is attacking you")-1)
      DeleteJournal('is attacking you')
      Gong(1)
      uo.Usetype( weapon )
      UO.Attack( Enemy )
      LastTimer=UO.Timer()
      repeat
         wait( delay2 )
      until uo.dead() or uo.GetX(Enemy)==0 || UO.Timer()>LastTimer+delay2
      uo.Warmode(0)
      wait(delay2)
   end if
   If UO.Life < Uo.Str/10 then
      UO.Set('quiet','0')
      uo.charprint(printcolour, 'Умираю!')
      MyTerminate()
   endif
   If UO.Weight > MaxVes Then
      UO.Set('quiet','0')
      uo.charprint(printcolour, 'Перегруз!')
      MyTerminate()
   endif
   if uo.Warmode()==1 then
      uo.Warmode(0)
      wait(delay2)
   end if
   DIM Fish[5]
   Fish[1]  = '0x09CC'   ; тип рыбы 1
   Fish[2]  = '0x09CD'   ; тип рыбы 2
   Fish[3]  = '0x09CE'   ; тип рыбы 3
   Fish[4]  = '0x09CF'   ; тип рыбы 4
   For i=1 To 4
      UO.FindType( Fish[i], -1, 'ground' )
      If UO.FindCount() > 0 Then
         timemove=UO.Timer()
         while UO.ContainerOf( UO.GetSerial('finditem') )=='0xFFFFFFFF' && timemove+20>UO.Timer()
            uo.MoveItem('finditem',0,'backpack')
            wait(delay1)
         wend
         if uo.count( knife ) then
            UO.WaitTargetObject( 'finditem' )
            UO.UseType( knife )
            while UO.Count( Fish[i] )
               wait( delay1 )
            wend
            UO.FindType( Steak )
            while UO.FindCount()>1
               UO.MoveItem( 'finditem', '0' , 'backpack' )
               wait( delay1 )
               UO.FindType( Steak )
            wend
         endif
      endif
   Next
   if UO.InJournal('в черте города') then
      DeleteJournal('в черте города')
      uo.charprint(printcolour, 'Ресурсы тут добывать нельзя!')
      MyTerminate()
   end if
end sub
Sub Tools()
   if val(uo.GetGlobal('action')) == 1 then
      if UO.Count(Shovel1) then
         UO.UseType(Shovel1)
         return
      else
         if UO.Count(Shovel2) then
            UO.UseType(Shovel2)
            return
         else
            if UO.Count(Pickaxe1) then
               UO.UseType(Pickaxe1)
               return
            else
               if UO.Count(Pickaxe2) then
                  UO.UseType(Pickaxe2)
                  return
               else
                  UO.Set('quiet','0')
                  uo.charprint(printcolour, 'Нечем копать!')
                  MyTerminate()
               endif
            endif
         endif
      endif
   else
      if val(uo.GetGlobal('action')) == 2 then
         if UO.Count(axe1) || UO.Count(axe2) then
            if UO.Count(axe1) then
               UO.UseType(axe1)
               return
            else
               UO.UseType(axe2)
               return
            endif
         else
            UO.Set('quiet','0')
            uo.charprint(printcolour, 'Нечем рубить!')
            MyTerminate()
         endif
      else
         if UO.Count( FPole1 ) || UO.Count( FPole2 ) then
            if UO.Count( FPole1 ) then
               UO.UseType( FPole1 )
               return
            else
               UO.UseType( FPole2 )
               return
            endif
         else
            uo.charprint(printcolour, 'Нечем ловить рыбу!')
            MyTerminate()
         endif
      end if
   end if
end sub
Sub MiningTiles(X,Y)
   if UO.PrivateGetTile(X, Y, -1, 616, 618) then
      for i=616 to 618
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 1339, 1363) then
      for i=1339 to 1363
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 2272, 2282) then
      for i=2272 to 2282
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 4963, 4973) then
      for i=4963 to 4973
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 6001, 6012) then
      for i=6001 to 6012
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13121, 13369) then
      for i=13121 to 13369
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13446, 13455) then
      for i=13446 to 13455
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13484, 13492) then
      for i=13484 to 13492
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   if UO.PrivateGetTile(X, Y, -1, 13625, 13628) then
      for i=13625 to 13628
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   return 0
end sub
Sub Tree(X,Y)
   DIM  R[34]
   R[1] = 3274;
   R[2] = 3275;
   R[3] = 3276;
   R[4] = 3277;
   R[5] = 3280;
   R[6] = 3283;
   R[7] = 3286;
   R[8] = 3288;
   R[9] = 3290;
   R[10] = 3293;
   R[11] = 3296;
   R[12] = 3299;
   R[13] = 3302;
   R[14] = 3320;
   R[15] = 3323;
   R[16] = 3326;
   R[17] = 3329;
   R[18] = 3393;
   R[19] = 3394;
   R[20] = 3395;
   R[21] = 3396;
   R[22] = 3415;
   R[23] = 3416;
   R[24] = 3417;
   R[25] = 3418;
   R[26] = 3419;
   R[27] = 3438;
   R[28] = 3439;
   R[29] = 3440;
   R[30] = 3441;
   R[31] = 3442;
   R[32] = 3460;
   R[33] = 3461;
   R[34] = 3462;
   for i = 1 to 34
      if uo.privategettile( x, y, -1, R[i], R[i]) then
         return R[i]
      endif
   next
   return false
end sub
Sub FishTiles(X,Y)
   if UO.PrivateGetTile(X, Y, -1, 6038, 6066) then
      for i=6038 to 6066
         if UO.PrivateGetTile(X, Y, -1, i, i) then
            return i
         end if
      next
   end if
   return 0
end sub

Sub GET(item, cont, min, max)
   If UO.Count( item ) < min Then
      #       UO.Print("Кончилось сырье в рукзаке")
      UO.FindType( item, '-1', cont )
      if UO.FindCount() > 0 Then
         #        UO.Print('Сырья в сундуке: ' + Str( UO.FindCount( item ) ) )
         uo.moveitem('finditem', max, 'backpack')
         checklag()
      else
         #           UO.Print( 'Полностью кончилось сырье' )
         UO.CancelMenu()
         return
      endif
   Endif
end sub
Sub PUT(item, cont)
   while UO.Count( item ) > 0
      UO.FindType( item, -1, -1 )
      UO.MoveItem( 'finditem', 0, cont )
      checklag()
   wend
end sub

Sub Gong(times)
   VAR i
   for i=1 to times
      UO.Exec("playwav d:\Games\Ultima\GMYokoInjection\ALARM")
      wait(200)
   next
end sub
Sub DeleteJournal(msg)
   While UO.InJournal(msg)
      UO.SetJournalLine(UO.InJournal(msg) - 1,'')
   wend
endsub
Sub MyTerminate()
   UO.Set('quiet','1')
   UO.CancelMenu()
   UO.IgnoreReset()
   UO.Set('quiet','0')
   UO.Exec('terminate all')
end sub
Sub checklag()
   DeleteJournal("ackpack")
   UO.Click("backpack")
   repeat
      wait(100)
   until UO.InJournal("ackpack")
end sub
sub clean()
   var m = 50
   for Y = -m to m
      for X = -m to m
         uo.mfgi( 'clear', mX+X, mY+Y, mZ )
      next
   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=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=1
var StepTimeOut=300 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping
var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
Sub ttt()
   walker(1165,1661,1)
end sub
Sub Walker(GoX,GoY,Prec)
   UO.SetGlobal("Logging","0")
   UO.SetGlobal("BlindWalk","1")
   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 ##########################
sub Reconnector()
   var ReconnectTime, RFlag
   ReconnectTime = '0'
   RFlag = 1
   Repeat
      While (UO.ObjAtLayer('Bpack') == '')
         If RFlag Then
            ReconnectTime = MakeTime()
            RFlag = 0
         endif
         Wait(20000) # WorldSave Protection
         UO.Say('')
         Wait(3000)
         UO.Say('')
         Wait(3000)
         UO.Say('')
         Wait(3000)
         UO.LDblClick(357,164)
         UO.LClick(616,459)
         Wait(3000)       
      Wend
      Wait(3000)
      If (RFlag == 0) and (ReconnectTime <> '0') Then
         
         uo.TextOpen()
         uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
         RFlag = 1
         ReconnectTime = '0'
      End If
   Until false
end sub
Sub MakeTime()
   VAR D, T, Ret, i
   Ret = STR(UO.Time())
   T = ""
   For i = 0 To Len(Ret)
      T = Ret[Len(Ret)-i] + T
      If (I == 2) OR (I == 4) Then
         T = ":" + T
      EndIf
   Next
   Ret = STR(UO.Date())
   D = ""
   For i = 0 To Len(Ret)
      D = Ret[Len(Ret)-i] + D
      If (I == 2) OR (I == 4) Then
         D = "." + D
      EndIf
   Next   
   Ret = T + " @ " + D
   RETURN Ret
End Sub
sub TerminateAll()
   uo.Exec('Terminate All')
End Sub


Чтобы сделать под лес надо в main() поменять Mining() на Lumber() и соответственно переписать координаты полянок с большим содержанием стволов вокруг чара.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


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

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 33 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