5 лучших аддонов по мнению пользователей портала
НОВЫЕ АДДОНЫ
НОВЫЕ ТЕМЫ
ОПРОС
Еще к нам будете заходить? :)
Счетчики
Кто онлайн
GMod-Fan Inc. » Статьи » Cinema - маппинг / скрипт туториал
Опубликовал: mark2580 - 17 январь 2016 (14:08)
Просмотров: 11337
Просмотров: 11337
Cinema - маппинг / скрипт туториал
Мой оригинальный гайд в Steam сообществе - http://steamcommunity.com/sharedfiles/filedetails/?id=410605625
FGD для Hammer Editor
Для корректного маппинга вам понадобится fgd файл для Hammer Editor.
Скачать можно по этой ссылке
Как подключить - курите мануалы, здесь я объясню только метод расстановки нужных энтитей на карте, хотя если вы будете писать только 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
[previewimg=3003829;sizeFull,floatLeft;cinema_all_loc.jpg][/previewimg]
Создаём заготовку.
Открываем любой текстовый редактор и вставляем сдедущее:
hook.Add( "InitPostEntity", "theater_gcinema", function()
if !Location then return end
Location.Add( "theater_gcinema", {
*** локации вписывать сюда ***
} )
end )
hook.Add( "InitPostEntity", "theater_gcinema", function()
Место "theater_gcinema" надо вписать название вайшей карты.
Как пример можете посмотреть / скачать 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
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.