Доработка скрипта на догонялку...помогите

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
neokron115
Posts: 17
Joined: 2004-12-25 02:11:37

Доработка скрипта на догонялку...помогите

Post by neokron115 »

В этом скрипте на догонялку если чар(догонялка) и чар(цель) окажутся на одной клетке(так сказать войдет в чара) то скрипт выключается, Вопрос...как сделать так чтобы даже, если цель забежит в чара(догонялка) скрипт не вырубался, а работал все время пока я сам не выключу работу скрипта?

Code: Select all

sub chase()

If UO.Targeting() Then
      UO.CancelTarget()
   Endif
   UO.Print( 'Please, choice of enemy:' )
   UO.AddObject( 'enemy' )
   While UO.Targeting()
      wait(100)
   Wend

   If uo.getglobal('chase')=='On' then
   uo.setglobal('chase',0)
   uo.print(' !!! -= Chase Terminated =- !!! ')
   uo.exec('Terminate chase')
   else
   uo.setglobal('chase','On')
   uo.print(' !!! -= Chasing =- !!! ')
   endif

  VAR target
  target = uo.getserial('enemy')

   while not uo.dead() and target<>"" and uo.getdistance(target)
    if UO.GetDistance(target)>1 then
    uo.say('')
    Chaser(target)
    endif
   wend

  uo.setglobal('chase',0)
  uo.print(' !!! -= Chasing ended =- !!! ')
end sub
;-----------------------------------------------------------------
sub Chaser(Target)
   VAR dx, dy
While 1
   If Target<>"" and uo.getdistance(target) and not uo.dead() Then
   dx=UO.GetX(Target)-UO.GetX()
   dy=UO.GetY(Target)-UO.GetY()
    If UO.GetDistance(Target)<2 Then
     return
    Endif
    else
     Return
   Endif

   If dx<>0 AND dy<>0 Then
    If dx>0 AND dy>0 Then
    UO.Press(40) ; DownArrow
    Endif

    If dx>0 AND dy<0 Then
    UO.Press(39) ; RightArrow
    Endif

    If dx<0 AND dy>0 Then
    UO.Press(37) ; LeftArrow
    Endif

    If dx<0 AND dy<0 Then
    UO.Press(38) ; UpArrow
    Endif
   Endif
   
   If dx<>0 AND dy==0 Then
     If dx>0 Then
    UO.Press(34) ; PgDown
    Endif

    If dx<0 Then
    UO.Press(36) ; Home key
    Endif
   Endif

   If dx==0 AND dy<>0 Then
    If dy>0 Then
    UO.Press(35) ; End
    Endif

    If dy<0 Then
    UO.Press(33) ; PgUp
    Endif
   Endif
Wend
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by Mirage »

вот так не должен прекращать (опечатался) преследование
Правда непонятно зачем вводить цикл While 1... внизу
Вот так будет догонять любого кого укажешь.

Code: Select all

sub chase()
   VAR target
   If UO.Targeting() Then
      UO.CancelTarget()
   Endif
   UO.Print( 'Please, choice of enemy:' )
   UO.AddObject( 'enemy' )
   While UO.Targeting()
      wait(100)
   Wend
   target = uo.getserial('enemy')
   while not uo.dead() and target<>""
      if UO.GetDistance(target)>1 then
         Chaser(target)
      endif
      wait(100)
   wend
end sub
Sub Chaser(Target)
   VAR dx, dy
   While uo.getdistance(target) >1
      If Target<>"" and uo.getdistance(target) >1 and not uo.dead() Then
         dx=UO.GetX(Target)-UO.GetX()
         dy=UO.GetY(Target)-UO.GetY()
         If UO.GetDistance(Target)<2 Then
            return
         Endif
      else
         Return
      Endif
      If dx<>0 AND dy<>0 Then
         If dx>0 AND dy>0 Then
            UO.Press(40) ; DownArrow
         Endif
         If dx>0 AND dy<0 Then
            UO.Press(39) ; RightArrow
         Endif
         If dx<0 AND dy>0 Then
            UO.Press(37) ; LeftArrow
         Endif
         If dx<0 AND dy<0 Then
            UO.Press(38) ; UpArrow
         Endif
      Endif
      If dx<>0 AND dy==0 Then
         If dx>0 Then
            UO.Press(34) ; PgDown
         Endif
         If dx<0 Then
            UO.Press(36) ; Home key
         Endif
      Endif
      If dx==0 AND dy<>0 Then
         If dy>0 Then
            UO.Press(35) ; End
         Endif
         If dy<0 Then
            UO.Press(33) ; PgUp
         Endif
      Endif
   Wend
end sub
Last edited by Mirage on 2010-02-12 14:25:55, edited 1 time in total.
Zeppelin
Posts: 30
Joined: 2008-08-11 21:52:22

Re: Доработка скрипта на догонялку...помогите

Post by Zeppelin »

^_^
Last edited by Zeppelin on 2010-02-12 12:36:56, edited 2 times in total.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by Mirage »

в чем по твоему я ошибся и что именно он просил?
При запуске скрипта чар указывает кого догонять и просто догоняет. Запуск скрипта производится забинденной командой "exec chase". Убивание скрипта производится забинденным на кнопку "say ,terminate all".

У него в скрипте была ошибка - цикл работал до тех пор пока дистанция была больше 1 я убрал условие.
У тебя в скрипте ошибка 2 работающих одновременно бесконечных цикла. Обнуление глобальных переменных тут не нужно в принципе.
ты бы проверил мой вариант сперва :roll:
Zeppelin
Posts: 30
Joined: 2008-08-11 21:52:22

Re: Доработка скрипта на догонялку...помогите

Post by Zeppelin »

Mirage wrote:в чем по твоему я ошибся и что именно он просил?
При запуске скрипта чар указывает кого догонять и просто догоняет. Запуск скрипта производится забинденной командой "exec chase". Убивание скрипта производится забинденным на кнопку "say ,terminate all".

У него в скрипте была ошибка - цикл работал до тех пор пока дистанция была больше 1 я убрал условие.
У тебя в скрипте ошибка 2 работающих одновременно бесконечных цикла. Обнуление глобальных переменных тут не нужно в принципе.
ты бы проверил мой вариант сперва :roll:

А, ну да, ты просто написал, что НЕ должен продолжать преследование, я поэтому не посмотрел твой скрипт =) Ну как бы не ошибка, что циклы бесконечные идут, все равно кнопкой убивает =) А глобалы да, убрать надо было мне.

P.S. а зачем

Code: Select all

uo.say('')
?
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by Mirage »

Cори опечатался :)
Просто первый раз указал где ошибка была. Щаз поправил нормально чтобы работало и не было ничего лишнего.
PS Ходилка самая примитивная. Можно серьезнее прикрутить - будет даже в здания забегать и по леснице.
unpredictable
Posts: 5
Joined: 2011-06-01 11:24:41

Re: Доработка скрипта на догонялку...помогите

Post by unpredictable »

попробовал этот скрипт в действии, играю на шарде ФВарс, препятствия обходит, но такие как дома, например, если догоняемый стоит через дом на одной линии координат останавливает движение...но у меня вопрос другой, скажите, почему чар не бежит а топает пешком на этом скрипте???
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by ZeroDX »

Нужно поставить галочку в настройках клиента. always run
unpredictable
Posts: 5
Joined: 2011-06-01 11:24:41

Re: Доработка скрипта на догонялку...помогите

Post by unpredictable »

ZeroDX wrote:Нужно поставить галочку в настройках клиента. always run

спасибо, еще бы релпорился за догоняемым релпором)
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by ZeroDX »

Работоспособность не гарантируется :lol:

Code: Select all

sub RelPor()
  var msg = 'fizzle', Time, Delay = 5, mx, my, ManaNeed = 10
  If UO.Targeting() then
    UO.CancelTarget()
  Endif
  UO.Print('Укажите на догоняемого персонажа')
  UO.AddObject('obj_Enemy')
  While UO.Targeting()
    UO.CancelTarget()
  Wend
  While not UO.Dead() or not UO.Dead('obj_Enemy')
    If UO.GetDistance('obj_Enemy') > 1 and UO.Mana >= ManaNeed then
      mx = UO.GetX()
      my = UO.GetY()
      DelJournal(msg)
      Time = UO.Timer()
      UO.WaitTargetTile(-1, UO.GetX('obj_Enemy'), UO.GetY('obj_Enemy'), UO.GetZ('obj_Enemy'))
      UO.Cast('Teleport')
      Repeat
        Wait(100)
      Until UO.InJournal(msg) or Time + Delay * 10 < UO.Timer() or mx <> UO.GetX() or my <> UO.GetY()
     else
      Wait(100)
    Endif
  Wend
Endsub

Sub DelJournal(msg)
  While UO.InJournal(msg)
    UO.SetJournalLine(UO.InJournal(msg) - 1, '')
  Wend
Endsub
unpredictable
Posts: 5
Joined: 2011-06-01 11:24:41

Re: Доработка скрипта на догонялку...помогите

Post by unpredictable »

ZeroDX wrote:Работоспособность не гарантируется :lol:

Code: Select all

sub RelPor()
  var msg = 'fizzle', Time, Delay = 5, mx, my, ManaNeed = 10
  If UO.Targeting() then
    UO.CancelTarget()
  Endif
  UO.Print('Укажите на догоняемого персонажа')
  UO.AddObject('obj_Enemy')
  While UO.Targeting()
    UO.CancelTarget()
  Wend
  While not UO.Dead() or not UO.Dead('obj_Enemy')
    If UO.GetDistance('obj_Enemy') > 1 and UO.Mana >= ManaNeed then
      mx = UO.GetX()
      my = UO.GetY()
      DelJournal(msg)
      Time = UO.Timer()
      UO.WaitTargetTile(-1, UO.GetX('obj_Enemy'), UO.GetY('obj_Enemy'), UO.GetZ('obj_Enemy'))
      UO.Cast('Teleport')
      Repeat
        Wait(100)
      Until UO.InJournal(msg) or Time + Delay * 10 < UO.Timer() or mx <> UO.GetX() or my <> UO.GetY()
     else
      Wait(100)
    Endif
  Wend
Endsub

Sub DelJournal(msg)
  While UO.InJournal(msg)
    UO.SetJournalLine(UO.InJournal(msg) - 1, '')
  Wend
Endsub



дома проверю, спасибо
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by Mirage »

Это вариант для ГМа чтоли? :mrgreen:

Что такое релпор :| ?

While not UO.Dead() or not UO.Dead('obj_Enemy')
лучше заменить на

While not UO.Dead() or UO.GetX('obj_Enemy')<>0

UO.Dead не очень хорошо работает на указанные цели.
ZeroDX
Posts: 718
Joined: 2006-12-08 10:51:50
Location: Москва
Contact:

Re: Доработка скрипта на догонялку...помогите

Post by ZeroDX »

Да я так в шутку)
Post Reply