Скрипт на паузу

Anything and all.

Moderators: Murderator+, Murderator

ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

ток хотел помочь человеку... опередили :wink:
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Скрипт на паузу

Post by Incorrect User »

Еще ламбер целый есть для тебя :)
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

Возьму ламбер на себя, если проверишь последний пост :roll:
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Скрипт на паузу

Post by Incorrect User »

последний пост

Так а от меня что требуеться?
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

1 чар, 1 чар\лошадь\курица, лук, стрела, пару тюков с сеном\сундуков\ящиков(через что нельзя стрелять). Пользуясь картинкой, смоделировать ситуацию. Поизвести выстрел или сказать, что мой скрипт не работает. :roll:
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Скрипт на паузу

Post by Incorrect User »

Ну этож ж можно без скрипта? Просто попробовать стрельнуть?
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

Переделанный скрипт Дестракшена + всякие полезности + ходилка Бьёндера + антимакро(не знаю чей). Соавтор переделки, а так же единственный тестер - Инкорект Юзер.

Летает в лес по 5-ти рунам, набирает вес, реколится домой, разгружается, догружается, по след. руне, набирает вес итд.
Прыгает от ПК. Если вылезет лог гвард или как там его зовут, то встанет на паузу и проиграет UO.Exec('playwav C:\Alert') <= Кстати а тут не нужно расширение файла?

Чтобы снять с паузы, нужен hotkey с единоразовым включением Sub Switch(), этим же хоткеем можно будет поставить скрипт на паузу вручную.

НАСТРОЙКА:
id_Container = '' - id контейнера, в который будет выгружать логи, добирать из него топоры и скроллы реколла, а так же при включенном Invis доберёт инвизки

t_Hatchet = '0x0F43' - тип топора
RespawnTime = 60 - время респа дерева в минутах
Hide = 0 - если 1, то использовать хайд
Invis = 0 - если 1, то будет пить инвизки при реколле от пк
t_Monster = '0x0008' - тип тех самых лог гвардов
id_Rune = '1 0 0 0 0 ' - сюда через пробел нужно вписать id рун в лес, до 5-ти штук, после пятой тоже должен быть пробел. Если 5 рун много, то можно вписать одну, две, три или четыре руны, а не используемые слоты оставить нолями.

id_RuneHome = '' - id руны к контейнеру
t_RuneHome = '' - тип руны (Интересно зачем?... Не помню :roll: )
t_Scroll = '', c_Scroll = '' - тип и цвет скроллов реколла
t_Invis = '', c_Invis = '' - тип и цвет инвизок

Code: Select all

var id_Container = '', t_Hatchet = '0x0F43', RespawnTime = 60, Hide = 0, Invis = 0, t_Monster = '0x0008'
var id_Rune = '1 0 0 0 0 ', id_RuneHome = '', t_RuneHome = '', t_Scroll = '', c_Scroll = '', t_Invis = '', c_Invis = ''

var MaxTraceDistance = 5, TraceLoopIncrease = 5, LimitTrace = 20
var Speed = 1, StepTimeOut = 120, CheckCnt = 2, DynamicPause = 10

sub Start()
  UO.Set('finddistance', '24')
  UO.Exec('exec Reconnector')
  UO.Exec('exec SearchPK')
  UO.Exec('exec AntiMacro')
  UO.Exec('exec Lumberjacking')
Endsub

Sub Lumberjacking()
  var a
  While true
    For a = 1 to 5
      If GetWord(id_Rune, a) <> '0' then
        Recall(GetWord(id_Rune, a), 0)
        While UO.Weight < UO.Str * 4 and UO.Count(t_Hatchet) > 0
          SearchTree()
        Wend
        Recall(id_RuneHome, 0)
        Unload(id_Container)
        Reload(id_Container)
       else
        Wait(100)
      Endif
    Next
  Wend
Endsub

