Автотаминг(нужно доработать)

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Guska
Posts: 24
Joined: 2004-12-30 16:47:14

Автотаминг(нужно доработать)

Post by Guska »

Нужно чтобы он после того как затамит садился на ламу а потом же летал


Code: Select all

### Taming для дрв. ################################ 
# 4776528 Nmy.
####################################################
# переменные каторые НЕнадо менять:
var Serial, flag
# переменные каторые надо менять:
var shrink = '0x0F0E' ; Тип шринка.
var colourshrink = '0x0388' ; цвет шринка.
var Chest = '0x402b4e37' ; ИД сундука.
var RuneBook = '0x4002b8fe' ; ИД рунбуки.
var Tbeast = '0x00DC' ; Тип зверя каго тамим.
var staff = '0x13F8' ; Тип палки для таминга.
var type = '0x20F6' ; Тип зверя после шринка.
var nomer1 = 46 ; Номер руны к зверю. (см. ниже)
var nomer2 = 21 ; Номер руны домой. (см. ниже)
var fish = '0x097B'
####################################################
# Номера для рекола по рунбуку номера:
# руна 1 это 21
# руна 2 это 33
# руна 3 это 46
# руна 4 это 58
# руна 5 это 64
# руна 6 это 73
# руна 7 это 88
# руна 8 это 94
# руна 9 это 1025
####################################################


sub main()
   while 1
      checklag()
      uo.print('Летим к ламе')
      GoPlace(nomer1)
      checklag()
      flag=0
      repeat
         wait(2800)
         getbeast()
         ws()
         uo.msg('guards a criminal!')
      until flag==1
      uo.print('Летим домой')
      GoPlace(nomer2)
      checklag()
      uo.print('Выгружаем зверя')
      UnLoadBeast()
   wend
endsub


sub getbeast()
   uo.set('finddistance','7')
   uo.findtype(Tbeast,-1,'ground')
   if uo.findcount() then
      uo.print('Нашли ламу')
      Serial=uo.getserial('finditem')
      flag=taming(Serial)
   endif
endsub


sub UnLoadBeast()
   grab()
   if uo.objatlayer('Horse') then
      uo.useobject('self')
      checklag()
      wait(1000)
      uo.findtype(shrink,colourshrink,'backpack')
      if uo.findcount() then
         uo.waittargetobject(Serial)
         uo.useobject('finditem')
         checklag()
         wait(1000)
      endif
      uo.set('finddistance','2')
      uo.findtype(type,-1,'ground')
      if uo.findcount() then
         uo.moveitem('finditem',0,Chest)
         checklag()
         wait(1000)
      endif
   endif
endsub


sub taming(kago)
   var uflag=0
   repeat
      repeat   
         checklag()
         cancelwaiting()
         uo.warmode(0)
         uo.waittargetobject(kago)
         uo.usetype(staff)
         uflag=tamingresult()
      until uflag<>0
      if uflag==1 then
         uo.msg('all come')
         WalkN(0,0,Serial)
         while not uo.objatlayer('Horse')
            if uo.getx(Serial)==0 and not uo.objatlayer('Horse') then
               return 0
            endif
            uo.useobject(kago)
            wait(1000)
            if uo.injournal('own that horse') then
               return 0
            endif
         wend
      endif
      if uflag==4 then
         return 0
      endif
      if uflag==3 then
         WalkN(0,0,kago)
      endif
   until uflag==1
   return 1
endsub


sub cancelwaiting()
   if uo.waiting() then
      uo.canceltarget()
   endif
endsub


sub tamingresult()
   var n
   for n=0 to 30
      wait(500)
      ws()
      if uo.injournal('It seems') then
         return 1
      endif
      if uo.injournal('fail') then
         return 2
      endif
      if uo.injournal('see the creature') then
         return 3
      endif
      if uo.injournal('already tame|see the target') then
         return 4
      endif
   next
   return 0
endsub


sub GoPlace(num)
   checklag()
   var oldX=uo.getx('self')
   var oldY=uo.gety('self')
   uo.recall(RuneBook,num)
   repeat
      wait(1000)
      ws()
   until oldX<>uo.getx('self') && oldY<>uo.gety('self')
endsub


sub grab()
   uo.useobject(Chest)
   checklag()
   wait(1000)
   uo.findtype(shrink,colourshrink,'backpack')
   if not uo.findcount() then
      uo.findtype(shrink,colourshrink,Chest)
      if uo.findcount() then
         uo.moveitem('finditem','1','backpack')
         wait(1000)
      else
         uo.msg('Нету шринков! Скрипт остановлен.')
         uo.exec('terminate all')
      endif
   endif
   toeat()
endsub


sub toeat()
   uo.findtype(fish,-1,Chest)
   if uo.findcount() then
      uo.moveitem('finditem','50','backpack')
      checklag()
      wait(1000)
      repeat
         uo.usetype(fish)
         wait(400)
      until uo.injournal('full to eat')
   endif
   uo.findtype(fish,-1,'backpack')
   if uo.findcount() then
      uo.moveitem('finditem',0,Chest)
      checklag()
      wait(1000)
   endif
endsub


sub CheckLag()
   repeat
      UO.DeleteJournal()
      UO.Click('backpack')
   until backpack()==1
end sub


sub backpack()
   var n
   for n=0 to 100
      if uo.injournal('a backpack') then
         return 1
      else
         wait(1000)
      endif
      ws()
   next
   return 0
endsub


sub ws()
   if uo.journal(0)=='World is saving now...' then
      repeat
         wait(1000)
      until uo.journal(0)<>'World is saving now...'
   endif
endsub


sub WalkN(x,y,Target) ########################################## Ходилка
VAR LastTimer
LastTimer=UO.Timer()
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()
       If UO.GetDistance(Target)<4 OR LastTimer+200<UO.Timer() Then
             wait(1000)
             return
         Endif
      Else
         dx=x-UO.GetX()
         dy=y-UO.GetY()
         If dx==0 AND dy==0 OR LastTimer+200<UO.Timer() Then 
               return
         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
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif
   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
      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
      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
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Судя по скрипту- всё нормально.

Code: Select all

sub taming(kago) 
   var uflag=0
   repeat
      repeat   
         checklag()
         cancelwaiting()
         uo.warmode(0)
         uo.waittargetobject(kago)
         uo.usetype(staff)
         uflag=tamingresult()
      until uflag<>0
      if uflag==1 then # если затамили
         uo.msg('all come')  # позвали к себе
         WalkN(0,0,Serial)  # подошли
         while not uo.objatlayer('Horse') # пока стоим пешком
            if uo.getx(Serial)==0 and not uo.objatlayer('Horse') then
               return 0
            endif
            uo.useobject(kago) # садимся на того кого тамили
            wait(1000)
            if uo.injournal('own that horse') then
               return 0
            endif
         wend
      endif
      if uflag==4 then
         return 0
      endif
      if uflag==3 then
         WalkN(0,0,kago)
      endif
   until uflag==1
   return 1
endsub
Guska
Posts: 24
Joined: 2004-12-30 16:47:14

Post by Guska »

Scripts Writer wrote:Судя по скрипту- всё нормально.



Но почемуто не садится
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Post by Mirage »

либо не находит животину на земле (включи на всякий TWI)
либо далеко

Впиши в скрипт сообщения у if-ов Будет понятней.
Guska
Posts: 24
Joined: 2004-12-30 16:47:14

Post by Guska »

Mirage wrote:либо не находит животину на земле (включи на всякий TWI)
либо далеко

Впиши в скрипт сообщения у if-ов Будет понятней.



да если б я знал что это такое :(
Post Reply