Page 1 of 1

Килл энтов.

Posted: 2005-03-22 18:57:44
by GimFlex
вот написал килл энтов для работы надо узнать все типы
шринков инвизок энтов =) драков в шринке и так в живую
пока без лута энтов
ходилка не моя
у меня работает тест прошел удачно 5 раз потом перестал тестить :roll:

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

вобщем наверно в скрипте много лишнего так что если кто что добавит буду тока признателен

Code: Select all

sub killent()
var xc=uo.getx()
var yc=uo.gety()
 ToHide()
 wait(5000)
 uo.usetype('0x20D6') ;юзает шринк с драком
 wait(2000)
 UO.Exec('warmode 0')
 uo.findtype('0x00C8','-1','ground'); ищит энта
 uo.waittargetobject('finditem')
 uo.say("all kill"); стравливает драка на энта
 wait(1000)
 UO.Exec('warmode 0')
 uo.waittargetobject('finditem')
 uo.say("all kill"); еще раз (один раз бывает не помогает)
 UO.Exec('warmode 0')
 uo.usetype('0x0F0E','0x0631'); юзает инвизку
 uo.findtype('0x00C8','-1','ground')
 repeat
  wait(1000) 
 until UO.IsNPC('finditem')==0 ;ждет пока сдохнет энт
 wait(1000)
 uo.say("all come") ; зовет животинку =)
 wait(5000)
 uo.findtype('0x003B','-1','ground')
 walkn(0,0,'finditem') ; идет к ней
 uo.findtype('0x003B','-1','ground')
 while UO.GetDistance('finditem')>1
  wait(1000)
  uo.findtype('0x003B','-1','ground')
 wend
 uo.findtype('0x003B','-1','ground')
 uo.waittargetobject('finditem')
 uo.usetype('0x0F0E','0x0388') ;кидает драка в шринк
 wait(2000)
 uo.findtype('0x20D6','-1','ground')
 uo.moveitem('finditem','1','backpack'); кладет в пак
 wait(2000)
 walkn(xc,yc,"") ; возвращается назад
endsub


;---------------- ][odilka ----------------------- 
sub GoW() 
   VAR walkwait=300 
   VAR x,y,dir=6 
   VAR key=36 ; Home key 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetX()+1==x Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoN() 
   VAR walkwait=300 
   VAR x,y,dir=0 
   VAR key=33 ; PgUp 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetY()+1==y Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoE() 
   VAR walkwait=300 
   VAR x,y,dir=2 
   VAR key=34 ; PgDown 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetX()-1==x Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoS() 
   VAR walkwait=300 
   VAR x,y,dir=4 
   VAR key=35 ; End 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetY()-1==y Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoWN() 
   VAR walkwait=300 
   VAR x,y,dir=7 
   VAR key=38 ; UpArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


sub GoNE() 
   VAR walkwait=300 
   VAR x,y,dir=1 
   VAR key=39 ; RightArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


sub GoSE() 
   VAR walkwait=300 
   VAR x,y,dir=3 
   VAR key=40 ; DownArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


sub GoSW() 
   VAR walkwait=300 
   VAR x,y,dir=5 
   VAR key=37 ; LeftArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


#============================================================== 
#  WalkN(X,Y,Serial) - char is walking by dX and dY step 
#                sub using Home, End, PgUp, PgDown keys 
#                d'not rebind this key from default action! 
#     walkwait - delay after keypress 
#-------------------------------------------------------------- 
sub WalkN(x,y,Target) 
   VAR i 
   VAR dx,dy,Exit=0 
    
   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() 
         Endif 

         If dx>0 AND dy<0 Then 
            GoNE() 
         Endif 

         If dx<0 AND dy>0 Then 
            GoSW() 
         Endif 

         If dx<0 AND dy<0 Then 
            GoWN() 
         Endif 

      Endif 
    
      If dx<>0 AND dy==0 Then 
         If dx>0 Then 
            GoE() 
         Endif 
          
         If dx<0 Then 
            GoW() 
         Endif 
      Endif 


      If dx==0 AND dy<>0 Then 
         If dy>0 Then 
            GoS() 
         Endif 
          
         If dy<0 Then 
            GoN() 
         Endif 
      Endif 
   Wend 
end sub 

sub ToHide() 
while not uo.Hidden() 
uo.DeleteJournal() 
uo.Exec('warmode 0') 
uo.UseSkill('Stealth') 
wait(4100) 
wend 
wait(100) 
end sub

Posted: 2005-03-22 19:02:42
by GimFlex
только что был убит эридиан энт и чар успешно продолжил рубку

ждем еще :roll:

Posted: 2005-03-22 19:27:04
by GimFlex
вопрос :

1)чтоб драк не растамился надо его кормить так? тогда чем кормят драконов на дрв?
и стоит ли добавить хилялку для драков ?

