Garry's Mod

Garry's Mod

26 ratings
Создание карты для Trouble In Terrorist Town
By Alivebyte!
Настройка хаммера под маппинг для TTT, разборка энтитей и примеры.
   
Award
Favorite
Favorited
Unfavorite
Приветствие
Привет всем, с вами Alivebyte!. После гайда о том, как опубликовать аддон в Steam Workshop, я решил сделать что-то более полезное для тех, кто хочет делать карты для режима Trouble In Terrorist Town. Внимание!!! Данный гайд написан для тех, кто уже умеет работать в Hammer и имеет опыт.
Подготавливаем HWE под маппинг под TTT.
По сути, есть 2 способа маппинга под TTT. Один - создавая и редактируя карту в Hammer полностью и второй - с помощью специального аддона в Workshop. Но для начала, разберём 1-ый, так как при первом способе у вас есть больше возможностей разнообразить карту, но об этом чуть позже. Как вы знаете, в картах режима TTT есть ловушки, T-румы, оружия из самого режима и многое другое. У него есть уже готовый .fgd файл с кучей энтитей для полноценного маппинга под TTT.
Для начала откроем Hammer
Затем на панели сверху нажимаем Tools > Options.
В разделе Configuration есть Game Data Files. Это то, что нам нужно.

Нажимаем на кнопку Add и добавляем .fgd по следующему пути: garrysmod/gamemodes/terrorttown/ttt.fgd.