Sub SearchPK()
  var i
  Dim t_Player[2]
   t_Player[0] = '0x0190'
   t_Player[1] = '0x0191'
  While true
    For i = 0 to 1
      UO.FindType(t_Player, -1, 'ground')
      If UO.FindCount() and UO.GetSerial('finditem') <> UO.GetSerial('self') then
        UO.Exec('terminate Lumberjacking')
        UO.Exec('playwav C:\Alert')
        Recall(id_RuneHome, 1)
        UO.SetGlobal('Pause', 'On')
        UnLoad(id_Container)
        Reload(id_Container)
        Pause()
        UO.Exec('exec Lumberjacking')
       else
        Wait(100)
      Endif
    Next
  Wend
Endsub

Sub SearchReaper()
  UO.FindType(t_Monster, -1, 'ground')
  If UO.FindCount() or UO.GetGlobal('Pause')=='On' then
    UO.Exec('playwav C:\Alert')
    Pause()
  Endif
Endsub

Sub Switch()
  If UO.GetGlobal('Pause') == 'On' then
    UO.Print('Pause OFF')
    UO.SetGlobal('Pause', 'Off')
   else
    UO.Print('Pause ON')
    UO.SetGlobal('Pause', 'On')
  Endif
Endsub

Sub Pause()
  var msg_start = 'start'
  DelJournal(msg_start)
  While UO.GetGobal('Pause') == 'On'
    Wait(100)
  Wend
Endsub

Sub Recall(id, alert)
  var msg = 'fizzle', mx = UO.GetX(), my = UO.GetY(), Time
  While mx == UO.GetX() and my == UO.GetY()
    DelJournal(msg)
    Time = UO.Timer()
    UO.WaitTargetObject(id)
    UO.UseType(t_Scroll, c_Scroll)
    If alert == 1 and Invis == 1 then
      Wait(120)
      UO.UseType(t_Invis, c_Invis)
    Endif
    Repeat
      Wait(100)
    Until UO.InJournal(msg) or mx <> UO.GetX() or my <> UO.GetY() or Time + 50 < UO.Timer()
  Wend
Endsub

Sub Unload(cont)
  var a, Quit
  Dim t_Logs[2]
    t_Logs[0] = '0x1BDD'
    t_Logs[1] = '0x0F90'
  Walker(UO.GetX(id_Container), UO.GetY(id_Container), 1)
  UO.UseObject(id_Container)
  For a = 0 to 1
    Quit = 0
    Repeat
      CheckLag()
      UO.FindType(t_Logs[a], -1, 'backpack')
      If UO.FindCount() then
        UO.MoveItem('finditem', -1, id_Container)
        Wait(800)
       else
        Quit = 1
      Endif
    Until Quit == 1
  Next
Endsub

Sub Reload(cont)
  var a, b
  While UO.Count(t_Scroll, c_Scroll) < 5
    UO.FindType(t_Scroll, c_Scroll, cont)
    If UO.FindCount() then
      CheckLag()
      UO.MoveItem('finditem', 5 - UO.Count(t_Scroll, c_Scroll), 'backpack')
      Wait(1100)
     else
      UO.Print('В контейнере ' + cont + ' не хватает скроллов')
      UO.Exec('terminate all')
    Endif
  Wend
  While UO.Count(t_Hatchet) < 2
    UO.FindType(t_Hatchet, -1, cont)
    If UO.FindCount() >= 2 - UO.Count(t_Hatchet) then
      CheckLag()
      MoveItem('finditem', -1, 'backpack')
      Wait(1100)
     else
      UO.Print('В контейнере ' + cont + ' нет инструментов')
      Return
    Endif
  Wend
  While not UO.Count(t_Invis, c_Invis) and Invis == 1
    UO.FindType(t_Invis, c_Invis, cont)
    If UO.FindCount() then
      CheckLag()
      MoveItem('finditem', 1, 'backpack')
      Wait(1100)
     else
      UO.Print('В контейнере ' + cont + ' нет Invis')
      Return
    Endif
  Wend
Endsub

