Buy reagents / Покупка реагентов

Only tested and approved scripts

Moderators: Murderator+, Murderator

Post Reply
Yoko
Site Admin
Posts: 1964
Joined: 2004-04-03 16:49:38
Contact:

Buy reagents / Покупка реагентов

Post by Yoko »

Discussion:______________
http://yoko.netroof.net/forum/viewtopic.php?t=3532
Author or poster:_________
Dungeon [*HiCk*] dungeon_@mail.ru
Tested on:_______________
Nova (http://nova-uo.com)
Must work:_______________
RunUO
Customization required:____
YES да (Set for place под место)
Description:______________
Полностью автономная скупка реагентов. Летает по рунам к каждой руне привязан список вендоров у которых покупать реагенты. Также есть возможность отменять скупку по некоторым рунам не стирая их из кода (На нове цены в городах контролят фракции это ударяет по корману.)
В коментах в скрипте настройка описана подробно
Yoko comment:___________
Please no questions to Yoko, use link above or author e-mail in problem cases
________________________

Code: Select all


##################################################### 
#                         NOVA                      #
#               Dungeon [*HiCk*] © 2005             #
#                 (http://nova-uo.com)              #
#####################################################


################################### 
# Использована Саваджевская ходилка 
################################### 
# Список регов составляется во вкладке Buy/Sell страницы Main инжекта 
# и обзывается непотребным словом "test" 
# также для скупки рекол роегов юзаем списки покупки "bp", "mr", "bm"
# В скрипте можно уберать руны из прохода т.к. на Нове цены в города зависят от фракций
# Есть выкладывалка в банк регов и автоматическая докупалка их у вендоров.
# К каждой руне моэжет быть привязано сколько угодно вендоров.
# Хз что вам еще может понадобится )
# Думаю что соображающий пользователь вполне разберется с настройкой.
# Сделано на основе какого-то макроса с форума Yako
# Закидываем в себя чек на кучу денег и вперед по магазинам ) за ноч скупается немеренно регов )
# Version 1.0 RC0

sub main() 	
	var maxRune = 12; # Размерность масива rune
	var maxVendors = 12; # Размерность масива vendors
	var maxRegs = 1; # Кол-ва покупаемых регов
	var res;
	DIM rune[12] 	
	DIM ven[12] 
	DIM RegsToBuy[1] #Типы регов которые вы покупаете для выкладывания в банк
	var useAll = true; # Если не надо отменять никакие руны поставте true
	var maxNoBuy = 2; # Размерность масива NoBuy
	DIM NoBuy[10] #Масив для пометки рун по которым ненужно реколится	
	var i, n, j, m, recallNext, h, amoun 	
	var runeBank = '0x4013D73A';
	rune[1]='0x4013D69B' 	
	rune[2]='0x4013D677'
	rune[3]='0x4013D53E'
	rune[4]='0x4013D5A3'
	rune[5]='0x4013D6C7'
	rune[6]='0x4013D56D'
	rune[7]='0x4013D63D'
	rune[8]='0x4013D616'
	rune[9]='0x4013D70F'
	rune[10]='0x4013D591'
	rune[11]='0x4013D6EE'
	rune[12]='0x4015C288'
	ven[1]='0x00002D37,0x00002D38' #Britain
	ven[2]='0x00002081,0x00002082' #Britain
	ven[3]='0x00002D14,0x00002D11' #Britain
	ven[4]='0x000020A3,0x000020A4' #Vesper
	ven[5]='0x0000209B,0x00002099' #Vesper
	ven[6]='0x00018979,0x0001897A' #Maginciya
	ven[7]='0x00002A54,0x00002A36' #Moonglow
	ven[8]='0x00002FD8,0x00002FE4' #Moonglow
	ven[9]='0x00002EA4,0x00002EC6' #Jelom
	ven[10]='0x0000C593' #Jelom
	ven[11]='0x00002DF0,0x00002DFE' #Skara bra
	ven[12]='0x00002E39,0x00002E38' #Skara bra
	NoBuy[1] = 6;
	NoBuy[2] = 7;
	RegsToBuy[1] = '0x0F88'
	
	repeat 		
		for i=1 to maxRune 
			recallNext = true;
			if useAll == false then
				for m = 1 to maxNoBuy
					if i == NoBuy[m] then
						recallNext = false;	
					endif
				next
			endif
			if recallNext == true then
				if UO.Weight>300 then	
					recall(-1,runeBank)					
					UO.Say("bank guards")					
					wait(600);
					for h=1 to maxRegs
						uo.findtype(RegsToBuy[h],-1,"Bpack")
						amoun = uo.GetQuantity("finditem")-30						
						if amoun > 0 then
							uo.moveitem("finditem",amoun,"lastcontainer")
						endif
						wait(600)
					next
				endif
				recall(i,rune) 
				for j=1 to GetAmountVendors( ven[i] )
					uo.Print(STR(GetVendor( ven[i], j )))
					WalkN(0,0,GetVendor( ven[i], j )) 
					UO.buy('test','vendor') 
					wait(500) 
					UO.Say( uo.GetName(GetVendor( ven[i], j )) + " buy") 
					UO.DeleteJournal() 				
					if UO.BM<30 || UO.BP<30 || UO.MR<30 then
						BuyRegs( uo.GetName(GetVendor( ven[i], j )) )
					end if	
				next
				UO.Click(rune[i]) 
				repeat 
					wait(500) 
				until UO.InJournal('Recalls Remaining') 
				res = takenum() 
				if res < 10 then 
					Mark(i,rune) 
				endif 
				med()
			endif
		next 
		waitNext();
	until UO.Dead() 
end sub 

sub BuyRegs( VendorName )
	if UO.BM<30 then
		UO.buy('bm','vendor') 
		wait(500) 
		UO.Say( VendorName + " buy") 
		UO.DeleteJournal()
	end if 	
	if UO.BP<30 then
		UO.buy('bp','vendor') 
		wait(500) 
		UO.Say( VendorName + " buy") 	
		UO.DeleteJournal()
	end if 	
	if UO.MR<30 then
		UO.buy('mr','vendor') 
		wait(500) 
		UO.Say( VendorName + " buy") 
		UO.DeleteJournal()
	end if 
end sub

sub GetVendor( str, j )
	var	lstr, ven, venID, i
	if GetAmountVendors( str ) < j then
		j = GetAmountVendors( str );
	endif
	lstr = len( str )
	ven = 1;
	venID = ''	
	for i = 0 to lstr		
		if str[i]==',' then 			
			if ven == j then				
				return venID
			else
				venID = ''
				ven = ven + 1
			endif
		else
			venID = venID+str[i];		
		endif
	next
	return venID
end sub

sub waitNext()
	var i;
	for i = 0 to 80
		uo.Say("guards Bank")
		wait(4000)
	next
end sub

sub GetAmountVendors( str )
	var j, num, i
	j = len( str ) - 1 
	num=1;
	for i = 0 to j 		
		if str[i]==',' then 
			num=num+1 		
		endif 		
	next 	
	return num;
end sub
 
sub takenum() 
	var ns, j, i, n 
	var str, num 
	num='' 	
	n=uo.InJournal('Recalls Remaining')-1 
	str=uo.Journal(n) 
	UO.Print(str) 
	j = len( str ) - 1 
	for i = 0 to j 
		if str[i]<>' ' then 
			num=num+str[i] 
		else 
			return val(num) 
		endif 		
	next 
	return val(num) 
end sub 

sub Recall(i,rune) 
	var b 
	if i <> -1 then
		uo.print('Recoll Rune '+str(i)) 
	endif
	for b=1 to 10 
		if i == -1 then
			uo.deletejournal() 
			uo.waittargetobject(rune) 
			uo.cast('Recall',rune) 
			if WaitForRecall()==1 then 
				return 1 
			end if 
		else
			uo.deletejournal() 
			uo.waittargetobject(rune[i]) 
			uo.cast('Recall',rune[i]) 
			if WaitForRecall()==1 then 
				return 1 
			end if 
		end if 
	next 
	return 0 
end sub 

sub Mark(i,rune) 
	uo.waittargetobject(rune[i]) 
	uo.cast('Mark',rune[i]) 
end sub 

sub WaitForRecall() 
	var Text1="cliloc# 0xAB68" 
	var mess='',lastX=uo.getX(),lastY=uo.getY() 
	for var v=0 to 200 
		mess=uo.journal(0) 
		if uo.Journal(0)==Text1 then 
			return 0 
		end if 
		if uo.getX()<>lastX OR uo.getY()<>LastY then 
			return 1 
		end if 
		wait(50) 
	next 
	return 0 
end sub 

sub med() 
	VAR LastTimer 
	while UO.Mana<UO.Int 
		LastTimer=UO.Timer() 
		UO.UseSkill('Meditation') 
		repeat 
			wait(100) 
		until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200 
		UO.DeleteJournal() 
		wait(200) 
	wend 
end sub 


############################## 
# WalkN(X,Y,Serial) - char is walking by dX and dY step 
# sub using Home, End, PgUp, PgDown keys 
# d'not rebind this key from default action! 
# serial - Serial of target or "" - string 
# walkwait - delay after keypress 
# Example: 
# WalkN(2080,2113,'') - go to coordinates 
# WalkN(0,0,'0x12345678') - go to target position 
#-------------------------------------------------------------- 
sub WalkN(x,y,Target) 
	VAR i,StepSucess 
	VAR dx,dy,Exit=0 
	While Exit<>1 
		If Target<>"" Then 
			dx=UO.GetX(Target)-UO.GetX() 
			dy=UO.GetY(Target)-UO.GetY() 
			If UO.GetDistance(Target)<2 Then 
				Exit=1 
			Endif 
		Else 
			dx=x-UO.GetX() 
			dy=y-UO.GetY() 
			If dx==0 AND dy==0 Then 
				Exit=1 
			Endif 
		Endif 
		if Target<>"" AND uo.GetDistance(Target)<=3 then			
			Exit=1 
		endif
		If dx<>0 AND dy<>0 Then 
			If dx>0 AND dy>0 Then 
				StepSucess=Go(3,40,300) ;SE - DownArrow 
				If StepSucess==-1 Then 
					StepSucess=Go(7,38,300) ;WN - UpArrow 
					StepSucess=Go(1,39,300) ;NE - RightArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(5,37,300) ;SW - LeftArrow 
					Endif 
				Endif 
			Endif 
			If dx>0 AND dy<0 Then 
				StepSucess=Go(1,39,300) ;NE - RightArrow 
				If StepSucess==-1 Then 
					StepSucess=Go(5,37,300) ;SW - LeftArrow 
					StepSucess=Go(3,40,300) ;SE - DownArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(7,38,300) ;WN - UpArrow 
					Endif 
				Endif 
			Endif 
			If dx<0 AND dy>0 Then 
				StepSucess=Go(5,37,300) ;SW - LeftArrow 
				If StepSucess==-1 Then 
					StepSucess=Go(1,39,300) ;NE - RightArrow 
					StepSucess=Go(7,38,300) ;WN - UpArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(3,40,300) ;SE - DownArrow 
					Endif 
				Endif 
			Endif 
			If dx<0 AND dy<0 Then 
				StepSucess=Go(7,38,300) ;WN - UpArrow 
				If StepSucess==-1 Then 
					StepSucess=Go(3,40,300) ;SE - DownArrow 
					StepSucess=Go(5,37,300) ;SW - LeftArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(1,39,300) ;NE - RightArrow 
					Endif 
				Endif 
			Endif 
		Endif 
		If dx<>0 AND dy==0 Then 
			If dx>0 Then 
				StepSucess=Go(2,34,300) ;E - PgDown 
				If StepSucess==-1 Then 
					StepSucess=Go(3,40,300) ;SE - DownArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(1,39,300) ;NE - RightArrow 
					Endif 
					StepSucess=Go(2,34,300) ;E - PgDown 
				Endif 
			Endif 
			If dx<0 Then 
				StepSucess=Go(6,36,300) ;W - Home 
				If StepSucess==-1 Then 
					StepSucess=Go(7,38,300) ;WN - UpArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(5,37,300) ;SW - LeftArrow 
					Endif 
					StepSucess=Go(6,36,300) ;W - Home 
				Endif 
			Endif 
		Endif 
		If dx==0 AND dy<>0 Then 
			If dy>0 Then 
				StepSucess=Go(4,35,300) ;S - End 
				If StepSucess==-1 Then 
					StepSucess=Go(3,40,300) ;SE - DownArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(5,37,300) ;SW - LeftArrow 
					Endif 
					StepSucess=Go(4,35,300) ;S - End 
				Endif 
			Endif 
			If dy<0 Then 
				StepSucess=Go(0,33,300) ;N - PgUp 
				If StepSucess==-1 Then 
					StepSucess=Go(1,39,300) ;NE - RightArrow 
					If StepSucess==-1 Then 
						StepSucess=Go(7,38,300) ;WN - UpArrow 
					Endif 
					StepSucess=Go(0,33,300) ;N - PgUp 
				Endif 
			Endif 
		Endif 
	Wend 
end sub

sub Go(dir,key,walkwait) 
	VAR x,y, OldDir 
	x=UO.GetX() 
	y=UO.GetY() 
	OldDir=UO.GetDir() 
	If UO.GetDir()<>dir Then 
		UO.Press(key) 
		wait(walkwait) 
		If UO.GetDir()<>dir Then 
			CheckLag() 
		Endif 
	Endif 
	UO.Press(key) 
	wait(walkwait) 
	If x==UO.GetX() AND y==UO.GetY() Then 
		CheckLag() 
	Endif 
	If x==UO.GetX() AND y==UO.GetY() AND OldDir<>UO.GetDir() Then 
		UO.Press(key) 
		wait(walkwait) 
	Endif 
	If x==UO.GetX() AND y==UO.GetY() Then 
		CheckLag() 
	Endif 
	If x==UO.GetX() AND y==UO.GetY() Then 
		UO.Print("Zasada!") 
		return -1 
	Else 
		return 1 
	Endif 
end sub 

sub CheckLag() 
	UO.DeleteJournal() 
	UO.Click('backpack') 
	repeat 
		wait(500) 
	until UO.InJournal('cliloc# 0x9ED5') 
end sub


Post Reply