2)есть ли драки на дрв которые не кастуют фаер бол так как если драк кастанет шарик то чар тоже попадает под раздачу и пытается атакануть драка но это редко но бывает щас юзаю здарового красного драка и вроде он ниче не кастует.

Posted: 2005-03-23 08:48:43
by Sfagnum
Question wrote:вопрос :

1)чтоб драк не растамился надо его кормить так? тогда чем кормят драконов на дрв?
т.к. он в шринке 90% времени - не вижу смысла скриптом его кормить.
Question wrote:и стоит ли добавить хилялку для драков ?
да
Question wrote:2)есть ли драки на дрв которые не кастуют фаер бол
нету таких.

есть ещё проблемы.
иногда бывают ситуации когда энт вырубается... но пока ты не выйдешь из хайда они не "выпадают" редко - но бывает.

Posted: 2005-03-23 16:36:25
by GimFlex
щас дописываю лут и хилялку драка ну и попробую решить проблемму с появлением энтов тока идей пока нету

Re: Килл энтов.

Posted: 2005-04-01 15:28:30
by Adec[DrW]
Question wrote:вот написал килл энтов для работы надо узнать все типы
шринков инвизок энтов =) драков в шринке и так в живую
пока без лута энтов
ходилка не моя
у меня работает тест прошел удачно 5 раз потом перестал тестить :roll:

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

вобщем наверно в скрипте много лишнего так что если кто что добавит буду тока признателен

Code: Select all

sub killent()
var xc=uo.getx()
var yc=uo.gety()
 ToHide()
 wait(5000)
 uo.usetype('0x20D6') ;юзает шринк с драком
 wait(2000)
 UO.Exec('warmode 0')
 uo.findtype('0x00C8','-1','ground'); ищит энта
 uo.waittargetobject('finditem')
 uo.say("all kill"); стравливает драка на энта
 wait(1000)
 UO.Exec('warmode 0')
 uo.waittargetobject('finditem')
 uo.say("all kill"); еще раз (один раз бывает не помогает)
 UO.Exec('warmode 0')
 uo.usetype('0x0F0E','0x0631'); юзает инвизку
 uo.findtype('0x00C8','-1','ground')
 repeat
  wait(1000) 
 until UO.IsNPC('finditem')==0 ;ждет пока сдохнет энт
 wait(1000)
 uo.say("all come") ; зовет животинку =)
 wait(5000)
 uo.findtype('0x003B','-1','ground')
 walkn(0,0,'finditem') ; идет к ней
 uo.findtype('0x003B','-1','ground')
 while UO.GetDistance('finditem')>1
  wait(1000)
  uo.findtype('0x003B','-1','ground')
 wend
 uo.findtype('0x003B','-1','ground')
 uo.waittargetobject('finditem')
 uo.usetype('0x0F0E','0x0388') ;кидает драка в шринк
 wait(2000)
 uo.findtype('0x20D6','-1','ground')
 uo.moveitem('finditem','1','backpack'); кладет в пак
 wait(2000)
 walkn(xc,yc,"") ; возвращается назад
endsub