Sub SearchTree()
  var i, x, y, t, stp, max_search = 24
  var cx = UO.GetX(), 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 val(UO.GetGlobal(str(x + cx) + ',' + str(y + cy))) < UO.Timer() and not UO.GetGlobal(str(x + cx) + ',' + str(y + cy)) == 'empty' then
          t = IsTreeTile(x + cx, y + cy)
          If not t == false then
            DoMineTree(x + cx, y + cy, t)
            Return
           else
            UO.SetGlobal(str(x + cx) + ',' + str(y + cy), 'empty')
          Endif
        Endif
      Next
    Next
  Next
Endsub

Sub DoMineTree(x, y, t)
  var Time, k
  var end = 'no logs|far away|reach this'
  var try = 'You put|hack'
  var use = 'What do you'
  UO.SetGlobal(str(x) + ',' + str(y), str(UO.Timer() + (10 * 60 * RespawnTime)))
  If Walker(x, y, 1) then
    k = 0
    If Hide == 1 then
      Hide()
    Endif
    Repeat
      k = k + 1
      If UO.Waiting() then
        UO.CancelTarget()
      Endif
      DelJournal(try + '|' + end + '|' + use)
      UO.WaitTargetTile(str(t), str(x), str(y), str(UO.GetZ()))
      Repeat
        If UO.LastGump('replyed') then
          UO.UseType(t_Hatchet)
        Endif
        Wait(500)
      Until UO.InJournal(use)
      Time = UO.Timer()
      Repeat
        Wait(100)
        SearchReaper()
      Until UO.InJournal(try + '|' + end) or Time + 50 < UO.Timer()
    Until UO.InJournal(end) or k > 10
  Endif
Endsub


Sub Hide()
  var msg = 'seem to hide|have hidden', Time, Delay = 4
  While not UO.Hidden() and Hide == 1
    If UO.Warmode() then
      UO.WarMode(0)
    Endif
    DelJournal(msg)
    Time = UO.Timer()
    UO.UseSkill('Hiding')
    Repeat
      Wait(100)
    Until UO.InJournal(msg) or Time + Delay * 10 < UO.Timer() or UO.Hidden()
  Wend
Endsub

Sub DelJournal(msg)
  While UO.InJournal(msg)
    UO.SetJournalLine(UO.InJournal(msg) - 1, '')
  Wend
Endsub

Sub CheckLag()
  DelJournal('ackpack')
  UO.Click('backpack')
  Repeat
    Wait(50)
  Until UO.InJournal('ackpack')
Endsub

Sub GetWord(st, nom)
  var tmpst, i, dlin, kol = 0, start = 0
  dlin = len(st)
  For i = 0 to dlin - 1
    If mid(st, i, 1) == ' ' or i == dlin - 1 then
      kol = kol + 1
      If kol == nom then
        tmpst = mid(st, start, i - start)
        Return tmpst
       else
        While mid(st, i, 1) == ' '
          i = i + 1
        Wend
        If kol == nom - 1 then
          start = i
        Endif
      Endif
    Endif
  Next
  tmpst = ''
  Return tmpst
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

Sub Abs(X)
  If X > 0 then
    Return X
   else
    Return (-X)
  Endif
Endsub

Sub Walker(GoX, GoY, Prec)
  var LastDir, MoveRes, TracerCnt
  UO.SetGlobal('Logging', '0')
  UO.SetGlobal('BlindWalk', '0')
  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(), LineY = UO.GetY(), CurDir = StartDir
  var Direction = CountDirection(GoX, GoY, CurDir, Prec)
  var StartX, StartY, 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), MyX = UO.GetX(), 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) or ( GoDir == 7) then
      Return -1
     else
      Return 1
    Endif
   else
    If (GoDir == 1) or (GoDir == 5) 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
  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)
  If (ub1 == 0) or (ub2 == 0) then
    Return false
  Endif
  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
  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
    Return false
  Endif
Endsub