Теперь Hammer готов работать с объектами TTT. Но для начала стоит разобрать сами энтити и как с ними работать. Их работу я буду показывать и рассказывать на примерах из папки mapexamples в terrorttown. В дальнейшем я создам собственную тестовую карту с использованием всех этих энтитей.
Небольшое примечание: TTT рассчитан на от 16 до 18 игроков, однако лимит можно преодолеть, но могут возникнуть проблемы со спавнами игроков. Рекомендую ставить до 32 спавнов. Однако, судя по официальному сайту TTT, гейммод может создавать рядом с текущими спавнами ещё несколько временных спавнов в случае, если игроков больше чем самих спавнов.
Разбираем энтити FGD и примеры их использования.
Собственно, начнём с энтитей для самого TTT.
Энтити
Тип энтити
Описание энтити
info_player_deathmatch
Точечная
Спавн игрока.
ttt_map_settings
Точечная
Данная энтити предназначена для настройки вашей карты под TTT. Свойства:
Crowbar unlocks doors - дословно "Монтировка разблокирует двери". Если настройка включена, то удар монтировки по func_door или func_door_rotating будет вызывать инпут Unlock.
Crowbar unlocks buttons - тоже самое, только с кнопками( т.е func_button ).
Crowbar can open func_movelinear - достаточно говорящая саму за себя опция, если включена,то монтировкой можно будет открыть func_movelinear энтити.
Force player model - опция предназначенная для установки определённой модели всех игроков на карте. Если значение пустое, то модель будет случайной.
Outputs: MapSettingsSpawned, RoundStart, RoundPreparation, RoundEnd.
ttt_game_text
Точечная
Это текст внутри режима. В ней обычно авторы карт вставляют название карты и кто её автор. Настройки тут достаточно простые. Можете настроить кому отображать это сообщение.
Activator only - только тому, кто активировал game_text.
All players - все игроки
Detectives only - только Д
Traitors only - только Т
All except traitors - Все,кроме Т
Message text - Текст
Color - цвет текста.
ttt_logic_role
Точечная
Энтити, проверяющая роль игрока. Роль на какую она будет проверять можно настроить в свойствах энтити, а именно в Player role to test for. По сути, у неё только 2 аутпута. OnPass и OnFail.
OnPass - это, что будет происходить, если игрок прошёл проверку роли, настроенную в свойствах энтити, а OnFail, если нет.
ttt_traitor_button
Точечная
Кнопка для Т, скрытая ото всех кроме них кнопка, на которую они могут нажимать находясь даже за стенами в определённом радиусе. Отлично идёт для ловушек или специальных потайных ходов в Т-румы. Отличие от func_button только в наличии радиуса действия. Свойства:
Description - описание кнопки, оно будет отображаться в игре на HUD'е Т.
Delay before reset - как и у обычной кнопки, задержка перед повторным нажатием.
Remove On Press - удалять при нажатии( В HUD'е будет отображаться как "Одно использование" или "Single Use" )
Usable Radius - радиус действия. Если уйти за его пределы, то кнопка исчезнет из HUD'а. Outputs: OnPressed. Inputs: Unlock, Lock
ttt_traitor_check
Брашевая
Энтити для проверки игрока на Т. Устаревшая. Outputs: TraitorsFound. Inputs: CheckForTraitors
ttt_weapon_check
Брашевая
Энтити, проверяющее на оружие у игрока. Разберём её аутпуты и инпуты.
У неё всего 2 инпута, а именно CheckForClass и CheckForType и всего лишь один аутпут WeaponsFound. Собственно, тут стоит разобрать инпуты. Начнём с CheckForClass. Это проверка по classname оружия. Например, weapon_ttt_c4, а вот CheckForType - по типу оружия. Данный инпут принимает только целочисленное значение от 1 до 5. Собственно это и есть типы оружия, разберём каждый.
1.Первичное оружие(дробовики,автоматы)
2.Вторичное(пистолеты,дигл)
3.Снаряжение трейтора(оружие и предметы и c4)
4.Гранаты
5.Всё выше перечисленное.
ttt_win
Точечная
Заканчивает раунд преждевременно. Inputs:TraitorWin и InnocentWin.
ttt_damageowner
Точечная
Важная энтити, если вы создаёте ловушки для невиновных используемыми трейторами. По сути она просто присваивает полученный урон от цели энтити к игроку, хотя можно присвоить урон кому-угодно. Так же, из-за неё очки кармы при убийстве от ловушки будут снижаться. Так же, эта энтити необходима для отображения заданного названия ловушки в конце раунда типа "Боб убил Джо, используя лазерный спутник". Пробежимся по свойствам.

Target Entity - это имя энтити для ловушки( в этом случае целью является trigger_hurt.
Target entity's name in round report - имя ловушки в конце раунда. В данном случае это trap_1.
Чтобы заставить эту энтити работать, задайте с любого объекта на эту энтити аутпут с инуптом SetActivatorAsDamageOwner. Встречается в карте-примере ttt_traps.
ttt_credit_adjust
Точечная
Энтити с помощью которой Т или Д будут получать или терять кредиты. Встречается в ttt_traitorcheck. Свойство: Credits. Это число отвечает за количество кредитов, которые Д или Т могут потерять. При вводе отрицательно числа, сколько могут получить. Аутпутов всего лишь 2, OnSuccess, который запускается, если кредит успешно получен или потерян, и OnFail, если не получен. Inputs: TakeCredits.
ttt_spectator_spawn
Точечная
Спавн для наблюдателей
Оружейные энтити
Вот собственно и оружейные, а именно - это
ttt_random_weapon:

и ttt_randon_ammo

Первая отвечает за спавн рандомного оружия, вторая за спавн рандомных патронов к оружию. Оружия для ТТТ начинаются с weapon_ttt или с weapon_zm. Патроны - с item_<имя_оружия>_ttt.
Делаем карту
Теперь же, когда мы освоили и разобрали энтити, давайте же создадим карту, используя эти самые энтити. Я собираюсь сделать на карте одну ловушку, чекер на трейтора и чекер оружия для наглядности. Ловушка будет самой простой, а именно trigger_hurt работающий от кнопки Т. Начнём с ttt_map_settings. Я хочу, чтобы при начале раунда показалось сообщение о начале игры, в моём случае это будет "Game Started. GO!".
Для этого я ставлю конечно же ttt_map_settings и ttt_game_text. Цвет сообщения я решаю сделать зелёным. Теперь, чтобы вывести это сообщение в самом начале раунда я задаю аутпут с ttt_map_settings, а именно RoundStart на ttt_game_text, который я назвал welcomemessage с инпутом Display. Теперь, проверка на роль. Сделаем, чтобы игра проверяла играю я за трейтора или нет. Для этого создадим ttt_logic_role и к нему подставим обыкновенный func_button, который будет запускать проверку на роль. При этом ttt_logic_role я назову roletester, Player role... будет Traitor. Чтобы запустить проверку я задам аутпут с кнопки на roletester с инпутом TestActivator:

Теперь, создам 2 простых game_text'а. И один будет выдавать "YOU ARE NOT TRAITOR", а другой "YOU ARE TRAITOR". В итоге, аутпуты вышли такими:
С проверкой роли закончили. Перейдём к проверке на оружие. Для начала нам нужно само оружие. Пусть будет M249. Теперь создаём браш с текстурой nodraw и конвертируем в ttt_weapon_check. Название будет weaponchecker. Внутри создаю кнопку и с неё задаю аутпут на weaponchecker с инпутом CheckForClass со значением weapon_zm_sledge.
Теперь, я создаю game_text с сообщением "I see, you're carrying M249". Называю sledgespottedtext. И задаю с weaponchecker аутпут WeaponsFound на sledgespottedtext с инпутом Display. Собственно, это всё. Осталось последнее - ловушка. Как вы помните, я решил сделать обычную площадку с trigger_hurt.
Триггер я назову triggerhurt.
Теперь, создадим рядом с ловушкой ttt_traitor_button со своими свойствами
Рядом создадим ttt_damageowner, так как без неё наша ловушка не будет считаться ловушкой самим режимом. Я назову её damageowner. Вот её свойства:
Теперь надо это всё связать, чтобы получилась полноценная ловушка. Для этого я задаю аутпут с кнопки на trigger_hurt с инпутом Enable и на ttt_damageowner с инпутом SetActivatorAsDamageOwner с задержкой на 0.2s. Теперь всё готово, нам осталось только скомпилировать карту и запустить её в режиме ТТТ. Однако, когда мы зайдём на карту, нас будет ожидать вечное "Ожидание игроков" из-за которого, вы будете вечно в наблюдателях. Однако, для TTT есть 2 специальные консольные команды, чтобы можно было тестировать карту в одиночку.
А вот и команды:
ttt_debug_preventwin 1 ttt_minimum_players 1
Первая команда не позволяет раунду TTT завершится победой, так как вы всего лишь один игрок, а вторая ставит минимальное кол-во игроков на 1. Теперь же, мы можем глянуть на результат. Тут проверяем работу надписи при старте раунда:
Здесь я смотрю проверку роли, так как я Т, то он показывает соответствующее
Дальше проверка оружия. Чекер оружия подтверждает наличие M249
Ну и последнее - ловушка, саму ловушку я не смогу показать, увы, но кнопка работает
К слову, вот вам пару полезных команд для быстрой смены роли через консоль:
ttt_force_terror - переключится на невиновного ttt_force_traitor - переключиться на предателя ttt_force_detective - переключиться на детектива
На этом всё.
Rearm скрипты (Второй способ)
Это и есть второй способ маппинга под TTT. Отлично идёт для редактирования под TTT уже созданных карт, типа de_dust2. Но с помощью данного способа вы можете расставить только оружия и спавны игроков.
Как я уже сказал в начале, нам нужен аддон для гмода от самого разработчика TTT - Bad King Urgrain, TTT Weapon Placer
http://steamproxy-script.pipiskins.com/sharedfiles/filedetails/?id=119928922
Теперь вам нужно зайти в гмод, выбрать нужную карту и ОБЯЗАТЕЛЬНО зайти на неё в режиме Sandbox и тип игры должен быть Singleplayer!
Так же, стоит учитывать, что саму карту и её пропы лучше не трогать, вообще не менять их положение, иначе могут возникнуть ошибки.
Мы в игре. Ищем во вкладке "Инструменты" в подвкладке "Trouble In Terrorist Town" инструмент под названием "Weapon Placer".
Как мы видим со скрина, тут много опций. Давайте разберём. Тут есть список. Это оружия TTT и так же спавн игрока. Так же ещё кнопки Export to file и Import File. Одна отвечает за экспорт готового rearm скрипта, а другая за его импорт для дальнейших изменений, но не суть. Так же, есть ещё Convert HL2, которая сконвертирует энтити из HL2 в энтити для ТТТ. И ещё удаления существующих оружий на карте. Но работа с инструментом достаточна примтивна и понятна. Просто выбираем из списка, что нам нужно и размещаем тулом на карте, так я налепил кучу спавнов и кучу оружек.
Примечание: Чтобы заспавнить вместо оружия патроны для него, просто выберите в списке нужное вам оружие, к примеру mac 10 и нажмите MOUSE 2. Запомним их положение. Так же, в этом меню есть галочка напротив Replace existing spawnpoints. Если её поставить, то при запуске карты в TTT оригинальные спавны карты сотрутся и будут заменены на те, что вы понаставили.
Собственно, всё. Теперь просто нажимаем Export to file. Если в чате будет написано что-то типа "169 placements saved to /garrysmod/data/ttt/maps/de_dust_ttt.txt", то ваш скрипт успешно сохранён и экспортирован. Но это ещё не всё. К сожалению, проблема аддонов гмода в том, что они позволяют сохранять данные аддонов только в папке data, но в ней наш скрипт не заработает, поэтому заходим в папку data/ttt и в моём случае gm_freespace_09_extended.txt и вставляем его в папку maps гмода. Само название скрипта не изменяйте.
Собственно, теперь осталось только проверить всё в игре. Для этого нужно зайти на нашу карту в режиме TTT.
Вводим эти команды, чтобы обойти вечное ожидание игроков.
ttt_debug_preventwin 1 ttt_minimum_players 1
Как мы можем видеть, вещи, которые я понаставил с помощью Weapon Placer'а успешно установлены:

Собственно, так и работают rearm скрипты.
Немного о дизайне карты для баланса.
И напоследок, пара подсказок о том как правильно строить карту:
  1. Не делайте карты слишком большими. В первую очередь, TTT всё-таки мультиплеерный режим с кол-вом игроков не больше чем 64, чем режим для больших перспектив.
  2. Больше узких проходов и скрытых мест на карте. Поскольку режим рассчитан на в каком-то смысле даже командную игру, узкие проходы и скрытые места отлично пойдут Т для убийства несчастных невинных, но тут всё же стоит соблюдать золотую середину. Если вся карта будет состоять из одних и сплошных скрытых мест и узких проходов и коридоров, то играть на ней не будет никакого интереса, да и Т уже сразу можно будет заметить.
Заключение
Вот и весь маппинг под TTT. В заключение я хочу сказать, огромное спасибо вам за то, что вы меня поддерживаете. Я очень ценю вашу поддержку. Я не думал, что мои гайды вообще кто-то прочитает и они так и останутся на дне гайдов стима, но благодаря вам они побывали даже в топах. Большое вам спасибо!
15 Comments
Alivebyte!  [author] 28 Oct, 2024 @ 11:03pm 
После смерти игра и по истечению времени игра и так заканчивается, это задумано самим гейммодом, ttt_win нужен чтобы преждевременно заканчивать раунд при каких-то условиях, которые вы сами задаёте
TheRonuFas 28 Oct, 2024 @ 9:31am 
А и хотел спросить, я добавил ttt_win на карту, но не понимаю, что делать с ним, а точнее, как сделать так, чтобы после смерти (трэйтора или невиновных) игра заканчивалась, а также после истечения времени.
TheRonuFas 27 Oct, 2024 @ 9:46am 
Дал 2 награды за тутор.
Спасибочки, выручил :):steamthumbsup:
Alivebyte!  [author] 11 Feb, 2024 @ 10:52pm 
Убедитесь что она лежит в папке maps гмода и попробуйте запустить её с меню
Люда_ед 11 Feb, 2024 @ 4:41am 
как запустить карту, а то у меня не выходит
XORELL 16 Feb, 2022 @ 2:35am 
Долго искал, наконец кто то посвятил меня
frequency 31 Mar, 2020 @ 9:26am 
полезно
forfor 28 Nov, 2019 @ 12:37am 
Спасибо, попробую разобраться.
Alivebyte!  [author] 27 Nov, 2019 @ 10:46am 
Чекай в QC путь к материалами текстуры и чекни как называются материалы у модели
forfor 27 Nov, 2019 @ 4:14am 
Как мне поменять модель? Я добавил файлы в garrys mod прописал путь и модель есть, но на ней нету текстуры. Можешь подсказать?