DRW Vip mining

Anything and all.

Moderators: Murderator+, Murderator

Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

DRW Vip mining

Post by Savage »

Назначение скрипта: копание избранной руды в вип шахте, сортировка руды по трем мешкам, кил и лут элемов.
В сундуке должен быть ящик или другой контэйнер в котором располагаются Ваши вещи. А именно: три мешка для руды, инвизы, скролы вортекса и масс диспела и если требуется, еда. Если кормить чара не нужно то раздел ; Eda =====..... ; End eda =====.... удаляем.
Настройка: На малой випке три точки. назовем их базовыми или вэйпоинтами. Так вот надо в скрипте найти раздел:

Code: Select all

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; Здесь указываем координаты точек копания. Нужно встать на 
; позицию и посмотреть координаты в инжекте. Их и нужно 
; подставить вместо моих. Чара ставьте на 3 клетки от стен. 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	BaseX[0]=5135
	BaseY[0]=1084
	BaseZ=0 

	BaseX[1]=5142
	BaseY[1]=1084
 

	BaseX[2]=5149
	BaseY[2]=1084 
Чара ставим на три клетки от стен и другой точки копания. То есть по центру, три клетки сверху, на четвёртой чар - первая точка. По середине - вторая и три клетки снизу на четвёртой чар - третья.

Далее таким же образом правим на свой вкус остальные переменные чуть выше этогго раздела. Что касается веса то его надо поставить на 20-30 меньше максимального.

Затем подходим к сундуку и правим координаты точки разгрузки в этом разделе:
ВНИМАНИЕ!!! Координаты не сундука а чара перед сундуком.

Code: Select all

;------------------------- Unload ore -------------------------
sub unloadore()
	VAR TempX,TempY,i,Exit, Exit1, ConTainer, j
	VAR SundukX=5519
	VAR SundukY=1434
	VAR Index=14 ; количество элементов массива
Ниже находится массив цветов руд которые приравнены к высшей или самой интересной. Она перекладывается в собственный мешок. Его можно расширить но не забудьте тогда исправить переменную Index. В ней хранится количество элементов массива.

Далее смотрим раздел:

Code: Select all

; Проверка нужности руды. Закоментировать то что нужно копать.
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"

здесь проставляется руда которую продолжать копать после пробного копка. Строки начинающиеся с ; подлежат обязательному выкапыванию и должны распологаться после строк которые не закоментированы. Соответственно индекс массива должен быть с 0 и возрастать по порядку. То есть допустим нам надо копать еще и железо тогда нужно исправить так:

Code: Select all

; Проверка нужности руды. Закоментировать то что нужно копать.
sub CheckOre()
	VAR Cont=1, i=0, Exit=0
	VAR Count=6	; Сколько элементов в массиве.
	DIM Ores[15]	

	Ores[0]="Rusty"
	Ores[1]="Old Copper"
	Ores[2]="Dull Copper"
	Ores[3]="Copper"
	Ores[4]="Bronze"
	Ores[5]="Silver"
;	Ores[6]="Iron"
;	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"
обратите внимание что переменная Count тоже исправлена.

Если чар будет килять элемов то в пак ему кидайте регов: по 10 инвизок, вортексов и масс диспелов.

Чар юзает кирку которая лежит как угодно :D

Когда исправления закончены, запускаем скрипт ,exec mine чар попросит потыкать прицелом в сундук, Ваш ящик и мешки: для ирона, для другой руды, для вышки.

При повторном запуске скрипта лучше подальше от сундука стоять а то долго будет на старте тормозить.

Если мешки потерялись то во вкладке Objects удалите соответствующие объекты. При следующем старте скрипта чар попросит их добавить.

Ну вот вроде все расписал, а теперь сам скрипт:

Code: Select all

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

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
;==================== Main mining script ====================== 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
sub mine() 
   
	VAR DigDistance, TileNum, KillElemental, KillAnyElemental
	VAR ElemSignal, LastTimer 
	DIM BaseX[2], BaseY[2] 
	VAR BaseZ, WayPoint, WayPoints 
	VAR MaxWeight 

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; Максимальный вес, который может поднять чар. Ставьте его 
; немного меньше реального. То есть если чар поднимает 760, то 
; ставим 730. 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	MaxWeight=700

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; DigDistance=4 - Distance from tile where pickaxe targeting 
; Радиус круга по которому будет копать чар, то есть расстояние 
; до клетки куда можно дотянуться киркой. 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	DigDistance=3

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; KillElemental='Yes'/'No' - Use 'Yes' if char skilled to morph 
;                            in daemon and wrestling > 50 
; Если чар достаточно прокачен чтоб бить элемов, ставьте 'Yes' 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	KillElemental='Yes' 


;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; KillAnyElemental='Yes'/'No' - Use 'Yes' if you need another 
;                               player elem
; Ставьте 'Yes' если хотите бить чужих элемов
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	KillAnyElemental='Yes'
   
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; ElemSignal='Off'/'On' - Play sound when elemental is digged 
; Оповешать при появлении элема 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	ElemSignal='Off' 

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; Здесь указываем координаты точек копания. Нужно встать на 
; позицию и посмотреть координаты в инжекте. Их и нужно 
; подставить вместо моих. Чара ставьте на 4 клетки от стен. 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	BaseX[0]=5135
	BaseY[0]=1084
	BaseZ=0 

	BaseX[1]=5142
	BaseY[1]=1084


	BaseX[2]=5149
	BaseY[2]=1084 

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
; Указываем количество точек копания 
;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
	WayPoints=3 

	CheckLag() 
	UO.UseObject('Sunduk') 
	LastTimer=UO.Timer() 
	Repeat 
		wait(500) 
	Until UO.InJournal('You can|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') 
	Endif 

	CheckLag() 
	UO.UseObject('MyBox') 
	LastTimer=UO.Timer() 
	Repeat 
		wait(500) 
	Until UO.InJournal('You can|What is the') OR UO.Timer()>LastTimer+100 

	If UO.InJournal('see the') Then 
		UO.Say("Pokaji yashik!") 
		UO.AddObject('MyBox') 
		While UO.Targeting()==2 
			wait(500) 
		Wend 
		UO.SaveConfig() 
		UO.UseObject('MyBox') 
	Endif 

	CheckLag() 
	UO.UseObject('IronBag') 
	LastTimer=UO.Timer() 
	Repeat 
		wait(500) 
	Until UO.InJournal('You can|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() 
	Endif 

	CheckLag() 
	UO.UseObject('OtherBag') 
	LastTimer=UO.Timer() 
	Repeat 
		wait(500) 
	Until UO.InJournal('You can|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() 
	Endif 

	CheckLag() 
	UO.UseObject('BestBag') 
	LastTimer=UO.Timer() 
	Repeat 
		wait(500) 
	Until UO.InJournal('You can|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() 
	Endif 

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


; Проверка нужности руды. Закоментировать то что нужно копать. 
sub CheckOre() 
	VAR Cont=1, i=0, Exit=0 
	VAR Count=0   ; Сколько элементов в массиве. 
	DIM Ores[15]    

;   Ores[0]="Rusty" 
;   Ores[1]="Old Copper" 
;   Ores[2]="Dull Copper" 
;   Ores[3]="Copper" 
;   Ores[4]="Bronze" 
;   Ores[5]="Silver" 
;   Ores[6]="Iron" 
;   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 
		i=i+1 
	Wend 
	return Cont 
end sub 


;-------------------- Try to mine under self ------------------ 
sub digitstay(MaxWeight,MaxDistance,KillElemental,KillAnyElemental,ElemSignal,BaseX,BaseY) 
	VAR x,y,z='0',TileNum='1339' 
	VAR Last=0,LastTimer, ContFlag=1, Counter, PickAxeType
	VAR MaxTimer=110, MaxCount=10 ; количество попыток копания
   
	UO.FindType('0x0E86',-1,'my')
	If Uo.FindCount() Then
		PickAxetype='0x0E86'
	Else
		PickAxetype='0x0E85'
	Endif
   
	For x=-MaxDistance to MaxDistance 
		For y=-MaxDistance to MaxDistance 
			Counter=0
			Repeat 
				CheckLag() ; deleting journal 
				ToHide() 
              
				UO.WaitTargetTile(TileNum,STR(UO.GetX()+x),STR(UO.GetY()+Y),z) 
				UO.UseType(PickAxeType) 

				Repeat 
					wait(500) 
				until UO.InJournal("Try mining|You put|You loosen|There is no|That is too|OOPS|attacking you") 

				Counter=Counter+1

				If UO.InJournal('You put') then 
					ContFlag=CheckOre() 
				Endif 

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

					If KillElemental=='Yes' Then 
						KillElem() 
					Else 
; any user defined command when char digget elemental 
					Endif 

					If KillAnyElemental=='Yes' Then 
						UO.FindType('0x0010',-1,'ground')
						If UO.FindCount() Then
							KillElem() 
						Endif 
					Endif
				Endif
   
				If UO.Weight>=MaxWeight then 
					unloadore() 
				Endif 
			Until UO.InJournal("There is no|That is too|Try mining") OR ContFlag==0  OR Counter>MaxCount
		Next 
	Next 
end sub 


;------------------------- Unload ore ------------------------- 
sub unloadore() 
	VAR TempX,TempY,i,Exit, Exit1, ConTainer, j 
	VAR SundukX=5134
	VAR SundukY=1087 
	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") 
	UO.UseObject("MyBox") 

	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 

	UO.FindType('0x0EED',-1,'backpack')
	wait(500)
	If UO.FindCount() Then
		UO.MoveItem('finditem','all','MyBox')
		wait(500)
		CheckLag()
	Endif

	UO.FindType('0x0F0E','0x0000','backpack')
	wait(500)
	If UO.FindCount() Then
		UO.MoveItem('finditem','all','MyBox')
		wait(500)
		CheckLag()
	Endif

	LoadRes()

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


sub LoadRes()
	VAR EdaType='0x097B' ; Fish
	VAR WaitTime=300, InPack
	VAR Scrolls=10
	VAR Potions=10
	VAR VortInPack=0, MassInPack=0
   
;	goto Nejrat
; Eda ==================================================
	UO.FindType(EdaType,-1,'MyBox')
	wait(WaitTime)
	If UO.FindCount() Then
		UO.MoveItem('finditem',100,'backpack')
		wait(WaitTime)
		CheckLag()
	Endif

	CheckLag()
	Repeat
		UO.UseType(EdaType)
		wait(1000)
	Until UO.InJournal('You can')

	UO.FindType(EdaType,-1,'backpack')
	wait(WaitTime)
	If UO.FindCount() Then
		UO.MoveItem('finditem','all','MyBox')
		wait(WaitTime)
		CheckLag()
	Endif
; End Eda ==============================================

Nejrat:
; Inviz
	UO.FindType('0x0F0E','0x0631','backpack')
	wait(WaitTime)
	InPack=UO.GetQuantity('finditem')
	IF InPack<Potions Then
		UO.FindType('0x0F0E','0x0631','MyBox')
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Potions-InPack,'backpack')
		wait(WaitTime)
		Endif
	Endif

; Vortex
Vort:
	UO.IgnoreReset()
	UO.FindType('0x1F66',-1,'backpack')
	While UO.FindCount()
		VortInPack=VortInPack+UO.GetQuantity('finditem')
		wait(WaitTime)
		UO.Ignore('finditem')
		UO.FindType('0x1F66',-1,'backpack')
	Wend
   
	IF VortInPack<Scrolls Then
		UO.FindType('0x1F66',-1,'MyBox')
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Scrolls-VortInPack,'backpack')
			wait(WaitTime)
			Goto Vort
		Endif
	Endif

; Dispell
Dispell:
	UO.IgnoreReset()
	UO.FindType('0x1F62',-1,'backpack')
	While UO.FindCount()
		MassInPack=MassInPack+UO.GetQuantity('finditem')
		wait(WaitTime)
		UO.Ignore('finditem')
		UO.FindType('0x1F62',-1,'backpack')
	Wend
   
	IF MassInPack<Scrolls Then
		UO.FindType('0x1F62',-1,'MyBox')
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Scrolls-MassInPack,'backpack')
			wait(WaitTime)
			Goto Dispell
		Endif
	Endif
	UO.IgnoreReset()