Sub GetDir(GoX, GoY, Prec)
  var MyX = UO.GetX(), MyY = UO.GetY(), DiffX = Abs(UO.GetX() - GoX), DiffY = Abs(UO.GetY() - GoY), 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, 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(), BegY = UO.GetY(), Counter = 0, GoX = BegX, GoY = BegY
  If hide == 1 then
    Hide()
  Endif
  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), StartX = UO.GetX(), StartY = UO.GetY()
  var EndDir, Counter = 0, TestCounter = CheckCnt
  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
  If StartY <> UO.GetY() or StartX <> UO.GetX() then
    Return Dir
  Endif
  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
  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[8]
   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[8]
   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)
  var DistanceX = Abs(UO.GetX() - val(UO.GetGlobal('GlobalGoX'))), DistanceY = Abs(UO.GetY() - val(UO.GetGlobal('GlobalGoY'))), GoDistance
  Dim Dirs[8]
   Dirs[1] = 35
   Dirs[2] = 40
   Dirs[3] = 34
   Dirs[4] = 39
   Dirs[5] = 33
   Dirs[6] = 38
   Dirs[7] = 36
   Dirs[8] = 37
  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)
  var i
  If UO.GetGlobal('BlindWalk') then
    Return true
  Endif
  Dim Types[54]
   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 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)
  Endif
Endsub

sub AntiMacro()
while true
if not uo.LastGump('replyed') then
if uo.LastGump('text', 0) == 'Antimacros System' then
OneClick()
end if
endif
wait(500)
wend

end sub

sub OneClick()

dim reindex[8]
reindex[0] = 11
reindex[1] = 12
reindex[2] = 13
reindex[3] = 10
reindex[4] = 16
reindex[5] = 14
reindex[6] = 17
reindex[7] = 15
var GumpID = 0
var ButtonID = 0
var ButtonText
var i = 18

if uo.LastGump('text', 4) <> "0" then
i = 19
end if
GumpID = val(Mid(uo.LastGump('command', i), 16, 4))
ButtonID = reindex[GumpID-2225]
ButtonText = uo.LastGump('command', ButtonID)
uo.LClick(Val(Mid(ButtonText, 7, 3)), Val(Mid(ButtonText, 11, 3)))
wait(300)

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)
      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 all')
     ;UO.Exec('exec autoload')
      UO.TextOpen()
      UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
      RFlag = 1
      ReconnectTime = '0'
    Endif
  Until false
Endsub

Sub MakeTime()
  var Ret, Date, Time, a
  Ret = str(UO.Time())
  Time = ''
  For a = 0 to len(Ret)
    Time = Ret[len(Ret) - a] + Time
    If (a == 2) or (a == 4) then
      Time = ':' + Time
    Endif
  Next
  Ret = str(UO.Date())
  Date = ''
  For a = 0 to len(Ret)
    Date = Ret[len(Ret) - a] + Date
    If (a == 2) or (a == 4) then
      Date = '.' + Date
    Endif
  Next
  Ret = Time + ' @ ' + Date
  Return Ret
Endsub


Если будут проблеммы - пишите Инкорект Юзеру :wink:
Last edited by ZeroDX on 2011-06-04 14:59:29, edited 1 time in total.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Скрипт на паузу

Post by Incorrect User »

Для тех кто не в курсе - скрипт БЕЗ РАЗМЕТКИ, то есть рубит в любой местности автоматически находя деревья.
son
Posts: 43
Joined: 2006-12-16 14:44:01

Re: Скрипт на паузу

Post by son »

Твой вариант выдает ошибку "Unhandled exrption in parser".Выдает ее сразу при запуске скрипта.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Скрипт на паузу

Post by Incorrect User »

У меня никаких ошибок. Смотри может переносы неправильные есть.
son
Posts: 43
Joined: 2006-12-16 14:44:01

Re: Скрипт на паузу

Post by son »

Incorrect User wrote:Для тех кто не в курсе - скрипт БЕЗ РАЗМЕТКИ, то есть рубит в любой местности автоматически находя деревья.

Ошибка.
Line 85:Variable undefined-UO.GETY
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Скрипт на паузу

