Page 1 of 1

Различия между готу и ВалкМе

Posted: 2009-12-18 21:16:30
by bitnerik
Собственно очнь интересует чем отличается тут функция Goto от WalkMe. Если можно поясните почему,и где и как это заметно.Что нужно прописывать под Goto а что под WalkMe ???

Code: Select all

sub main2() 
uo.ignorereset()
uo.ignore('self')
uo.set('distance',1)
   VAR DigDistance, TileNum, LastTimer
   DIM BaseX[11], BaseY[11]   ## ????????????? ????? ? ?????????, ( ??????? ?? ? ??? )?
   VAR BaseZ, WayPoint, WayPoints
   VAR MaxWeight, KillElemental

   KillElemental='No'
   MaxWeight=550
   DigDistance=2
   WayPoints=10  ## ????????????? ????? ? ?????????, ( ??????? ?? ? ??? )?

## ??? ????? ?????????? ????? ??? ??? ????? ???????? ? ???????? ??????, ?????? ?????? ??????????: 1111,2222 , ?????? ??????????: BaseX[0]=1111 , BaseY[0]=2222. ???? ??? ???? ????? ????? ??? ???? ?? ?????? ???? ???????? ?????( ?????? ???????? ????? ????? ??? ??? ???????????? ????? ?? ?????).

## ?????????? ?1



## ?????????? ?2
BaseX[1]=3434
BaseY[1]=3454


   
      For WayPoint=1 to WayPoints-1
         WalkMe(BaseX[WayPoint],BaseY[WayPoint],'')
         digitstay(MaxWeight,DigDistance,KillElemental,BaseX[WayPoint],BaseY[WayPoint])
      Next
   wend
end sub



;-------------------- Try to mine under self ------------------

sub digitstay(MaxWeight,MaxDistance,KillElemental,BaseX,BaseY)
   VAR x,y,z='0',TileNum='1339'
   VAR Last=0, LastTimer
   VAR MaxTimer=110
   var myx, myy
   For x=-MaxDistance to MaxDistance
      uo.print('adasd')
         Repeat
        Del('You put|You are hungry|You loosen|is nothing|line of sight to that|That is too|You cannot|Try mining')
           dig:     
           checklag()
            UO.WaitTargetTile(TileNum,STR(UO.GetX()+x),STR(UO.GetY()+Y),z)
         
            LastTimer=UO.Timer()
 
            Repeat


               uo.deletejournal()
               repeat

               wait(100)


            until UO.InJournal('is nothing|You are hungry|line of sight to that|That is too|You cannot|Try mining')  OR LastTimer+250<UO.Timer() #OR uo.life < uo.str

         Until UO.InJournal('is nothing|line of sight to that|That is too|You cannot|Try mining') OR LastTimer+60<UO.Timer()


         if uo.weight>300 then
         plavka()
         end if
      Next
   Next
end sub



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;; W A L K E R ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

################# W A L K E R ######################

sub WalkME(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
            return
         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)
      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)
   endif
else
endif
endsub

Sub CHECKLAG()
var i=0
   del('backpack')
   uo.click('backpack')
   repeat
   wait(10)
   until uo.injournal('backpack') or i>1000
   del('backpack')
endsub

Sub DEL(msg)
   uo.setJournalLine(uo.injournal(msg)-1,"Is Empty!")
   wend
endsub


sub GotoXY(x,y)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0
for i=1 to 60
myX=uo.getX();
myY=uo.getY();
if LastX==myX and LastY==myY then
halt=halt+1
else
halt=0
end if
if halt>=10 then
if uo.GetDir()==1 then
for z=0 to 8
uo.Press(40)
next
end if
if uo.GetDir()==3 then
for z=0 to 8
uo.Press(37)
next
end if
if uo.GetDir()==5 then
for z=0 to 8
uo.Press(38)
next
end if
if uo.GetDir()==7 then
for z=0 to 8
uo.Press(39)
next
end if
halt=15
end if
if abs(x-myX)<=1 AND abs(y-myY)<=2 then
return 1
end if
if x<=MyX then
if y<=MyY then
for z=0 to 2 
uo.press( 38 )
wait(50)
next
else
for z=0 to 2
uo.press(37)
wait(50)
next
end if
else
if y<=MyY then
for z=0 to 2
uo.press(39)
wait(50)
next
else
for z=0 to 2
uo.press(40)
wait(50)
next
end if
end if
lastX=myX
lastY=myY
wait(200)
next
return 0
end sub


Sub Abs(X)
if X>0 then
return X
else
return (-X)
end if
end sub


sub plavka()
var con='45745B0AG53'


gotoxy(5907,2850)

uo.deletejournal()
repeat
   uo.say('bank')
   wait(3000)
until uo.injournal('Contains')



repeat
uo.findtype(0x19B9)
uo.moveitem('finditem','all',con)
wait(2000)
until uo.count(0x19B9)<1


endsub


Sub CHECKLAG()
var i=0
uo.deletejournal()
   uo.click('backpack')
   repeat
   i=i+1
   wait(10)
   until uo.injournal('backpack') or i>1000
endsub


sub test()
if uo.getgraphic('0x40062BC9')<>'0x06A6' then
uo.useobject(0x40062BC9)
checklag()
wait(100)
end if
end sub

sub smelt()

   
repeat
      uo.deletejournal()
      uo.findtype(0x19B9)
      uo.useobject('finditem')
      wait(2000)
      if uo.injournal('mining is too low') then
         uo.drop('all','0','0','0','finditem')
         wait(12000)
      end if
until not uo.findcount()
end sub

sub pereda4a()
var uolkov='0x0012F82B'
repeat
   uo.findtype(0x1BEF)
   uo.moveitem('finditem','all',uolkov)
   wait(800)
until not uo.findcount()
uo.TradeCheck( uo.TradeCount()-1, "left", true )
wait(1000)
repeat
wait(100)
until uo.TradeCheck( uo.TradeCount()-1, "right" )
end sub

sub walkme2(x,y,f)
var myX,myY,lastX=0,lastY=0,i,halt=0,z,r=0 
repeat
myX=uo.getX();
myY=uo.getY();
if abs(x-myX)<=0 AND abs(y-myY)<=0 then
return 1
end if
if x<=MyX then
if y<=MyY then
for z=0 to 1 
uo.press( 38 )
wait(50)
next
else
for z=0 to 1
uo.press(37)
wait(50)
next
end if
else
if y<=MyY then
for z=0 to 1
uo.press(39)
wait(50)
next
else
for z=0 to 1
uo.press(40)
wait(50)
next
end if
end if
lastX=myX
lastY=myY
wait(200)
until uo.dead()
end sub

sub rasplav()

  VAR Cont='0x400ED43D'

  Repeat

     UO.FindType('0x19B9',-1,'backpack')

     wait(200)

     If UO.FindCount() Then

        UO.MoveItem('finditem',0,Cont)

     Endif

     wait(200)

  Until NOT UO.FindCount()

   

  repeat
;      ToHide()

     UO.FindType('0x19B9',-1,Cont)

     wait(200)

     If UO.FindCount() Then

        UO.MoveItem('finditem','1','backpack')

     Endif

     CheckLag()



     UO.UseType('0x19B7')

     wait(250)

  until NOT UO.FindCount()

   

end sub

sub CheckLag()

    UO.DeleteJournal()

    UO.Click('backpack')

    repeat

         wait(250)

    until UO.InJournal('backpack')

end sub
[/code]