SpookyToad
Участник
- Сообщения
- 17
- Реакции
- 54
Вы когда-нибудь задумывались о том, как можно сделать что-то крутое используя такую простую энтити как func_tracktrain? Так вот, в этой статье я хочу поведать вам о том, как самую обыкновенную энтити можно превратить в произведение искусства
В данной теме я хочу затронуть одну из моих разработок - полностью функционирующий управляемый трамвай
Сначала я покажу весь функционал трамвая а затем перейдем к тому, как это было сделано
ЧАСТЬ ПЕРВАЯ: ПОКАЗЫВАНИЕ РЕЗУЛЬТАТА
В данных двух скриншотах вы можете видеть вид всего трамвая снаружи и в кабине водителя. Так же трамваем можно управлять
Как показано на скриншоте выше - трамвай имеет несколько функций
Начнем с открывания/закрытия дверей. Ну здесь я думаю всё понятно
Далее у нас идёт звонок и и фары
Ну а теперь мы приблизились к самому интересному - движению трамвая. Трамвай стартует очень плавно и останавливается аналогично, что можно увидеть в видео снизу
Так же трамвай сбивает тебя, если ты оказался у него на пути
А заодно ещё добавлена "Поломка трамвая" при слишком долгом продолжительности внутри салона, так что его приходится время от времени чинить чтобы не ездить 24/7
P.S. Если вы думали что двигатель трамвая расположен спереди, как и у машин, то вам скажут что вы дурак)
Так же хочу рассказать вам об "Смене" пути трамвая, как показано в этом видео
Как вы могли заметить - на предыдущих видео трамвай поворачивает Направо, но тут я перевёл стрелки и изменил его директорию.
ЧАСТЬ ВТОРАЯ: КАК ЖЕ ЭТО СДЕЛАНО?
С данного момента начинается всё то, что нужно знать для маппера об этом трамвае, все секреты и механизмы.
Начнём с самого простого, как же управляется трамвай? Всё просто! С помощью game_ui и его output-ов
Далее я хочу разобрать с вами всё по данных пунктам
1. Открытие/Закрытие дверей
2. Включение/Выключение фар
3. Звонок
4. Плавное движение func_tracktrain
5. Как поменять директорию трамвая
1. Открытие/Закрытие дверей
Открытие либо закрытие дверей происходит через инпут SetAnimation и func_brush-а
2. Включение/Выключение фар
Включение либо выключение фар происходит за счёт инпутов TurnOn/TurnOff, а так же нескольких энтити сразу: env_sprite, light_dynamic, point_spotlight
3. Звонок
Звонок происходит происходит за счёт ambient_generic и инпутов PlaySound/StopSound
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 будет останавливаться)
Далее чтобы контролировать директорию, посылать инпуты к func_tracktrain:
SetSpeedDirAccel - от 1 до -1
1 - Вперёд
0 - Нейтральная
-1 - Назад
5. Как поменять директорию трамвая
На самом деле это очень просто, всё что нужно так это настроить параметр Branch Path у path_track
И затем применить инпут 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 и выставляем всё в точности как у меня
И затем используем инпут OnDamaged чтобы триггерить оутпут
3. Если игрок на корточках становился водителем трамвая, то он не мог ничего увидеть
Данная проблема возникла, когда игроки на корточках становились водителем трамвая
Решение: я создал триггер в зоне водителя и point_clientcommand, затем данные параметры в триггер
тем самым игрок отжимал приседание при входе в триггер
Вырезанные идеи
Ну как же без вырезанных идей, вот сейчас начнется только текстовая часть.
Одна из идей была в том, чтобы сделать определение скорости с помощью некоторых энтити, таких как point_velocitysensor и logic_compare
Другой идеей было то, чтобы у водителя становилась другая анимация
Парент игрока к пропу с анимацией
Но проблема в том, что после этого нужно возвращать MoveType игрока на 0, а инпутом в тфке такого сделать нельзя.
Вот и настал конец моей долгой статьи об трамвае, который я разрабатывал 2 года
Данный трамвай вы можете скачать как .bsp карту [Карта приспособлена под TF2, но вы всегда можете декомпилировать её]
В данной теме я хочу затронуть одну из моих разработок - полностью функционирующий управляемый трамвай
Сначала я покажу весь функционал трамвая а затем перейдем к тому, как это было сделано
ЧАСТЬ ПЕРВАЯ: ПОКАЗЫВАНИЕ РЕЗУЛЬТАТА


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