;---------------- ][odilka ----------------------- 
sub GoW() 
   VAR walkwait=300 
   VAR x,y,dir=6 
   VAR key=36 ; Home key 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetX()+1==x Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoN() 
   VAR walkwait=300 
   VAR x,y,dir=0 
   VAR key=33 ; PgUp 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetY()+1==y Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoE() 
   VAR walkwait=300 
   VAR x,y,dir=2 
   VAR key=34 ; PgDown 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetX()-1==x Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoS() 
   VAR walkwait=300 
   VAR x,y,dir=4 
   VAR key=35 ; End 
   x=UO.GetX() 
   y=UO.GetY() 
   while UO.GetDir()<>dir 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   wend 
   UO.Press(key) 

   wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
    
   If UO.GetY()-1==y Then 
      return -1 
   Else 
      return 1 
   Endif 
end sub 


sub GoWN() 
   VAR walkwait=300 
   VAR x,y,dir=7 
   VAR key=38 ; UpArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


sub GoNE() 
   VAR walkwait=300 
   VAR x,y,dir=1 
   VAR key=39 ; RightArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


sub GoSE() 
   VAR walkwait=300 
   VAR x,y,dir=3 
   VAR key=40 ; DownArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


sub GoSW() 
   VAR walkwait=300 
   VAR x,y,dir=5 
   VAR key=37 ; LeftArrow 
   x=UO.GetX() 
   y=UO.GetY() 

   If UO.GetDir()<>dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If UO.GetDir()<>dir Then 
         CheckLag() 
      Endif 
   Endif 

   If UO.GetDir()==dir Then 
      UO.Press(key) 
      wait(walkwait) 
      If x==UO.GetX() AND y==UO.GetY() Then 
         CheckLag() 
      Endif 
      If UO.GetDir()==dir Then 
         return -1 
      Else 
         return UO.GetDir() 
      Endif 
   Else 
      return UO.GetDir() 
   Endif 
end sub 


#============================================================== 
#  WalkN(X,Y,Serial) - char is walking by dX and dY step 
#                sub using Home, End, PgUp, PgDown keys 
#                d'not rebind this key from default action! 
#     walkwait - delay after keypress 
#-------------------------------------------------------------- 
sub WalkN(x,y,Target) 
   VAR i 
   VAR dx,dy,Exit=0 
    
   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() 
         Endif 

         If dx>0 AND dy<0 Then 
            GoNE() 
         Endif 

         If dx<0 AND dy>0 Then 
            GoSW() 
         Endif 

         If dx<0 AND dy<0 Then 
            GoWN() 
         Endif 

      Endif 
    
      If dx<>0 AND dy==0 Then 
         If dx>0 Then 
            GoE() 
         Endif 
          
         If dx<0 Then 
            GoW() 
         Endif 
      Endif 


      If dx==0 AND dy<>0 Then 
         If dy>0 Then 
            GoS() 
         Endif 
          
         If dy<0 Then 
            GoN() 
         Endif 
      Endif 
   Wend 
end sub 

sub ToHide() 
while not uo.Hidden() 
uo.DeleteJournal() 
uo.Exec('warmode 0') 
uo.UseSkill('Stealth') 
wait(4100) 
wend 
wait(100) 
end sub
А как этот скрипт в ламбер заталкать?

Posted: 2005-04-01 19:05:49
by GimFlex
хз я для себя свой сам писал :wink: но папку со всем относящимся к уо снес =)

Posted: 2005-04-02 01:23:15
by J17
У меня есть скрипт, который сам убивает энтов и элементалей тем, чем рубит или копает, хилится бинтами в хайде, пьет рефрешки из кега, а после убивания лутает.
Если интересно, могу выложить.
Писал под свой шард - не имею представления, будет ли работать на других шардах...
Если не будет дисконнекта, падения инжекта, и не кончатся бинты и кег рефреша, то вероятность, что чар погибнет, крайне низка.

Posted: 2005-04-02 07:50:23
by spl
J17 wrote:У меня есть скрипт, который сам убивает энтов и элементалей тем, чем рубит или копает, хилится бинтами в хайде, пьет рефрешки из кега, а после убивания лутает.
Если интересно, могу выложить.
Писал под свой шард - не имею представления, будет ли работать на других шардах...
Если не будет дисконнекта, падения инжекта, и не кончатся бинты и кег рефреша, то вероятность, что чар погибнет, крайне низка.
Выложи,интересно.

Posted: 2005-04-02 11:22:48
by GimFlex
на дрв энта не зарубишь топором уж поверь :wink:

Posted: 2005-04-02 13:27:12
by J17
Между рубками деревьев вызываем CheckDanger().
Тут также есть моя ходилка, которая тоже вызывает CheckDanger().
Запускать в арме. В руках чар должен иметь свое орудие (топор или меч) и, если возможно, щит.

Code: Select all

##################
### Переменные ###
##################
var KillReapers  = 1 ## Убивать элементалей, ког1да они появляются.
var DressSpeed   = 2100 ## Время надевания вещей, мс.

