Page 1 of 2

Стек

Posted: 2006-10-17 21:08:54
by slonopotam
В поисках ходилки нашел от SerrouS. Но там какието стеки. Что с ними делать? Попытался что либо найти по этому вопросу и нашел только то, что надо перед вызовом процедуры сохранить адрес в стеке, а при выходе из процедуры корректно восстановить состояние стека. Это чтото связано с запоминанием, типа кукесов?

Но это ничего не дает :oops:

Что тут куда пихать и что с этим стеком делать???

viewtopic.php?t=5049

Posted: 2006-10-18 09:16:50
by Nmy

Posted: 2006-10-18 10:32:43
by slonopotam
По этой ссылке :

от Beyonder - незнаю как вставить к тому же там нет проверки насколько близко подойти

от SerrouS - со стеками в которых я 0

от Savage - тоже самое что и с ходилкой от Beyonder, непроверяет насколько близко подойти

от Destruction - хождение по прямой а мне обходить препятствия нужно


По ссылке где больше ходилок, результат выдает поисковик, там только от Yoko нормальная но она на более менее сложном препятствии вырубается.

Posted: 2006-10-18 12:29:04
by Nmy
даже молоденцы умеют конфету в рот засунуть, кажется тебе надо помоч:

Code: Select all

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
         checkstam()
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif
         checkstam()
   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
      checkstam()
      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
      checkstam()
      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

sub checkstam()
var refresh = '0x0F0B'
if uo.stamina < 10 then
   uo.findtype(refresh,-1,'backpack')
   if uo.findcount() then
      uo.usetype(refresh)
      wait(1000)
   else
      uo.print("Nety Refreshey! Stoim...")
   repeat
      wait(500)
   until uo.stamina >= 10
   endif
else
endif
endsub

Posted: 2006-10-18 14:19:44
by slonopotam
:lol: А как ее в другой скрипт вставить?

чтото типа этого, только под эту ходилку:

Code: Select all

sub Walk()  
var myobject=uo.getserial("laststatus")
var goX=uo.getx(myobject)
var goY=uo.gety(myobject)
#go to object X:Y in 0-1 cells range
gotoxy(5972,1493,1) 
end sub


Просто для меня это еще оч сложно.

Posted: 2006-10-18 17:40:50
by Edred
Посмотри в топике с моим наследством, там была еще ходилка от Sergious. Она там в автолоаде в конце. В комментариях написано как ее использовать. Она с обходом препятствий.

Posted: 2006-10-18 20:52:42
by slonopotam
Edred ходилка кул, но есть пару "-".

1) Пытается летать сквозь предметы неразличая высоты, из-за этого бывают дисконекты.

2) Большые препятствия обходит преобладающе справо, а в некоторых ситуациях так можно очень далеко зайти... :)

------------

NMY Несмог опробовать твою ходилку т.к. несмог вставить правильно, нет настроек. Вместо ходьбы получаем дисконект.

Posted: 2006-10-18 22:09:23
by Nmy

Code: Select all

superwalk(0,0,'0x0000000')


Code: Select all

superwalk(3876,3876,'')


Code: Select all

         If UO.GetDistance(Target)<2 Then
            Exit=1
         Endif

Code: Select all

         If dx==0 AND dy==0 Then
            Exit=1
         Endif

Code: Select all

            Exit=1
я лично менял на ретурн, непомню почему

Posted: 2006-10-18 22:20:40
by Edred
slonopotam wrote:2) Большые препятствия обходит преобладающе справо, а в некоторых ситуациях так можно очень далеко зайти... :)


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

Альтернативы если хочется суперходилки:
1. Пинжект - там реализован вызов клиентского трейса
2. ИзиУО - интерфейс подключения смотри опять же в моем наследстве, Изя напрямую лезет в клиент и использует его патчфинд
3. АСМ, но не уверен, что в стандартных версиях есть команда

Code: Select all

