Yoko

All sides of Injection
It is currently 2025-11-06 14:07:35

All times are UTC+02:00




Post new topic  Reply to topic  [ 27 posts ]  Go to page 1 2 Next
Author Message
PostPosted: 2005-02-17 08:41:20 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
Вообщем вчера заморочился на новую ходилку, чтоб бродила по городу без проблем. Получилось пока не очень. Препядствия типа открытых магазинов почти не обходит :) Но думаю на коротких дистанциях будет обходить столы и прочую мебель. Соответственно в лесу вообще проблем с застреванием быть не должно.

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

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

Также хотел выслушать соображения по поводу логики обхода препядствий.
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



Top
   
 Post subject:
PostPosted: 2005-02-17 09:05:14 
Offline
User avatar

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


Top
   
 Post subject:
PostPosted: 2005-02-17 09:10:19 
Offline
User avatar

Joined: 2004-11-07 01:22:35
Posts: 291
Location: Черкассы
Вобщем попробовал, ходилка норм тока если приходится от координаты отходить то он этого неделает(в случае если возвращатся надо когда заёл нетуды :) ), а так норм в лесу впринципе должен любое препятствие обойти...
молодец :wink:


Top
   
 Post subject:
PostPosted: 2005-02-17 09:42:45 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
Goggy wrote:
Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:

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

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-02-17 09:45:19 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
2Savage . Гляну вечерком. Даже интересно стало.

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-02-17 09:47:43 
Offline
User avatar

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

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


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


Top
   
 Post subject:
PostPosted: 2005-02-17 09:49:32 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
Goggy wrote:
а ты зделай так чтоб точку в тринсике вставить и он валил с Минока :mrgreen: :wink:
а теперь скажи мне практический смысл данного действия.


Top
   
 Post subject:
PostPosted: 2005-02-17 09:58:47 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
Goggy wrote:
Askaneli wrote:
Goggy wrote:
Попробуй запусти от банка В брите или из замка Лорда Бритиша....
Никогда недойдёт :roll:

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


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

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

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

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-02-17 10:55:20 
Offline
Expert!
User avatar

Joined: 2004-05-31 09:31:51
Posts: 838
Операция на глаз, через задний проход, с летальным исходом.

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

_________________
Все просто.
BETEPAH ™


Top
   
 Post subject:
PostPosted: 2005-02-17 11:25:49 
Offline
Expert!
User avatar

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

флудер ;)


Top
   
 Post subject:
PostPosted: 2005-02-17 12:18:00 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
BETEPAH wrote:
Операция на глаз, через задний проход, с летальным исходом.

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

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

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-02-17 14:45:13 
Offline
Expert!
User avatar

Joined: 2004-05-31 09:31:51
Posts: 838
Сами болтуны ..... я про то что надо коректировку проверять при каждом шаге.

_________________
Все просто.

BETEPAH ™


Top
   
 Post subject:
PostPosted: 2005-02-17 14:46:38 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Все вы флудеры и совершенно не следите за АСМом. В нем давно есть работа с картами и вердатой. Статики, правда, пока нету. Но, насколько мне известно, будет. Когда АГРСу надоест линейка.


Top
   
 Post subject:
PostPosted: 2005-02-17 14:57:15 
Offline
Expert!
User avatar

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

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


Top
   
 Post subject:
PostPosted: 2005-02-17 15:15:17 
Offline
Expert!
User avatar

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

_________________
Все просто.

BETEPAH ™


Top
   
 Post subject:
PostPosted: 2005-02-17 15:56:49 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
Не кипятись. В процессе уже.
Вот хернёй перестану маятся и допишу.

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-02-17 16:03:30 
Offline
Expert!
User avatar

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


Top
   
 Post subject:
PostPosted: 2005-02-17 16:04:49 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
Перейти на АСМ, значит замкнуться на себе и кучке избранных. У меня несколько другая политика.


Top
   
 Post subject:
PostPosted: 2005-02-17 20:14:16 
Offline
Junior Expert

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


Top
   
 Post subject:
PostPosted: 2005-02-17 20:14:58 
Offline
Junior Expert

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 27 posts ]  Go to page 1 2 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited