Мининг в ручную

Anything and all.

Moderators: Murderator+, Murderator

m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Мининг в ручную

Post by m3gamen »

Люди добрые помогите пожалуйста. Мне нужен облегчающий скрипт для копки вручную. Суть его такова что первый раз я копаю вручную а потом запускаю этот скрипт с хоткея и он докапывает всю руду в этом тайле, как докапает юзает кирку, чтобы появился прицел. Дело в том, что у меня аналогичный скрипт на пилоте был, но на моем шарде он не пашет изза несовместимости клиента с пилотом. Я набросал скрипт, но он вешает клиент кучей ошибок, прошу подправьте его плз.
sub dig()
VAR ms1 = "nothing"
VAR ms2 = "loosen"
VAR ms3 = "put"

UO.DeleteJournal()
UO.press(113) ;lastobjec waitfortarget lasttarget
repeat
wait(100)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3)
if UO.InJournal(ms2) OR UO.InJournal(ms3) then
UO.press(113)
repeat
wait(100)
until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3)
else
uo.press(112) ; lastobject
endif
endsub
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

На F12 висит клиент макро lastobject, waitfortarget, lasttarget

Code: Select all

sub drocher()
	VAR ToolType="0x0E86"		; topor = picaxe

	Repeat
		CheckLag()

;		UO.WaitTargetTile('lasttile')
;		UO.WaitTargetTile('0',STR(UO.GetX()),STR(UO.GetY()+3),'251')

;		UO.UseType(ToolType)
		UO.Press(123)
		Repeat
			wait(200)
		Until UO.InJournal('put|fail|not|hack|loosen|There')
	Until UO.InJournal('There')

	UO.UseType(ToolType)
	uo.print("!!!!")
end sub
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Спасибо большое, но скрипт также ведет себя - во вкладке скрипт появляется куча новых один за другим летят ошибки и крашит уо. Inject 702.11 PaWn, client 5.0.9. Нечего неподелать наверное?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Мининг в ручную

Post by Mirage »

Savage UO.DeleteJournal() забыл перед 1 repeat вставить ;)
Или надеялся что у автора делка в чеклаге вставлена.


PS чисто любопытство - зачем такая сложная механика? Почему нельзя просто хоткей нажать и выкопать все? Типо экономим конду на кирке? :)
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Дело в том, что у меня неполучилось адаптировать скрипт на мининг вокруг себя под мой шард, хотя перепробовал я много разных, по какойто причине они все работают криво. После того как капнет один раз в тайле переключается на следующий тайл, как будто пофиг на сообщения журнала ему. Я в скриптах слабо шарю, как вы наверное уже успели догодаться, но подозреваю что дело в том, что во всех скриптах используется UO.Waittargettile("1339", str(i), str(j),"0"). А тайл прописывается определеный в данном случае 1339. А на моем серваке все разные тайлы, смотрел через ,infotile и 1340 есть и 1343 и 1338. Так, что приходиться заморачиваться в ручную))))
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

sub minround()
VAR Kirka = '0x0E85' ; Òèï Êèðêè
VAR MaxVes = 450 ; Ìàêñèìàëüíûé âåñ, ïîäûìàåìûé ÷àðîì ìèíóñ 10-15 ñòîóíîâ
VAR TileNum = '1339' ; Òàéë ïîëà ïåùåðû (íàèáîëåå ðàñïðîñòðàíåííûé òèï)
VAR x, y, t, k
VAR MaxTime = 100 ; èçìåðÿåòñÿ â 1/10 ñåê.
VAR ms1 = "There is nothing"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "You loosen"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining in rock"
VAR ms7 = "You can't see that"
for y=-1 to 1
for x=-1 to 1

k = 0
repeat
UO.DeleteJournal()
t = UO.Timer()
k = k + 1
UO.CancelTarget()
wait(300)
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
UO.UseType( Kirka )
repeat
wait(300)
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 ((t + MaxTime) < UO.Timer())
If UO.Weight > MaxVes Then
UO.Print(" Overweight!" )
return
Endif
until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10) )
next
next
endsub
Вот один из скриптов копки вокруг, найденных тут некопает нефига
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

Mirage wrote:Savage UO.DeleteJournal() забыл перед 1 repeat вставить ;)
Или надеялся что у автора делка в чеклаге вставлена.