UO.asmGetTrace(UO.GetX(),UO.GetY(),DstX,DstY,BorderSize,MapNumber)

Я сам вообще ни разу ее не использовал. Но вот ходилка от АГРСа с использованием этой функции валяется...

Можешь попробовать:

Code: Select all

;-------------------------------------------------------------------------------
; Система хождения по мировым координатам с обходом статичных препятствий
; Надежность ходьбы увеличена за счет скорости.
; Поэтому не рекомендуется использовать в ПвП ботах.
; DstX,DstY - координаты точки назначения
; BorderSize - размер рамки карты проходимости
; MapNumber - номер карты 0-4
; More - количество шагов на которое нужно подойти к цели.
;        0 - встать на цель
;        1 - драка с НПС (соседняя клетка)
; KeyPress - режим работы
;            True - UO.Press()
;            False - UO.AddStep()
SUB GoToXY(DstX,DstY,BorderSize,MapNumber,More,KeyPress)
  UO.Print('GoTo '+STR(DstX)+','+STR(DstY))
  Var Trace = UO.asmGetTrace(UO.GetX(),UO.GetY(),DstX,DstY,BorderSize,MapNumber)
  If Len(Trace)>More then
    WalkTrace(Mid(Trace,0,(Len(Trace)-More)),KeyPress)
  EndIf
  If (More==0) And (UO.GetX()<>DstX) And (UO.GetY()<>DstY) Then
    GoToXY(DstX,DstY,BorderSize,MapNumber,More,KeyPress)
  EndIf
END SUB
SUB WalkTrace(Trace,KeyPress)
  If Len(Trace)==0 Then
    Return 1
  EndIf
  For Var F = 0 To Len(Trace)-1
    MakeStep(Mid(Trace,F,1),KeyPress)
  Next
END SUB
SUB MakeStep(Key,KeyPress)
  Var CurX = UO.GetX()
  Var CurY = UO.GetY()
  Var CurTime = 0
  If KeyPress Then
    UO.Press(KeyCode(Key),PressCount(Key))
  Else
    UO.AddStep(Key)
  EndIf
  Repeat
    Wait(WalkTime)
    CurTime = CurTime + WalkTime
  Until (CurTime>MaxWalkTime) or (UO.GetX()<>CurX) or (UO.GetY()<>CurY)
END SUB
SUB KeyCode(Key)
  If Key=='1' Then
    Return 35
  EndIf
  If Key=='2' Then
    Return 40
  EndIf
  If Key=='3' Then
    Return 34
  EndIf
  If Key=='4' Then
    Return 37
  EndIf
  If Key=='6' Then
    Return 39
  EndIf
  If Key=='7' Then
    Return 36
  EndIf
  If Key=='8' Then
    Return 38
  EndIf
  If Key=='9' Then
    Return 33
  EndIf
  Return 0
END SUB
SUB PressCount(Key)
  If Key=='1' Then
    If UO.GetDir()==4 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='2' Then
    If UO.GetDir()==3 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='3' Then
    If UO.GetDir()==2 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='4' Then
    If UO.GetDir()==5 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='6' Then
    If UO.GetDir()==1 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='7' Then
    If UO.GetDir()==6 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='8' Then
    If UO.GetDir()==7 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  If Key=='9' Then
    If UO.GetDir()==0 Then
      Return 1
    Else
      Return 2
    EndIf
  EndIf
  Return 0
END SUB

Posted: 2006-10-18 22:48:17
by slonopotam
Чет нехочет ходить ругается на скрипт.


P.S. NMY твой скрипт замирает на любом препятствии. Он только для хождения по полям :P

Posted: 2006-10-19 00:17:47
by Savage
Немного фантазии и любая ходилка станет ходить. Тебе как, ходить по незнакомой местности или из шахты в банк? Вообщем можно использовать систему вэйпойнтов. То есть делаешь небольшой модуль в котором помещаешь несколько вызовов ходилки по координатам. То есть постепенно приближаясь к конечной точке. Но зато без гемороя. Как может обычная ходилка понять что надо реку перейти по мосту? Очень просто, первый запуск ходилки это точка в начале моста, второй точка в конце и дальше точка куда надо прийти или следующая промежуточная. Не стоит усложнять скрипты, смысла в этом мало, надо упростить задачу.

