Правка скрипта...

Ask for scripts here

Moderators: Murderator+, Murderator

tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Правка скрипта...

Post by tylllkah »

Скрипт ув. Nmy, на открытие дверей из закрытие

Code: Select all

sub door()
   var n
   Dim Door[30]
   Door[1]='0x085A'
   Door[2]='0x06A5' 
   Door[3]='0x0854'
   Door[4]='0x084C'

   for n=1 to 4
      if uo.countground(Door[n]) then
         uo.usefromground(Door[n])
      endif
   next
endsub
можно поставить сюда проверку на отткрыта дверь или нет прежде чем ее открыть или закрыть?
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

у прощаем задачу

Code: Select all

sub open door()
go(0001,0001, 0)
go(0002,0002, 0)
go(0003,0003, 0)
opendoor()
wait(100)
go(0004,0004, 0)
closedoor()
wait(100)
go(0005,0005, 0)
go(0004,0004, 0)
opendoor()
wait(100)
go(0003,0003, 0)
closedoor()
wait(100)
go(0002,0002, 0)
go(0001,0001, 0)
end sub


sub opendoor()
   var n
   Dim Door[30]
   Door[1]='0x085A'
   Door[2]='0x06A5'
   Door[3]='0x0854'
   for n=1 to 3
      if uo.countground(Door[n]) then
         uo.usefromground(Door[n])
      endif
   next
endsub
sub closedoor()
   var n
   Dim Door[30]
   Door[1]='0x085B'
   Door[2]='0x06A6'
   Door[3]='0x0855'
   
   for n=1 to 3
      if uo.countground(Door[n]) then
         uo.usefromground(Door[n])
      endif
   next
endsub
можно зделать ли так чтоб отрывок

Code: Select all

go(0003,0003, 0)
opendoor()
wait(100)
go(0004,0004, 0)
closedoor()
wait(100)
выглядел примерно так

Code: Select all

go(0003,0003, 0)
opendoor()
wait(100)
[color=#FF0000]go(0004,0004, 0)
если не идет то снова пробуем
opendoor()[/color]
go(0004,0004, 0)
closedoor()
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Re: Правка скрипта...

Post by Nmy »

обычно у дверей 1й тип - открыта, 2й тип - закрыта. но если поставить дверь с другой стороны стены, то будет наоборот. получается, либо прописать все типы и делать return после 1й двери, либо прописать только нужные типы с 1й стороны и другие типы с другой стороны. т.е. 2 скрипта.
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

просто чар открывает дверь, ее тут же закрывают и он не может зайти как быть тогда
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Re: Правка скрипта...

Post by Nmy »

uo.usefromground
return
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

не помогает
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Re: Правка скрипта...

Post by Nmy »

Сюда скопируй весь скрипт
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

Code: Select all

sub gomining()
go(0,0, 0)
UO.Warmode(0)
opendoor()
go(0,0, 0)
UO.Warmode(0)
closedoor()
wait(500)
go(0,0, 0)
UO.Warmode(0)
go(0,0, 0)
UO.Warmode(0)
go(0,0, 0)
UO.Warmode(0)
go(0,0, 0)
UO.Warmode(0)
go(0,0, 0)
UO.Warmode(0)
end sub

sub opendoor()
    var n
   Dim Door[3]
   Door[1]='0x085A'
   Door[2]='0x06A5'
   Door[3]='0x0854'
 
   for n=1 to 3
      if uo.countground(Door[n]) then
         uo.usefromground(Door[n])
      endif
return
   next
endsub
sub closedoor()
   var n
   Dim Door[30]
   Door[1]='0x085B'
   Door[2]='0x06A6'
   Door[3]='0x0855'
   
   for n=1 to 3
      if uo.countground(Door[n]) then
         uo.usefromground(Door[n])
      endif
return
   next
endsub
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Re: Правка скрипта...

Post by Nmy »

зделал что opendoor будет работать 10 секунд и открывать дверь все время. не тестил, мб где то еррор

Code: Select all

sub gomining()
	var x, y
	go(0,0, 0)
	UO.Warmode(0)
	uo.exec('exec opendoor')
	go(0,0, 0)
	UO.Warmode(0)
	closedoor()
	wait(500)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
end sub
sub opendoor()
	var n, i
	Dim Door[3]
	Door[1]='0x085A'
	Door[2]='0x06A5'
	Door[3]='0x0854'
	
	while i < 10
		checklag()
		for n=1 to 3
			if uo.countground(Door[n]) then
				uo.usefromground(Door[n])
			endif
		next
		i=i+1
		wait(1000)
	wend
endsub
sub closedoor()
	var n
	Dim Door[30]
	Door[1]='0x085B'
	Door[2]='0x06A6'
	Door[3]='0x0855'
	
	for n=1 to 3
		if uo.countground(Door[n]) then
			uo.usefromground(Door[n])
		endif
	next
endsub
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

вообще не открывают дверь((
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Правка скрипта...

Post by Mirage »

Я понимаю желание стандартизировать и развиваться, но если это КОНКРЕТНЫЙ скрипт почему не сделать открывашку конкретного типа двери?

Code: Select all

sub main()
walker(5914,1456,0)
checklag()
OpenGate()
checklag()
walker(5914,1461,0)
end sub

Sub OpenGate()
uo.Set('finddistance', 3)
VAR Gate1 = '0x0824'
VAR Gate2 = '0x0826'
   UO.FindType(Gate1,'-1','ground')
      if UO.FindCOunt('finditem') > 0 then
         UO.UseObject('finditem')
      endif
     wait(100)
   UO.FindType(Gate2,'-1','ground')
      if UO.FindCOunt('finditem') > 0 then
         UO.UseObject('finditem')
      endif
uo.print("Ворота открыты.")
end sub
в вашем случае:

Code: Select all

sub opendoor()
	var n
	Dim Door[3]
	Door[1]='0x085A'
	Door[2]='0x06A5'
	Door[3]='0x0854'
	for n=1 to 3
		UO.FindType(Door[n],'-1','ground')
		if UO.FindCOunt('finditem') > 0 then
			UO.UseObject('finditem')
			checklag()
			return
		endif
	next
endsub

PS TWI то ведь включен?
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

Mirage wrote:PS TWI то ведь включен?
Всегда включён)) щас опробую)
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

Mirage wrote:
нет всеравно если он дверь открытую открыл, и ее тут же закрыли когда не успел забежать то всё сбивается
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Re: Правка скрипта...

Post by Nmy »

проблема в том что мешают копать и закрывают дверь

для того я старался сделать

Code: Select all

uo.exec('exec opendoor')

   while i < 10
      checklag()
      for n=1 to 3
         if uo.countground(Door[n]) then
            uo.usefromground(Door[n])
         endif
      next
      i=i+1
      wait(1000)
   wend
endsub
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Re: Правка скрипта...

Post by Nmy »

Code: Select all

sub opendoor()
   var n, i=0
   Dim Door[3]
   Door[1]='0x085A'
   Door[2]='0x06A5'
   Door[3]='0x0854'
   
   while i < 10
      checklag()
      for n=1 to 3
         if uo.countground(Door[n]) then
            uo.usefromground(Door[n])
         endif
      next
      i=i+1
      wait(1000)
   wend
endsub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Правка скрипта...

Post by Mirage »

Я бы запускал чуть чуть другой скрипт.

Положим выкопал, понес куда то, встал перед закрытой дверью за 1 шаг и запускаешь следующую процедуру:

до тех пор пока координаты чара не будут = ЗА ДВЕРЬЮ
если есть закрытая дверь
открываем
uo.pres кнопку в направлении прохода

Там же достаточно 1-2 раза тыкнуть кнопку чтобы пройти.

и с минимальной паузой.
Чар либо пройдет либо крашнет :)

Либо вариант встраивать в ходилку то же самое но через if а не while
типо

если есть закрытая дверь
открыть
конец если
прескей

Только они вам потом начнут предметы на землю кидать.

