мининг по скале

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

мининг по скале

Post by vertijok »

Code: Select all

var kirka, a, goback, name
var myXX, myYY
VAR CraftChest='0x402C32D2'
VAR OreBox = "0x4050B366"    ;Контейнер для руды
VAR HiOreBox = "0x4050B362"  ;Контейнер для "выхи"
   var kalitka='0x0847'         ;Тип закрытой калитки
   var door='0x06A5'             ;Тип закрытой дверей
   var n = 2
   var maxN = 10
var numer = 1
var maxnumer = 4
kirka = "0x0E85"       ;Тип кирки. 

################################################################
sub vertijok()
UO.Say("Ukajite Runbuk N 1")
UO.AddObject('RuneB1')
While UO.Targeting()==2
wait(500)
Wend
wait(1000)
min()
end sub
################################################################
sub min()
wait(3000)
uo.exec('exec main')
end sub
################################################################
sub f()
if numer == 1 then
uo.Print('Реколимся Рунбука № 1, рунка № '+str(n))
RunebookRecalla(n)
end if
end sub
################################################################
sub main()
uo.exec('exec start')
uo.exec('exec ControlOfDanger')
end sub
################################################################
sub start()
f()
Walker(0,0,0) ; Тут если надо захадить в шахту
wait(1000)
while not uo.dead()
Walker(0,0,0) ; Тут координаты где будет копать
kopka()
Walker(0,0,0)
kopka()
wend
end sub
################################################################
sub kopka()
hiding()
myXX=uo.getX(); запоминает место откуда начал копать
myYY=uo.getY();
var PX, PY, PZ, IX, IY, IZ
    PX=0
    PY=0
    UO.DeleteJournal()
         PX = UO.GetX()
         PY = UO.GetY()
         PZ = UO.GetZ()
    For Iy=-4 to 4
       For Ix=-4 to 4
        For Iz=-4 to -2
   if UO.Weight <= (uo.str*4+20) then
       while not UO.InJournal('There is no ore') and not UO.InJournal("You have no line") and not UO.InJournal("That is to far away") and not UO.InJournal("You can't think") and not UO.InJournal("You have no line of") and not UO.InJournal("too far away") and not UO.InJournal("mining in rock.")
            UO.DeleteJournal()
            if not uo.hidden() then
            autohide()
               while not uo.injournal("You have hidden")
                  wait(200)
               wend
            endif
             ws()
             UO.WaitTargetTile(-1,Str(PX+Ix),Str(PY+Iy),Str(PZ+IZ))
            uo.usetype(kirka)
            while not UO.InJournal("You put the") and not UO.InJournal("You loosen some") and not UO.InJournal("You can't think") and not UO.InJournal("That is to far away") and not UO.InJournal("There is no ore") and not UO.InJournal("You have no line of") and not UO.InJournal("too far away") and not UO.InJournal("mining in rock.")
               Wait(200)
            wend
      wend
   endif       
        UO.DeleteJournal()
         next
      next
     next
       if UO.Weight > (uo.str*4+20) then
      RunebookRecalla(1)
       UO.exec('exec GotoHomeT')
         else
      endif
end sub
################################################################
Sub hiding()
 var ms1="You have hidden"
 var ms2="You can't"
 repeat
  uo.deletejournal()
  uo.useskill('Stealth')
  repeat
   wait(100)
  until uo.injournal(ms1) or uo.injournal(ms2)
 until uo.injournal(ms1)
end sub

sub autohide()
  if not uo.hidden() then
   uo.exec("warmode 0")
   uo.useskill("Stealth")
  endif
  uo.deletejournal()
      while not uo.injournal("You have been revealed|You can't seem")
         wait(100)
      wend
uo.exec("terminate all")
end sub
################################################################
Sub ws()
 if uo.injournal("world is saving now...") then
   while not uo.injournal("world data saving")
      wait(100)
   wend
 endif