var RefreshType = 0x0F0B
var HealType    = 0x0F0C

var RefreshKegColor = 0x0021
var KegType         = 0x1940
var EmptyBottleType = 0x0F0E

var ReaperType = 0x002F
var ReaperBodyType = 0x2006

var InvisType  = 0x0F08
var InvisColor = 0x0060

var KeyDown     = 40
var KeyRight    = 39
var KeyLeft     = 37
var KeyUp       = 38
var KeyPageDown = 34
var KeyHome     = 36
var KeyEnd      = 35
var KeyPageUp   = 33

###########
### Код ###
###########
sub main()
	# инициализация
	UO.SetArm('MyArm')
	UO.DeleteJournal()
	UO.SetGlobal('CheckDanger', '0')
	UO.SetGlobal('GoHome', '0')
	UO.SetGlobal('HealFull', '0')
	UO.SetGlobal('TryingToHide', '0')

	# тут продолжение скрипта
	# .......

end sub

sub DrinkRefresh()
	var Tries = 3
	var WaitTimes
	while Tries > 0 and UO.Count(RefreshType) < 1
		Tries = Tries - 1
		Wait(50)
		UO.WaitTargetType(EmptyBottleType)
		Wait(100)
		UO.FindType(KegType, RefreshKegColor)
		UO.DeleteJournal()
		UO.UseObject('finditem')
		WaitTimes = 0
		while WaitTimes < 10 and UO.Waiting()
			WaitTimes = WaitTimes + 1
			Wait(100)
		wend
		if UO.InJournal("You can't think") then
			UO.DeleteJournal()
			UO.Click('finditem')
			repeat
				Wait(50)
			until UO.InJournal('keg')
			if UO.InJournal('empty') then
				UO.DropHere('finditem')
				Wait(300)
			endif
		endif
	wend
	UO.UseType(RefreshType)
end sub

sub Numb(num)
	if num>=0 then
		return num
	else
		return num*(-1)
	endif
end sub

sub ToHide()
	if UO.GetGlobal('TryingToHide') == '1' then
		return
	endif
	UO.SetGlobal('TryingToHide', '1')
	while not UO.Hidden()
		UO.Print('Trying to hide...')
		UO.DeleteJournal()
		UO.Exec('warmode 0')
		UO.UseSkill('Hiding')
		wait(4100)
	wend
	UO.SetGlobal('TryingToHide', '0')
end sub

sub CheckLag()
	if uo.Waiting()>0 then
		uo.Exec('canceltarget')
	endif
	uo.DeleteJournal()
	uo.Click('backpack')
	repeat
		wait(50)
	until uo.InJournal('backpack')
end sub

sub ExecToHide()
	if UO.GetGlobal('CheckDanger') == '1' then
		return
	endif
	if UO.GetGlobal('TryingToHide') <> '1' then
		wait(300)
	endif
	if UO.Hidden() or UO.GetGlobal('TryingToHide') == '1' then
		return
	endif
	UO.Exec('exec ToHide')
end sub

sub TermToHide()
	if UO.GetGlobal('TryingToHide') <> '1' then
		wait(300)
	endif
	if UO.GetGlobal('TryingToHide') == '1' then
		UO.Exec('terminate ToHide')
		UO.SetGlobal('TryingToHide', '0')
	endif
end sub

sub WaitToHide()
	while UO.GetGlobal('TryingToHide') == '1'
		wait(200)
	endif
end sub

sub WalkToXYGoAround1()
	var z
	var d = UO.GetDir()
	if d == 0 then # N
		for z = 1 to 4
			UO.Press(KeyUp)
		next
	endif
	if d == 1 then # NE
		for z = 1 to 4
			UO.Press(KeyUp)
		next
	endif
	if d == 2 then # E
		for z = 1 to 4
			UO.Press(KeyRight)
		next
	endif
	if d == 3 then # SE
		for z = 1 to 4
			UO.Press(KeyRight)
		next
	endif
	if d == 4 then # S
		for z = 1 to 4
			UO.Press(KeyDown)
		next
	endif
	if d == 5 then # SW
		for z = 1 to 4
			UO.Press(KeyDown)
		next
	endif
	if d == 6 then # W
		for z = 1 to 4
			UO.Press(KeyLeft)
		next
	endif
	if d == 7 then # NW
		for z = 1 to 4
			UO.Press(KeyLeft)
		next
	endif
