Ребята подмогните плиз.! Есть скрипт на мининг работает на ура (ходит копает реколится и т.д.), но когда обходит полный круг по шахте и надо начинать с начала выдает ошибку в строчке 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
|