Тест! Новая ходилка.

Anything and all.

Moderators: Murderator+, Murderator

Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Тест! Новая ходилка.

Post by Savage »

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

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

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

Также хотел выслушать соображения по поводу логики обхода препядствий.

Code: Select all

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

Goggy
Posts: 291
Joined: 2004-11-07 01:22:35
Location: Черкассы
Contact:

Post by Goggy »

Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:
Goggy
Posts: 291
Joined: 2004-11-07 01:22:35
Location: Черкассы
Contact:

Post by Goggy »

Вобщем попробовал, ходилка норм тока если приходится от координаты отходить то он этого неделает(в случае если возвращатся надо когда заёл нетуды :) ), а так норм в лесу впринципе должен любое препятствие обойти...
молодец :wink:
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

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

Дойдёт. По точкам.
Сделал дело - флуди смело !!!
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

2Savage . Гляну вечерком. Даже интересно стало.
Сделал дело - флуди смело !!!
Goggy
Posts: 291
Joined: 2004-11-07 01:22:35
Location: Черкассы
Contact:

Post by Goggy »

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

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


по точкам любой дойдёт!
а ты зделай так чтоб точку в тринсике вставить и он валил с Минока :mrgreen: :wink:
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Goggy wrote:а ты зделай так чтоб точку в тринсике вставить и он валил с Минока :mrgreen: :wink:
а теперь скажи мне практический смысл данного действия.
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

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

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


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

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

Смысл в ходилке есть толька на небольшие расстояния.
Сделал дело - флуди смело !!!
BETEPAH
Expert!
Posts: 838
Joined: 2004-05-31 09:31:51
Contact:

Post by BETEPAH »

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

Я так покумекал ..... думаю что ходилка ( любая) будет работать Лучше если проверять обьекты на пути ....тобишь есть найден обьект на пути прохода то выбор маршрута обхода. Это конешно муторно и сложно ....но если при каждом шаге будет коректировка маршрутизации.....то того и глядишь будет все оки ))
Все просто.
BETEPAH ™
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

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

флудер ;)
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

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

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

Это что по твоему надо массив хранить в файле обьектов мира ???
Ты представляешь скока это места будет жрать и как отразится на скорости работы ???
Флудер!!!
Сделал дело - флуди смело !!!
BETEPAH
Expert!
Posts: 838
Joined: 2004-05-31 09:31:51
Contact:

Post by BETEPAH »

Сами болтуны ..... я про то что надо коректировку проверять при каждом шаге.
Все просто.
BETEPAH ™
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Все вы флудеры и совершенно не следите за АСМом. В нем давно есть работа с картами и вердатой. Статики, правда, пока нету. Но, насколько мне известно, будет. Когда АГРСу надоест линейка.
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

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

Просто Ветеран немного ахинию прогнал...
BETEPAH
Expert!
Posts: 838
Joined: 2004-05-31 09:31:51
Contact:

Post by BETEPAH »

нА ОХИНЕЮ отвечу.
А что мешает какким нибуть чудесным образом проверять путь по линии к точке и если на пути стоит обьект не входящий в масив тайлов "проходимых" то тогда обход его на -1 или +1....что тут бредового то ?.Замечу что масив тайлов не так уж и велик.
Все просто.
BETEPAH ™
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

Не кипятись. В процессе уже.
Вот хернёй перестану маятся и допишу.
Сделал дело - флуди смело !!!
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Столько ответов и ни одного дельного совета :) С вами каши не сваришь :(
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Перейти на АСМ, значит замкнуться на себе и кучке избранных. У меня несколько другая политика.
AlexeyVorotnikov
Junior Expert
Posts: 138
Joined: 2004-09-18 15:12:06

Post by AlexeyVorotnikov »

Попробовал я присобачить эту ходилку к лумберу. Заметил одну странность: она подходит к дереву строго с северо-запада. Даже если она уже подошла к дереву с другой стороны, она обходит дерево так, чтобы оказаться на северо-запад от него и только тогда считает, что пришла на место.
AlexeyVorotnikov
Junior Expert
Posts: 138
Joined: 2004-09-18 15:12:06

Post by AlexeyVorotnikov »

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

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