Народ дайте нормальную процедуру хождения.

Anything and all.

Moderators: Murderator+, Murderator

Andrey
Posts: 13
Joined: 2004-10-13 12:52:35
Contact:

Народ дайте нормальную процедуру хождения.

Post by Andrey »

Народ дайте нормальную процедуру хождения. Взял из Lumberjecking-а а она как то криво ходит и дойти до нужной точки не могет совсем... Может более продвинутое что есть?
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Бери Yoko'вскую. Все мои боты на ней, ни разу не подводила.
Ex-Brodyaga
Junior Expert
Posts: 150
Joined: 2004-04-12 20:26:41

Post by Ex-Brodyaga »

А у меня получалось её запороть
GrayLord
Expert!
Posts: 333
Joined: 2004-06-04 03:24:25
Contact:

Post by GrayLord »

Ex-Brodyaga wrote:А у меня получалось её запороть

ну, брат, таков уж инжект... ну не предназначен он для ходьбы, как ни крути... так что, даю гарантию 100%, что смогу запороть любую ходилку на инжекте с его нынешними возможностями из числа тех, что есть в документации. %)
bbp
Posts: 27
Joined: 2004-04-19 14:50:01
Contact:

Post by bbp »

Вот три (вроде :lol: ночь на дворе никак в бардаке своём не разберусь ) ходилки из моего безумного майнинг скрипта. Одна Савы, и ещё пара хз каких. Мне в скрипте нужны все три =) Но самая хорошая на мой взгляд\тест первая, но ей не получится ходить на гейты.


Code: Select all


sub walk(dx,dy)
   VAR i, walkwait=300
   If dx<>0 then
      If dx>0 then
         If UO.GetDir()<>2 then
            UO.Press(34)
            wait(walkwait)
            CheckPause()
         Endif
         For i=1 to dx
            UO.Press(34)
            wait(walkwait)
            CheckPause()
         next
      Else
         If UO.GetDir()<>6 then
            UO.Press(36)
            wait(walkwait)
            CheckPause()
         Endif
         For i=1 to dx*-1
            UO.Press(36)
            wait(walkwait)
            CheckPause()
         next
      Endif

   endif
   
   If dy<>0 then
      If dy>0 then
         If UO.GetDir()<>4 then
            UO.Press(35)
            wait(walkwait)
            CheckPause()
         Endif
         For i=1 to dy
            UO.Press(35)
            wait(walkwait)
            CheckPause()
         next
      Else
         If UO.GetDir()<>0 then
            UO.Press(33)
            wait(walkwait)
            CheckPause()
         Endif
         For i=1 to dy*-1
            UO.Press(33)
            wait(walkwait)
            CheckPause()
         next
      Endif
   endif
   wait(1000)
end sub
sub bandage()
   UO.exec('setarm 5')
   UO.exec('bandageself')
   wait(1000)
   UO.exec('arm 5')
end sub



sub Move_play(path)
   var x=val(left(path,4))
   var y=val(mid(path,4,4))
   var i=8,f
   uo.print(path)
   move(x,y)
   move(x,y)
   while i<len(path)
      f=val(path[i])
      if f then
         i=i+1
        else
           f=1
      endif
      while f
         Move_Step(path[i])
         f=f-1
      wend
      i=i+1
   wend
endsub
   
sub Move_rec()
   var nx,ny,x=uo.getx(),y=uo.gety(),s="0000",path=""
   var npath=left(s,len(s)-len(str(x)))+str(x)+left(s,len(s)-len(str(y)))+str(y)
   var  m="-SN-EDR-WLU",xp="-11-222-000",yp="-20-120-120"
   UO.DeleteJournal()
   while (UO.InJournal("stop")==0)
      nx=UO.GetX()
      ny=UO.GetY()
      s=(ny>y)+2*(ny<y)+4*(nx>x)+8*(nx<x)
      if s<>0 then
         path=path+m[s]
         x=x+val(xp[s])-1
         y=y+val(yp[s])-1
        else
         wait(10)
      endif
   wend
   x=0
   while x<len(path)
      y=1
      while path[x]==path[x+1] AND y<9
         x=x+1
         y=y+1
      wend
      if y==1 then
         nPath=nPath+path[x]
        else
         nPath=nPath+STR(y)+path[x]
      endif
      x=x+1
   wend
   return npath
