Ребята подмогните плиз.! Есть скрипт на мининг работает на ура (ходит копает реколится и т.д.), но когда обходит полный круг по шахте и надо начинать с начала выдает ошибку в строчке 209. Прошу вашей помощи.... как это исправить???
Code:
; НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ
var runeToBank = '0x418B0002' ## - ID рунки в банк
;var runeToCave = '0x4000A00A' ## - ID рунки в пещеру
var runeToCave = '0x4000A52A'
var Chest='0x4001006A' ## - ID сундука куда будем выгружаться
var f = file('E:\Games\UO\Scripts_Mine_UO\mining.dat')
var maxWeight = 400
sub Start()
; !!! НЕ НАСТРАИВАЕМЫЕ ПАРАМЕТРЫ !!!
var pickaxeType = '0x0E85'
var chestObjName = 'MinerChest'
var pickaxeObj = '0x00000000'
var x = 0
var y = 0
var z = 0
var i = 0
var j = 0
var posNum = 0
var currentPos = 0
var tryMining = 0
dim charPosX[1000]
dim charPosY[1000]
dim posTile[1000]
dim posX[1000]
dim posY[1000]
dim posZ[1000]
UO.Exec('terminate AntiKill')
wait(1000)
UO.Exec('exec AntiKill')
UO.Exec('terminate antimacro')
wait(1000)
UO.Exec('exec antimacro')
pickaxeObj = CharHaveItem(pickaxeType, '0xFFFF', 1)
If (pickaxeObj=='0x00000000') then
UO.Print("ERROR!!! Положите в бэгпак одну или несколько кирок и перезапустите скрипт")
return 0
EndIf
; Читаем координаты из файла
posNum = 0
f.open()
while (not f.Eof())
charPosX[posNum] = safe call f.ReadNumber()
charPosY[posNum] = safe call f.ReadNumber()
posTile[posNum] = safe call f.ReadNumber()
posX[posNum] = safe call f.ReadNumber()
posY[posNum] = safe call f.ReadNumber()
posZ[posNum] = safe call f.ReadNumber()
posNum = posNum + 1
wend
f.close()
while (2>1)
for i=0 to posNum-1
If (UO.weight>=maxWeight) then
; Выгружаемся
goToBank()
DropOre()
goToCave()
for j=0 to i
WalkME(charPosX[i], charPosY[i], '')
next
EndIf
WalkME(charPosX[i], charPosY[i], '')
tryMining = 1
while (tryMining>0)
ToHide()
UO.DeleteJournal()
UO.WaitTargetTile('1342', posX[i], posY[i], posZ[i])
UO.UseObject(pickaxeObj)
while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("but fail") and not UO.InJournal("far away") and not UO.InJournal("in rock")
wait (500)
wend
If (not UO.InJournal("You put") and not UO.InJournal("but fail")) then
tryMining = 0
EndIf
wend
next
for i=posNum-1 to 0 step -1
WalkME(charPosX[i], charPosY[i], '')
next
wend
endsub
Sub DropOre()
VAR a,Exit
DIM Ore[5]
Ore[0]=0x19B9 ; 4 and more ore
Ore[1]=0x19B7 ; 1 ore
Ore[2]=0x19BA ; 2 ore
Ore[3]=0x19B8 ; 3 ore
If uo.waiting() then
uo.canceltarget()
EndIf
UO.SetReceivingContainer(Chest)
wait(500)
For a=0 to 3
Exit=0
repeat
UO.FindType(Ore[a])
If UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(1500)
Else
Exit=1
EndIf
until Exit==1
Next
UO.UnSetReceivingContainer()
EndSub
; ДОПОЛНИТЕЛЬНЫЕ БИБЛИОТЕЧНЫЕ ФУНКЦИИ
Sub DelJournal(msg)
while UO.InJournal(msg)
UO.SetJournalLine(UO.InJournal(msg)-1,"")
wend
EndSub
; Думать, по тыканью в бэгпак отлавливают инжу
Sub CheckLag()
return
;DelJournal("ackpack")
;UO.Click("backpack")
;repeat
; wait(50)
;until UO.InJournal("ackpack")
EndSub
Sub AddObject(prompt, name)
If UO.Targeting() then
UO.Say(chr(27))
EndIf
If UO.Waiting() then
UO.CancelTarget()
EndIf
UO.Print(prompt)
UO.AddObject(name)
while UO.Targeting()
wait(100)
wend
EndSub
Sub CharHaveItem(type, color, lookAtHand)
UO.FindType(type, color, 'my')
If UO.FindCount()==0 and lookAtHand>0 then
If (UO.GetGraphic(UO.ObjAtLayer("Rhand"))==type) then
return UO.ObjAtLayer("Rhand")
EndIf
If (UO.GetGraphic(UO.ObjAtLayer("Lhand"))==type) then
return UO.ObjAtLayer("Lhand")
EndIf
return '0x00000000'
EndIf
return UO.GetSerial('finditem')
EndSub
################# W A L K E R ######################
Sub WalkME(x,y,Target)
UO.Print(STR(x) + ':' + STR(y))
VAR i
VAR dir,ldir,rdir,key,olddir
VAR dx,dy,Exit=0
VAR CacheLimit=9,CacheIndex="Text"
DIM CacheX[10], CacheY[10]
CacheX[0]="Test"
While Exit<>1
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<2 Then
return
EndIf
Else
UO.Print(x)
UO.Print(VAL(x))
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 Then
return
EndIf
EndIf
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then ; GoSE
dir=3
ldir=2
rdir=4
key=40 ; DownArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=0
rdir=1
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=5
rdir=6
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
If dx>0 AND dy<0 Then ; GoNE
dir=1
ldir=0
rdir=2
key=39 ; RightArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=6
rdir=7
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
If dx<0 AND dy>0 Then ; GoSW
dir=5
ldir=4
rdir=6
key=37 ; LeftArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==6 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
If dx<0 AND dy<0 Then ; GoWN
dir=7
ldir=6
rdir=0
key=38 ; UpArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
EndIf
If dx<>0 AND dy==0 Then
If dx>0 Then ; GoE
dir=2
key=34 ; PgDown
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoNE
dir=1
ldir=1
rdir=0
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
If dx<0 Then ; GoW
dir=6
key=36 ; Home key
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
EndIf
If dx==0 AND dy<>0 Then
If dy>0 Then ; GoS
dir=4
key=35 ; End
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=6
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
If dy<0 Then ;GoN
dir=0
key=33 ; PgUp
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoWN
dir=7
ldir=7
rdir=6
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
EndIf
EndIf
EndIf
EndIf
Wend
EndSub
Sub StepEdit(x,y,dir,key)
VAR walkwait=200
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
EndIf
EndIf
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
If x==UO.GetX() AND y==UO.GetY() Then
ErrLevel=1
EndIf
EndIf
Return ErrLevel
EndSub
Sub StepArrow(x,y,dir,ldir,rdir,key)
VAR walkwait=100
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then
EndIf
EndIf
If UO.GetX()==x AND UO.GetY()==y Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
ErrLevel=1
EndIf
EndIf
EndIf
Return ErrLevel
EndSub
sub goToBank()
var x,y
x = UO.GetX()
y = UO.GetY()
while x == UO.GetX() and y == UO.GetY()
UO.cast('Recall', runeToBank)
wait(5000)
wend
endsub
sub goToCave()
var x,y
x = UO.GetX()
y = UO.GetY()
while x == UO.GetX() and y == UO.GetY()
UO.cast('Recall', runeToCave)
wait(5000)
wend
;WalkME(1662, 2936, '')
wait(500)
;gotoXY(4600, 3826)
;gotoXY(4604, 3826)
WalkME(1420, 2897, '')
endsub
sub AntiKill()
var i,j
var charNum = 2
DIM Chars[2]
Chars[0] = '0x0190' #тип игрока мужского пола#
Chars[1] = '0x0191' #тип игрока женского пола#
var killerNum = 2
DIM killerChars[2]
killerChars[0] = '0x018AEF75' ; PK DreamWood
killerChars[1] = '0x01901AA8' ; PK DonKihot
; Notoriety:
; * 1 : Innocent (синий)
; * 2 : Friend (зелёный)
; * 3 : Gray (серый)
; * 4 : Criminal (серый)
; * 5 : Enemy (рыжий)
; * 6 : Murderer (красный)
UO.Set('finddistance', '30')
UO.Ignore('self')
charNum = charNum - 1
killerNum = killerNum - 1
UO.DeleteJournal()
while not uo.dead()
wait(200)
for i = 0 to charNum
UO.FindType(Chars[i], -1, 'ground')
if UO.FindCount() > 0 then
if (UO.GetNotoriety('finditem')>1) then
UO.Info('finditem')
UO.TextPrint('Notoriety: ' + STR(UO.GetNotoriety('finditem')))
UO.Forget('finditem')
AlarmRecall(runeToBank)
else
if (killerNum>=0) then
for j=0 to killerNum
if (UO.GetSerial('finditem')==killerChars[j]) then
UO.Info('finditem')
UO.TextPrint('Notoriety: ' + STR(UO.GetNotoriety('finditem')))
UO.Forget('finditem')
AlarmRecall(runeToBank)
endif
next
endif
endif
endif
next
if (UO.InJournal('In Nox|Vas Flam|In Sanct Ylem|Des Sanct|Por Ort Grav|In Hur Jux Ylem|An Ex Por|An Ort|Corp Por|Vas Ort Flam|Kal Vas Flam|Ort Sanct|Vas Corp Po|Ort Rel|attacking you')) then
UO.Info('finditem')
UO.Forget('finditem')
UO.DeleteJournal()
AlarmRecall(runeToBank)
endif
wait(500)
wend
endsub
sub AlarmRecall(rune)
UO.Exec('terminate Start')
UO.Warmode(1)
wait(100)
UO.Warmode(0)
wait(100)
goToBank()
DropOre()
wait(150000)
goToCave()
UO.Exec('exec Start')
endsub
sub antimacro()
var x, y
while not uo.Dead()
if (uo.LastGump('replyed') == 0) and (uo.LastGump('text', 0) == 'Please choose this number:') then
x = uo.LastGump('x')
y = uo.LastGump('y')
uo.LClick(x+120, y+185+what()*35)
wait(1000)
endif
wait(500)
wend
endsub
sub what()
var i, score, index, temp, st
dim x[11], y[11]
dim nm[3]
for i = 3 to 12
st = uo.LastGump('command', i)
x[i-2] = val(mid(st, 8, 3))
y[i-2] = val(mid(st, 12, 3))
next
for i = 0 to 2
nm[i] = val(uo.LastGump('text', i+1))
next
score = 10000
index = 0
for i = 0 to 2
temp = numberscore(nm[i], x, y)
if score > temp then
score = temp
index = i
endif
next
return index
endsub
sub numberscore(num, x, y)
dim Sings[10]
var cheking = 1
var n, i, total = 0
dim xv[2], yv[2], point[3]
Sings[2] = "080910080506"
Sings[3] = "040706060708"
Sings[5] = "040506060708"
Sings[6] = "070910050608"
Sings[8] = "030506060709"
Sings[9] = "040607050807"
for n = 0 to 1
for i = 0 to 2
point[i] = val(mid(Sings[num], n*6+i*2, 2))
next
for i = 0 to 1
xv[i] = x[point[i]]-x[point[i+1]]
yv[i] = y[point[i]]-y[point[i+1]]
next
total = total+anglscore(xv, yv)
next
return total
endsub
sub anglscore(x, y)
var xy1 = x[0]*y[0]
var xy2 = x[1]*y[1]
var t = xy1+xy2
x[0] = x[0]+y[0]
x[1] = x[1]+y[1]
return 100*t*t/((x[0]*x[0]-2*xy1)*(x[1]*x[1]-2*xy2))
endsub
sub ToHide()
While NOT UO.Hidden() and not UO.Dead()
DelJournal('You have hidden')
DelJournal('seem to hide')
DelJournal('preoccupied')
UO.Exec('warmode 0')
UO.UseSkill('Stealth')
Repeat
Wait(100)
Until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied') OR UO.Dead()
Wend
endsub
А именно вот в этом блоке
Code:
Else
UO.Print(x)
UO.Print(VAL(x))
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 Then
return
EndIf