Page 1 of 1
Доработка скрипта на догонялку...помогите
Posted: 2009-04-22 00:35:59
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
Re: Доработка скрипта на догонялку...помогите
Posted: 2010-02-11 14:17:28
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
Re: Доработка скрипта на догонялку...помогите
Posted: 2010-02-12 09:47:41
by Zeppelin
^_^
Re: Доработка скрипта на догонялку...помогите
Posted: 2010-02-12 12:08:37
by Mirage
в чем по твоему я ошибся и что именно он просил?
При запуске скрипта чар указывает кого догонять и просто догоняет. Запуск скрипта производится забинденной командой "exec chase". Убивание скрипта производится забинденным на кнопку "say ,terminate all".
У него в скрипте была ошибка - цикл работал до тех пор пока дистанция была больше 1 я убрал условие.
У тебя в скрипте ошибка 2 работающих одновременно бесконечных цикла. Обнуление глобальных переменных тут не нужно в принципе.
ты бы проверил мой вариант сперва

Re: Доработка скрипта на догонялку...помогите
Posted: 2010-02-12 12:31:48
by Zeppelin
Mirage wrote:в чем по твоему я ошибся и что именно он просил?
При запуске скрипта чар указывает кого догонять и просто догоняет. Запуск скрипта производится забинденной командой "exec chase". Убивание скрипта производится забинденным на кнопку "say ,terminate all".
У него в скрипте была ошибка - цикл работал до тех пор пока дистанция была больше 1 я убрал условие.
У тебя в скрипте ошибка 2 работающих одновременно бесконечных цикла. Обнуление глобальных переменных тут не нужно в принципе.
ты бы проверил мой вариант сперва

А, ну да, ты просто написал, что НЕ должен продолжать преследование, я поэтому не посмотрел твой скрипт =) Ну как бы не ошибка, что циклы бесконечные идут, все равно кнопкой убивает =) А глобалы да, убрать надо было мне.
P.S. а зачем
?
Re: Доработка скрипта на догонялку...помогите
Posted: 2010-02-12 14:33:29
by Mirage
Cори опечатался
Просто первый раз указал где ошибка была. Щаз поправил нормально чтобы работало и не было ничего лишнего.
PS Ходилка самая примитивная. Можно серьезнее прикрутить - будет даже в здания забегать и по леснице.
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 11:31:04
by unpredictable
попробовал этот скрипт в действии, играю на шарде ФВарс, препятствия обходит, но такие как дома, например, если догоняемый стоит через дом на одной линии координат останавливает движение...но у меня вопрос другой, скажите, почему чар не бежит а топает пешком на этом скрипте???
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 11:44:57
by ZeroDX
Нужно поставить галочку в настройках клиента. always run
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 12:11:04
by unpredictable
ZeroDX wrote:Нужно поставить галочку в настройках клиента. always run
спасибо, еще бы релпорился за догоняемым релпором)
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 12:31:18
by ZeroDX
Работоспособность не гарантируется
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
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 12:34:43
by unpredictable
ZeroDX wrote:Работоспособность не гарантируется
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
дома проверю, спасибо
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 13:21:27
by Mirage
Это вариант для ГМа чтоли?
Что такое релпор

?
While not UO.Dead() or not UO.Dead('obj_Enemy')
лучше заменить на
While not UO.Dead() or UO.GetX('obj_Enemy')<>0
UO.Dead не очень хорошо работает на указанные цели.
Re: Доработка скрипта на догонялку...помогите
Posted: 2011-06-01 13:25:54
by ZeroDX
Да я так в шутку)