end sub

sub Move_Step(dir)
   var M="NESWLURD"
   var X="12100022"
   var Y="01212002"
   for var i=0 to len(M)-1
      if dir==M[i] then
         return move(uo.GetX()+val(X[i])-1,uo.GetY(i)+val(Y[i])-1)
      endif
   next
   uo.print("dir "+dir+" not defined")
   return 0
end sub

sub Move(x,y)
   var cx,cy,e=0,dir=1,M="-40-231-657"
   while dir<>0
      cx=uo.getx()
      cy=uo.gety()
      dir=(cy<y)+2*(cy>y)+4*(cx<x)+8*(cx>x)
      if dir<>0 then
         MoveK(val(M[dir]))
         if cx==uo.getx() && cy==uo.gety() then
            e=e+1
            if e==40 then
               return 0
            endif
           else
              e=0
         endif
      endif
   wend
   return 1
endsub

sub MoveK(dir)
   var x,y,time,Key="06172435"
   if UO.GetDir()<>dir then
      UO.Press(val(Key[dir])+33)
      time=500
      if UO.GetDir()<>dir then
         if time==0 then
            return 0
         endif
         wait(5)
         time=time-5
      endif
   endif
   x=UO.GetX()
   y=UO.GetY()
   time=500
   UO.Press(val(Key[dir])+33)
   while x==UO.GetX() && y==UO.GetY() && time>0
      time=time-5
      wait(5)
   wend
   return time>0   
end sub


sub WalkN(x,y,Target)
   VAR i
   VAR dx,dy,Exit=0
   
   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+dy==0 Then
            Exit=1
         Endif

      Endif
   
      If dx<>0 AND dy<>0 Then
         If dx>0 AND dy>0 Then
            GoSE()
         Endif

         If dx>0 AND dy<0 Then
            GoNE()
         Endif

         If dx<0 AND dy>0 Then
            GoSW()
         Endif

         If dx<0 AND dy<0 Then
            GoWN()
         Endif

      Endif
   
      If dx<>0 AND dy==0 Then
         If dx>0 Then
            GoE()
         Endif
         
         If dx<0 Then
            GoW()
         Endif
      Endif


      If dx==0 AND dy<>0 Then
         If dy>0 Then
            GoS()
         Endif
         
         If dy<0 Then
            GoN()
         Endif
      Endif
   Wend
end sub





sub GoW()
   VAR walkwait=300
   VAR x,y,dir=6
   VAR key=36 ; Home key
   x=UO.GetX()
   y=UO.GetY()
   while UO.GetDir()<>dir
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   wend
   UO.Press(key)

   wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
   
   If UO.GetX()+1==x Then
      return -1
   Else
      return 1
   Endif
end sub


sub GoN()
   VAR walkwait=300
   VAR x,y,dir=0
   VAR key=33 ; PgUp
   x=UO.GetX()
   y=UO.GetY()
   while UO.GetDir()<>dir
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   wend
   UO.Press(key)

   wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
   
   If UO.GetY()+1==y Then
      return -1
   Else
      return 1
   Endif
end sub


sub GoE()
   VAR walkwait=300
   VAR x,y,dir=2
   VAR key=34 ; PgDown
   x=UO.GetX()
   y=UO.GetY()
   while UO.GetDir()<>dir
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   wend
   UO.Press(key)

   wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
   
   If UO.GetX()-1==x Then
      return -1
   Else
      return 1
   Endif
end sub


