Народ помогите поправить скрипт.Сейчас он обкапывает камни можно ли его поправить чтобы перс копал кочки??
Code:
var id_Container = '', t_Pickaxe = '0x0E85', RespawnTime = 60, Hide = 0, Invis = 0, t_Monster = '0x000e'
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 = 620, CheckCnt = 2, DynamicPause = 10
sub StartMine()
UO.Set('finddistance', '24')
UO.Exec('exec Reconnector')
UO.Exec('exec CheckP')
UO.Exec('exec AntiMacro')
UO.Exec('exec Mining')
Endsub
Sub Mining()
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_Pickaxe) > 0
SearchTree()
Wend
Recall(id_RuneHome, 0)
Unload(id_Container)
Reload(id_Container)
else
Wait(100)
Endif
Next
Wend
Endsub
Sub CheckP()
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 Mining')
UO.Exec('playwav C:\Alert')
Recall(id_RuneHome, 1)
UO.SetGlobal('Pause', 'On')
UnLoad(id_Container)
Reload(id_Container)
Pause()
UO.Exec('exec Mining')
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_Pickaxe) < 2
UO.FindType(t_Pickaxe, -1, cont)
If UO.FindCount() >= 2 - UO.Count(t_Pickaxe) 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 ore|far away|reach this|in rock|current state'
var try = 'You put|loosen some|true code'
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)
UO.WaitTargetTile(str(t), str(x), str(y), str(UO.GetZ()))
If UO.LastGump('replyed') then
UO.UseType(t_Pickaxe)
Endif
Wait(500)
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 = 6
Dim tree[val(str(tree_count))]
tree[0] = 6003
tree[1] = 6004
tree[2] = 6007
tree[3] = 6008
tree[4] = 6011
tree[5] = 6012
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
sub ExtrimalRecall()
var rune='0x400C5998'
uo.Usetype('0x0F08','0x07F2') ; Invisibility
wait(100)
uo.waittargetobject(Rune)
uo.Usetype('0x1F4C','0x0000') ;Recall
end sub