end sub

sub WalkToXYGoAround2()
	var z
	var d = UO.GetDir()
	if d == 0 then # N
		for z = 1 to 4
			UO.Press(KeyRight)
		next
	endif
	if d == 1 then # NE
		for z = 1 to 4
			UO.Press(KeyDown)
		next
	endif
	if d == 2 then # E
		for z = 1 to 4
			UO.Press(KeyDown)
		next
	endif
	if d == 3 then # SE
		for z = 1 to 4
			UO.Press(KeyLeft)
		next
	endif
	if d == 4 then # S
		for z = 1 to 4
			UO.Press(KeyLeft)
		next
	endif
	if d == 5 then # SW
		for z = 1 to 4
			UO.Press(KeyUp)
		next
	endif
	if d == 6 then # W
		for z = 1 to 4
			UO.Press(KeyUp)
		next
	endif
	if d == 7 then # NW
		for z = 1 to 4
			UO.Press(KeyRight)
		next
	endif
end sub

sub WalkToXYGoAround3(a)
	var z
	var d = UO.GetDir()
	if d == 0 then # N
		for z = 1 to 4*a
			UO.Press(KeyEnd)
		next
		for z = 1 to 6*a
			UO.Press(KeyUp)
		next
	endif
	if d == 1 then # NE
		for z = 1 to 4*a
			UO.Press(KeyLeft)
		next
		for z = 1 to 6*a
			UO.Press(KeyPageUp)
		next
	endif
	if d == 2 then # E
		for z = 1 to 4*a
			UO.Press(KeyHome)
		next
		for z = 1 to 6*a
			UO.Press(KeyRight)
		next
	endif
	if d == 3 then # SE
		for z = 1 to 4*a
			UO.Press(KeyUp)
		next
		for z = 1 to 6*a
			UO.Press(KeyPageDown)
		next
	endif
	if d == 4 then # S
		for z = 1 to 4*a
			UO.Press(KeyPageUp)
		next
		for z = 1 to 6*a
			UO.Press(KeyDown)
		next
	endif
	if d == 5 then # SW
		for z = 1 to 4*a
			UO.Press(KeyRight)
		next
		for z = 1 to 6*a
			UO.Press(KeyEnd)
		next
	endif
	if d == 6 then # W
		for z = 1 to 4*a
			UO.Press(KeyPageDown)
		next
		for z = 1 to 6*a
			UO.Press(KeyLeft)
		next
	endif
	if d == 7 then # NW
		for z = 1 to 4*a
			UO.Press(KeyDown)
		next
		for z = 1 to 6*a
			UO.Press(KeyHome)
		next
	endif
end sub

sub WalkToXYGoAround4(a)
	var z
	var d = UO.GetDir()
	if d == 0 then # N
		for z = 1 to 4*a
			UO.Press(KeyEnd)
		next
		for z = 1 to 6*a
			UO.Press(KeyRight)
		next
	endif
	if d == 1 then # NE
		for z = 1 to 4*a
			UO.Press(KeyLeft)
		next
		for z = 1 to 6*a
			UO.Press(KeyPageDown)
		next
	endif
	if d == 2 then # E
		for z = 1 to 4*a
			UO.Press(KeyHome)
		next
		for z = 1 to 6*a
			UO.Press(KeyDown)
		next
	endif
	if d == 3 then # SE
		for z = 1 to 4*a
			UO.Press(KeyUp)
		next
		for z = 1 to 6*a
			UO.Press(KeyEnd)
		next
	endif
	if d == 4 then # S
		for z = 1 to 4*a
			UO.Press(KeyPageUp)
		next
		for z = 1 to 6*a
			UO.Press(KeyLeft)
		next
	endif
	if d == 5 then # SW
		for z = 1 to 4*a
			UO.Press(KeyRight)
		next
		for z = 1 to 6*a
			UO.Press(KeyHome)
		next
	endif
	if d == 6 then # W
		for z = 1 to 4*a
			UO.Press(KeyPageDown)
		next
		for z = 1 to 6*a
			UO.Press(KeyUp)
		next
	endif
	if d == 7 then # NW
		for z = 1 to 4*a
			UO.Press(KeyDown)
		next
		for z = 1 to 6*a
			UO.Press(KeyPageUp)
		next
	endif