sub GoS()
   VAR walkwait=300
   VAR x,y,dir=4
   VAR key=35 ; End
   x=UO.GetX()
   y=UO.GetY()
   while UO.GetDir()<>dir
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   wend
   UO.Press(key)

   wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
   
   If UO.GetY()-1==y Then
      return -1
   Else
      return 1
   Endif
end sub


sub GoWN()
   VAR walkwait=300
   VAR x,y,dir=7
   VAR key=38 ; UpArrow
   x=UO.GetX()
   y=UO.GetY()

   If UO.GetDir()<>dir Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif

   If UO.GetDir()==dir Then
      UO.Press(key)
      wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
      If UO.GetDir()==dir Then
         return -1
      Else
         return UO.GetDir()
      Endif
   Else
      return UO.GetDir()
   Endif
end sub


sub GoNE()
   VAR walkwait=300
   VAR x,y,dir=1
   VAR key=39 ; RightArrow
   x=UO.GetX()
   y=UO.GetY()

   If UO.GetDir()<>dir Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif

   If UO.GetDir()==dir Then
      UO.Press(key)
      wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
      If UO.GetDir()==dir Then
         return -1
      Else
         return UO.GetDir()
      Endif
   Else
      return UO.GetDir()
   Endif
end sub


sub GoSE()
   VAR walkwait=300
   VAR x,y,dir=3
   VAR key=40 ; DownArrow
   x=UO.GetX()
   y=UO.GetY()

   If UO.GetDir()<>dir Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif

   If UO.GetDir()==dir Then
      UO.Press(key)
      wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
      If UO.GetDir()==dir Then
         return -1
      Else
         return UO.GetDir()
      Endif
   Else
      return UO.GetDir()
   Endif
end sub


sub GoSW()
   VAR walkwait=300
   VAR x,y,dir=5
   VAR key=37 ; LeftArrow
   x=UO.GetX()
   y=UO.GetY()

   If UO.GetDir()<>dir Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif

   If UO.GetDir()==dir Then
      UO.Press(key)
      wait(walkwait)
      If x==UO.GetX() AND y==UO.GetY() Then
         CheckLag()
      Endif
      If UO.GetDir()==dir Then
         return -1
      Else
         return UO.GetDir()
      Endif
   Else
      return UO.GetDir()
   Endif
end sub





sub gotoxy(x,y,prec)
   var ld=0,ldc=0
   var dx,dy
   var mx,my
   var ox,oy,mk,k
#uo.print(">")
#uo.track("1",str(x),str(y))
start:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if not ldc then
uo.print(STR(dx))
end if
if dx<3 then
mk=70
else
mk=15
end if
ox=mx
oy=my
for k=1 to mk
mx=UO.GetX()
my=UO.GetY()
if mx<>ox or my<>oy then
goto sdidapl
end if
wait(10)
next
sdidapl:
mx=UO.GetX()
my=UO.GetY()
dx=mx-x
if dx<0 then
dx=0-dx
endif
dy=my-y
if dy<0 then
dy=0-dy
endif
if dy>dx then
dx=dy
end if
if dx<=prec then
return
end if
if ld==dx then
ldc=ldc+1
if ldc>100 then
uo.print("Can not reach location!")
return
end if
else
ld=dx
end if
if mx==x then
if my==y then
return
endif
if my>y then
#UO.Print("UR")
UO.Press(33)
goto start
endif
#UO.Print("DL")
UO.Press(35)
goto start
end if
if mx<x then
if my>y then
#UO.Print("R")
UO.Press(39)
goto start
endif
if my==y then
#UO.Print("DR")
UO.Press(34)
goto start
endif
#UO.Print("D")
UO.Press(40)
goto start
end if
if my<y then
#UO.Print("L")
UO.Press(37)
goto start
endif
if my==y then
#UO.Print("LU")
UO.Press(36)
goto start
endif
#UO.Print("U")
UO.Press(38)
goto start
end sub
 