PS чисто любопытство - зачем такая сложная механика? Почему нельзя просто хоткей нажать и выкопать все? Типо экономим конду на кирке? :)
Хоткей прийдётся долбить пока всё не добудешь. При низком уровне скила это занятие по времени может достигать получаса.
Действительно у меня в чеклаге делжурнал.
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

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

Re: Мининг в ручную

Post by Savage »

А ты часом не на ранке играешь? Попробуй номер тайла ставить 0.
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

56 сфера клиент 5.0.9
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

sub minround()
VAR Kirka = '0x0E85' ;
VAR MaxVes = 450 ;
VAR TileNum = '0' ; !Изменил на ноль!
VAR x, y, t, k
VAR MaxTime = 100
VAR ms1 = "There is nothing"
VAR ms2 = "You can't use"
VAR ms3 = "You put the"
VAR ms4 = "You loosen"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining in rock"
VAR ms7 = "You can't see that"
for y=-1 to 1
for x=-1 to 1

k = 0
repeat
UO.DeleteJournal()
t = UO.Timer()
k = k + 1
UO.CancelTarget()
wait(300)
UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
UO.UseType( Kirka )
repeat
wait(300)
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 ((t + MaxTime) < UO.Timer())
If UO.Weight > MaxVes Then
UO.Print(" Overweight!" )
return
Endif
until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10) )
next
next
endsub
Изменил на ноль непомогло при запуске скрипты в уо выдает сообщение You cant see the target. И даже копать не начинает :/
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Re: Мининг в ручную

Post by Savage »

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

Code: Select all

sub draw() 
var x,y,s 
uo.textclose() 
uo.textclear() 
for y=1426 to 1461
s="" 
for x=346 to 389 
if uo.privategettile(x,y,-1,1330,1360) then 
if uo.privategettile(x,y,-1,2272,2281) OR uo.privategettile(x,y,-1,6003,6012) then 
 s=s+"+" 
else 
 s=s+"#" 
end if 
else 
 s=s+"_" 
end if 
next 
uo.textprint(s) 
next 
uo.textopen() 
end sub 


sub test()
UO.Print(STR(UO.PrivateGetTile(375,1425,-1,1358,1358)))
end sub



###############################################################
#===---==---==---==---= TURBO Mining =---==---==---==---==---=#
#               Nova Shard: http://nova-uo.ru/                #
#           Scripted by Savage (c) 2008 ICQ:33336141          #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# Bind on NUM ENTER or other key: exec PausedSwitch           #
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
# To start script use ",exec mn" command from client window   #
###############################################################

sub tt()
var nn
nn=UO.Timer()
while true
UO.Print(STR(UO.Timer()-nn))
wait(500)
wend
end sub


sub Arm()
	While UO.ObjAtLayer('Lhand')==''
		UO.Equipt('Lhand','0x1B78')
		wait(700)
	Wend
	While UO.ObjAtLayer('Rhand')=='' OR UO.GetGraphic(UO.ObjAtLayer('Rhand'))=='0x0E86'
		UO.Equipt('Rhand','0x1441')
		wait(700)
	Wend
end sub


sub MN()
	VAR i
	DIM X[12]
	DIM Y[12]

	UO.SetGlobal('PausedScript','Off')
;	UO.Exec(Alarm())
	X[0]=387
	Y[0]=1436

	X[1]=386
	Y[1]=1431

	X[2]=381
	Y[2]=1430

	X[3]=375
	Y[3]=1430

	X[4]=374
	Y[4]=1435

	X[5]=369
	Y[5]=1437

	X[6]=364
	Y[6]=1438

	X[7]=359
	Y[7]=1437

	X[8]=372
	Y[8]=1438
	
	X[9]=378
	Y[9]=1438

	X[10]=378
	Y[10]=1443

	While TRUE
		For i=0 to 10
			KillRat()
			SuperWalk(X[i],Y[i],"")
			DigItStay((UO.Str*3.7),2,UO.GetX(),UO.GetY())
		Next
	Wend
end sub


sub DigItStay(MaxWeight,MaxDistance,BaseX,BaseY)
	VAR x,y,TempX,TempY
	VAR Last=0,LastTimer, ContFlag=1
	VAR MaxTimer=160,Count=1
	VAR TileB=1339
	VAR TileE=1359
	Var Tile

	For x=-MaxDistance to MaxDistance
		For y=-MaxDistance to MaxDistance

			Tile=-1
			Tile=TileB
			While NOT UO.PrivateGetTile(UO.GetX()+x,UO.GetY()+y,-1,Tile,Tile) AND Tile<TileE
				Tile=Tile+1
			Wend

			If Tile<TileE Then
				Repeat
					ToHide()
					IF UO.InJournal('cliloc# 0xA5F5') Then
						TempX=UO.GetX()
						TempY=UO.GetY()
						KillRat()
						SuperWalk(TempX,TempY,"")
					Endif

					CheckLag() ; deleting journal
				
					UO.WaitTargetTile(Str(Tile),STR(UO.GetX()+x),STR(UO.GetY()+y),STR(UO.GetZ()))
					UO.UseType('0x0E86')
					LastTimer=UO.Timer()

					Repeat
						wait(200)
					until UO.InJournal("Iguana|cliloc# 0x5DE4|Shining|Blood|silver|Spectral|Stars|cliloc# 0x5DE5|cliloc# 0x5DE3|cliloc# 0x5DE0|cliloc# 0xAD03|cliloc# 0xAD00|cliloc# 0xA867|cliloc# 0xAD02") OR LastTimer+MaxTimer<UO.Timer()

					If UO.GetGlobal('PausedScript')=='On' Then
						UO.Print("+++ Script paused! +++")
						UO.Print("+++ Script paused! +++")
						TempX=UO.GetX()
						TempY=UO.GetY()
						While UO.GetGlobal('PausedScript')=='On'
							wait(500)
						Wend
						UO.Print("+++ Script continued! +++")
						UO.Print("+++ Script continued! +++")
						SuperWalk(TempX,TempY,"")
					Endif

					If UO.Life<UO.Str then
						TempX=UO.GetX()
						TempY=UO.GetY()
						KillRat()
						SuperWalk(TempX,TempY,"")
						ToHide()
					Endif


					If UO.Weight>=MaxWeight then
						TempX=UO.GetX()
						TempY=UO.GetY()
						KillRat()
						SuperWalk(TempX,TempY,"")
						GoSmelt()
					Endif
				Until UO.InJournal("cliloc# 0xAD00|cliloc# 0xA867|cliloc# 0xAD02")
			Endif
		Next
	Next
end sub


sub GoSmelt()
	VAR TempX,TempY, TempX1, TempY1
	VAR RuneForge='0x4014AE2F' ; dom
	VAR RuneBank ='0x400DCF77' ; bank
	VAR RuneCaves='0x400C9FDE' ; pewera

	TempX=UO.GetX()
	TempY=UO.GetY()
	
	UO.Cast('Recall',RuneForge)
	While TempX==UO.GetX() AND TempY==UO.GetY()
		wait(200)
	Wend

	Smelt()

	TempX1=UO.GetX()
	TempY1=UO.GetY()

	UO.Cast('Recall',RuneBank)
	While TempX1==UO.GetX() AND TempY1==UO.GetY()
		wait(200)
	Wend

	UO.Say("Bank")
		
	UnloadOre()

	If UO.GetGlobal('PausedScript')=='On' Then
		UO.Print("+++ Script paused! +++")
		UO.Print("+++ Script paused! +++")
		While UO.GetGlobal('PausedScript')=='On'
			wait(500)
		Wend
		UO.Print("+++ Script continued! +++")
		UO.Print("+++ Script continued! +++")
	Endif

	LoadRes()

	TempX1=UO.GetX()
	TempY1=UO.GetY()

	UO.Cast('Recall',RuneCaves)
	While TempX1==UO.GetX() AND TempY1==UO.GetY()
		wait(200)
	Wend
	SuperWalk(TempX,TempY,"")
End sub


sub smelt()
	VAR Forge='0x40004D06'
	VAR WaitTime=1000
	VAR Exit=0
	
	While Exit<>1
;		ToHide()
		UO.FindType('0x19B9',-1,'backpack')
		If UO.FindCount() Then
;			UO.Print("Good!")
			UO.WaitTargetObject(Forge)
			UO.UseObject('finditem')
			wait(WaitTime)
		Else
;			UO.Print("Bad!")
			Exit=1
		Endif
	Wend
end sub