Post by Mirage »

UO.GETY()

скобок не хватает. Причем там в нескольких местах.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

вечером подправлю, сейчас не могу.
son
Posts: 43
Joined: 2006-12-16 14:44:01

Re: Скрипт на паузу

Post by son »

Mirage wrote:UO.GETY()

скобок не хватает. Причем там в нескольких местах.


Поправил ошибку не выдает но почему то в выкладке где я могу в ручную части скрипта включать всего 3 этих самих части это:Start ,Antimacro, и Oneclick.Соответственно когда я биндю кнопку на Sub Switch инжа ругается что такую функцию не находит,тоесть в скрипте она вроде как есть но определяться она не хочет и получается что ее вроде как нет)) Каламбур посмотрите плз что за хрень:)


А рубить чар ходит рубит тут все окей.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Скрипт на паузу

Post by Mirage »

не понял зачем биндить кнопки на все процедуры?
Для работы скрипта нужно запустить 1 раз 1 процедуру - Start.
Все остальное она должна подцеплять сама когда потребуется.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

Switch нужен для ручной постановки и снятия с паузы. В хокеях инжи прописать exec Switch, или в макрах клиента ,exec switch.
Mirage wrote:Все остальное она должна подцеплять сама когда потребуется.

Человек просил, чтобы при обнаружении элема - скрипт вставал на паузу.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Скрипт на паузу

Post by ZeroDX »

Обновил скрипт
son
Posts: 43
Joined: 2006-12-16 14:44:01

Re: Скрипт на паузу

Post by son »

ZeroDX wrote:Переделанный скрипт Дестракшена + всякие полезности + ходилка Бьёндера + антимакро(не знаю чей). Соавтор переделки, а так же единственный тестер - Инкорект Юзер.

Летает в лес по 5-ти рунам, набирает вес, реколится домой, разгружается, догружается, по след. руне, набирает вес итд.
Прыгает от ПК. Если вылезет лог гвард или как там его зовут, то встанет на паузу и проиграет UO.Exec('playwav C:\Alert') <= Кстати а тут не нужно расширение файла?

Чтобы снять с паузы, нужен hotkey с единоразовым включением Sub Switch(), этим же хоткеем можно будет поставить скрипт на паузу вручную.

НАСТРОЙКА:
id_Container = '' - id контейнера, в который будет выгружать логи, добирать из него топоры и скроллы реколла, а так же при включенном Invis доберёт инвизки

t_Hatchet = '0x0F43' - тип топора
RespawnTime = 60 - время респа дерева в минутах
Hide = 0 - если 1, то использовать хайд
Invis = 0 - если 1, то будет пить инвизки при реколле от пк
t_Monster = '0x0008' - тип тех самых лог гвардов
id_Rune = '1 0 0 0 0 ' - сюда через пробел нужно вписать id рун в лес, до 5-ти штук, после пятой тоже должен быть пробел. Если 5 рун много, то можно вписать одну, две, три или четыре руны, а не используемые слоты оставить нолями.

id_RuneHome = '' - id руны к контейнеру
t_RuneHome = '' - тип руны (Интересно зачем?... Не помню :roll: )
t_Scroll = '', c_Scroll = '' - тип и цвет скроллов реколла
t_Invis = '', c_Invis = '' - тип и цвет инвизок

Code: Select all

var id_Container = '', t_Hatchet = '0x0F43', RespawnTime = 60, Hide = 0, Invis = 0, t_Monster = '0x0008'
var id_Rune = '1 0 0 0 0 ', id_RuneHome = '', t_RuneHome = '', t_Scroll = '', c_Scroll = '', t_Invis = '', c_Invis = ''

var MaxTraceDistance = 5, TraceLoopIncrease = 5, LimitTrace = 20
var Speed = 1, StepTimeOut = 120, CheckCnt = 2, DynamicPause = 10

