Доработка Скрипта на мининг

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Hot Ride
Posts: 11
Joined: 2006-02-24 19:33:14

Доработка Скрипта на мининг

Post by Hot Ride »

Code: Select all

###############################################################
#===---====----===---===---= Mining =---=-=-=-=-=--=-=-=-=-=-=#
#    Single char mining for VIP Mine. DRW Shard www.drw.ru    #
#           Scripted by Savage (c) 2005 ICQ:33336141          #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# To start script use ",exec mine" command from client window #
###############################################################

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
;==================== Main mining script ======================
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
sub mine()
	VAR i,j,TileY,TileX,DirX,DirY
	VAR Delta,BeginX,EndX,BeginY,EndY
    VAR DigDistance, TileNum, KillElemental
	VAR ElemSignal, LastTimer
	DIM BaseX[2], BaseY[2]
	VAR BaseZ, WayPoint, WayPoints
	VAR MaxWeight

	 

	

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; TileNum='Num' - Use ",infotile" command on the floor
; ????? ????? ? ??????? ????? ?????? ,????????? ????????
; ",infotile" ?? ?????? ?????? ? ?????????? ?? ?????????? ?? ??
; ??????.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	TileNum='1339'
	

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ???????????? ???, ??????? ????? ??????? ???. ??????? ??? 
; ??????? ?????? ?????????. ?? ???? ???? ??? ????????? 760, ??
; ?????? 730.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	MaxWeight=250

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; DigDistance=4 - Distance from tile where pickaxe targeting
; ?????? ????? ?? ???????? ????? ?????? ???, ?? ???? ??????????
; ?? ?????? ???? ????? ?????????? ??????.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	DigDistance=4

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; KillElemental='Yes'/'No' - Use 'Yes' if char skilled to morph
;                            in daemon and wrestling > 50
; ???? ??? ?????????? ???????? ???? ???? ??????, ??????? 'Yes'
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	KillElemental='No'

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ElemSignal='Off'/'On' - Play sound when elemental is digged
; ????????? ??? ????????? ?????
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	ElemSignal='Off'


;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ????? ????????? ?????????? ????? ???????. ????? ?????? ?? 
; ??????? ? ?????????? ?????????? ? ???????. ?? ? ?????
; ?????????? ?????? ????. ???? ??????? ?? 4 ?????? ?? ????.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

	BaseX[0]=771
	BaseY[0]=1683
	BaseZ=0

	BaseX[1]=779
	BaseY[1]=1683

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ????????? ?????????? ????? ???????
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

	WayPoints=2


	CheckLag()
	UO.UseObject('Sunduk')
	LastTimer=UO.Timer()
	Repeat
		wait(500)
	Until UO.InJournal('You can') OR UO.InJournal('What is the') OR UO.Timer()>LastTimer+100
	
	If UO.InJournal('see the') Then
		UO.Say("Podoydi k sunduku i tkni v nego pricelom!")
		UO.AddObject('Sunduk')
		While UO.Targeting()==2
			wait(500)
		Wend
		UO.SaveConfig()
		UO.UseObject('Sunduk')
	Else
;		UO.Say("Ok! Viju sunduk.")
	Endif


	CheckLag()
	UO.UseObject('IronBag')
	LastTimer=UO.Timer()
	Repeat
		wait(500)
	Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
	
	If UO.InJournal('see the') Then
		UO.Say("V kakoy meshok kidat' Iron Ore")
		UO.AddObject('IronBag')
		While UO.Targeting()==2
			wait(500)
		Wend
		UO.SaveConfig()
	Else
;		UO.Say("Meshok dlya Iron Ore viju")
	Endif


	CheckLag()
	UO.UseObject('OtherBag')
	LastTimer=UO.Timer()
	Repeat
		wait(500)
	Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
	
	If UO.InJournal('see the') Then
		UO.Say("V kakoy meshok kidat' rudu?")
		UO.AddObject('OtherBag')
		While UO.Targeting()==2
			wait(500)
		Wend
		UO.SaveConfig()
	Else
