Garry's Mod

Garry's Mod

102 ratings
Cinema - маппинг / скрипт туториал
By MARK2580
В этом руководстве я постараюсь полностью описать способ создания своего собственного кинотеатра для режима Cinema.
Вы узнаете как сделать любую карту поддерживаемой режимом, сделать на ней зоны, экраны и мини экраны для превью залов и собственные сиденья для игроков.
Этот туториал будет частично переводом и частично дополнением этого туториала от создателей.
   
Award
Favorite
Favorited
Unfavorite
FGD для Hammer Editor.
Для корректного маппинга вам понадобится fgd файл для Hammer Editor.
Скачать можно по этой ссылке[raw.github.com]
Как подключить - курите мануалы, здесь я объясню только метод расстановки нужных энтитей на карте, хотя если вы будете писать только lua для уже существующей карты вам это вряд ли понадобится.
Описание энтитей
theater_screen (Point entity)
Эта энтити используется для создание экрана кинотеатрта. Её надо расположить в верхнем левом углу экрана, на расстоянии как минимум в 1 юнит о него.

Параметры
"Theater Name" (name) - Имя показываемое по TAB и на мини превью экранах.
"Flags" (flags) - Тип кинотеатра
"Screen Width" (width) - ширина экрана в юнитах (еденицы hammer)
"Screen Height" (height) - высота экрана в юнитах (еденицы hamemer)
"Thumbnail" (target) - Имя энтити "theater_thumbnail" для создания превью экрана что показывают в кинотеатре.


theater_thumbnail (Point entity)
К каждому экрану кинотеатра можно добавить превью-экраны для информирования посетителей где и что показывают. Желательно распологать эти экраны за пределами самого зала кинотеатра, внутри они будут мягко говоря бесполезны.

Параметры
"Name" (targetname) - Имя которое указывается в параметрах theater_screen

theater_door (Point entity)
На карте может использоваться система телепортаций в определённые локации-кинотеатры с помощью дверей. Система работает по принципу обычной телепортации на карте через info_teleport_destination как точка назначения, но место триггера выступает дверь.
Обратите внимание что телепортация односторонняя и в зоне куда игрок телепортируется надо создать аналог для обратной телепортации.
Дверь-телепорт
И точка куда телепортировать игрока при "открытии".
Создание кастомных сидений
Копипаст без разрешений не приветствуется ! Это моя личная догадка, про создание своих сидячих мест не описали даже авторы этого режима !

Итак для сидячего места вам дужен prop_dynamic энтия с указанной любой модели не важно пусть это будет хоть монтировка, главное что динамическая моделька на карте.
prop_physics и prop_static не подходят для этой задачи. Статик просто не работает, а физикс берётся в руки и чаще всего игрок просто оказывается в неопределённой позе приаттаченный к физическому объекту. Т.е. нужен только динамический меш.

Остальное прописывается в *.lua файле который прилагается к вашей карте.
В самом верху файла перед всеми локациями и кинотеатрами прописываем что опеределённые модели могут быть сидячими местами для игроков.

ChairOffsets = { ["models/mark2580/mass_effect_3/couch05_a.mdl"] = { { Pos = Vector(0, 7, 13), Ang = Angle(0, 0, 0) } }, ["models/mark2580/mass_effect_3/couch05_b.mdl"] = { { Pos = Vector(-5, 7, 13), Ang = Angle(10, 0, 0) } }, ["models/mark2580/mass_effect_3/couch05_c.mdl"] = { { Pos = Vector(5, 7, 13), Ang = Angle(10, 0, 0) } }, }

1я строка указывает полный путь к модели
2я строка указывает положение игрока и угол поворота. Данные координаты вы можете подбирать прямо сидя в игре т.к. lua автоматически перезагружается как-только файл изменяется. Строчек с позицией может быть более 1й, например диваны, а не 1 стул.

Официально поддерживаемые модели (прописаны в гейм моде)
(т.е. они будут работать сразу без прописывания их в вашем персональном lua файле, при учёте что они будут на карте prop_dynamic)