sub Start()
  UO.Set('finddistance', '24')
  UO.Exec('exec Reconnector')
  UO.Exec('exec SearchPK')
  UO.Exec('exec AntiMacro')
  UO.Exec('exec Lumberjacking')
Endsub

Sub Lumberjacking()
  var a
  While true
    For a = 1 to 5
      If GetWord(id_Rune, a) <> '0' then
        Recall(GetWord(id_Rune, a), 0)
        While UO.Weight < UO.Str * 4 and UO.Count(t_Hatchet) > 0
          SearchTree()
        Wend
        Recall(id_RuneHome, 0)
        Unload(id_Container)
        Reload(id_Container)
       else
        Wait(100)
      Endif
    Next
  Wend
Endsub

Sub SearchPK()
  var i
  Dim t_Player[2]
   t_Player[0] = '0x0190'
   t_Player[1] = '0x0191'
  While true
    For i = 0 to 1
      UO.FindType(t_Player, -1, 'ground')
      If UO.FindCount() and UO.GetSerial('finditem') <> UO.GetSerial('self') then
        UO.Exec('terminate Lumberjacking')
        UO.Exec('playwav C:\Alert')
        Recall(id_RuneHome, 1)
        UO.SetGlobal('Pause', 'On')
        UnLoad(id_Container)
        Reload(id_Container)
        Pause()
        UO.Exec('exec Lumberjacking')
       else
        Wait(100)
      Endif
    Next
  Wend
Endsub

Sub SearchReaper()
  UO.FindType(t_Monster, -1, 'ground')
  If UO.FindCount() or UO.GetGlobal('Pause')=='On' then
    UO.Exec('playwav C:\Alert')
    Pause()
  Endif
Endsub

Sub Switch()
  If UO.GetGlobal('Pause') == 'On' then
    UO.Print('Pause OFF')
    UO.SetGlobal('Pause', 'Off')
   else
    UO.Print('Pause ON')
    UO.SetGlobal('Pause', 'On')
  Endif
Endsub

Sub Pause()
  var msg_start = 'start'
  DelJournal(msg_start)
  While UO.GetGobal('Pause') == 'On'
    Wait(100)
  Wend
Endsub

Sub Recall(id, alert)
  var msg = 'fizzle', mx = UO.GetX(), my = UO.GetY(), Time
  While mx == UO.GetX() and my == UO.GetY()
    DelJournal(msg)
    Time = UO.Timer()
    UO.WaitTargetObject(id)
    UO.UseType(t_Scroll, c_Scroll)
    If alert == 1 and Invis == 1 then
      Wait(120)
      UO.UseType(t_Invis, c_Invis)
    Endif
    Repeat
      Wait(100)
    Until UO.InJournal(msg) or mx <> UO.GetX() or my <> UO.GetY() or Time + 50 < UO.Timer()
  Wend
Endsub

Sub Unload(cont)
  var a, Quit
  Dim t_Logs[2]
    t_Logs[0] = '0x1BDD'
    t_Logs[1] = '0x0F90'
  Walker(UO.GetX(id_Container), UO.GetY(id_Container), 1)
  UO.UseObject(id_Container)
  For a = 0 to 1
    Quit = 0
    Repeat
      CheckLag()
      UO.FindType(t_Logs[a], -1, 'backpack')
      If UO.FindCount() then
        UO.MoveItem('finditem', -1, id_Container)
        Wait(800)
       else
        Quit = 1
      Endif
    Until Quit == 1
  Next
Endsub

