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

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