Posted: 2006-10-19 10:18:46
by Edred
slonopotam wrote:Чет нехочет ходить ругается на скрипт.


Сказано же - это под АСМ модуль на инжект. И нет уверенности, что на стандартной версии будет работать.

Posted: 2006-10-19 18:06:46
by SLAK
Edred wrote:Сказано же - это под АСМ модуль на инжект. И нет уверенности, что на стандартной версии будет работать.

на 505.11 незнает команды, так что видать - только для PE-версий :(

Posted: 2006-10-19 21:16:29
by Edred
SLAK wrote:на 505.11 незнает команды, так что видать - только для PE-версий :(


АГРС, к сожалению, в полной отключке от инета, не отвечает на мои послания. Так что разрешение раздать приват-версию у меня нет. Самое прикольное, что она мне самому уже не нужна - АСМ не стоит вообще уже месяц (как снова начал играть). Используется голый инжект 312.19 и только для ПвМ (в ПвП не участвую пока)... Вся прокачка изя + стелс, счас вообще и изе до свиданья скажу, как только мининг на стелсе допишу (сижу, воюю с передачей разномерных массивов в качестве параметра единой функции, речь о паскале)... Эх...

Posted: 2006-10-19 21:33:23
by SLAK
Edred wrote:[ счас вообще и изе до свиданья скажу, как только мининг на стелсе допишу

Как только на стелс выпустят ходилку, то все макросы можно будет на нём писать, а инжект останется для ПвП, ПвМ...
Эх скорее бы :)

Posted: 2006-10-19 22:48:08
by Edred
SLAK wrote:Как только на стелс выпустят ходилку, то все макросы можно будет на нём писать, а инжект останется для ПвП, ПвМ...
Эх скорее бы :)


Будет. Очень скоро. И вообще, учитывая темп развития стелса в последнее время, можно достаточно уверенно утверждать - к весне мы все инжект забудем как страшный сон... :oops:

ЗЫ: Версия 97 будет революционной. Вы все просто стелс не узнаете. Даже я, который почти все билды тестит, каждый день радуюсь изменениям после получения очередного билда...

Posted: 2006-10-19 23:14:09
by DerMeister =)
А "стелс" это что? Это то, что использует виртуальный шард? ... А гендальф тогда что такое?

Posted: 2006-10-20 02:05:43
by Edred
Стелс использует пока виртуальный шард только для организации реконнекта (автоматического, причем из скрипта можно отключать автоматику, дисконнектить чара и коннектить снова). В ранних версиях, говорят, была возможность запускать клиент, но глюкавая. В будущих (и довольно близких) снова будет.

Да, стелс - это аналог гендальфа, но гораздо продвинутее и надежнее. Текстовый клиент. Тебе сюда: http://stealth.od.ua

Очень удобная штучка. И главное - совершенно ресурсонетребовательная... вон у меня счас в фоне 8 чаров на нем, за полсуток набежало "аж" 3 минуты процессорного времени и "аж" целых 3 мега памяти занял... :lol:

Posted: 2006-10-20 07:02:51
by Savage
Последний билд от 4-го месяца. О каких темпах развития ты говоришь?
Паскаль не радует совсем :(

Posted: 2006-10-20 10:27:03
by SLAK
Savage wrote:Последний билд от 4-го месяца. О каких темпах развития ты говоришь?
Паскаль не радует совсем :(

Есть бэта - тэстерские релизы... Эдред же написал, почти каждый день новый билд :) Просто пока прога не будет тщательно обработана напильником, то её не выложат :wink:
Меня тож паскаль не порадовал, потому что я его совсем не знал :P Щас пишу уже довольно нормальные скрипты :idea: