[ANY] [Mapping] func_tracktrain с полной проработкой

SpookyToad

Участник
Сообщения
17
Реакции
54
Вы когда-нибудь задумывались о том, как можно сделать что-то крутое используя такую простую энтити как func_tracktrain? Так вот, в этой статье я хочу поведать вам о том, как самую обыкновенную энтити можно превратить в произведение искусства

В данной теме я хочу затронуть одну из моих разработок - полностью функционирующий управляемый трамвай

Сначала я покажу весь функционал трамвая а затем перейдем к тому, как это было сделано



ЧАСТЬ ПЕРВАЯ: ПОКАЗЫВАНИЕ РЕЗУЛЬТАТА

20200909173618_1.jpg

20200909173718_1.jpg



В данных двух скриншотах вы можете видеть вид всего трамвая снаружи и в кабине водителя. Так же трамваем можно управлять
20200909173651_1.jpg


Как показано на скриншоте выше - трамвай имеет несколько функций

Начнем с открывания/закрытия дверей. Ну здесь я думаю всё понятно



















Далее у нас идёт звонок и и фары



















Ну а теперь мы приблизились к самому интересному - движению трамвая. Трамвай стартует очень плавно и останавливается аналогично, что можно увидеть в видео снизу


















Так же трамвай сбивает тебя, если ты оказался у него на пути


















А заодно ещё добавлена "Поломка трамвая" при слишком долгом продолжительности внутри салона, так что его приходится время от времени чинить чтобы не ездить 24/7

P.S. Если вы думали что двигатель трамвая расположен спереди, как и у машин, то вам скажут что вы дурак)


















Так же хочу рассказать вам об "Смене" пути трамвая, как показано в этом видео

















Как вы могли заметить - на предыдущих видео трамвай поворачивает Направо, но тут я перевёл стрелки и изменил его директорию.



ЧАСТЬ ВТОРАЯ: КАК ЖЕ ЭТО СДЕЛАНО?

С данного момента начинается всё то, что нужно знать для маппера об этом трамвае, все секреты и механизмы.

Начнём с самого простого, как же управляется трамвай? Всё просто! С помощью game_ui и его output-ов
itj0cWFnDu.png



Далее я хочу разобрать с вами всё по данных пунктам

1. Открытие/Закрытие дверей
2. Включение/Выключение фар
3. Звонок
4. Плавное движение func_tracktrain

5. Как поменять директорию трамвая

1. Открытие/Закрытие дверей

Открытие либо закрытие дверей происходит через инпут SetAnimation и func_brush
hammer_YJu9MBTgXp.png


2. Включение/Выключение фар
Включение либо выключение фар происходит за счёт инпутов TurnOn/TurnOff, а так же нескольких энтити сразу: env_sprite, light_dynamic, point_spotlight

3. Звонок
Звонок происходит происходит за счёт ambient_generic и инпутов PlaySound/StopSound
hammer_chUOnM95S2.png


4. Плавное движение func_tracktrain
И вот мы подошли к самому интересному, на самом деле сделать плавное движение func_tracktrain очень легко. Для этого нужно выполнить несколько условий:

1. Manual Train Speed? = On
2. Manual Accel Speed = N, у меня 30 (Скорость с которой func_tracktrain будет начинать движение)
3. Manual Decel Speed = N, у меня 30 (Скорость с которой func_tracktrain будет останавливаться)


hammer_oGT5Rhmduv.png


Далее чтобы контролировать директорию, посылать инпуты к func_tracktrain:

SetSpeedDirAccel
- от 1 до -1
1 - Вперёд
0 - Нейтральная
-1 - Назад
hammer_HpT4Fh8j3F.png



5. Как поменять директорию трамвая
На самом деле это очень просто, всё что нужно так это настроить параметр Branch Path у path_track
1599671133665.png

И затем применить инпут ToggleAlternatePath

Интересные факты во время создания трамвая

Когда я только начал делать данный трамвай, я столкнулся с огромным количеством багов из-за того, что сурс та ещё параша а не движок, но я все до одного смог пофиксить. Сейчас я приведу список багов и как я их пофиксил.

1. Водитель трамвая всегда "уползал" вниз при движении, из-за чего не было ничего видно
Данная проблема возникла почти сразу после того, как я сделал движение трамвая. Данную проблему вы можете заметить на данном видео

Самая первая версия трамвая


Решение:
Я это починил очень странным способом, а именно парентом водителя(игрока) к func_tracktrain. Но чтобы игрок ещё и не удалился в конце раунда, нужно было написать в tf_gamerules (В моём случае)
OnWonByTeam1 player ClearParent
OnWonByTeam2 player ClearParent

И аналогично с targetname
OnWonByTeam1 player Addoutput "targetname none"
OnWonByTeam2 player Addoutput "targetname none"

2. Коллизия трамвая никак не давала игроку ударить по func_button внутри него (то-есть для починки трамвая)


Раньше, когда я пытался сделать браш кнопки ВНУТРИ трамвая то-есть под колёсами, из-за коллизии трамвая игрок не мог бить по ней, и я не мог сделать её больше т.к. игроки просто спотыкались об неё.

Решение:
Поэтому я и нашел уникальный способ фикса, а именно браш, через который игроки могут проходить, но и так же могут атаковать как и кнопку

Для этого создаём func_physbox_multiplayer (Если его нет в хаммере, то вам нужно вписать его в .fgd
Статья из вики валв

Затем, переходим во вкладку Flags и выставляем всё в точности как у меня
1599674556831.png


И затем используем инпут OnDamaged чтобы триггерить оутпут
1599674585307.png


1599674601552.png



3. Если игрок на корточках становился водителем трамвая, то он не мог ничего увидеть

1599674900738.png


Данная проблема возникла, когда игроки на корточках становились водителем трамвая

Решение: я создал триггер в зоне водителя и point_clientcommand, затем данные параметры в триггер
1599675046456.png

тем самым игрок отжимал приседание при входе в триггер



Вырезанные идеи

Ну как же без вырезанных идей, вот сейчас начнется только текстовая часть.

Одна из идей была в том, чтобы сделать определение скорости с помощью некоторых энтити, таких как point_velocitysensor и logic_compare

Другой идеей было то, чтобы у водителя становилась другая анимация

Парент игрока к пропу с анимацией

Но проблема в том, что после этого нужно возвращать MoveType игрока на 0, а инпутом в тфке такого сделать нельзя.


Вот и настал конец моей долгой статьи об трамвае, который я разрабатывал 2 года

Данный трамвай вы можете скачать как .bsp карту [Карта приспособлена под TF2, но вы всегда можете декомпилировать её]
 

Вложения

  • tram_test.zip
    12 МБ · Просмотры: 5
Сверху Снизу