Page 1 of 1

Ребята помогите ещё разок пожалуйста!!!!!

Posted: 2006-02-14 23:37:33
by Balu
Короче есть ходилка, нужно что бы чар ходил только в хайде если он раздетектился то останавливается и продолжает движение только в хайде! Куда только не пихал саб на хайд методом тыка нихрина не получалось помогите плиз!!!!!


Code: Select all

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   

         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 and uo.weight<MaxVes then
  minround()
  endif 
end sub


Sub StepEdit(x,y,dir,key)
   VAR walkwait=300
   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=300
   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

Posted: 2006-02-14 23:56:45
by GrayLord
а для чего мучить ходилку? в основном скрипте напиши, чтобы делал по одному шагу, после чего проверял, в хайде, иль нет.

Posted: 2006-02-15 05:42:39
by Balu
GrayLord wrote:а для чего мучить ходилку? в основном скрипте напиши, чтобы делал по одному шагу, после чего проверял, в хайде, иль нет.


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

Posted: 2006-02-15 11:10:55
by Balu
235168 wrote:
Balu wrote:
GrayLord wrote:а для чего мучить ходилку? в основном скрипте напиши, чтобы делал по одному шагу, после чего проверял, в хайде, иль нет.


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


в самой уо попробуй выключить always run. и добавь строчки перед каждым юзанием кирки

Да стоит у меня перед киркой хайд! скрипт с перевесом если перевес он идет к сундуку и сбрасывает в него всё вот когда он мдет к сундуку он не хайдится а надо что бы шёл в хайде, иначе ранее выкопаный элементаль убивает макрос. Вот и всё!

Posted: 2006-02-15 11:21:10
by GrayLord
Balu wrote:
235168 wrote:
Balu wrote:
GrayLord wrote:а для чего мучить ходилку? в основном скрипте напиши, чтобы делал по одному шагу, после чего проверял, в хайде, иль нет.


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


в самой уо попробуй выключить always run. и добавь строчки перед каждым юзанием кирки

Да стоит у меня перед киркой хайд! скрипт с перевесом если перевес он идет к сундуку и сбрасывает в него всё вот когда он мдет к сундуку он не хайдится а надо что бы шёл в хайде, иначе ранее выкопаный элементаль убивает макрос. Вот и всё!

так вот там, где он идет к сундуку и делай "пошаговый режим" и перед каждым шагом проверяй - спрятан ли ты =)

Posted: 2006-02-15 11:27:09
by Balu
GrayLord wrote:
Balu wrote:
235168 wrote:
Balu wrote:
GrayLord wrote:а для чего мучить ходилку? в основном скрипте напиши, чтобы делал по одному шагу, после чего проверял, в хайде, иль нет.


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


в самой уо попробуй выключить always run. и добавь строчки перед каждым юзанием кирки

Да стоит у меня перед киркой хайд! скрипт с перевесом если перевес он идет к сундуку и сбрасывает в него всё вот когда он мдет к сундуку он не хайдится а надо что бы шёл в хайде, иначе ранее выкопаный элементаль убивает макрос. Вот и всё!

так вот там, где он идет к сундуку и делай "пошаговый режим" и перед каждым шагом проверяй - спрятан ли ты =)


Так я так себе это и представлял! а как это в виде скрипта отобразить?

Posted: 2006-02-15 12:19:43
by Arsuri
Ну, например, перед каждым UO.Press(key) пропиши функцию проверки на хайд.

Posted: 2006-02-15 12:59:08
by GrayLord
просто, либо ходилка должна работать в пошаговом режиме - сказали "иди туда-то", а она делает всего один шаг, в заданном направлении. а перед вызовом ходилки - проверяем хайд. или придется, долго-долго, вставлять в ходилку проверку на хайд.
то есть, написать что-то типа

Code: Select all

sub hide()
while not uo.hidden('self')
uo.useskill('Hiding')
wait(500)
wend
endsub

и вызывать её перед каждым uo.press(key), или ежели ходилку "пошаговой" сделаешь, то просто перед вызовом ходилки.