end sub

sub WalkToXYGoAround(a)
	if a == 1 then # Пытаемся обойти объект слева
		WalkToXYGoAround1()
		return 1
	endif

	if a == 2 then # Пытаемся обойти объект справа
		WalkToXYGoAround2()
		return 1
	endif

	if a == 3 or a == 5 or a == 7 then # Пытаемся отойти назад и обойти объект слева
		WalkToXYGoAround3(a-2)
		return 1
	endif

	if a == 4 or a == 6 or a == 8 then # Пытаемся отойти назад и обойти объект справа
		WalkToXYGoAround4(a-3)
		return 1
	endif

	return 0
end sub

sub WalkToXY(x,y)
	var halts = 0, halt, z
	dim HaltX[6144], HaltY[4096], HaltA[100]
	var status
	repeat
		WalkToXY_plain(x,y)
		if Numb(x-UO.GetX())<=1 and Numb(y-UO.GetY())<=2 then
			TermToHide()
			return 1
		endif
		# Застряли.
		# Использовать один из алгоритмов обхода препятствия.
		# Если застряли в одной из точек, в которой уже застревали,
		# то используем новый алгоритм обхода.
		# Если все алгоритмы кончились, то считаем, что цель недосягаема.
		halt = halts
		for z = 0 to halts
			if HaltX[z] == UO.GetX() and HaltY[z] == UO.GetY() then
				halt  = z
				z     = halts
				halts = halts - 1
			endif
		next
		halts = halts + 1
		if not HaltA[halt] then
			HaltX[halt] = UO.GetX()
			HaltY[halt] = UO.GetY()
			HaltA[halt] = 0
		endif
		HaltA[halt] = HaltA[halt] + 1
		ExecToHide()
		status = WalkToXYGoAround(HaltA[halt])
	until status == 0
	TermToHide()
	return 0
end sub

sub WalkToXY_plain(x,y)
	var i, dx, dy, dist, distMin = -1, z, far = 40
	var NStock
	if UO.GetGlobal('CheckDanger') <> '1' then
		NStock = 8
	else
		NStock = 4
	endif
	for i = 1 to NStock
		if UO.GetGlobal('GoHome') <> '1' then
			CheckDanger()
		endif
		while UO.Dead()
			UO.Exec('warmode 1')
			Wait(10000)
		wend
		ExecToHide()
		dx = x - UO.GetX()
		dy = y - UO.GetY()
		dist = sqrt(dx*dx + dy*dy)
		if distMin < 0 or dist < distMin then
			distMin = dist
			i = 1
		endif
		if dist < 0.8 then
			TermToHide()
			return 1
		endif
		if dx > 0 and dy > 0 then
			UO.Press(KeyDown)
		endif
		if dx > 0 and dy < 0 then
			UO.Press(KeyRight)
		endif
		if dx < 0 and dy > 0 then
			UO.Press(KeyLeft)
		endif
		if dx < 0 and dy < 0 then
			UO.Press(KeyUp)
		endif
		if dx > 0 and dy == 0 then
			if dist < far or UO.Random(5) == 0 then
				if dist > far then
					for z = 1 to 12
						UO.Press(KeyPageDown)
					next
				else
					UO.Press(KeyPageDown)
				endif
			else
				if UO.Random(2) == 0 then
					for z = 1 to 12
						UO.Press(KeyRight)
					next
				else
					for z = 1 to 12
						UO.Press(KeyDown)
					next
				endif
			endif
		endif
		if dx < 0 and dy == 0 then
			if dist < far or UO.Random(5) == 0 then
				if dist > far then
					for z = 1 to 12
						UO.Press(KeyHome)
					next
				else
					UO.Press(KeyHome)
				endif
			else
				if UO.Random(2) == 0 then
					for z = 1 to 12
						UO.Press(KeyUp)
					next
				else
					for z = 1 to 12
						UO.Press(KeyLeft)
					next
				endif
			endif
		endif
		if dx == 0 and dy > 0 then
			if dist < far or UO.Random(5) == 0 then
				if dist > far then
					for z = 1 to 12
						UO.Press(KeyEnd)
					next
				else
					UO.Press(KeyEnd)
				endif
			else
				if UO.Random(2) == 0 then
					for z = 1 to 12
						UO.Press(KeyDown)
					next
				else
					for z = 1 to 12
						UO.Press(KeyLeft)
					next
				endif
			endif
		endif
		if dx == 0 and dy < 0 then
			if dist < far or UO.Random(5) == 0 then
				if dist > far then
					for z = 1 to 12
						UO.Press(KeyPageUp)
					next
				else
					UO.Press(KeyPageUp)
				endif
			else
				if UO.Random(2) == 0 then
					for z = 1 to 8
						UO.Press(KeyUp)
					next
				else
					for z = 1 to 8
						UO.Press(KeyRight)
					next
				endif
			endif
		endif
	next
	TermToHide()
	return 0