end sub


;----------- Summon Energy Vortex, kill elem and loot him ----------- 
sub killelem() 
	VAR xx,yy,m
	DIM Ore[4] 
	Ore[0]='0x19B7' ; 1 ore 
	Ore[1]='0x19BA' ; 2 ore 
	Ore[2]='0x19B8' ; 3 ore 
	Ore[3]='0x19B9' ; 4 and more ore 
	VAR i, Exit,l 

	UO.Set('finddistance',10)

	UO.UseType('0x0f0e','0x0631') ;inviz
	wait(3000) 

;0x000D vortex

povtor: 
	UO.DeleteJournal() 

	m=UO.Mana
	UO.FindType('0x0010',-1,'ground')
	If UO.FindCount() Then
		UO.WaitTargetObject('finditem')
		UO.UseType('0x1f66')
		While UO.Mana>=m
			wait(300)
		Wend
		If UO.InJournal('spell fizzles') then 
			goto povtor 
		Endif 
		wait(1000)
	Endif
   
jdat:
	UO.FindType('0x0010',-1,'ground')
	wait(300)
	If UO.FindCount() Then
		UO.FindType('0x000D',-1,'ground')
		wait(300)
		If UO.FindCount() Then
			wait(1000)
			goto jdat
		Else
			goto povtor
		Endif
	Endif

dispel: 
	m=UO.Mana
	UO.DeleteJournal()
	UO.FindType('0x000D',-1,'ground')
	If UO.FindCount() Then
		UO.WaitTargetObject('finditem')
		UO.UseType('0x1F62')
		While UO.Mana>=m
			wait(300)
		Wend
		If UO.InJournal('fizzles') then 
			goto dispel
		Endif 
	Endif

	xx=UO.GetX() 
	yy=UO.Gety()

	For i=0 to 3 
		UO.FindType(Ore[i],-1,'ground') 
		If UO.FindCount() then 
			If UO.GetDistance('finditem')>3 Then
				Walkn(0,0,'finditem')
			Endif
			UO.Grab('all','finditem') 
			CheckLag() 
			UO.FindType('0x0EED',-1,'ground') 
			If UO.FindCount() Then
				UO.Grab('all','finditem')
			Endif
		Endif 
	Next 

	Walkn(xx,yy,'')
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(300) 
         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:\game\uo\injection\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=190 
   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 
Last edited by Savage on 2010-08-27 09:17:47, edited 4 times in total.
Yamakasi***
Posts: 40
Joined: 2004-11-02 19:42:43

Post by Yamakasi*** »

Уважаемый Savage скажите пожалуйста почему когда я запускаю скрипт у (меня всё написано правильно) он всё говорит, всё показывает, появляются таргеты , и у меня под конец последнего указания мешка появляется ошибка Line 160:runtime error
! и я так понял что все остальные мешки для руды и всего остального должны лежать в сундук правильно ?

P.S.: Заранее Спасибо.
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

рунтайм ошибка это если правил массивы с рудой при сортировке или при выкапывании и не поправил индексную переменную.
Yamakasi***
Posts: 40
Joined: 2004-11-02 19:42:43

Post by Yamakasi*** »

Хмм я токо поправил что бы он всю руду выкапывал и всё поставил значение 14. и чё за переменную надо менять ?
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

если всю руду копать то значение надо 0 ставить если всю не копать то 14
Yamakasi***
Posts: 40
Joined: 2004-11-02 19:42:43

Post by Yamakasi*** »

Savage у тя есть небольшой недочёт в скрипте он в радиусе 4-х клеток в маленькой вип шахте капать не может , т.к. он на 4-ую клетку не капает пишется типо Try mining in rock ! и повтор не идёт чар всё мучается капать на этом месте но не может и нет повтора хотя в скрипте вроде указано что он должен повторять !

И ещё на 160 линии стоит такая строка
walkn(BaseX[WayPoint],BaseY[WayPoint],"")
с такой строкой чар не идёт на место первой копки так как в скрипте указано WayPoints=2 с буквой 'S' а в строке буквы нету , я исправил букву в строке что бы строка выглядела так :
walkn(BaseX[WayPoints],BaseY[WayPoints],"")
и только после этого чар после записи всех ID идёт на место копки и капает !

P.S.: Надо Диг дистансе поставить 3 для маленькой випки так как он не повторяется ( как я уже сказал выше)
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Ошибки там нет переменная WayPoint изменяет свое значение в цикле.
Yamakasi***
Posts: 40
Joined: 2004-11-02 19:42:43

Post by Yamakasi*** »

Хмм а насчёт клетки это точно ! а переменную я я исправил как написал и он всю ночь нормально копал...
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Try mining исправил.
Yamakasi***
Posts: 40
Joined: 2004-11-02 19:42:43

Post by Yamakasi*** »

Спасибо теперь можно и на 4 клетки капать !!