;		UO.Say("Meshok dlya rudy viju.")
	Endif


	CheckLag()
	UO.UseObject('BestBag')
	LastTimer=UO.Timer()
	Repeat
		wait(500)
	Until UO.InJournal('You can') OR UO.InJournal('What is the')OR UO.Timer()>LastTimer+100
	
	If UO.InJournal('see the') Then
		UO.Say("V kakoy meshok kidat' vihu?")
		UO.AddObject('BestBag')
		While UO.Targeting()==2
			wait(500)
		Wend
		UO.SaveConfig()
	Else
;		UO.Say("Meshok dlya vihi viju.")
	Endif

	While NOT UO.Dead()
	
		For WayPoint=0 to WayPoints-1
			walkn(BaseX[WayPoint],BaseY[WayPoint],"")
			digitstay(MaxWeight,DigDistance,KillElemental,ElemSignal,BaseX[WayPoint],BaseY[WayPoint])
		Next
	wend
end sub


; ???????? ???????? ????. ??????????????? ?? ??? ????? ??????.
sub CheckOre()
	VAR Cont=1, i=0, Exit=0
	VAR Count=7	; ??????? ????????? ? ???????.
	DIM Ores[15]	

	Ores[0]="Iron"
	Ores[1]="Rusty"
	Ores[2]="Old Copper"
	Ores[3]="Dull Copper"
	Ores[4]="Copper"
	Ores[5]="Bronze"
	Ores[6]="Silver"
;	Ores[7]="Shadow"
;	Ores[8]="Rose"
;	Ores[9]="Gold"
;	Ores[10]="Agapite"
;	Ores[11]="Blood Rock"
;	Ores[12]="Verite"
;	Ores[13]="Valorite"
;	Ores[14]="Mytheril"

	While i<Count AND Exit==0
		If UO.InJournal(Ores[i]) Then
			Cont=0
			Exit=1
		Endif
;		UO.Print(STR(i))
;		UO.Print(Ores[i])
		i=i+1
	Wend
	
	return Cont
	wait(2000)
	port(2,book1)
	wait(3400)
end sub

sub port(n,book) 
var oldX=UO.GetX() 
var oldY=UO.GetY() 
var time 
   NoTarget() 
   UO.UseObject(book) 
   FastLootCheck() 
   CheckLag() 
   UO.LClick(135, n*15+55) 
   time=UO.Timer() 
   Repeat 
     wait(500) 
   Until oldX<>UO.GetX() OR oldY<>UO.GetY() OR time+200<UO.Timer() 
end sub



;-------------------- Try to mine under self ------------------
sub digitstay(MaxWeight,MaxDistance,KillElemental,ElemSignal,BaseX,BaseY)
	VAR x,y,z='0',TileNum='1339'
	VAR Last=0,LastTimer, ContFlag=1
	VAR MaxTimer=110
	

    na4alo:
	For x=-MaxDistance to MaxDistance
		For y=-MaxDistance to MaxDistance
			Repeat
				CheckLag() ; deleting journal
				ToHide()
				
				UO.WaitTargetTile(TileNum,STR(UO.GetX()+x),STR(UO.GetY()+Y),z)
				UO.UseType('0x0E85')

				LastTimer=UO.Timer()

				Repeat
					wait(500)
				until UO.InJournal("Try mining") OR UO.InJournal("You put") OR UO.InJournal("You loosen") OR UO.InJournal("There is no") OR UO.InJournal("That is too") OR UO.InJournal("OOPS") OR UO.InJournal("attacking you") OR LastTimer+200<UO.Timer()

				If NOT UO.InJournal('There is no') then
					ContFlag=CheckOre()
				Endif

				If UO.InJournal('You loosen') then
					repeat
						wait(500)
					until UO.InJournal("You put") OR LastTimer+MaxTimer<UO.Timer()
				Endif

				If UO.InJournal('something with ore') OR UO.InJournal("attacking you") then
					If ElemSignal=='On' Then
						Gong(2)
					Endif

					If KillElemental=='Yes' Then
						KillElem()
						walkn(BaseX,BaseY,"")
					Else