"...было бы величайшей ошибкой думать."
В.И.Ленин
GrayLord
Expert!
Posts: 333
Joined: 2004-06-04 03:24:25
Contact:

Post by GrayLord »

bbp wrote:Вот три (вроде :lol: ночь на дворе никак в бардаке своём не разберусь ) ходилки из моего безумного майнинг скрипта. Одна Савы, и ещё пара хз каких. Мне в скрипте нужны все три =) Но самая хорошая на мой взгляд\тест первая, но ей не получится ходить на гейты.

читать гигабайты скриптов - это, конечно, здорово... но ты бы хоть в разные поля вставлял разное... в смысле, чтобы все версии не сливались в одну общую кучу - и разбирай потом как знаешь, а каждая была бы взята в свой тег code.
Andrey
Posts: 13
Joined: 2004-10-13 12:52:35
Contact:

Post by Andrey »

2 AGRS
А что за процедура от Yoko?

На мой взгляд самая нормальная процедура обхода это та которая в EasyUO но в Injection ее нету... :-( Может аналоги хотябы скажите чтоб препядствия обходила...

Попробовал написаные процедуры. Все затыкаются когда доходят до препятствия и даже не пробуют его обойти :-( Все равно спасибо...
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Andrey wrote:2 AGRS
А что за процедура от Yoko?


http://yoko.netroof.net/forum/viewtopic.php?t=804
GrayLord
Expert!
Posts: 333
Joined: 2004-06-04 03:24:25
Contact:

Post by GrayLord »

Andrey wrote:2 AGRS
А что за процедура от Yoko?

На мой взгляд самая нормальная процедура обхода это та которая в EasyUO но в Injection ее нету... :-( Может аналоги хотябы скажите чтоб препядствия обходила...

Попробовал написаные процедуры. Все затыкаются когда доходят до препятствия и даже не пробуют его обойти :-( Все равно спасибо...

обходить препятствия и на инжекте можно попробовать, но это будет "поиск вслепую"... такой скрипт даже из маленького дома с одним столом и одним стулом и снятой дверью, при неудачном стечении обстоятельств (коннект и лаги в рассчет не принимаем, а только наше положение относительно выхода), может выбраться только через несколько часов...
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

На чем угодно не выберется если нет карты проходимости или хотябы шанса ее составить. %)
GrayLord
Expert!
Posts: 333
Joined: 2004-06-04 03:24:25
Contact:

Post by GrayLord »

AGRS wrote:На чем угодно не выберется если нет карты проходимости или хотябы шанса ее составить. %)

а ты пробовал её составлять? чтобы такое осуществить силами инжекта - надо очень много номеров тайлов и обжект тайпов в скрипт переписать, по которым нельзя пройти, после чего долго и упорно перебитать их по всем клеткам вокруг себя... в принципе, если извратнуться с waittargettile или, что еще лучше, с privatedig (в версии от 25.09.2004), то на эту байду уйдет тонна времени, но карту проходимости ты составишь, и легко пройдешь, оптимальным путем, но затраты времени будут неимоверно большие, чем при поиске вслепую.
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Это фигня. У нас же теоретический вопрос. Проблему составят именно динамические объекты. Инфу о них взять негде.
BETEPAH
Expert!
Posts: 838
Joined: 2004-05-31 09:31:51
Contact:

Post by BETEPAH »

GrayLord wrote:
Andrey wrote:2 AGRS
А что за процедура от Yoko?

На мой взгляд самая нормальная процедура обхода это та которая в EasyUO но в Injection ее нету... :-( Может аналоги хотябы скажите чтоб препядствия обходила...

Попробовал написаные процедуры. Все затыкаются когда доходят до препятствия и даже не пробуют его обойти :-( Все равно спасибо...

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


Обрадую......Ходика такая была написана буквально 3 дня назад ...Скриптер Асканели (запомните это имя)....
Обход препятствий, работа с растоянием
Выход и из комнаты и обход скал по большому кругу .....и при этом ОФИГЕННАЯ скорость .....работа по 8 направлениям .....Вобщем пока не универсал,нужно сделять фишку Савы с подходом по айди ....но работаем
Все просто.
BETEPAH ™
Andrey
Posts: 13
Joined: 2004-10-13 12:52:35
Contact:

Post by Andrey »

2 ВЕТЕРАН

Респект. Кинь ссылку плз если есть...

2 GrayLord

А почему бы не сделать поиск случайным? Те движение в случайном направлении причем вероятность идти в сторону изначального направления выше... Короче щас ссылку дам. http://algolist.manual.ru/games/smartmove.php
Shaud
Posts: 87
Joined: 2004-09-27 21:42:27
Contact:

Post by Shaud »

А что такое privatedig?
А где взять эту самую версию с ней?
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

Andrey wrote:2 ВЕТЕРАН

Респект. Кинь ссылку плз если есть...

2 GrayLord

А почему бы не сделать поиск случайным? Те движение в случайном направлении причем вероятность идти в сторону изначального направления выше... Короче щас ссылку дам. http://algolist.manual.ru/games/smartmove.php


Случайный поиск не канает !!! Скорость низкая !!! Это то меня и не устраивало во всех ходилках которые я нашёл !!! И рано или позже чар начинал тыкатся об стенку !!!
Мой чар на моей ходилке напрямую прётся туда куда надо и при этом с умом обходит все препятствия без лишьних нарезаний кругов !!!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Askaneli wrote:Мой чар на моей ходилке напрямую прётся туда куда надо и при этом с умом обходит все препятствия без лишьних нарезаний кругов !!!


Дык код в студию! Посмотрим, потестим... ;)
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

Edred wrote:
Askaneli wrote:Мой чар на моей ходилке напрямую прётся туда куда надо и при этом с умом обходит все препятствия без лишьних нарезаний кругов !!!


Дык код в студию! Посмотрим, потестим... ;)

Я уже протестил и ВЕТЕРан тоже протестил, ему понравилось !!! Спасибо !!!
Сделал дело - флуди смело !!!
GrayLord
Expert!
Posts: 333
Joined: 2004-06-04 03:24:25
Contact:

Post by GrayLord »

Andrey wrote:2 GrayLord

А почему бы не сделать поиск случайным? Те движение в случайном направлении причем вероятность идти в сторону изначального направления выше... Короче щас ссылку дам. http://algolist.manual.ru/games/smartmove.php

ссылка не работает.
вообще, для меня лично вопрос ходилки грамотной - чисто теоритический вопрос. писать такую штуку мне неохота, так как сам давно не играю, и только изредка балуюсь скриптами для инжекта.
GrayLord
Expert!
Posts: 333
Joined: 2004-06-04 03:24:25
Contact:

Post by GrayLord »

Askaneli wrote:
Andrey wrote:2 ВЕТЕРАН

Респект. Кинь ссылку плз если есть...

2 GrayLord

А почему бы не сделать поиск случайным? Те движение в случайном направлении причем вероятность идти в сторону изначального направления выше... Короче щас ссылку дам. http://algolist.manual.ru/games/smartmove.php


Случайный поиск не канает !!! Скорость низкая !!! Это то меня и не устраивало во всех ходилках которые я нашёл !!! И рано или позже чар начинал тыкатся об стенку !!!
Мой чар на моей ходилке напрямую прётся туда куда надо и при этом с умом обходит все препятствия без лишьних нарезаний кругов !!!

пока что кроме восклицаний мы ничего не услышали и не увидели от тебя в этой теме, и кто там чего тестил - неизвестно. если не желаешь делиться с людьми опытом, и хочешь от народа денег за скрипт - размещай рекламу на microdoft.com.
Post Reply