Изображение
Модель / Описание
models/sunabouzu/lobby_chair.mdl
что-то вроде тумбочки, встречаются в гейм модах Cinema и Elevator.
models/gmod_tower/theater_seat.mdl
Классическое красное кресло кинотеатра, использующиеся на оф. карте синемы. Имеет несколько боди групп (сменные подлокотники).
models/sunabouzu/theater_curve_couch.mdl
Диван полукругом. Можно увидеть на оф. карте в приватных кинотеатрах.
models/sunabouzu/theater_sofa01.mdl
Весьма угловатый диван на 2 места, приимущественно красного цвета. Есть на оф. карте
models/props_trainstation/traincar_seats001.mdl
Блок сидений из вагона с 1й карты Half-Life 2
models/props_c17/furniturechair001a.mdl
Хлипкий старый деревянный стул встречающийся в Half-lIfe 2
models/props_combine/breenchair.mdl
Кресло брина с последней карты Half-Life 2
models/props_warehouse/office_furniture_couch.mdl
Синий диван из игры Sin Episodes: Emergence. Встречается на картах theater_nexmultiplex и Theater_GCinema
Создание локаций на карте
Загрузив карты вы получите сообщение об ошибке что данная карта не поддерживается режимом Cinema. Нажмите F1 бла бла бла....


Ничего страшного т.к. для полноценной работы карте ещё нужен lua скрипт где прописываются локации кинотеатра.

Для создания локаций надо летать в режиме noclip (возможно понадобится включение режима читов sv_cheats 1).
Локация представляет из себя зону-куб строящуюся на основе 2х координат 3D пространства.
Это пример, не обязательно начинать сверху или снизу, главное получить куб

Встаём в 1ю точку и пишем в консоль: cinema_loc_start после чего под ногами появится что-то вроде лучей которые при движении игрока образуют тот самый куб.
Летим в 2ю противоположную точку (по диогонали) создаваемой локации и пишем в консоль cinema_loc_end.

В итоге получается заветная локация. Как сообщает консоль получаемые координаты и то что надо вписать в lua файл уже скопировано в буфер обмена.
[ "Name" ] = { Min = Vector( -1446.9011230469, -2250.2802734375, 54.014091491699 ), Max = Vector( 1445.0450439453, -840.00933837891, 413.30743408203 ), },

Посмотреть все созданные локации можно командой cinema_debug_locations 1/0

Создаём заготовку.
Открываем любой текстовый редактор и вставляем сдедущее:
hook.Add( "InitPostEntity", "theater_gcinema", function() if !Location then return end Location.Add( "theater_gcinema", { *** локации вписывать сюда *** } ) end )

hook.Add( "InitPostEntity", "theater_gcinema", function()
Место "theater_gcinema" надо вписать название вайшей карты.

Как пример можете посмотреть / скачать[github.com] lua файл для карты theater_nexmultiplex_1m

Повторяем пункт с cinema_loc_start / cinema_loc_end для получения координат других локаций. Пример lua с локациями:
hook.Add( "InitPostEntity", "theater_gcinema", function() if !Location then return end Location.Add( "theater_gcinema", { [ "Name location #1" ] = { Min = Vector( -1446.9011230469, -2250.2802734375, 54.014091491699 ), Max = Vector( 1445.0450439453, -840.00933837891, 413.30743408203 ), }, [ "Name location #2" ] = { Min = Vector( -1446.9011230469, -2250.2802734375, 54.014091491699 ), Max = Vector( 1445.0450439453, -840.00933837891, 413.30743408203 ), }, } ) end )

Сами экраны кинотеатров должны обязательно находится в какой-либо локации по 1 на локацию. Без локации режим не понимает что надо включать тот или иной экран и в итоге ничего не заработает.

Куда и как сохранить получившийся lua ?
Сохраните получившийся файл в формате *.lua по адресу:
...\Common\GarrysMod\garrysmod\gamemodes\cinema\gamemode\maps\
Имя *.lua файла должно совпадать с именем карты.
Создание кинотеатра без маппинга
Режим Cinema может работать на любой карте не зависимо построены ли на ней двери, экраны и прочее.

Для этого немного изменим наш *.lua файл.
Место просто локации, внутри неё прописывается точка спавна экрана и превью кинотеатра
[ "Name location #1" ] = { Min = Vector( -1446.9011230469, -2250.2802734375, 54.014091491699 ), Max = Vector( 1445.0450439453, -840.00933837891, 413.30743408203 ), Theater = { Name = "Private Theater 2", Flags = THEATER_PRIVATE, Pos = Vector( -5400, -3344, 575 ), Ang = Angle(0,0,0), Width = 850, Height = 450, ThumbInfo = { Pos = Vector( -3170, -2205, 160 ), Ang = Angle(0, 00, 0) } } },
Min = Vector / Max = Vector - координаты локации из консоли
Name / Flags / Pos / Ang / Width / Height - аналоги параметров в этити (см. выше).
ThumbInfo - координы превью экрана и его угол поворота

Флаги

THEATER_REPLICATED : Публичный кинотеатр. Только админы могут им управлять. Такой кинотеатр продолжает работать даже когда управляющий игрок уже вышел из пределов локации кинотеатра.
THEATER_PRIVATE : Приватный кинотеатр, кто успел так сказать ). Вы теряете управление кинотеатром как только выходите за пределы локации кинотеатра.
THEATER_PRIVILEGED : Что-то связанное с VIP игроками, не разобрался.
THEATER_NONE : Что-то вроде публичного-скрытого кинотеатра который не отображается по TAB_у.

