Килл энтов.

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Килл энтов.

Post 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
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

только что был убит эридиан энт и чар успешно продолжил рубку

ждем еще :roll:
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

вопрос :

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

2)есть ли драки на дрв которые не кастуют фаер бол так как если драк кастанет шарик то чар тоже попадает под раздачу и пытается атакануть драка но это редко но бывает щас юзаю здарового красного драка и вроде он ниче не кастует.
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Question wrote:вопрос :

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

Question wrote:2)есть ли драки на дрв которые не кастуют фаер бол
нету таких.

есть ещё проблемы.
иногда бывают ситуации когда энт вырубается... но пока ты не выйдешь из хайда они не "выпадают" редко - но бывает.
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

щас дописываю лут и хилялку драка ну и попробую решить проблемму с появлением энтов тока идей пока нету
Adec[DrW]
Posts: 16
Joined: 2005-03-16 20:20:28

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

Post 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


А как этот скрипт в ламбер заталкать?
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

хз я для себя свой сам писал :wink: но папку со всем относящимся к уо снес =)
J17
Posts: 69
Joined: 2005-01-16 13:44:08
Location: Moscow
Contact:

Post by J17 »

У меня есть скрипт, который сам убивает энтов и элементалей тем, чем рубит или копает, хилится бинтами в хайде, пьет рефрешки из кега, а после убивания лутает.
Если интересно, могу выложить.
Писал под свой шард - не имею представления, будет ли работать на других шардах...
Если не будет дисконнекта, падения инжекта, и не кончатся бинты и кег рефреша, то вероятность, что чар погибнет, крайне низка.
spl
Posts: 11
Joined: 2004-10-18 20:25:48

Post by spl »

J17 wrote:У меня есть скрипт, который сам убивает энтов и элементалей тем, чем рубит или копает, хилится бинтами в хайде, пьет рефрешки из кега, а после убивания лутает.
Если интересно, могу выложить.
Писал под свой шард - не имею представления, будет ли работать на других шардах...
Если не будет дисконнекта, падения инжекта, и не кончатся бинты и кег рефреша, то вероятность, что чар погибнет, крайне низка.
Выложи,интересно.
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

на дрв энта не зарубишь топором уж поверь :wink:
J17
Posts: 69
Joined: 2005-01-16 13:44:08
Location: Moscow
Contact:

Post 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'й при копании в шахте.
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

кстати ребят хотел спросить нет ли у кого более грамотного скрипта такойже тип тока убийство элек :) спасибо заранее
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Question wrote:кстати ребят хотел спросить нет ли у кого более грамотного скрипта такойже тип тока убийство элек :) спасибо заранее


А я бы хотел спросить-если драк не убивает энта а сам дохнет-то скрипт падает получается?!
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

You Must Die wrote:
Question wrote:кстати ребят хотел спросить нет ли у кого более грамотного скрипта такойже тип тока убийство элек :) спасибо заранее


А я бы хотел спросить-если драк не убивает энта а сам дохнет-то скрипт падает получается?!

да это старая версия вот я и ищу новую :)
Dillersss
Posts: 39
Joined: 2007-08-11 16:44:45
Location: www.drw.ru

Post by Dillersss »

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

Так как драков затемленых щас на дрв пока нету и хз когда появятса, а рубить очень хочетса..... :(
помогите пожалусто.
Fenixsis
Posts: 49
Joined: 2004-08-25 01:28:18

Post 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
Post Reply