PS у моего знакомого была ходилка с проверяние, нет ли на земле ВСЕХ типов животных которые можно приручить - если есть то копим стамину и проходим на GMStep-е
Нет ли на земле несколько десятков предметов которые персонаж МОЖЕТ переносить и через которые нельзя пройти - типо сундуков, шкафов. Их либо подвигаем либо обходим или ждем пока предмет не исчезнет.
Там текста было на полстраницы печатной ;)
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Правка скрипта...

Post by Mirage »

tylllkah wrote:
Nmy wrote:

Code: Select all

sub opendoor()
   var n, i=0
   Dim Door[3]
   Door[1]='0x085A'
   Door[2]='0x06A5'
   Door[3]='0x0854'
   
   while i < 10
      checklag()
      for n=1 to 3
         if uo.countground(Door[n]) then
            uo.usefromground(Door[n])
         endif
      next
      i=i+1
      wait(1000)
   wend
endsub
этой вообще дверь не открывает
Он будет глючить изза не совпадений типов.
uo.countground(Door[n]) если на земле есть дверь
uo.usefromground(Door[n]) открываем дверь НО НЕ ТУ ЖЕ КОТОРАЯ УСЛОВИЕМ ВЫШЕ!

Если рядом стоят однотипные двери но до 1 ты не можешь достать то скрипт не откроет ни одной двери.

Модифицируйте тот скрипт который я написал - поиск типа, использовать объект. У вас же критичные ситуации - кто то мешает пройти - надо расписывать скрипт. А таким образом можно на своей базе использовать прялки, куклы для тренировки - когда никто не мешает.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Правка скрипта...

Post by Mirage »

Попробуй вот такой скрипт (я не проверял)

Code: Select all

sub gomining()
	var x, y
	go(0,0, 0)
	UO.Warmode(0)
	opendoor()
	go(0,0, 0)
	UO.Warmode(0)
	closedoor()
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
	go(0,0, 0)
	UO.Warmode(0)
end sub
sub opendoor()
	var n
	Dim Door[3]
	Door[1]='0x085A'
	Door[2]='0x06A5'
	Door[3]='0x0854'
	uo.Set('finddistance', 1)
	for n=1 to 3
		UO.FindType(Door[n],'-1','ground')
		if UO.FindCOunt('finditem') > 0 then
			UO.UseObject('finditem')
			checklag()
			return
		endif
	next
endsub
sub closedoor()
	var n
	Dim Door[30]
	Door[1]='0x085B'
	Door[2]='0x06A6'
	Door[3]='0x0855'
	for n=1 to 3
		UO.FindType(Door[n],'-1','ground')
		if UO.FindCOunt('finditem') > 0 then
			UO.UseObject('finditem')
			checklag()
			return
		endif
	next
endsub
sub go(x,y,k)
	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   
		opendoor()
		dx=x-UO.GetX()
		dy=y-UO.GetY()
		If dx==0 AND dy==0 Then
			Exit=1
		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
	if k==1 then
	endif
end sub
sub StepEdit(x,y,dir,key)
	VAR walkwait=200
	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
			ErrLevel=1
		Endif
	Endif
	Return ErrLevel
end sub
sub StepArrow(x,y,dir,ldir,rdir,key)
	VAR walkwait=200
	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         
				ErrLevel=1
			Endif
		Endif
	Endif
	Return ErrLevel
end sub
sub CheckLag()
	UO.DeleteJournal()
	UO.Click('backpack')
	UO.Warmode(0)
	repeat
		Wait(100)
	until UO.InJournal('backpack')
end sub
tylllkah
Posts: 243
Joined: 2012-03-20 00:32:06
Location: РФ, г. Москва

Re: Правка скрипта...

Post by tylllkah »

Mirage wrote:Попробуй вот такой скрипт (я не проверял)

Code: Select all

тут был скрипт который и так есть чуть выше... © Mirage
Отлично!!!
Спасибо!!!
Не быть жадным - уже богатство, не быть расточительным – доход.
TylllKaH
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Правка скрипта...

Post by Mirage »

Осчастливлен.

Работает ли хоть? Я писал из головы. :roll:
PS в следующий раз чЁтче формулируй задачу и желания (в действиям персонажа на скрипте) - телепатически угадывать что там у тебя в игре происходит - батареек не хватит.
Post Reply