ZDoom. Лифт с кнопкой

А здра-здра-аааа-пчхи! Простите.

Товарищ QRCODE спросил, как сделать лифт с кнопкой. Качаем.

Всё рисуем, как на схеме. Это — азы маппинга, останавливаться на этом не буду. Вадник имеется. Обратите внимание: боковые внутренние линии снабжены галочками напротив unpegged. Это надо для того, чтобы текстура стен двигалась вместе с лифтом. На основе всего этого вы можете придумать свои варианты.

У сектора тэг я сделал 10, потолок там на высоте 128, что при заходе внутрь выглядит, как кабина лифта. Кнопочкой у нас будет линия, которой я присвоил тот же тэг, что и сектору, но это не обязательно, просто мне так удобнее. Текстура на этой линии нижняя — это переключатель. Активация — when player press use; repeatable action. Важно следить, чтобы к игроку линия была повёрнута фронтом, то есть флажком, а то выключатель не будет анимироваться (да и нажатие без доп. галочки «player can use from back» не сработает. На линии у нас спешл 80 Script Execute 1, однако скриптов 2. Вот они:

script 1 (void) {
Elevator_RaiseToNearest(10, 64);
delay(35*3);
SetLineSpecial(10, ACS_Execute, 2);
}

script 2 (void) {
Elevator_lowerToNearest(10, 64);
delay(35*3);
SetLineSpecial(10, ACS_Execute, 1);
}

Итак, что она делают? Первый скрипт синхронно поднимает пол и потолок (Elevator_RaiseToNearest) сектора 10 со скоростью 64. Через 3 секунды (delay(35*3);) он меняет спешл линии (SetLineSpecial) с тэгом 10 на активацию по нажатию на неё скрипта 2 (ACS_Execute, 2).

Второй скрипт делает то же самое, но он опускает пол с потолком (Elevator_lowerToNearest) и через 3 секунды заставляет линию исполнять 1 скрипт по нажатию.

Пока лифт едет, нажатие на кнопку ничего не меняет. Как только лифт приезжает, действие кнопки меняется. Поэтому этот вот (delay(35*3);) нужно настраивать в соответствие со скоростью вашего лифта и высотой, куда он едет.

Можете нарисовать двери и добавить их открытие-закрытие в скрипты. Функции, например, Door_Open и Door_Close, там немудрено разобраться, к тому же редактор скриптов сам даёт подсказки. Но если и это надо, я напишу потом туториал по самым разным лифтам с разным поведением. Или кто-нибудь другой напишет, хых.

Почему я сделал 2 скрипта, а не один, в котором будет что-то вроде «если сектор 10 находится на высоте 0, то поднимаем лифт, если он на высоте (например) 256, то опускаем лифт»? Насколько я понимаю, это возможно, но я хотел показать ещё и то, как скриптами можно менять линиям спешелы по тэгу этих линий. Можно сделать на карте рубильник, он исполнит скрипт, который на эту кнопку в лифте поставит не элеватор, а Print(s:»NO POWER»);, к примеру. И мне так тупо проще было, поскольку я — ленивая задница, и показанный мною пример довольно примитивен по сравнению с тем, что умеют товарищи Болон и Илья. Как-то так.

Комментируйте, оценивайте, подписывайтесь, с вами был Amaranth, это — сайт under-prog.ru, здесь мы что-то делаем. Rip and tear, и удачи вам!

avataravatar

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!