Как показано на скриншоте выше - трамвай имеет несколько функций
Начнем с открывания/закрытия дверей. Ну здесь я думаю всё понятно
Далее у нас идёт звонок и и фары
Ну а теперь мы приблизились к самому интересному - движению трамвая. Трамвай стартует очень плавно и останавливается аналогично, что можно увидеть в видео снизу
Так же трамвай сбивает тебя, если ты оказался у него на пути
А заодно ещё добавлена "Поломка трамвая" при слишком долгом продолжительности внутри салона, так что его приходится время от времени чинить чтобы не ездить 24/7
P.S. Если вы думали что двигатель трамвая расположен спереди, как и у машин, то вам скажут что вы дурак)
Так же хочу рассказать вам об "Смене" пути трамвая, как показано в этом видео
Как вы могли заметить - на предыдущих видео трамвай поворачивает Направо, но тут я перевёл стрелки и изменил его директорию.
ЧАСТЬ ВТОРАЯ: КАК ЖЕ ЭТО СДЕЛАНО?
С данного момента начинается всё то, что нужно знать для маппера об этом трамвае, все секреты и механизмы.
Начнём с самого простого, как же управляется трамвай? Всё просто! С помощью game_ui и его output-ов
Далее я хочу разобрать с вами всё по данных пунктам
1. Открытие/Закрытие дверей
2. Включение/Выключение фар
3. Звонок
4. Плавное движение func_tracktrain
5. Как поменять директорию трамвая
1. Открытие/Закрытие дверей
Открытие либо закрытие дверей происходит через инпут SetAnimation и func_brush-а
2. Включение/Выключение фар
Включение либо выключение фар происходит за счёт инпутов TurnOn/TurnOff, а так же нескольких энтити сразу: env_sprite, light_dynamic, point_spotlight
3. Звонок
Звонок происходит происходит за счёт ambient_generic и инпутов PlaySound/StopSound
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 будет останавливаться)
Далее чтобы контролировать директорию, посылать инпуты к func_tracktrain:
SetSpeedDirAccel - от 1 до -1
1 - Вперёд
0 - Нейтральная
-1 - Назад
5. Как поменять директорию трамвая
На самом деле это очень просто, всё что нужно так это настроить параметр Branch Path у path_track
И затем применить инпут 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 и выставляем всё в точности как у меня
И затем используем инпут OnDamaged чтобы триггерить оутпут
3. Если игрок на корточках становился водителем трамвая, то он не мог ничего увидеть
Данная проблема возникла, когда игроки на корточках становились водителем трамвая
Решение: я создал триггер в зоне водителя и point_clientcommand, затем данные параметры в триггер
тем самым игрок отжимал приседание при входе в триггер
Вырезанные идеи
Ну как же без вырезанных идей, вот сейчас начнется только текстовая часть.
Одна из идей была в том, чтобы сделать определение скорости с помощью некоторых энтити, таких как point_velocitysensor и logic_compare
Другой идеей было то, чтобы у водителя становилась другая анимация
Парент игрока к пропу с анимацией
Но проблема в том, что после этого нужно возвращать MoveType игрока на 0, а инпутом в тфке такого сделать нельзя.
Вот и настал конец моей долгой статьи об трамвае, который я разрабатывал 2 года
Данный трамвай вы можете скачать как .bsp карту [Карта приспособлена под TF2, но вы всегда можете декомпилировать её]