Здравствуйте.Добрые люди помогли мне скриптом на ламбер.Скрипт прекрасно работает,рубит все как положено.Уважаемые скриптеры подскажите,можно ли этот самый скрипт переделать под копку камней.Чтобы чар как и в ламбере ходил по лесу искал не деревья а камни и копал их а после появления елема так же вставал на паузу. Вот скрпит:Code: 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
|