; any user defined command when char digget elemental

					Endif
				Endif
				
				If UO.InJournal("attacking you") then
					gong(3)
				Endif

				If UO.Weight>=MaxWeight then
                                        wait(1000)
                                    	unloadore()
                                       wait(3000) 
                                      
				Endif
			Until UO.InJournal("There is no") OR UO.InJournal("That is too") OR UO.InJournal("Try mining") OR ContFlag==0
		Next
	Next
end sub





;------------------------- Unload ore -------------------------
sub unloadore()
	VAR TempX,TempY,i,Exit, Exit1, ConTainer, j
	VAR SundukX=5134
	VAR SundukY=1151
	VAR Index=14 ; ?????????? ????????? ???????
	DIM Ore[5], Colors[20]

	Colors[0]="0x09F0" ; Gorgan
	Colors[1]="0x09D3" ; Steel
	Colors[3]="0x0BA7" ; Eldar
	Colors[4]="0x08AF" ; Plut
	Colors[5]="0x0085" ; Dragon
	Colors[6]="0x0060" ; Aqua
	Colors[7]="0x09E6" ; Elvin
	Colors[8]="0x010F" ; Krinit
	Colors[9]="0x09DA" ; Vulkan
	Colors[10]="0x09EC" ; Blood Crest
	Colors[11]="0x008F" ; Sand Rock
	Colors[12]="0x09B9" ; Acid
	Colors[13]="0x09A4" ; Crystaline


	TempX=UO.GetX()
	TempY=UO.GetY()
	
	walkn(SundukX,SundukY,"")
	ToHide()
	UO.UseObject("Sunduk")

	Ore[0]=0x19B9 ; 4 and more ore
	Ore[1]=0x19B7 ; 1 ore
	Ore[2]=0x19BA ; 2 ore
	Ore[3]=0x19B8 ; 3 ore

	For i=0 to 3
		Exit=0
		repeat
			UO.FindType(Ore[i])
			
			if UO.GetQuantity('finditem')>0 then
				If UO.GetColor('finditem')=='0x0000' Then
					Container=UO.GetSerial('IronBag')
				Else
					Container=UO.GetSerial('OtherBag')
					Exit1=0
					j=0
					While j<Index AND Exit1<>1
						If UO.GetColor('finditem')==Colors[j] Then
							Container=UO.GetSerial('BestBag')
							Exit1=1
						Endif
						j=j+1
					Wend
				Endif
				UO.MoveItem('finditem',0,Container)
				CheckLag()
				wait(1000)
			Else
				Exit=1
			endif
		until Exit==1
	Next

	walkn(TempX,TempY,"")
	ToHide()
end sub

;----------- Morf in Daemon, kill elem and loot him -----------
sub killelem()
	VAR Count, LastTimer, Elem
	

	UO.UseType('0x0F0E','0x0631') ; inviz potion
	While UO.STR<201 ; U'r not morfed char max Strength + 1
		If UO.Mana>=50 then
			UO.WaitMenu('What','Daemon')
			UO.Cast('Polymorph')
			wait(8000)
		else
			UO.UseType('0x0F0E','0x09DF') ; total mana potion
			wait(3000)
		endif
	Wend
	
	LastTimer=UO.Timer()

	repeat
		UO.BandageSelf()
		wait(4000)
	until UO.Life==UO.STR OR LastTimer+300<UO.Timer()

	UO.UseType(0x1B77) ; heater shield
	UO.UseType(0x1413) ; platemail gorget
	
	UO.DeleteJournal()
	UO.Exec('warmode 1')

	UO.FindType('0x0010',-1,'ground')
	Elem=UO.GetSerial('finditem')

	UO.Attack(Elem)
	
	repeat
		wait(1000)
		If UO.Life<50 Then
			UO.UseType('0x0F0E','0x09BB') ;GH
		Endif

		If UO.GetDistance(Elem)>1 Then
			walkn(0,0,Elem)
		Endif

	until UO.IsNPC(Elem)==0
	wait(3000)


	UO.WaitTargetGround('0x19B9') ; 4 and more ore
	wait(1500)
	UO.Grab('all')
	UO.WaitTargetGround('0x19B8') ; 3 ore
	wait(1500)
	UO.Grab('all')
	UO.WaitTargetGround('0x0EED') ; gold coins
	wait(500)
	UO.Grab('all')


	UO.FindType('0x0010',-1,'ground')
	If UO.GetQuantity('finditem')>0 Then
		KillElem()
	Endif

	UO.Exec('warmode 0')
	wait(1000)

	UO.Print("Sdoh skotina!")

	LastTimer=UO.Timer()
	if UO.Life<200 then ; U'r max HP
		repeat
			UO.BandageSelf()
			wait(4000)
		until UO.Life>200 OR LastTimer+300<UO.Timer()
	endif
	UO.DeleteJournal()

end sub


###############################################################
###############################################################
;
;                        Shared Subs
;
###############################################################
###############################################################

#==============================================================
#  tohide() - try hidding char. When char lose HP, drink inviz
#             potion if it found in backpack
#
#  Journal has been deleted!!!
#--------------------------------------------------------------
sub tohide()
	while NOT UO.Hidden()
		UO.DeleteJournal()
		UO.FindType('0x0F0E','0x0631','my')

		if UO.Life<UO.STR/2 AND UO.GetQuantity('finditem')>0 then
			UO.UseType('0x0F0E','0x0631') ; inviz potion
			UO.Exec('warmode 0')
			wait(2000)
		else
			UO.Exec('warmode 0')
			UO.UseSkill('Stealth')
			repeat
				wait(50)
			until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied')
		endif
	wend
end sub


#==============================================================
#  CheckLag() - click on backpack and awaiting "backpack"
#               message in journal.
#
#  Journal has been deleted!!!
#--------------------------------------------------------------
sub CheckLag()
	UO.DeleteJournal()
	UO.Click('backpack')

	repeat
		wait(500)
	until UO.InJournal('backpack')
end sub


#==============================================================
#  Gong(counter) - playing wav-file 'counter'-times
#  http://www.jetta.ru/cow.wav
#--------------------------------------------------------------
sub Gong(times) ; play wav-file
	VAR i
	for i=1 to times
		UO.Exec("playwav d:\uo\cow")
		wait(1200) ; time to play sample at once
	next
end sub


#==============================================================
#  Alarm() - when char lose some HP, U are informed :)
#--------------------------------------------------------------
sub Alarm()
	VAR CharHP=200
	while 1==1
		wait(1000)
		if UO.Life<CharHP then
			gong(1)
		endif		
	wend
end sub

;---------------- ??????? -----------------------
sub GoW()
	VAR walkwait=300
	VAR x,y,dir=6
	VAR key=36 ; Home key
	x=UO.GetX()
	y=UO.GetY()
	while UO.GetDir()<>dir
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	wend
	UO.Press(key)

	wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
	
	If UO.GetX()+1==x Then
		return -1
	Else
		return 1
	Endif
end sub


sub GoN()
	VAR walkwait=300
	VAR x,y,dir=0
	VAR key=33 ; PgUp
	x=UO.GetX()
	y=UO.GetY()
	while UO.GetDir()<>dir
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	wend
	UO.Press(key)

	wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
	
	If UO.GetY()+1==y Then
		return -1
	Else
		return 1
	Endif
end sub


