Yoko
http://forum.yoko.com.ua/

Правка скрипта...
http://forum.yoko.com.ua/viewtopic.php?f=17&t=17167
Page 1 of 3

Author:  tylllkah [ 2013-01-23 10:13:54 ]
Post subject:  Правка скрипта...

Скрипт ув. Nmy, на открытие дверей из закрытие
Code:
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

можно поставить сюда проверку на отткрыта дверь или нет прежде чем ее открыть или закрыть?

Author:  tylllkah [ 2013-01-23 10:33:42 ]
Post subject:  Re: Правка скрипта...

у прощаем задачу
Code:
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:
go(0003,0003, 0)
opendoor()
wait(100)
go(0004,0004, 0)
closedoor()
wait(100)

выглядел примерно так
Code:
go(0003,0003, 0)
opendoor()
wait(100)
[color=#FF0000]go(0004,0004, 0)
если не идет то снова пробуем
opendoor()[/color]
go(0004,0004, 0)
closedoor()

Author:  Nmy [ 2013-01-23 15:38:32 ]
Post subject:  Re: Правка скрипта...

обычно у дверей 1й тип - открыта, 2й тип - закрыта. но если поставить дверь с другой стороны стены, то будет наоборот. получается, либо прописать все типы и делать return после 1й двери, либо прописать только нужные типы с 1й стороны и другие типы с другой стороны. т.е. 2 скрипта.

Author:  tylllkah [ 2013-01-24 17:34:59 ]
Post subject:  Re: Правка скрипта...

просто чар открывает дверь, ее тут же закрывают и он не может зайти как быть тогда

Author:  Nmy [ 2013-01-26 10:39:24 ]
Post subject:  Re: Правка скрипта...

uo.usefromground
return

Author:  tylllkah [ 2013-02-04 18:48:52 ]
Post subject:  Re: Правка скрипта...

не помогает

Author:  Nmy [ 2013-02-06 13:46:55 ]
Post subject:  Re: Правка скрипта...

Сюда скопируй весь скрипт

Author:  tylllkah [ 2013-02-07 10:36:18 ]
Post subject:  Re: Правка скрипта...

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

Author:  Nmy [ 2013-02-07 12:17:34 ]
Post subject:  Re: Правка скрипта...

зделал что opendoor будет работать 10 секунд и открывать дверь все время. не тестил, мб где то еррор
Code:
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

Author:  tylllkah [ 2013-02-07 12:44:45 ]
Post subject:  Re: Правка скрипта...

вообще не открывают дверь((

Author:  Mirage [ 2013-02-07 14:38:41 ]
Post subject:  Re: Правка скрипта...

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

Code:
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:
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 то ведь включен?

Author:  tylllkah [ 2013-02-07 16:06:19 ]
Post subject:  Re: Правка скрипта...

Mirage wrote:
PS TWI то ведь включен?

Всегда включён)) щас опробую)

Author:  tylllkah [ 2013-02-07 16:29:57 ]
Post subject:  Re: Правка скрипта...

Mirage wrote:

нет всеравно если он дверь открытую открыл, и ее тут же закрыли когда не успел забежать то всё сбивается

Author:  Nmy [ 2013-02-07 17:37:04 ]
Post subject:  Re: Правка скрипта...

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

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

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

Author:  Nmy [ 2013-02-07 17:39:55 ]
Post subject:  Re: Правка скрипта...

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

Author:  Mirage [ 2013-02-07 19:07:59 ]
Post subject:  Re: Правка скрипта...

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

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

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

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

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

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

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

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

PS у моего знакомого была ходилка с проверяние, нет ли на земле ВСЕХ типов животных которые можно приручить - если есть то копим стамину и проходим на GMStep-е
Нет ли на земле несколько десятков предметов которые персонаж МОЖЕТ переносить и через которые нельзя пройти - типо сундуков, шкафов. Их либо подвигаем либо обходим или ждем пока предмет не исчезнет.
Там текста было на полстраницы печатной ;)

Author:  Mirage [ 2013-02-08 12:57:36 ]
Post subject:  Re: Правка скрипта...

tylllkah wrote:
Nmy wrote:
Code:
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 ты не можешь достать то скрипт не откроет ни одной двери.

Модифицируйте тот скрипт который я написал - поиск типа, использовать объект. У вас же критичные ситуации - кто то мешает пройти - надо расписывать скрипт. А таким образом можно на своей базе использовать прялки, куклы для тренировки - когда никто не мешает.

Author:  Mirage [ 2013-02-08 13:03:22 ]
Post subject:  Re: Правка скрипта...

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

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

Author:  tylllkah [ 2013-02-08 17:35:54 ]
Post subject:  Re: Правка скрипта...

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

Code:
тут был скрипт который и так есть чуть выше... © Mirage

Отлично!!!
Спасибо!!!

Author:  Mirage [ 2013-02-08 19:50:16 ]
Post subject:  Re: Правка скрипта...

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

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

Page 1 of 3 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/