Скрипт на паузу
Moderators: Murderator+, Murderator
Re: Скрипт на паузу
ток хотел помочь человеку... опередили 
-
Incorrect User
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Скрипт на паузу
Возьму ламбер на себя, если проверишь последний пост 
-
Incorrect User
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Скрипт на паузу
1 чар, 1 чар\лошадь\курица, лук, стрела, пару тюков с сеном\сундуков\ящиков(через что нельзя стрелять). Пользуясь картинкой, смоделировать ситуацию. Поизвести выстрел или сказать, что мой скрипт не работает. 
-
Incorrect User
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Скрипт на паузу
Переделанный скрипт Дестракшена + всякие полезности + ходилка Бьёндера + антимакро(не знаю чей). Соавтор переделки, а так же единственный тестер - Инкорект Юзер.
Летает в лес по 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 = '' - тип руны (Интересно зачем?... Не помню
)
t_Scroll = '', c_Scroll = '' - тип и цвет скроллов реколла
t_Invis = '', c_Invis = '' - тип и цвет инвизок
Если будут проблеммы - пишите Инкорект Юзеру 
Летает в лес по 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 = '' - тип руны (Интересно зачем?... Не помню
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
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: Скрипт на паузу
Для тех кто не в курсе - скрипт БЕЗ РАЗМЕТКИ, то есть рубит в любой местности автоматически находя деревья.
Re: Скрипт на паузу
Твой вариант выдает ошибку "Unhandled exrption in parser".Выдает ее сразу при запуске скрипта.
-
Incorrect User
- Posts: 949
- Joined: 2011-05-23 00:33:30
Re: Скрипт на паузу
Ошибка.Incorrect User wrote:Для тех кто не в курсе - скрипт БЕЗ РАЗМЕТКИ, то есть рубит в любой местности автоматически находя деревья.
Line 85:Variable undefined-UO.GETY
Re: Скрипт на паузу
UO.GETY()
скобок не хватает. Причем там в нескольких местах.
скобок не хватает. Причем там в нескольких местах.
Re: Скрипт на паузу
вечером подправлю, сейчас не могу.
Re: Скрипт на паузу
Поправил ошибку не выдает но почему то в выкладке где я могу в ручную части скрипта включать всего 3 этих самих части это:Start ,Antimacro, и Oneclick.Соответственно когда я биндю кнопку на Sub Switch инжа ругается что такую функцию не находит,тоесть в скрипте она вроде как есть но определяться она не хочет и получается что ее вроде как нет)) Каламбур посмотрите плз что за хрень:)Mirage wrote:UO.GETY()
скобок не хватает. Причем там в нескольких местах.
А рубить чар ходит рубит тут все окей.
Re: Скрипт на паузу
не понял зачем биндить кнопки на все процедуры?
Для работы скрипта нужно запустить 1 раз 1 процедуру - Start.
Все остальное она должна подцеплять сама когда потребуется.
Для работы скрипта нужно запустить 1 раз 1 процедуру - Start.
Все остальное она должна подцеплять сама когда потребуется.
Re: Скрипт на паузу
Switch нужен для ручной постановки и снятия с паузы. В хокеях инжи прописать exec Switch, или в макрах клиента ,exec switch.
Человек просил, чтобы при обнаружении элема - скрипт вставал на паузу.Mirage wrote:Все остальное она должна подцеплять сама когда потребуется.
Re: Скрипт на паузу
Обновил скрипт
Re: Скрипт на паузу
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 = '' - тип руны (Интересно зачем?... Не помню)
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
Все отлично работает,крашит иногда но это все херь:)Спасибо большое всем за помощь,рублю в удовольствие:)