end sub

sub sqrt(n)
	var a = 0
	var b = n
	var s = 0.01
	var c
	if n == 0 then
		return 0
	endif
	if n < 0 then
		uo.Print('Error in SQRT argument!!!!!!!!!')
		return -1
	endif
	if b < 1 then
		b = 1
	endif
	while b - a > s
		c = 0.5 * (a + b)
		if c*c < n then
			a = c
		else
			b = c
		endif
	wend
	return 0.5 * (a + b)
end sub

sub HealFull()
	var Trys
	UO.SetGlobal('HealFull', '1')
	while UO.GetHP() < UO.GetMaxHP()
		if UO.Life > 110 then
			ToHide()
		endif
		if UO.Life < 50 then
			UO.UseType(HealType)
		endif
		if UO.Stamina < 60 or (UO.Life < 70 and UO.Stamina < 80) then
			DrinkRefresh()
		endif
		UO.DeleteJournal()
		UO.BandageSelf()
		Trys = 0
		repeat
			wait(500)
			Trys = Trys + 1
		until Trys > 10 or UO.InJournal('You put bloody bandage') or UO.InJournal('You apply bandages but') or UO.InJournal('Do you wanna make a mummy') or UO.InJournal('You apply bandages but') or UO.InJournal('You must wait to perform')
	wend
	UO.SetGlobal('HealFull', '0')
end sub

sub CheckDanger()
	var status = 0
	if UO.GetGlobal('CheckDanger') == '1' then
		return status
	endif
	UO.SetGlobal('CheckDanger', '1')
	status = status + CheckNPC()
	UO.SetGlobal('CheckDanger', '0')
	return status
end sub

sub CheckNPC()
	var Danger
	var OldX, OldY
	if not KillReapers then
		return 0
	endif
	repeat
		UO.FindType(ReaperType, -1, 'ground')
		if UO.FindCount() > 0 then
			Danger = UO.GetSerial('finditem')
			UO.Ignore('finditem')
			OldX = UO.GetX()
			OldY = UO.GetY()
			KillUnit(Danger)
			LootBody()
			WalkToXY(OldX, OldY)
		endif
	until UO.FindCount() == 0
	UO.IgnoreReset()
	return 0
end sub

sub LootBody()
	var body
	var OldX, OldY
	var Cont = 1
	OldX = UO.GetX()
	OldY = UO.GetY()
	while Cont
		UO.FindType(ReaperBodyType, -1, 'ground')
		if UO.FindCount() > 0 then
			body = UO.GetSerial('finditem')
			UO.Ignore(body)
			WalkToXY(UO.GetX(body), UO.GetY(body))
			UO.UseObject(body)
			UO.FindType(LogsType,-1,body)
			if uo.GetQuantity('finditem') > 0 then
				UO.MoveItem('finditem')
				wait(1000)
				CheckLag()
			endif
		else
			Cont = 0
		endif
	wend
	UO.IgnoreReset()
	WalkToXY(OldX, OldY)
end sub

sub KillUnitAttack(Target)
	UO.Print('Attacking!')
	UO.Attack(Target)
	while UO.Life > 100 and not UO.Dead(Target) and UO.GetX(Target) <> 0
		UO.Print('Going to taget...')
		WalkToXY(UO.GetX(Target), UO.GetY(Target))
		Wait(1000)
	wend
end sub

sub KillUnitHealing(Target)
	var DX, DY
	var D
	UO.SetGlobal('HealFull', '1')
	UO.Exec('exec HealFull')
	repeat
		# Убегаем, пока хилимся
		UO.Print('Run away from target.')
		DX = UO.GetX() - UO.GetX(Target)
		DY = UO.GetY() - UO.GetY(Target)
		D = sqrt(DX*DX + DY*DY)
		DX = UO.Random(20) - 10
		DY = UO.Random(20) - 10
		if DX < 0 then
			DX = DX - 10
		else
			DX = DX + 10
		endif
		if DY < 0 then
			DY = DY - 10
		else
			DY = DY + 10
		endif
		if D < 4 and not UO.Dead(Target) and UO.GetX(Target) > 0 then
			WalkToXY_plain(UO.GetX(Target) + DX, UO.GetY(Target) + DY)
		endif
		Wait(1000)
	until UO.GetGlobal('HealFull') <> '1'
end sub

sub KillUnit(Target)
	if not Target then
		return
	endif
	UO.SetDressSpeed(DressSpeed)
	while not UO.Dead() and not UO.Dead(Target) and UO.GetX(Target) > 0
		# Бьем
		UO.Exec('warmode 1')
		KillUnitAttack(Target)
		# Хилимся
		repeat
			UO.Exec('warmode 0')
			KillUnitHealing(Target)
			while UO.Dead()
				UO.Exec('warmode 1')
				Wait(10000)
			wend
		until UO.Life > 0.9*UO.STR
		# Отхилились. Вооружаемся
		UO.Arm('MyArm')
	wend
end sub
Этот же алгоритм использую для убивания появляющихся Ore Elementale'й при копании в шахте.

Posted: 2006-11-07 18:23:49
by GimFlex
кстати ребят хотел спросить нет ли у кого более грамотного скрипта такойже тип тока убийство элек :) спасибо заранее

Posted: 2006-11-07 18:29:19
by Scripts Writer
Question wrote:кстати ребят хотел спросить нет ли у кого более грамотного скрипта такойже тип тока убийство элек :) спасибо заранее
А я бы хотел спросить-если драк не убивает энта а сам дохнет-то скрипт падает получается?!

Posted: 2006-11-07 18:52:31
by GimFlex
You Must Die wrote:
Question wrote:кстати ребят хотел спросить нет ли у кого более грамотного скрипта такойже тип тока убийство элек :) спасибо заранее
А я бы хотел спросить-если драк не убивает энта а сам дохнет-то скрипт падает получается?!
да это старая версия вот я и ищу новую :)

Posted: 2007-12-11 19:15:54
by Dillersss
А можете такой скриптек написать:
Чар при появление энта онтходит на безопасное растояние 5-7 тайлов, становитса так чтоб можно было прострелить энта из лука, если энт приближаетса на 3 тайла к нам мы отходим естественно и продолжаем стрелять, далее режем лутаем и снова к работе.....
я исходил из того что щас энты немного тормазнутые и из лука вполне реально убить...единственая проблема это точная ходилка...

Так как драков затемленых щас на дрв пока нету и хз когда появятса, а рубить очень хочетса..... :(
помогите пожалусто.

Posted: 2007-12-22 14:37:53
by Fenixsis
Можно вортексом попробывать в хайд потом ворта на элементаля потом ан орт на ворта....
Чтото типа


sub ElemKill()
if uo.injournal("heavy") then # вырыли элемента #
# убиваем элемента #
Vortex:
UO.Exec("terminate Mining")
uo.exec('usetype 0x0f0e 0x0631') # пьем инвизку, а то энергетик порвет =) #
wait(300)
checklag()
uo.waittargetobject('self')
uo.usetype('0x1f66')
repeat
wait(300)
until uo.injournal("fizzles") or uo.injournal("Vortex")
if uo.injournal("fizzles") then
goto Vortex
else
wait(15000)
vasanort:
uo.exec('usetype 0x0f0e 0x09DF') # пьем манку #
wait(300)
checklag()
uo.waittargetobject('self')
uo.usetype('0x1F62')
wait(7000)
if uo.injournal("fizzles") then
goto vasanort
endif
# собираем руду и копаем дальше #
UO.SetReceivingContainer('backpack')
UO.FindType('0x19B9',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.FindType('0x19B7',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.FindType('0x19BA',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.FindType('0x19B8',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.UnSetReceivingContainer()
endif
endif
UO.Exec("warmode 0")
recall("1")
uo.textopen()
uo.textprint("Поимели рудку =)")
UO.Exec("exec Mining")
end sub