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

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