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

Тест! Новая ходилка.
http://forum.yoko.com.ua/viewtopic.php?f=20&t=3128
Page 1 of 2

Author:  Savage [ 2005-02-17 08:41:20 ]
Post subject:  Тест! Новая ходилка.

Вообщем вчера заморочился на новую ходилку, чтоб бродила по городу без проблем. Получилось пока не очень. Препядствия типа открытых магазинов почти не обходит :) Но думаю на коротких дистанциях будет обходить столы и прочую мебель. Соответственно в лесу вообще проблем с застреванием быть не должно.

Ну собственно кому не влом погоняйте ее.

В примере координаты места возле входа в магазин ювелира в брите. Очень наглядно запускать с пристани :)

Также хотел выслушать соображения по поводу логики обхода препядствий.
Code:
sub test()
   SuperWalk(1175,1631,"")
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=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


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


Author:  Goggy [ 2005-02-17 09:05:14 ]
Post subject: 

Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:

Author:  Goggy [ 2005-02-17 09:10:19 ]
Post subject: 

Вобщем попробовал, ходилка норм тока если приходится от координаты отходить то он этого неделает(в случае если возвращатся надо когда заёл нетуды :) ), а так норм в лесу впринципе должен любое препятствие обойти...
молодец :wink:

Author:  Askaneli [ 2005-02-17 09:42:45 ]
Post subject: 

Goggy wrote:
Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:

Дойдёт. По точкам.

Author:  Askaneli [ 2005-02-17 09:45:19 ]
Post subject: 

2Savage . Гляну вечерком. Даже интересно стало.

Author:  Goggy [ 2005-02-17 09:47:43 ]
Post subject: 

Askaneli wrote:
Goggy wrote:
Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:

Дойдёт. По точкам.


по точкам любой дойдёт!
а ты зделай так чтоб точку в тринсике вставить и он валил с Минока :mrgreen: :wink:

Author:  Sfagnum [ 2005-02-17 09:49:32 ]
Post subject: 

Goggy wrote:
а ты зделай так чтоб точку в тринсике вставить и он валил с Минока :mrgreen: :wink:
а теперь скажи мне практический смысл данного действия.

Author:  Askaneli [ 2005-02-17 09:58:47 ]
Post subject: 

Goggy wrote:
Askaneli wrote:
Goggy wrote:
Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:

Дойдёт. По точкам.


по точкам любой дойдёт!
а ты зделай так чтоб точку в тринсике вставить и он валил с Минока :mrgreen: :wink:

В Тринсике идёшь до телестоуна. Летишь в Минок и идёшь до точки в Миноке. Элементарно блин.
А ещё проще по рунбуке.

Смысл в ходилке есть толька на небольшие расстояния.

Author:  BETEPAH [ 2005-02-17 10:55:20 ]
Post subject: 

Операция на глаз, через задний проход, с летальным исходом.

Я так покумекал ..... думаю что ходилка ( любая) будет работать Лучше если проверять обьекты на пути ....тобишь есть найден обьект на пути прохода то выбор маршрута обхода. Это конешно муторно и сложно ....но если при каждом шаге будет коректировка маршрутизации.....то того и глядишь будет все оки ))

Author:  Sfagnum [ 2005-02-17 11:25:49 ]
Post subject: 

BETEPAH wrote:
Я так покумекал ..... думаю что ходилка ( любая) будет работать Лучше если проверять обьекты на пути ....тобишь есть найден обьект на пути прохода то выбор маршрута обхода. Это конешно муторно и сложно ....но если при каждом шаге будет коректировка маршрутизации.....то того и глядишь будет все оки ))
и как ты себе представляешь реализацию поиска объекта?

флудер ;)

Author:  Askaneli [ 2005-02-17 12:18:00 ]
Post subject: 

BETEPAH wrote:
Операция на глаз, через задний проход, с летальным исходом.

Я так покумекал ..... думаю что ходилка ( любая) будет работать Лучше если проверять обьекты на пути ....тобишь есть найден обьект на пути прохода то выбор маршрута обхода. Это конешно муторно и сложно ....но если при каждом шаге будет коректировка маршрутизации.....то того и глядишь будет все оки ))

Это что по твоему надо массив хранить в файле обьектов мира ???
Ты представляешь скока это места будет жрать и как отразится на скорости работы ???
Флудер!!!

Author:  BETEPAH [ 2005-02-17 14:45:13 ]
Post subject: 

Сами болтуны ..... я про то что надо коректировку проверять при каждом шаге.

Author:  Edred [ 2005-02-17 14:46:38 ]
Post subject: 

Все вы флудеры и совершенно не следите за АСМом. В нем давно есть работа с картами и вердатой. Статики, правда, пока нету. Но, насколько мне известно, будет. Когда АГРСу надоест линейка.

Author:  Sfagnum [ 2005-02-17 14:57:15 ]
Post subject: 

Edred wrote:
Все вы флудеры и совершенно не следите за АСМом. В нем давно есть работа с картами и вердатой. Статики, правда, пока нету. Но, насколько мне известно, будет. Когда АГРСу надоест линейка.
но нету же ;) так чта.... не надо на нас гнать ;)

Просто Ветеран немного ахинию прогнал...

Author:  BETEPAH [ 2005-02-17 15:15:17 ]
Post subject: 

нА ОХИНЕЮ отвечу.
А что мешает какким нибуть чудесным образом проверять путь по линии к точке и если на пути стоит обьект не входящий в масив тайлов "проходимых" то тогда обход его на -1 или +1....что тут бредового то ?.Замечу что масив тайлов не так уж и велик.

Author:  Askaneli [ 2005-02-17 15:56:49 ]
Post subject: 

Не кипятись. В процессе уже.
Вот хернёй перестану маятся и допишу.

Author:  Savage [ 2005-02-17 16:03:30 ]
Post subject: 

Столько ответов и ни одного дельного совета :) С вами каши не сваришь :(

Author:  Savage [ 2005-02-17 16:04:49 ]
Post subject: 

Перейти на АСМ, значит замкнуться на себе и кучке избранных. У меня несколько другая политика.

Author:  AlexeyVorotnikov [ 2005-02-17 20:14:16 ]
Post subject: 

Попробовал я присобачить эту ходилку к лумберу. Заметил одну странность: она подходит к дереву строго с северо-запада. Даже если она уже подошла к дереву с другой стороны, она обходит дерево так, чтобы оказаться на северо-запад от него и только тогда считает, что пришла на место.

Author:  AlexeyVorotnikov [ 2005-02-17 20:14:58 ]
Post subject: 

Savage wrote:
Перейти на АСМ, значит замкнуться на себе и кучке избранных. У меня несколько другая политика.

Почему "замкнуться на себе и кучке избранных"?

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