CheckLag()
end sub
################################################################
sub ControlOfDanger()
Var Elemental
while 1
UO.DeleteJournal()
while not UO.InJournal('Elemental')
wait(100)
wend
Elemental=UO.JournalSerial(UO.InJournal("Elemental")-1)
if UO.GetGraphic(Elemental)=='0x0010' then
UO.exec('terminate start')
wait(1000)
KillElem(Elemental)
end if
wend
end sub
################################################################
Sub KillElem(Elemental)
Var Vortex,ElementalX,ElementalY
UO.warmode(0)
uo.exec('usetype 0x0f0e 0x0631')
wait(300)
uo.cast('Energy Vortex',Elemental)
repeat
wait(400)
until UO.InJournal("Energy Vortex")
Vortex=UO.JournalSerial(UO.InJournal("Energy Vortex")-1)
repeat
ElementalX=UO.GetX(Elemental) ## Следим за координатами Элема, что бы не убежал
ElementalY=UO.GetY(Elemental) ## Следим за координатами Элема, что бы не убежал
wait(500)
UO.Isnpc(Elemental) ## Ждём пока Элем умрёт
uo.cast('Dispel',Vortex)
repeat
wait(600)
until not UO.Isnpc(Vortex) ## Ждём пока Вортекс умрёт
Walker(ElementalX,ElementalY,0) ## Идём к месту смерти Элема
Looting() ## Лутаем
UO.exec("exec start")
end sub

Sub CastSpel(spel,object)
Var LastMana
Cast:
while UO.Mana<50
if UO.Count('0x0F0E','0x09DF') then
UO.UseType ('0x0F0E','0x09DF')
endif
wait(4000)
wend
UO.WaitTargetObject(object)
UO.Cast(spel)
LastMana=UO.Mana
repeat
wait(200)
until UO.Mana < LastMana
if UO.InJournal("fizzles") then
uo.deletejournal()
goto Cast
end if
end sub

################################################################

################################################################
Sub Looting()
Var i
dim Item[5]
Item[1] = 0x19B9 ##
Item[2] = 0x19B7 ##
Item[3] = 0x19BA ##
Item[4] = 0x19B8 ##
Item[5] = 0x0EED ##
for i=1 to 5
UO.FindType(Item[i],-1,'ground')
if UO.FindCount() then
UO.MoveItem('finditem','0','backpack')
wait(600)
CheckLag()
end if
next
end sub
sub WaitForChange()
var Text1=uo.GetName()+': You loosen some rocks but fail to find any useable
ore.'
var Text2='There is no ore here to mine.'
var Text3="You can't reach this."
var Text4="That is too far away."
var Text5="You can't do much in your current state."
var Text6="You have no line of sight to that location"
var Text7="You can't see the target"
var Text8="Try mining in rock."
var Text9="You put the Iron Ore in your pack."
var Text10="You put the Rusty Ore in your pack."
var Text11="You put the Old Copper Ore in your pack."
var Text12="You put the Dull Copper Ore in your pack."
var Text13="You put the Copper Ore in your pack."
var Text14="You put the Bronze Ore in your pack."
var Text15="You put the Silver Ore in your pack."
var Text16="You put the Gold Ore in your pack."
var Text17="You put the Rose Ore in your pack."
var mess
for var i=0 to 200
mess=uo.Journal(0)
if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text6 or uo.Journal(0)==Text7 or uo.Journal(0)==Text8 or uo.Journal(0)==Text9 or uo.Journal(0)==Text10 or uo.Journal(0)==Text11 or uo.Journal(0)==Text12 or uo.Journal(0)==Text13 or uo.Journal(0)==Text14 or uo.Journal(0)==Text15 or uo.Journal(0)==Text16 or uo.Journal(0)==Text17 then
return 1
end if
if uo.Journal(0)==Text1 then
wait(1000)
return 0
end if
if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5] =='u' and mess[6]=='t' then
return 0
end if
wait(50)
next
return 0
end sub
################################################################
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.exec('terminate start')
uo.exec('terminate autohide')
uo.exec('terminate ControlOfDanger')
wait(1000)
UO.Exec('exec main')
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
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 RunebookRecalla(n)
var OldX, OldY, time
OldX=uo.GetX()
OldY=uo.GetY()
repeat
uo.Exec('warmode 0')
uo.UseObject('RuneB1')
CheckLag()
uo.LClick(135, n*15+55)
CheckLag()
time=uo.Timer()
repeat
wait(500)
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or time+200<uo.Timer()
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs')
uo.exec('terminate main')
end sub
################################################################
sub med()
   UO.print('Meditation')
   while UO.mana < UO.int
      UO.UseSkill("Meditation")
      injournal("You are at peace|You lose your concentration",60)
   wend