Sub Reload(cont)
  var a, b
  While UO.Count(t_Scroll, c_Scroll) < 5
    UO.FindType(t_Scroll, c_Scroll, cont)
    If UO.FindCount() then
      CheckLag()
      UO.MoveItem('finditem', 5 - UO.Count(t_Scroll, c_Scroll), 'backpack')
      Wait(1100)
     else
      UO.Print('В контейнере ' + cont + ' не хватает скроллов')
      UO.Exec('terminate all')
    Endif
  Wend
  While UO.Count(t_Hatchet) < 2
    UO.FindType(t_Hatchet, -1, cont)
    If UO.FindCount() >= 2 - UO.Count(t_Hatchet) then
      CheckLag()
      MoveItem('finditem', -1, 'backpack')
      Wait(1100)
     else
      UO.Print('В контейнере ' + cont + ' нет инструментов')
      Return
    Endif
  Wend
  While not UO.Count(t_Invis, c_Invis) and Invis == 1
    UO.FindType(t_Invis, c_Invis, cont)
    If UO.FindCount() then
      CheckLag()
      MoveItem('finditem', 1, 'backpack')
      Wait(1100)
     else
      UO.Print('В контейнере ' + cont + ' нет Invis')
      Return
    Endif
  Wend
Endsub

Sub SearchTree()
  var i, x, y, t, stp, max_search = 24
  var cx = UO.GetX(), 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 val(UO.GetGlobal(str(x + cx) + ',' + str(y + cy))) < UO.Timer() and not UO.GetGlobal(str(x + cx) + ',' + str(y + cy)) == 'empty' then
          t = IsTreeTile(x + cx, y + cy)
          If not t == false then
            DoMineTree(x + cx, y + cy, t)
            Return
           else
            UO.SetGlobal(str(x + cx) + ',' + str(y + cy), 'empty')
          Endif
        Endif
      Next
    Next
  Next
Endsub

Sub DoMineTree(x, y, t)
  var Time, k
  var end = 'no logs|far away|reach this'
  var try = 'You put|hack'
  var use = 'What do you'
  UO.SetGlobal(str(x) + ',' + str(y), str(UO.Timer() + (10 * 60 * RespawnTime)))
  If Walker(x, y, 1) then
    k = 0
    If Hide == 1 then
      Hide()
    Endif
    Repeat
      k = k + 1
      If UO.Waiting() then
        UO.CancelTarget()
      Endif
      DelJournal(try + '|' + end + '|' + use)
      UO.WaitTargetTile(str(t), str(x), str(y), str(UO.GetZ()))
      Repeat
        If UO.LastGump('replyed') then
          UO.UseType(t_Hatchet)
        Endif
        Wait(500)
      Until UO.InJournal(use)
      Time = UO.Timer()
      Repeat
        Wait(100)
        SearchReaper()
      Until UO.InJournal(try + '|' + end) or Time + 50 < UO.Timer()
    Until UO.InJournal(end) or k > 10
  Endif
Endsub


Sub Hide()
  var msg = 'seem to hide|have hidden', Time, Delay = 4
  While not UO.Hidden() and Hide == 1
    If UO.Warmode() then
      UO.WarMode(0)
    Endif
    DelJournal(msg)
    Time = UO.Timer()
    UO.UseSkill('Hiding')
    Repeat
      Wait(100)
    Until UO.InJournal(msg) or Time + Delay * 10 < UO.Timer() or UO.Hidden()
  Wend
Endsub

Sub DelJournal(msg)
  While UO.InJournal(msg)
    UO.SetJournalLine(UO.InJournal(msg) - 1, '')
  Wend
Endsub

Sub CheckLag()
  DelJournal('ackpack')
  UO.Click('backpack')
  Repeat
    Wait(50)
  Until UO.InJournal('ackpack')
Endsub

Sub GetWord(st, nom)
  var tmpst, i, dlin, kol = 0, start = 0
  dlin = len(st)
  For i = 0 to dlin - 1
    If mid(st, i, 1) == ' ' or i == dlin - 1 then
      kol = kol + 1
      If kol == nom then
        tmpst = mid(st, start, i - start)
        Return tmpst
       else
        While mid(st, i, 1) == ' '
          i = i + 1
        Wend
        If kol == nom - 1 then
          start = i
        Endif
      Endif
    Endif
  Next
  tmpst = ''
  Return tmpst
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

Sub Abs(X)
  If X > 0 then
    Return X
   else
    Return (-X)
  Endif
Endsub