токо вот как ты исправил =) выложи исправленный скрипт типо последняя версия ..
Не для меня у меня и так нормуль а для других которым понадобится.
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Исправил в самом первом посте, то есть в скрипте, который вверху.
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Вот так выглядит скрипт для малой випы...

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 DigDistance, TileNum, KillElemental
	VAR ElemSignal, LastTimer
	DIM BaseX[2], BaseY[2]
	VAR BaseZ, WayPoint, WayPoints
	VAR MaxWeight

	VAR i,j,TileY,TileX,DirX,DirY
	VAR Delta,BeginX,EndX,BeginY,EndY
	

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; TileNum='Num' - Use ",infotile" command on the floor
; Номер тайла в котором можно копать ,потыкайте командой
; ",infotile" по разнвм тайлам и посмотрите не отличаются ли их
; номера.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	TileNum='1339'
	

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Максимальный вес, который может поднять чар. Ставьте его 
; немного меньше реального. То есть если чар поднимает 760, то
; ставим 730.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	MaxWeight=750

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; 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='Yes'

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; ElemSignal='Off'/'On' - Play sound when elemental is digged
; Оповешать при появлении элема
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
	ElemSignal='Off'


;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Здесь указываем координаты точек копания. Нужно встать на 
; позицию и посмотреть координаты в инжекте. Их и нужно
; подставить вместо моих. Чара ставьте на 4 клетки от стен.
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

	BaseX[0]=5648
	BaseY[0]=1117
	BaseZ=0

	BaseX[1]=5656
	BaseY[1]=1117

;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
; Указываем количество точек копания
;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

	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
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

	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
					unloadore()
				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=5646
	VAR SundukY=1120
	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(0x1B76) ; 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:\game\uo\injection\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=150
	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

nik-kazancev
Posts: 101
Joined: 2004-05-25 14:32:55
Location: 74.ru
Contact:

Post by nik-kazancev »

Саваж, всё кул. Но после перехода ко 2-ой точке, почему то вылетает. А-ля клозе уо :)
"Наточил я свой топор, головешек полон двор" :)

http://foto.bincub.ru/players/N/nik.html
tAsOL
Posts: 3
Joined: 2005-01-29 22:29:41

Post by tAsOL »

nik-kazancev wrote:Саваж, всё кул. Но после перехода ко 2-ой точке, почему то вылетает. А-ля клозе уо :)
А у меня чар стоит на месте и кирку перекладывает из пака в руки и все :(
_ALF_
Posts: 24
Joined: 2005-04-16 17:40:14

Post by _ALF_ »

Savage скрипт замечательный спасиб . Не можешь помоч в него прокачку спирита вставить чтоб копали спирит качал ?
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Да, видел твой пост, себе тоже копальщику уже вставил :) вот так:

Code: Select all

	Else
;		UO.Say("Meshok dlya vihi viju.")
	Endif

	While NOT UO.Dead()
	
		For WayPoint=0 to WayPoints-1
			UO.UseSkill('Spirit Speak') ;<<<<<<<
			wait(2000);<<<<<<<<<
			SuperWalk(BaseX[WayPoint],BaseY[WayPoint],"")
			digitstay(MaxWeight,DigDistance,KillElemental,ElemSignal,BaseX[WayPoint],BaseY[WayPoint])
		Next
	wend
end sub
найди это место в вскрипте и вставь помеченные <<<<<< команды.
DIKIY
Posts: 53
Joined: 2004-10-07 15:42:12
Location: Москва
Contact:

Post by DIKIY »

Есть такая трабла. Через произвольное время скрипт вылетает. Пишет ошибку фразы... Собственно явных ошибок я не нашёл, т.к. по нескольку раз Чар проходит полный цикл копки, выкладывания руды и возвращения на место. В чём может быть трабла? Может в самой инже какую нибудь галку убрать или поставить??? правда скрипт из первого поста брал , там ещё снизу есть как я понял переделанный.... они разные?
Agent
Posts: 29
Joined: 2005-04-21 16:09:16

Post by Agent »

Савадж, у меня есть вопрос о твоем скрипте.
Когда чар переходит на 2ую точку капания? ато когда я запускаю скрипт чар идет на 1 координаты и капает тока там вокруг себя,
а до 2 координат не идет(
можно к примеру сделать так, чтобы после того как минер все выкопает вокруг себя, шел на 2 координаты и так далее?
Ответь плз.
Kashita
Posts: 22
Joined: 2004-12-30 13:18:54

Post by Kashita »

Savage, огромное тебе спасибо за прекрасный скрипт!!!
Groblin's
Posts: 5
Joined: 2005-05-13 06:30:48

Post by Groblin's »

Хм..... а вот у меня скрипт отлично работает, тока вот элек не лутит :( (но киляет)
У других людей все отлично работает (лут), а в скрипте все тоже самое.
В чем может быть проблема, подскажите, plizzzz.....
Post Reply