endsub
################################################################
Sub DelTextInJournal(msg) ; msg это параметр, см. выше как его передают
   var nom=UO.InJournal(msg) ; ищем сообщение и в переменную его
   if nom>0 then
      UO.SetJournalLine(Nom - 1," ") ; подменим сообщение
      DelTextInJournal(msg) ; вызов функцией самой себя, рекурсия
   endif
endsub
################################################################
sub move()
   UO.useobject(CraftChest)
   CheckLag()
   UO.print('MOVEORE')
   wait(2000)
   var e
   dim a[4]
      a[0] = 0x19B7
      a[1] = 0x19BA
      a[2] = 0x19B8
      a[3] = 0x19B9
   UO.useobject(OreBox)
   CheckLag()
   for e = 0 to 3
      repeat
         UO.findtype(a[e],-1,'backpack')
         UO.moveitem('finditem',0,OreBox)
         wait(900)
         CheckLag()
      until UO.findcount()==0
   next
   wait(1000)
   MoveHi()
endsub
################################################################
Sub MoveHi()
   var e, c
   dim a[4],x[19]
      a[0] = 0x19B9      ;4 and more ore
      a[1] = 0x19B7      ;1 ore
      a[2] = 0x19BA      ;2 ore
      a[3] = 0x19B8      ;3 ore

      x[0] = '0x09B9'    ;Acid ore
      x[1] = '0x09A4'    ;Cristaline ore
      x[2] = '0x0085'    ;Dragon ore
      x[3] = '0x09D3'    ;Steel ore
      x[4] = '0x09E6'    ;Elvin ore
      x[5] = '0x09F0'    ;Gorgan ore
      x[6] = '0x008F'    ;Send rock ore
      x[7] = '0x04C2'    ;Blood rock ore
      x[8] = '0x09DA'    ;Vulcan ore
      x[9] = '0x0028'    ;Obsidian ore
      x[10] = '0x08AF'   ;Plutonium ore
      x[11] = '0x09EC'   ;Blood crest ore
      x[12] = '0x0455'   ;Black rock ore
      x[13] = '0x010F'   ;Krynite ore
      x[14] = '0x0BA7'   ;Eldar ore
      x[15] = '0x00CE'   ;Valorite ore
      x[16] = '0x052D'   ;Mitheril ore
      x[17] = '0x07D5'   ;Verite ore
      x[18] = '0x0060'   ;Aqua ore
   UO.useobject(HiOreBox)
   wait(700)
   CheckLag()
   for e=0 to 3
      for c=0 to 18
         repeat
            UO.findtype(a[e],x[c],OreBox)
            if UO.findcount()>0 then
               UO.moveitem('finditem',0,HiOreBox)
               CheckLag()
               wait(400)
            endif
            wait(100)
         until UO.findcount()==0
      next
   next
UO.exec('terminate all; exec main')
endsub

################################################################
Sub CheckLag()
   DelTextInJournal("backpack") ; вытрим ТОЛЬКО нужные нам сообщения в журнале
   UO.Click('backpack') ; одиночный клик по вашему backpack
   #InJournal("backpack",0)
   while not UO.InJournal("backpack")
      wait(100)
   wend
endsub

################################################################
sub GotoHomeT()
 UO.exec('terminate start')
 uo.exec('terminate ControlOfDanger')
  uo.set('finddistance',4)
  uo.print('Go to Home')
  if type(kalitka)==true then
    uo.press(121)
    CheckLag()
  else
    wait(200)
  endif
 walker(1831,797,0)
  uo.press(121)
  CheckLag()
  if type(kalitka)==false then
 walker(1831,798,0)
    uo.press(121)
    CheckLag()
  endif
  wait(200)
 walker(1836,798,0)
  if type(door)==true then
    uo.press(121)
    CheckLag()
  else
    wait(200)
  endif
 walker(1836,794,0)
  uo.press(121)
  CheckLag()
  wait(500)
  if type(door)==false then
    uo.press(121)
    CheckLag()
  else
    wait(200)
  endif
  CheckLag()
  move()
end sub
################################################################
Sub type(tip)
uo.findtype(tip,-1,'ground')
if uo.findcount()>0 then
  return true
else
  return false
endif
end sub

Sub type(tip)
   UO.findtype(tip,-1,'ground')
   if UO.findcount()>0 then
      return true
    else
      return false
   endif
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 Speed=1
   var StepTimeOut=600  #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
                        # Для ходьбы - 500+Ping
                        # Для бега/ходьбы на лошади - 300+Ping
                        # Бег на лошади - 150 + Ping
   var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
   var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.

Sub Walker(GoX,GoY,Prec)
   UO.warmode(0)
   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
         endif
         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
endsub

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
      endif
      MovesDone=MovesDone+1
      CurDir=AddToDir(CurDir,-Direction,Prec)
   until MovesDone>MaxTrace
   return 0
endsub

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
   endif
   if GoDir>StartDir then
      return 1
   endif
   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
      endif
    else
      if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
         return -1
       else
         return 1
      endif
   endif
endsub

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)
endsub

Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
   if x1==x3 and y1==y3 then
      return false
   endif
   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
   endif
endsub

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
   endif
   return false
endsub

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)
      endif
   until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
   return LastDir
endsub

Sub IsEnd(GoX,GoY,Prec)
   if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
      LogInfo('END FOUND')
      return true
    else
         if Abs(UO.GetX()-GoX)>=100 and Abs(UO.GetY()-GoY)>=100 then
            LogInfo('END FOUND')
            return true
          else
            return false
         endif
      #return false
   endif
endsub

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
      endif
    else
      if (DiffY/(DiffX+0.1))>=2 then
         if (MyY>GoY) then
            GoDir=5
          else
            GoDir=1
         endif
       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
                  endif
               endif
            endif
         endif
      endif
   endif
   return GoDir
endsub

Sub Tracer(StartDir,Direction,Prec)
   var CurDir=StartDir
   var Result
   repeat
      Result=TryDir(CurDir,Prec)
      if not Result then
         CurDir=AddToDir(CurDir,Direction,Prec)
      endif
   until Result
   return Result
endsub

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
endsub

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
   endif
   return TurnAndGoDir(Dir,Prec)
endsub

Sub XFromDir(Dir)
   if Dir==2 OR Dir==3 Or Dir==4 then
      return (UO.GetX()+1)
   endif
   if Dir==6 OR Dir==7 Or Dir==8 then
      return (UO.GetX()-1)
   endif
   return (UO.GetX())
endsub

Sub YFromDir(Dir)
   if Dir==8 OR Dir==1 Or Dir==2 then
      return (UO.GetY()+1)
   endif
   if Dir==4 OR Dir==5 Or Dir==6 then
      return (UO.GetY()-1)
   endif
   return (UO.GetY())
endsub

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
   endif
   #End direction Test
   if StartY<>UO.GetY() or StartX<>UO.GetX() then
      return Dir
   endif
   #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
   endif
endsub

Sub GetDirToDir(GotDir,Prec)
   var ChangedDir=-GotDir
   ChangedDir=AddToDir(ChangedDir,5,Prec)
   return ChangedDir
endsub

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])
endsub

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)
endsub

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)
endsub

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
      endif
   next
   return false
endsub

Sub LogInfo(Line)
   if not UO.GetGlobal("Logging")=="0" then
      UO.TextOpen()
      UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
         kopka()
   endif
endsub

Sub Abs(X)
   if X>0 then
      return X
    else
      return (-X)
   endif
endsub
############################   КОНЕЦ СКРИПТА ###################
Aleppo
Posts: 27
Joined: 2009-05-01 22:58:00
Location: DRW
Contact:

Post by Aleppo »

И?
Successful
Posts: 174
Joined: 2008-12-13 00:00:15

Post by Successful »

Aleppo wrote:И?

Scripting Ore
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

Successful wrote:
Aleppo wrote:И?

Scripting Ore


праблема с ан ортом не хочит кидать на вортиха шард ДРВ
vertijok
Posts: 117
Joined: 2008-09-26 17:06:16
Contact:

Post by vertijok »

АП
Post Reply