Page 1 of 1

Чисто под RUNUO(шард Нова), мининг от домика до шахты

Posted: 2006-12-28 14:39:48
by Chico
Скриптик на руду от домика до шахты скидывание руды, и добор кирок, для работы необходимо с помошью процедурки Metka_kochek() замарчить тайлы в шахте, ею же можно замарчить и дорогу от шахты и обратно, сделал две дороги так как, при вырубке элема есть шанс что он останет где нибудь по второму макршуруту, у меня он проходил среди множества домов, и элемы отвлекались на чужих ботов :)
имена фалов с тайлами смотрите в теле скрипта, в заголовок не стал выносить

Code: Select all

;*********************************************************************************** 
var Ruda = '0x19b9'
var Kirka = '0x0E86'
var bagpak     
var Box         
var box_regi
Var FileName
Var MaxWeight 
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
var sc  = 0           ; счетчик тайлов
UO.Set( 'finddistance', '2' ) 

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:\_A\_Macr\dob\Mining_d\mn0.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 
var Jurn 

Dim Cli[4] 
Cli[0]="cliloc# 0xA867"  ;You can't mine... 
Cli[1]="cliloc# 0xAD00"  ;there no metal 
Cli[2]="cliloc# 0x6B31"  ;backpack full 
Cli[3]="cliloc# 0xA2DE"  ;is too far away 
Cli[4]="cliloc# 0xA866"  ;You can't mine... 


Beg:
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,1)                                  ;   --------------- Ходим по точкам из  файла c тайлами -----------
  uo.useskill("Hiding")                  ; прячемся
  wait(200)  

REPEAT
    uo.deletejournal()    
    UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) 
    UO.usetype(Kirka)    
    wait(1500)
    Jurn=UO.Journal(0) 
UNTIL  Jurn == Cli[0] or (UO.Weight >  400) or Jurn == Cli[1] or Jurn == Cli[2] or Jurn == Cli[3] or Jurn == Cli[4]  or uo.count(Kirka) == 0
If (UO.Weight > 400) 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, Jurn
	 var v = val(uo.getglobal('tek_run'))
	 var i
	  while not uo.dead()
	  Jurn=UO.Journal(0)
		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:\_A\_Macr\dob\Mining_d\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:\_A\_Macr\dob\Mining_d\go_min.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