есть такой вот скрипт, все вы наверно его встречали
set #kudax charposx set #kuday charposy set #hide 1 set #trevoga 0 // пока не работает!!! set #gotovo 0
// теперь процедура встает на паузу и ждет переназначения // переменных из тела вашего макроса pause_script
// Начинаем работу
// Описание принципов движения - схема koord.jpg // Для передвижения чара необходимо проверить, чтобы // клавиши Left, Right, Up, Down, Home, End, PgUp, PgDn // не были забиндены для других действий!
// Особенности: // 1. Перед любым движением вызывается процедура запоминания // текущих координат чара. Это нужно для отлова ситуаций // когда чар уперся в препятствие (сравнение координат чара // до шага и после) - savepos // 2. После каждого шага вызывается процедура проверки на хайд, // если параметр "хайд" задан - то задается пауза и проверяется // ластмессага на предмет "revealed". Если да, чар хайдится // снова - hide // 3. После этого вызывается процедура проверки на препятствие. // Если координаты не изменились при движении - чар уперся. // Кстати, проверить - в ряде случаев при движении первое движение // в определенном направлении означает только поворот чара // в нужном направлении. Надо отловить в каких случаях это происходит // и задать для них дополнительно изменение направления чара перед // движением. Идея: можно в savepos запоминать еще и направление // ориентации чара. Если изменилось только это - чар не уперся. // Если же чар и впрямь уперся - то вызываем процедуру обхода // препятствий. Проверка - baffle, а обход препятствий - unblock
:nextstep
if (charposx = #kudax ) and ( charposy = #kuday ) // прибыли set #gotovo 1 pause_script end_if
// Расположение чара - Вариант 2 if charposx = #kudax if charposy > #kuday gosub savepos send pageup gosub hid gosub baffle goto nextstep end_if if charposy < #kuday gosub savepos send end gosub hid gosub baffle goto nextstep end_if end_if
// Вариант 1 if charposy = #kuday if charposx > #kudax gosub savepos send home gosub hid gosub baffle goto nextstep end_if if charposx < #kudax gosub savepos send pagedown gosub hid gosub baffle goto nextstep end_if end_if
// Вариант 3 и 4 - сводим к 1 и 2 if charposy < #kuday if charposx < #kudax gosub savepos send down gosub hid gosub baffle goto nextstep else gosub savepos send left gosub hid gosub baffle goto nextstep end_if else if charposx < #kudax gosub savepos send right gosub hid gosub baffle goto nextstep else gosub savepos send up gosub hid gosub baffle goto nextstep end_if end_if // если добрались до сюда - я <вырезано анти-матом> msg donkey! set #gotovo 9 pause_script
:savepos set #prevx charposx set #prevy charposy return
:hid if #hide = 1 // Если мы в хайде - надо паузу между шагами wait 1000 if lastmsg been revealed send F3 wait 4000 end_if end_if return
:baffle // процедура проверки на препятствие и обход его если уперлись. return
чар при помощи этого скрипта ходит замечательно, но он не обходит препядствия, хотелось бы чтобы после каждого шага он проверял сдвинулся он с места или нет если нет то обходил припятсвия как это сделать помогите, плиз
|