;------------------------- Unload ore -------------------------
sub unloadore()
	VAR TempX,TempY,i,Exit
	VAR StoreCont='0x4004BA6D'
	VAR ResCont='0x400B338D'
	VAR Container

	DIM Drop[9]
	
	Drop[0]='0x1BF2' ; Ingi
	Drop[1]='0x19B9' ; Ruda
	Drop[2]='0x1081' ; Koja
	Drop[3]='0x0EED' ; Dengi
	Drop[4]='0x09F1' ; Myaso
	Drop[5]='0x09B9' ; Ptitsa
	Drop[6]='0x0F0E' ; Empty Bottle
	Drop[7]='0x1BD1' ; Periya
	Drop[8]='0x0F0A' ; Lesser Poison

	ToHide()

	For i=0 to 8
		Exit=0
		Repeat
			If i<2 Then
				Container=StoreCont
			Else
				Container=ResCont
			Endif

			UO.FindType(Drop[i],-1,'backpack')
			
			If UO.FindCount() Then
				UO.MoveItem('finditem',0,Container)
				wait(300)
				CheckLag()
			Else
				Exit=1
			Endif
		Until Exit==1
	Next
end sub


sub LoadRes()
	VAR InPack
	VAR WaitTime=300
	VAR PickMeshok='0x401D3721'
	VAR ResMeshok ='0x401D3721'

	VAR PickType='0x0E86'
	VAR BandType='0x0E21'
	VAR NSType='0x0F88'
	VAR BMType='0x0F7B'
	VAR MRType='0x0F86'
	VAR BPType='0x0F7A'
	VAR GCType='0x0F07'
	VAR GHType='0x0F0C'

	VAR Bintov=50
	VAR Regs=10
	VAR Potions=10
	
	UO.UseObject(PickMeshok)
	wait(WaitTime)

; Kirki
	While UO.Count(PickType)<5
		UO.FindType(PickType,-1,PickMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',1,'backpack')
			wait(WaitTime)
			CheckLag()
		Endif
	Wend

	UO.UseObject(ResMeshok)
	wait(WaitTime)

; Binty
	UO.FindType(BandType,-1,'backpack')
	wait(WaitTime)
	InPack=UO.GetQuantity('finditem')
	IF InPack<Bintov Then
		UO.FindType(BandType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Bintov-InPack,'backpack')
			wait(WaitTime)
		Endif
	Endif

; Regi
	IF UO.NS<Regs Then
		UO.FindType(NSType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Regs-UO.NS,'backpack')
			wait(WaitTime)
		Endif
	Endif

	IF UO.BM<Regs Then
		UO.FindType(BMType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Regs-UO.BM,'backpack')
			wait(WaitTime)
		Endif
	Endif

	IF UO.MR<Regs Then
		UO.FindType(MRType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Regs-UO.MR,'backpack')
			wait(WaitTime)
		Endif
	Endif

	IF UO.BP<Regs Then
		UO.FindType(BPType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Regs-UO.BP,'backpack')
			wait(WaitTime)
		Endif
	Endif

; Potiony
	UO.FindType(GCType,-1,'backpack')
	wait(WaitTime)
	InPack=UO.GetQuantity('finditem')
	IF InPack<Potions Then
		UO.FindType(GCType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Potions-InPack,'backpack')
			wait(WaitTime)
		Endif
	Endif

	UO.FindType(GHType,-1,'backpack')
	wait(WaitTime)
	InPack=UO.GetQuantity('finditem')
	IF InPack<Potions Then
		UO.FindType(GHType,-1,ResMeshok)
		wait(WaitTime)
		If UO.FindCount() Then
			UO.MoveItem('finditem',Potions-InPack,'backpack')
			wait(WaitTime)
		Endif
	Endif
	
end sub


sub KillRat()
	VAR TempX,TempY
	VAR Dist, i=0, Exit
	VAR LastTimer=0, BTimer=0, DTimer=0, STimer=0
	VAR Scan=6
	VAR Corpse
	VAR cp
	DIM Rats[10]	
	
	Rats[0]='0x006C' ; elem
	Rats[1]='0x0030' ; Scorpion
	Rats[2]='0x0034' ; Snake
	Rats[3]='0x0038' ; Skeleton
	Rats[4]='0x0032' ; Skeleton2
	Rats[5]='0x001E' ; Harpii
	Rats[6]='0x00D7' ; Krisy
	
	While i<7
		UO.Set('finddistance',Scan)
		UO.FindType(Rats[i],-1,'ground')		
		wait(50)
		If UO.FindCount() Then
			UO.Equipt('Rhand','0x1441')
			wait(600)
			Arm()
			wait(50)
			UO.Exec('warmode 1')
			UO.DeleteJournal()
			Dist=1
			Corpse=UO.GetSerial('lastcorpse')
			While Dist<Scan
				UO.Set('finddistance',Dist)
				UO.FindType(Rats[i],-1,'ground')
				wait(50)

				If UO.FindCount() Then
					Exit=0
				Else
					Exit=1
				Endif

				cp=0
				While Exit<>1
					UO.Attack('finditem')
					If cp<>1 Then
						UO.Cast('Poison','finditem')
						cp=1
						wait(2000)
					Endif
					If UO.GetDistance('finditem')>1 Then
						SuperWalk(0,0,'finditem')
					Endif
					wait(100)

					If UO.Poisoned() AND UO.Life<60 Then
						If DTimer+50<UO.Timer() Then
							UO.UseType('0x0F07')
							DTimer=UO.Timer()
						Else
							If BTimer+30<UO.Timer() Then
								UO.BandageSelf()
								BTimer=UO.Timer()
								wait(300)
								Arm()
							Endif
						EndIf
						UO.Attack('finditem')
					EndIf
					
					If UO.Life<80 Then
						If NOT UO.Poisoned() AND DTimer+50<UO.Timer() Then
							UO.UseType('0x0F0C')
							DTimer=UO.Timer()
						Else
							If BTimer+30<UO.Timer() Then
								UO.BandageSelf()
								BTimer=UO.Timer()
								wait(300)
								Arm()
							Endif
						Endif
						UO.Attack('finditem')
					EndIf

					If UO.GetGlobal('PausedScript')=='On' Then
						UO.Print("+++ Script paused! +++")
						UO.Print("+++ Script paused! +++")
						TempX=UO.GetX()
						TempY=UO.GetY()
						While UO.GetGlobal('PausedScript')=='On'
							wait(500)
						Wend
						UO.Print("+++ Script continued! +++")
						UO.Print("+++ Script continued! +++")
						SuperWalk(TempX,TempY,"")
					Endif

					If UO.InJournal('corpse') OR Corpse<>UO.GetSerial('lastcorpse') Then
						wait(1000)
						If UO.GetDistance('lastcorpse')>1 Then
							SuperWalk(0,0,'lastcorpse')
						Endif
						Loot()
						Dist=0
						Exit=1
						i=0
					Endif
				Wend
				Dist=Dist+1
			Wend
		Endif
		i=i+1
	Wend

	UO.Exec('warmode 0')
	While UO.Life<UO.Str
		Healing()
		wait(3000)
	Wend
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()
	If NOT UO.Hidden() Then
		UO.DeleteJournal()
		UO.UseSkill('Hiding')
		repeat
			wait(200)
		until UO.InJournal('cliloc# 0xA5F8|cliloc# 0xA196|cliloc# 0xA5F9|cliloc# 0xA5F5')
	Endif
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|cliloc# 0x9ED5')
end sub


#==============================================================
#  Gong(counter) - playing wav-file 'counter'-times
#  http://www.djetta.ru/cow.wav
#--------------------------------------------------------------
sub Gong(times) ; play wav-file
	VAR i
	for i=1 to times
		UO.Exec("playwav f:\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=60
	while 1==1
		wait(1000)
		if UO.Life<CharHP then
			gong(1)
		endif		
	wend
end sub


#==============================================================
#  SuperWalk(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 SuperWalk(x,y,Target)
	VAR i
	VAR dir,ldir,rdir,key,olddir
	VAR dx,dy,Exit=0
	VAR CacheLimit=9,CacheIndex="Text"
	DIM CacheX[10], CacheY[10]
	
	CacheX[0]="Test"
	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
				dir=3
				ldir=2
				rdir=4
				key=40 ; DownArrow
				olddir=UO.GetDir()
				If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
					If olddir==2 Then ; GoNE
						dir=1
						ldir=0
						rdir=1
						key=39 ; RightArrow
						While UO.GetDir()<>1
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoSW
						dir=5
						ldir=5
						rdir=6
						key=37 ; LeftArrow
						While UO.GetDir()<>5
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif

			If dx>0 AND dy<0 Then ; GoNE
				dir=1
				ldir=0
				rdir=2
				key=39 ; RightArrow
				olddir=UO.GetDir()
				If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
					If olddir==0 Then ; GoWN
						dir=7
						ldir=6
						rdir=7
						key=38 ; UpArrow
						While UO.GetDir()<>7
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoSE
						dir=3
						ldir=3
						rdir=4
						key=40 ; DownArrow
						While UO.GetDir()<>3
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif

			If dx<0 AND dy>0 Then ; GoSW
				dir=5
				ldir=4
				rdir=6
				key=37 ; LeftArrow
				olddir=UO.GetDir()
				If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
					If olddir==6 Then ; GoWN
						dir=7
						ldir=7
						rdir=0
						key=38 ; UpArrow
						While UO.GetDir()<>7
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoSE
						dir=3
						ldir=2
						rdir=3
						key=40 ; DownArrow
						While UO.GetDir()<>3
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif

			If dx<0 AND dy<0 Then ; GoWN
				dir=7
				ldir=6
				rdir=0
				key=38 ; UpArrow
				olddir=UO.GetDir()
				If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
					If olddir==0 Then ; GoNE
						dir=1
						ldir=1
						rdir=2
						key=39 ; RightArrow
						While UO.GetDir()<>1
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoSW
						dir=5
						ldir=4
						rdir=5
						key=37 ; LeftArrow
						While UO.GetDir()<>5
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif
		Endif
	
		If dx<>0 AND dy==0 Then
			If dx>0 Then ; GoE
				dir=2
				key=34 ; PgDown
				olddir=UO.GetDir()
				If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
					If olddir==2 Then ; GoSE
						dir=3
						ldir=3
						rdir=4
						key=40 ; DownArrow
						While UO.GetDir()<>3
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoNE
						dir=1
						ldir=1
						rdir=0
						key=39 ; RightArrow
						While UO.GetDir()<>1
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif
			
			If dx<0 Then ; GoW
				dir=6
				key=36 ; Home key
				olddir=UO.GetDir()
				If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
					If olddir==0 Then ; GoWN
						dir=7
						ldir=7
						rdir=0
						key=38 ; UpArrow
						While UO.GetDir()<>7
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoSW
						dir=5
						ldir=4
						rdir=5
						key=37 ; LeftArrow
						While UO.GetDir()<>5
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif
		Endif

		If dx==0 AND dy<>0 Then
			If dy>0 Then ; GoS
				dir=4
				key=35 ; End
				If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
					If olddir==2 Then ; GoSE
						dir=3
						ldir=2
						rdir=3
						key=40 ; DownArrow
						While UO.GetDir()<>3
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoSW
						dir=5
						ldir=6
						rdir=5
						key=37 ; LeftArrow
						While UO.GetDir()<>5
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif
			
			If dy<0 Then ;GoN
				dir=0
				key=33 ; PgUp
				olddir=UO.GetDir()
				If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
					If olddir==2 Then ; GoNE
						dir=1
						ldir=1
						rdir=2
						key=39 ; RightArrow
						While UO.GetDir()<>1
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Else ; GoWN
						dir=7
						ldir=7
						rdir=6
						key=38 ; UpArrow
						While UO.GetDir()<>7
							StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
						Wend
					Endif
				Endif
			Endif
		Endif
	Wend
end sub


sub StepEdit(x,y,dir,key)
	VAR walkwait=80
	VAR ErrLevel=0
	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()
		If x==UO.GetX() AND y==UO.GetY() Then
;zatik
			ErrLevel=1
		Endif
	Endif
	Return ErrLevel
end sub


sub StepArrow(x,y,dir,ldir,rdir,key)
	VAR walkwait=80
	VAR ErrLevel=0
	If UO.GetDir()<>dir Then
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then
			CheckLag()
		Endif
	Endif

	If UO.GetX()==x AND UO.GetY()==y Then
		UO.Press(key)
		wait(walkwait)
		If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
			CheckLag()
			If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
; zatik			
				ErrLevel=1
			Endif
		Endif
	Endif
	Return ErrLevel
end sub



###############################################################
###############################################################
;
;                        Hotkeys Subs
;
###############################################################
###############################################################


sub PausedSwitch()
	If UO.GetGlobal('PausedScript')=='Off' Then
		UO.SetGlobal('PausedScript','On')
	Else
		UO.SetGlobal('PausedScript','Off')
	Endif
end sub



#==============================================================
#  Healing() - memoryzed current weapon, bandageself, armed
#--------------------------------------------------------------
sub Healing()
	UO.SetArm('CWeapon')
	UO.Exec("bandageself")
	wait(500)
	UO.Arm('CWeapon')
end sub


#==============================================================
#  Cure() - cast cure to self from scroll, if she found
#           or from spellbook
#--------------------------------------------------------------
sub Cure()
	VAR ManaNeed=6
	VAR ManaNeedScroll=3
	If UO.Poisoned() Then
		If UO.Mana>=ManaNeed Then
			UO.Cast('Cure','self')
			UO.Print("Spell!!!")
		Else
			UO.Print("Low mana spell!!!")
		Endif
	Else
		UO.Print("You allready not sick!!!")
	Endif
end sub


#==============================================================
#  Heal() - cast heal to self from scroll, if she found
#           or from spellbook
#--------------------------------------------------------------
sub Heal()
	VAR ManaNeed=4
	VAR ManaNeedScroll=2
	If UO.Life<UO.Str Then
		If UO.Mana>=ManaNeed Then
			UO.Cast('Heal','self')
			UO.Print("Spell!!!")
		Else
			UO.Print("Low mana spell!!!")
		Endif
	Else
		UO.Print("Your HP at maximum!!!")
	Endif
end sub


#==============================================================
#  GHeal() - cast greater heal to self from scroll, if she 
#            found or from spellbook
#--------------------------------------------------------------
sub GHeal()
	VAR ManaNeed=11
	VAR ManaNeedScroll=5
	If UO.Life<UO.Str Then
		If UO.Mana>=ManaNeed Then
			UO.Cast('Greater Heal','self')
			UO.Print("Spell!!!")
		Else
			UO.Print("Low mana spell!!!")
		Endif
	Else
		UO.Print("Your HP at maximum!!!")
	Endif
end sub


#==============================================================
#  Loot() - looting corpse and from ground. Savage.
#--------------------------------------------------------------
sub Loot()
	VAR WaitTime=500
	VAR Exit=0, i, FromCorpse=0, Rezak='0x1441'
	DIM Loot[10]

	UO.Set('finddistance',3)
	
	Loot[0]=0x19B9 ; ore
	Loot[1]=0x0EED ; gp
	Loot[2]=0x1079 ; Hides
	Loot[3]=0x14EB ; Treassure Map
	Loot[4]=0x09F1 ; Raw ribs
	Loot[5]=0x1BD1 ; Feathers
	Loot[6]=0x1081 ; leather
	Loot[7]=0x0F0A ; Poison Potion
	Loot[8]=0x09B9 ; Raw Bird
	
	UO.WaitTargetObject('lastcorpse')
	UO.UseType(Rezak)
	wait(1000)

	UO.DeleteJournal()
	For i=0 to 8
		Exit=0
		While Exit<>1
			UO.FindType(Loot[i],-1,'lastcorpse')
			If UO.FindCount() Then
				If i==2 Then
					UO.WaitTargetObject('finditem')
					UO.UseType('0x0F9F')
				Else
					UO.MoveItem('finditem','0','LootBag')
				Endif
				wait(WaitTime)
			Else
				Exit=1
			Endif
		Wend
	Next
	UO.Print("!!! Polutal!")
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Мининг в ручную

Post by Mirage »

вообще простой модуль копания по тайлам без всяких бродилок, скидывалок и прочих украшательств выглядит вот так:

Code: Select all

sub Mine()
VAR Pickaxe = '0x0E85' ; тип кирки
VAR MaxRange = 2
var msg1 = '%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
var msg2 = '%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
VAR X, Y, Z, Tiles, lasttimer, mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
	for X = MaxRange - ( MaxRange * 2 ) to MaxRange
		Tiles = MiningTiles(mX+X, mY+Y)
		if Tiles then
			repeat
				UO.DeleteJournal()
				UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
				UO.UseType(Pickaxe)
				LastTimer=UO.Timer()
				repeat
					wait(100)
				until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
			until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
		endif
	next
next
end sub
Sub MiningTiles(X,Y)
var i
if UO.PrivateGetTile(X, Y, -1, 616, 618) then
	for i=616 to 618
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 1339, 1363) then
	for i=1339 to 1363
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 2272, 2282) then
	for i=2272 to 2282
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 4963, 4973) then
	for i=4963 to 4973
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 6001, 6012) then
	for i=6001 to 6012
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 13121, 13369) then
	for i=13121 to 13369
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 13446, 13455) then
	for i=13446 to 13455
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 13484, 13492) then
	for i=13484 to 13492
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
if UO.PrivateGetTile(X, Y, -1, 13625, 13628) then
	for i=13625 to 13628
		if UO.PrivateGetTile(X, Y, -1, i, i) then
			return i
		end if
	next
end if
return 0
end sub
Если уж совсем в край упрощать то просто копать должен и вот так:

Code: Select all

sub Mine()
VAR Pickaxe = '0x0E85'
VAR Tiles = 0
VAR MaxRange = 2
var msg1 = '%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
var msg2 = '%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
VAR X, Y, Z, lasttimer, mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
	for X = MaxRange - ( MaxRange * 2 ) to MaxRange
		repeat
			UO.DeleteJournal()
			UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
			UO.UseType(Pickaxe)
			LastTimer=UO.Timer()
			repeat
				wait(100)
			until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
		until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
		
	next
next
end sub
Можно конечно еще избавиться от длиннущих строк сообщений но так оно работает побыстрее имхо.
PS если копать не будет то проверяй сообщения и вписывай:
msg1 = должно содержать все возможные сообщения при копании
msg2 = должно содержать сообщения когда руды нет или ты не можешь достать до тайла с рудой.
m3gamen
Posts: 11
Joined: 2010-09-07 18:18:24

Re: Мининг в ручную

Post by m3gamen »

Спасибо больщое за помощ! Все адаптировал :) :twisted: :o
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Мининг в ручную

Post by Gromiz »

Mirage wrote:

Code: Select all

sub Mine()
VAR Pickaxe = '0x0E85'
VAR Tiles = 0
VAR MaxRange = 2
var msg1 = '%|destroyed|useable|выкопали|0xAD00|0xA867|0xA2DE|0xAD03|0x5DE0|0x5DE1|0x5DE2|0x5DE3|0x5DE4|0x5DE5|0x5DE6|0x5DE7|Вы положили|put the|is nothing here to mine|Wthere do you|Вам не удалось|У вас нет|have no line|ничего|Тут ничего|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
var msg2 = '%|destroyed|0xAD00|0xA867|0xA2DE|Тут ничего|is nothing here to mine|нет руды|У вас нет|have no line|Попробуйте|Try mining elsewhere|too far away|so close to yourself'
VAR X, Y, Z, lasttimer, mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
	for X = MaxRange - ( MaxRange * 2 ) to MaxRange
		repeat
			UO.DeleteJournal()
			UO.WaitTargetTile(Tiles, mX+X, mY+Y, mZ)
			UO.UseType(Pickaxe)
			LastTimer=UO.Timer()
			repeat
				wait(100)
			until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
		until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
		
	next