Помните
- Указанный кинотеатр будет автоматически начинать работать как только игрок заходит в пределы координат локации. Это относится как к экрану на карте, так и к прописанному в lua.
- Garrys Mod поддерживает авто перезагрузку lua скриптов, поэтому даже в режиме мультиплеера вы можете видеть все изменения координат, новых локаций и положений экранов в реальном времени.
- Для получения координат игрока предусмотрена команда cinema_loc_vector. Угол приходится подбирать.
- Только 1 кинотеатр может находиться в 1 локации

Демонстрация созданного кинотеатра на 2й карте Half-Life 2
28 Comments
Voŕt̢eX̷_F̧ưr̡y 11 Oct, 2020 @ 9:14pm 
Так мне добрый человек подсказал в чем беда, теперь все вроде как робит
MARK2580  [author] 11 Oct, 2020 @ 3:05pm 
там чтобы хоть что-то работало надо переходить на хромиум сборку
Voŕt̢eX̷_F̧ưr̡y 11 Oct, 2020 @ 2:30pm 
дичь какая то я поковырялся и заставил работать видосики с ютуба, но работают они частично
MARK2580  [author] 11 Oct, 2020 @ 12:41pm 
Боже, посмотри дату написания там 2016й год, с этого времени гарик перепилили уже дцать раз, появился хромиум, появился x64 конечно ничерта не работает и никакие lua не нужны были на момент написания гайда, хватало fgd да установленного режима. Вообще синема работает на флэше, который давно закрыли, а html5 по ходу в синему никто пихать не собирается.
Voŕt̢eX̷_F̧ưr̡y 11 Oct, 2020 @ 11:32am 
но сам плеер походу уже не пашет
Voŕt̢eX̷_F̧ưr̡y 11 Oct, 2020 @ 9:30am 
Я разобрался, тебе нужно было добавить в руководство то, что помимо фгд нужны еще lua скрипты, которые находятся в папке режима игры, которая берется из репозитория автора.
Voŕt̢eX̷_F̧ưr̡y 11 Oct, 2020 @ 9:11am 
я типа добавил опцию добавления модели но она не отображается в игре, хотя во вьюпорте все норм
MARK2580  [author] 11 Oct, 2020 @ 7:39am 
Они скорее всего в самом режиме - https://gtm.steamproxy.vip/sharedfiles/filedetails/?id=118824086
или офф карте - https://gtm.steamproxy.vip/workshop/filedetails/?id=119060917

Я сто лет уже не возился с синемой да и дописывать до ума fgd времени нету.
Voŕt̢eX̷_F̧ưr̡y 11 Oct, 2020 @ 7:29am 
можешь кинуть модели синемы? Я расшарил репозиторий автора но так и не нашел нужные модели (двери как на пикче в этом руководстве)
MARK2580  [author] 11 Oct, 2020 @ 3:45am 
smart edit юзай, fgd не я писал, а автор самого режима