Честно скажу нашел где то здесь но вот работать его по нормальному как мне нужно не могу заставить....
Как то не понятно он берет координаты из файла когда копает... берет все время первую координату. Жалко просто выкидывать его из-за этого. мне очень он нпонравился ходит и к шахте и обратно беда с капанием .
Обращаюсь за помощью к Вам людям знающим и разбирающимся
Code: Select all
;***********************************************************************************
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