next
end sub
о, скрипт то, что нужно, но как всегда нюансы, итить их.

вот мы имеем скрипт, который обкапывает вокруг себя тайлы исходя из сообщений.
а можно отредактировать так, чтобы скрипт отключался, как только найдет тайл, где можно копать, исходя из сообщений? грубо говоря без цикла, как, например, с рубкой?(https://yoko.uokit.com/viewtopic.php?f=20&t=16819)

репиты убирал, но не в этом дело мне кажется
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Мининг в ручную

Post by Mirage »

я как нибудь устану от таких просьб и нажалуюсь админу шарда где ты играешь :mrgreen:
1)

Code: Select all

var msg3 = 'put|положили' ; сообщение при УДАЧНОЙ выкопке
##############
         until UO.InJournal(msg1) || UO.Timer()>LastTimer+100
            if UO.InJournal(msg3) then
                  return
            endif
      until UO.InJournal(msg2) || UO.Timer()>LastTimer+500
соответственно как чтото 1 раз выкопает скрипт остановится.
2) если смотреть на тебя со стороны (админу) то при таком варианте ты выкопаешь всю руду по нажатию 1 кнопки вокруг себя и на каждый следующий тайл чар будет "просматривать" (вертеться) по всем сторонам. Очень быстро. Так что у админа может сложиться впечатление что ты на скрипте.
3) я уже предлагал тебе сделать ТАК но ты сказал тебя не устраивает вариант с сообщениями ;)
4) не проще сменить шард?
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Мининг в ручную

Post by Gromiz »

хм, может я не так понял? про вариант с сообщениями
но в этом случае он полностью вырубает дерево, т.е. постоянно рубит
а мне нужно самому скрип запускать, как при ручной рубке.

процесс рубки:
кликаем на топор и кликаем на дерево
при первом же ударе идет проверка сервера для чара на макрос
 если я ее прошел,то
   могу еще раз рубить
если не прошел проверку -> идем за решетку

а если во время проверки чар будет дорубливать дерево, то есть вероятность задвоения проверки с плачевным результатом.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Мининг в ручную

Post by ZeroDX »

а что за шард?
Gromiz
Posts: 444
Joined: 2005-02-08 18:39:50
Location: Moscow

Re: Мининг в ручную

Post by Gromiz »

ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Мининг в ручную

Post by ZeroDX »

а в местном антимакро бывают минусы и двузначные числа?
Post Reply