помогите разобраться и дополнить его....
Честно скажу нашел где то здесь но вот работать его по нормальному как мне нужно не могу заставить....
Как то не понятно он берет координаты из файла когда копает... берет все время первую координату. Жалко просто выкидывать его из-за этого. мне очень он нпонравился ходит и к шахте и обратно беда с капанием .
Обращаюсь за помощью к Вам людям знающим и разбирающимся
Code: ;*********************************************************************************** var Ruda = '0x19b9' var Kirka = '0x0E85' var bagpak = '0x0E76' var Box = '0x09AB' var box_regi ='0x0E76' Var FileName = 'C:\go_shxta.txt' Var MaxWeight = 1000 Var MoveDelay=1000 # Промежуток между шагами Var MoveNumber=1 # Количество шагов при смене дислокации Var Ep=0.172 # Значение ширины угла хождения при определении направления. #Если на пути встречаются сложные и широкие препятствия - увеличить. #0.172 - сбалансированный. MaxWeight= ((uo.STR*3.5)+39) var Stoplocation var nom_run var danger = 0 Var F = (FileName) var sc = 1 ; счетчик тайлов VAR ms1 = "There is no ore" VAR ms2 = "You can't use" VAR ms3 = "You put " VAR ms4 = "You loosen some rocks" VAR ms5 = "location" VAR ms6 = "Try mining" VAR ms7 = "You can't see that" UO.Set( 'finddistance', '0' )
sub start() uo.exec('exec control') uo.exec('exec main') end sub
sub Main() wait(1000) uo.Targeting('self') Box = 'Box' uo.set('norbcalc','1') uo.set('norbcheck','1') uo.set('injectecho','1') uo.useobject("Box")
while not uo.dead() wait(500)
if uo.count(Kirka) < 1 then GrAxe() wait(3000) end if go_to_Shahta() ; Перед тем как бежать к точке реколимся в шахту FileName = 'c:\kopka.txt' F=File(FileName) F.Open() wait(3000) uo.sayU("Go go go!") Rubit() ; Запускаем рубку wend EndSub
;--------------------------------------------- РУБИМ ----------------------------- Sub Rubit() Var Tl,T,X,Y,Z var Tim
Beg: FileName = 'c:\kopka.txt' F=File(FileName) F.Open() repeat Tl=safecall F.Readln() Tl=Trim(Tl) If Tl=='File read error' Then f.close() rec_to_home() ; Реколл домой неспеша по регам wait(2000) GrRuda() ; Скидываем добытое GrAxe() ; Берем кирки # GetRegs() ; берем реги, свитки и т.д. wait(1000) main() EndIf
T=GetNumb(Tl,0) X=GetNumb(Tl,1) Y=GetNumb(Tl,2) Z=GetNumb(Tl,3) UO.Print('GoTo next point ' + str(sc) + ' X= '+ str(X) + ' Y= '+str(Y)) sc = sc+1 gotoxy(X,Y,0) end if uo.useskill("Hiding") ; прячемся wait(6000)
REPEAT uo.deletejournal() UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) UO.usetype(Kirka) wait(7000) UNTIL uo.injournal(ms1) or uo.injournal(ms2) or uo.injournal(ms3) or uo.injournal(ms4) or uo.injournal(ms5) or uo.injournal(ms6) or uo.injournal(ms7) or uo.count(Kirka) == 0 If (UO.Weight > 1000) or uo.count(Kirka) < 1 then UO.Print('Domoi !!!') go_to_home() ; домой wait(2000) GrRuda() ; Скидываем руду GrAxe() ; Берем топоры GetRegs() ; берем реги, свитки и т.д. wait(500) UO.Print('Obratno rabotat!!!') go_to_Shahta() uo.say("Rubim!") F=File(FileName) F.Open() Rubit() ; Запускаем рубку метталла End If UO.Print('Dalee !!!') Goto Beg End Sub
;------------------------------------------------------------------------------------------------- Sub GetNumb(C,I) ; Процедура разборки тайлов по пробелам var J,T,K J=0 K=1 While K>0 J=J+1 If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then If I==0 Then T=Val(Left(C,J)) Else T=GetNumb(Right(C,Len(C)-J-1),I-1) EndIf K=0 EndIf wend UO.Print(T) return T endsub ;--------------------------------------------- Sub GrRuda() ; Процедура скидывания руды в указаный в начале ящик repeat ; uo.say("BANK") wait(1500) uo.findtype(Ruda) #Ruda uo.moveitem('finditem','0',Box) wait(1000) until not uo.count(Ruda) end sub ;--------------------------------------------- sub GrAxe() ; Процедура взятия кирок из ящика uo.deletejournal() uo.useobject('Box') wait(3000) if uo.count(Kirka) < 2 then uo.sayU("Berem kirki") uo.findtype(Kirka,'-1','Box') wait(100) UO.grab('1','finditem') Wait(600) uo.findtype(Kirka,'-1','Box') wait(100) UO.grab('1','finditem') Wait(600) end if end sub
sub Control() var Notoriety,IsNPC var v = val(uo.getglobal('tek_run')) var i while not uo.dead() if uo.Life < 120 then UO.Exec('terminate Main') UO.Exec('terminate main') UO.Set('finddistance',10) repeat UO.FindType('0x0e43', '-1', '1') ; Ищем сундуки wait(100) If UO.FindCount() < 1 Then ; если не находим то значит не смотались uo.waittargetobject("runebookid") wait(100) UO.Usetype("0x1f4c") wait(100) go_danger() ; Убегаем от опасности else danger = 1 ; Ставим признак что опасность миновала end if wait(500) until danger > 0 uo.sayU('Warning, atacking') while uo.Life < 120 uo.bandageself() wait(5000) wend danger = 0 GetRegs() ; добираем бинтов, регов и скролов GrRuda() ; скинем руду wait(500) uo.exec('exec main') ; продожаем рубить end if wait(200) wend end sub
sub Metka_kochek() # repeat uo.infotile() wait(3000) until false end sub
sub go_to_home() Var Tl,T,X,Y,Z, eo = 0 FileName = 'c:\go_house.txt' F=File(FileName) F.Open() repeat Tl=safecall F.Readln() Tl=Trim(Tl) If Tl=='File read error' Then eo = 1 else T=GetNumb(Tl,0) X=GetNumb(Tl,1) Y=GetNumb(Tl,2) Z=GetNumb(Tl,3) UO.Print('GoTo ' + str(sc) + ' X= '+ str(X) + ' Y= '+str(Y)) sc = sc+1 gotoxy(X,Y,0) eo = 0 end if until eo == 1 end sub
sub go_to_Shahta() Var Tl,T,X,Y,Z, eo = 0 FileName = 'c:\go_shaxta.txt' F=File(FileName) F.Open() repeat Tl=safecall F.Readln() Tl=Trim(Tl) If Tl=='File read error' Then eo = 1 else T=GetNumb(Tl,0) X=GetNumb(Tl,1) Y=GetNumb(Tl,2) Z=GetNumb(Tl,3) UO.Print('GoTo ' + str(sc) + ' X= '+ str(X) + ' Y= '+str(Y)) sc = sc+1 gotoxy(X,Y,0) eo = 0 end if until eo == 1 end sub
sub go_danger() end sub
sub Setup() uo.Exec('addobject Box') while uo.Targeting() wait(100) wend uo.Exec('addobject bagpak') while uo.Targeting() wait(100) wend end sub
sub close() var f f.close() end sub
;******************************************** Ходилка (не моя)********************************************* Sub GetNumb(C,I) var J,T,K J=0 K=1 While K>0 J=J+1 If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then If I==0 Then T=Val(Left(C,J)) Else T=GetNumb(Right(C,Len(C)-J-1),I-1) EndIf K=0 EndIf wend UO.Print(T) return T endsub
Sub gotoxy(x,y,prec) var ld=0,ldc=0 var dx,dy var mx,my var ox,oy,mk,k
start: mx=UO.GetX() my=UO.GetY() dx=mx-x if dx<0 then dx=0-dx endif dy=my-y if dy<0 then dy=0-dy endif if dy>dx then dx=dy end if if dx<=prec then return end if if not ldc then ;uo.print(STR(dx)) end if if dx<3 then mk=70 else mk=15 end if
ox=mx oy=my for k=1 to mk mx=UO.GetX() my=UO.GetY() if mx<>ox or my<>oy then goto sdidapl end if wait(10) next sdidapl:
mx=UO.GetX() my=UO.GetY() dx=mx-x if dx<0 then dx=0-dx endif dy=my-y if dy<0 then dy=0-dy endif if dy>dx then dx=dy end if
if dx<=prec then return end if if ld==dx then ldc=ldc+1 if ldc>100 then uo.print("Can not reach location!") Stoplocation = 1 return end if else ld=dx end if
if mx==x then if my==y then return endif if my>y then
UO.Press(33) goto start endif
UO.Press(35) goto start end if if mx<x then if my>y then
UO.Press(39) goto start endif if my==y then
UO.Press(34) goto start endif
UO.Press(40) goto start end if if my<y then UO.Press(37) goto start endif if my==y then
UO.Press(36) goto start endif UO.Press(38) goto start end sub
|