sub GoE()
	VAR walkwait=300
	VAR x,y,dir=2
	VAR key=34 ; PgDown
	x=UO.GetX()
	y=UO.GetY()
	while UO.GetDir()<>dir
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	wend
	UO.Press(key)

	wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
	
	If UO.GetX()-1==x Then
		return -1
	Else
		return 1
	Endif
end sub


sub GoS()
	VAR walkwait=300
	VAR x,y,dir=4
	VAR key=35 ; End
	x=UO.GetX()
	y=UO.GetY()
	while UO.GetDir()<>dir
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	wend
	UO.Press(key)

	wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
	
	If UO.GetY()-1==y Then
		return -1
	Else
		return 1
	Endif
end sub


sub GoWN()
	VAR walkwait=300
	VAR x,y,dir=7
	VAR key=38 ; UpArrow
	x=UO.GetX()
	y=UO.GetY()

	If UO.GetDir()<>dir Then
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	Endif

	If UO.GetDir()==dir Then
		UO.Press(key)
		wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
		If UO.GetDir()==dir Then
			return -1
		Else
			return UO.GetDir()
		Endif
	Else
		return UO.GetDir()
	Endif
end sub


sub GoNE()
	VAR walkwait=300
	VAR x,y,dir=1
	VAR key=39 ; RightArrow
	x=UO.GetX()
	y=UO.GetY()

	If UO.GetDir()<>dir Then
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	Endif

	If UO.GetDir()==dir Then
		UO.Press(key)
		wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
		If UO.GetDir()==dir Then
			return -1
		Else
			return UO.GetDir()
		Endif
	Else
		return UO.GetDir()
	Endif
end sub


sub GoSE()
	VAR walkwait=300
	VAR x,y,dir=3
	VAR key=40 ; DownArrow
	x=UO.GetX()
	y=UO.GetY()

	If UO.GetDir()<>dir Then
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	Endif

	If UO.GetDir()==dir Then
		UO.Press(key)
		wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
		If UO.GetDir()==dir Then
			return -1
		Else
			return UO.GetDir()
		Endif
	Else
		return UO.GetDir()
	Endif
end sub


sub GoSW()
	VAR walkwait=300
	VAR x,y,dir=5
	VAR key=37 ; LeftArrow
	x=UO.GetX()
	y=UO.GetY()

	If UO.GetDir()<>dir Then
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir Then
			CheckLag()
		Endif
	Endif

	If UO.GetDir()==dir Then
		UO.Press(key)
		wait(walkwait)
		If x==UO.GetX() AND y==UO.GetY() Then
			CheckLag()
		Endif
		If UO.GetDir()==dir Then
			return -1
		Else
			return UO.GetDir()
		Endif
	Else
		return UO.GetDir()
	Endif
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!
#     walkwait - delay after keypress
#--------------------------------------------------------------
sub WalkN(x,y,Target)
	VAR i
	VAR dx,dy,Exit=0
	
	While Exit<>1	
		If Target<>"" Then
			dx=UO.GetX(Target)-UO.GetX()
			dy=UO.GetY(Target)-UO.GetY()
;			UO.Print("Target locked!")
			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 dx<>0 AND dy<>0 Then
			If dx>0 AND dy>0 Then
				GoSE()
			Endif

			If dx>0 AND dy<0 Then
				GoNE()
			Endif

			If dx<0 AND dy>0 Then
				GoSW()
			Endif

			If dx<0 AND dy<0 Then
				GoWN()
			Endif

		Endif
	
		If dx<>0 AND dy==0 Then
			If dx>0 Then
				GoE()
			Endif
			
			If dx<0 Then
				GoW()
			Endif
		Endif


		If dx==0 AND dy<>0 Then
			If dy>0 Then
				GoS()
			Endif
			
			If dy<0 Then
				GoN()
			Endif
		Endif
	Wend
end sub
Помогите пожайлусто! Чтоб чар прилетал \ улетал складывал \ прилетал... Сам пробовал , но нчиего не получается... :(
Post Reply