Page 1 of 1

Мининг...Помогите изменить(хитрый макрос)

Posted: 2009-03-13 22:28:24
by felkon
помогите разобраться и дополнить его....
Честно скажу нашел где то здесь но вот работать его по нормальному как мне нужно не могу заставить....

Как то не понятно он берет координаты из файла когда копает... берет все время первую координату. Жалко просто выкидывать его из-за этого. мне очень он нпонравился ходит и к шахте и обратно беда с капанием .

Обращаюсь за помощью к Вам людям знающим и разбирающимся

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