Sub Walker(GoX, GoY, Prec)
  var LastDir, MoveRes, TracerCnt
  UO.SetGlobal('Logging', '0')
  UO.SetGlobal('BlindWalk', '0')
  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(), LineY = UO.GetY(), CurDir = StartDir
  var Direction = CountDirection(GoX, GoY, CurDir, Prec)
  var StartX, StartY, 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), MyX = UO.GetX(), 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) or ( GoDir == 7) then
      Return -1
     else
      Return 1
    Endif
   else
    If (GoDir == 1) or (GoDir == 5) 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
  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)
  If (ub1 == 0) or (ub2 == 0) then
    Return false
  Endif
  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
  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
    Return false
  Endif
Endsub

Sub GetDir(GoX, GoY, Prec)
  var MyX = UO.GetX(), MyY = UO.GetY(), DiffX = Abs(UO.GetX() - GoX), DiffY = Abs(UO.GetY() - GoY), 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, 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(), BegY = UO.GetY(), Counter = 0, GoX = BegX, GoY = BegY
  If hide == 1 then
    Hide()
  Endif
  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), StartX = UO.GetX(), StartY = UO.GetY()
  var EndDir, Counter = 0, TestCounter = CheckCnt
  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
  If StartY <> UO.GetY() or StartX <> UO.GetX() then
    Return Dir
  Endif
  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
  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[8]
   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[8]
   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)
  var DistanceX = Abs(UO.GetX() - val(UO.GetGlobal('GlobalGoX'))), DistanceY = Abs(UO.GetY() - val(UO.GetGlobal('GlobalGoY'))), GoDistance
  Dim Dirs[8]
   Dirs[1] = 35
   Dirs[2] = 40
   Dirs[3] = 34
   Dirs[4] = 39
   Dirs[5] = 33
   Dirs[6] = 38
   Dirs[7] = 36
   Dirs[8] = 37
  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)
  var i
  If UO.GetGlobal('BlindWalk') then
    Return true
  Endif
  Dim Types[54]
   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 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)
  Endif
Endsub

sub AntiMacro()
while true
if not uo.LastGump('replyed') then
if uo.LastGump('text', 0) == 'Antimacros System' then
OneClick()
end if
endif
wait(500)
wend

end sub

sub OneClick()

dim reindex[8]
reindex[0] = 11
reindex[1] = 12
reindex[2] = 13
reindex[3] = 10
reindex[4] = 16
reindex[5] = 14
reindex[6] = 17
reindex[7] = 15
var GumpID = 0
var ButtonID = 0
var ButtonText
var i = 18

if uo.LastGump('text', 4) <> "0" then
i = 19
end if
GumpID = val(Mid(uo.LastGump('command', i), 16, 4))
ButtonID = reindex[GumpID-2225]
ButtonText = uo.LastGump('command', ButtonID)
uo.LClick(Val(Mid(ButtonText, 7, 3)), Val(Mid(ButtonText, 11, 3)))
wait(300)

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)
      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 all')
     ;UO.Exec('exec autoload')
      UO.TextOpen()
      UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
      RFlag = 1
      ReconnectTime = '0'
    Endif
  Until false
Endsub

Sub MakeTime()
  var Ret, Date, Time, a
  Ret = str(UO.Time())
  Time = ''
  For a = 0 to len(Ret)
    Time = Ret[len(Ret) - a] + Time
    If (a == 2) or (a == 4) then
      Time = ':' + Time
    Endif
  Next
  Ret = str(UO.Date())
  Date = ''
  For a = 0 to len(Ret)
    Date = Ret[len(Ret) - a] + Date
    If (a == 2) or (a == 4) then
      Date = '.' + Date
    Endif
  Next
  Ret = Time + ' @ ' + Date
  Return Ret
Endsub


Если будут проблеммы - пишите Инкорект Юзеру :wink:



Все отлично работает,крашит иногда но это все херь:)Спасибо большое всем за помощь,рублю в удовольствие:) :)А можно ли этот же скрипт переделать чтобы не рубил а копал камушки в лесу?
Post Reply