Стек

Ask for help

Moderators: Murderator+, Murderator

slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Стек

Post by slonopotam »

В поисках ходилки нашел от SerrouS. Но там какието стеки. Что с ними делать? Попытался что либо найти по этому вопросу и нашел только то, что надо перед вызовом процедуры сохранить адрес в стеке, а при выходе из процедуры корректно восстановить состояние стека. Это чтото связано с запоминанием, типа кукесов?

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

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

viewtopic.php?t=5049
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post by Nmy »

slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

По этой ссылке :

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

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

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

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


По ссылке где больше ходилок, результат выдает поисковик, там только от Yoko нормальная но она на более менее сложном препятствии вырубается.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post 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
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post 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


Просто для меня это еще оч сложно.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Посмотри в топике с моим наследством, там была еще ходилка от Sergious. Она там в автолоаде в конце. В комментариях написано как ее использовать. Она с обходом препятствий.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Edred ходилка кул, но есть пару "-".

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

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

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

NMY Несмог опробовать твою ходилку т.к. несмог вставить правильно, нет настроек. Вместо ходьбы получаем дисконект.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post 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
я лично менял на ретурн, непомню почему
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post 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
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Чет нехочет ходить ругается на скрипт.


P.S. NMY твой скрипт замирает на любом препятствии. Он только для хождения по полям :P
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Немного фантазии и любая ходилка станет ходить. Тебе как, ходить по незнакомой местности или из шахты в банк? Вообщем можно использовать систему вэйпойнтов. То есть делаешь небольшой модуль в котором помещаешь несколько вызовов ходилки по координатам. То есть постепенно приближаясь к конечной точке. Но зато без гемороя. Как может обычная ходилка понять что надо реку перейти по мосту? Очень просто, первый запуск ходилки это точка в начале моста, второй точка в конце и дальше точка куда надо прийти или следующая промежуточная. Не стоит усложнять скрипты, смысла в этом мало, надо упростить задачу.
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

slonopotam wrote:Чет нехочет ходить ругается на скрипт.


Сказано же - это под АСМ модуль на инжект. И нет уверенности, что на стандартной версии будет работать.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
SLAK
Posts: 182
Joined: 2005-08-19 16:12:23
Contact:

Post by SLAK »

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

на 505.11 незнает команды, так что видать - только для PE-версий :(
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

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


АГРС, к сожалению, в полной отключке от инета, не отвечает на мои послания. Так что разрешение раздать приват-версию у меня нет. Самое прикольное, что она мне самому уже не нужна - АСМ не стоит вообще уже месяц (как снова начал играть). Используется голый инжект 312.19 и только для ПвМ (в ПвП не участвую пока)... Вся прокачка изя + стелс, счас вообще и изе до свиданья скажу, как только мининг на стелсе допишу (сижу, воюю с передачей разномерных массивов в качестве параметра единой функции, речь о паскале)... Эх...
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
SLAK
Posts: 182
Joined: 2005-08-19 16:12:23
Contact:

Post by SLAK »

Edred wrote:[ счас вообще и изе до свиданья скажу, как только мининг на стелсе допишу

Как только на стелс выпустят ходилку, то все макросы можно будет на нём писать, а инжект останется для ПвП, ПвМ...
Эх скорее бы :)
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

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


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

ЗЫ: Версия 97 будет революционной. Вы все просто стелс не узнаете. Даже я, который почти все билды тестит, каждый день радуюсь изменениям после получения очередного билда...
Last edited by Edred on 2006-10-20 02:07:40, edited 1 time in total.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

А "стелс" это что? Это то, что использует виртуальный шард? ... А гендальф тогда что такое?
DerMeister сейчас на нейрале!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

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

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

Очень удобная штучка. И главное - совершенно ресурсонетребовательная... вон у меня счас в фоне 8 чаров на нем, за полсуток набежало "аж" 3 минуты процессорного времени и "аж" целых 3 мега памяти занял... :lol:
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Savage
Expert!
Posts: 1205
Joined: 2004-04-04 11:13:54
Location: Балаково, Саратовская обл.
Contact:

Post by Savage »

Последний билд от 4-го месяца. О каких темпах развития ты говоришь?
Паскаль не радует совсем :(
SLAK
Posts: 182
Joined: 2005-08-19 16:12:23
Contact:

Post by SLAK »

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

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