В этом скрипте на догонялку если чар(догонялка) и чар(цель) окажутся на одной клетке(так сказать войдет в чара) то скрипт выключается, Вопрос...как сделать так чтобы даже, если цель забежит в чара(догонялка) скрипт не вырубался, а работал все время пока я сам не выключу работу скрипта?
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
вот так не должен прекращать (опечатался) преследование Правда непонятно зачем вводить цикл While 1... внизу Вот так будет догонять любого кого укажешь.
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.
в чем по твоему я ошибся и что именно он просил? При запуске скрипта чар указывает кого догонять и просто догоняет. Запуск скрипта производится забинденной командой "exec chase". Убивание скрипта производится забинденным на кнопку "say ,terminate all".
У него в скрипте была ошибка - цикл работал до тех пор пока дистанция была больше 1 я убрал условие. У тебя в скрипте ошибка 2 работающих одновременно бесконечных цикла. Обнуление глобальных переменных тут не нужно в принципе. ты бы проверил мой вариант сперва
Mirage wrote:в чем по твоему я ошибся и что именно он просил? При запуске скрипта чар указывает кого догонять и просто догоняет. Запуск скрипта производится забинденной командой "exec chase". Убивание скрипта производится забинденным на кнопку "say ,terminate all".
У него в скрипте была ошибка - цикл работал до тех пор пока дистанция была больше 1 я убрал условие. У тебя в скрипте ошибка 2 работающих одновременно бесконечных цикла. Обнуление глобальных переменных тут не нужно в принципе. ты бы проверил мой вариант сперва
А, ну да, ты просто написал, что НЕ должен продолжать преследование, я поэтому не посмотрел твой скрипт =) Ну как бы не ошибка, что циклы бесконечные идут, все равно кнопкой убивает =) А глобалы да, убрать надо было мне.
Cори опечатался Просто первый раз указал где ошибка была. Щаз поправил нормально чтобы работало и не было ничего лишнего. PS Ходилка самая примитивная. Можно серьезнее прикрутить - будет даже в здания забегать и по леснице.
попробовал этот скрипт в действии, играю на шарде ФВарс, препятствия обходит, но такие как дома, например, если догоняемый стоит через дом на одной линии координат останавливает движение...но у меня вопрос другой, скажите, почему чар не бежит а топает пешком на этом скрипте???
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
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