Перейти к содержанию

Маппинг

У официальных разработчиков так же есть англоязычный гайд по маппингу.

В данный момент следующими картами заняты:

  • Delta - VladIsLove ( Discord: vladislove._. )
  • Frankenstein - TheArturZh ( Discord: thearturzh )

Подготовка

Маппинг происходит на сервере, поэтому для маппинга необходимо поднять свой локальный сервер. Для этого будет необходимо сначала скачать актуальную версию кода проекта из репозитория используя Git, а затем собрать её в конфигурации Release.

О том как это сделать можно прочитать в нашем подробном гайде.

Маппинг

Запуск mapping-режима

Запустите сервер и клиент, зайдите на сервер.
На клавишу ~ вы можете открыть консоль игры. Для начала маппинга вам нужно ввести в консоль mapping <ID карты> <Файл карты>.

  • ID карты это номер слота карты на сервере. Он существует т.к. в раунде может быть загружено сразу несколько карт. Для ID карты Вы можете использовать абсолютно любое число от 0 до 255, но первые 12 обычно заняты. Для того чтобы увидеть какие ID заняты и какие карты загружены, введите в консоль lsmap. Список появится в ней же.
  • Файл карты обычно лежит либо в Resources/Maps, который в консоли указывается как /Maps, либо в bin/Content.Server/data, который указывается как просто /. Файл карты имеет расширение .yml. Карты, которые вы сохраняете, лежат обычно в bin/Content.Server/data. Карты, которые используются для игры, лежат обычно в Resources/Maps.

Пример команды для загрузки карты Box: mapping 220 /Maps/box.yml
Так же важно упомянуть: эта команда работает корректно только если вы уже заспавнились! Она не будет правильно работать если вы в лобби.

Сохранение карты

Карта сохраняется с помощью команды savemap <ID карты> <имя файла>.yml
Карта будет сохранена в папку bin/Content.Server/data. Если в пути вы указали подпапку, то она будет создана там. Вы не можете сохранять карту в Resources/Maps, при попытке сохранения будет создана подпапка в data.
Убедитесь что вы сохраняете ту карту что нужно! Сохраняемая карта должна быть не инициализирована, иначе потом она не загрузится ни в раунде, ни в mapping. Mapping изначально загружает карту не инициализированной, но если у вас возникают сомнения то проверьте инициализацию сохраняемой карты с помощью lsmap - она будет показана в самом левом столбце после id. Значение init: True означает что карта инициализирована и сохранять её нельзя.

Тестирование карты

Перед тестированием не забудьте сохранить изменения!
Протестировать карту можно с помощью mapinit <ID карты>. Это снимет карту с паузы и инициализирует её - камеры подключатся к роутерам, спавнеры заспавнят предметы и т.п. При этом функционал карты может быть ограничен по сравнению с обычным раундом. Сохранять инициализированную карту нельзя - она не будет загружаться.
Чтобы продолжить маппинг, вы можете загрузить ту же карту (вы же сохранили изменения перед тестированием?) через mapping но с другим ID. Однако, во избежание лишней нагрузки на процессор я рекомендую делать полный рестарт раунда (restartroundnow). Это уберёт все карты что вы загрузили через mapping или loadmap.

Тестирование карты в раунде

Для тестирования карты в раунде вам потребуется создать новый прототип станции.

  1. Сначала переместите карту из data в папку Resources/Maps - там лежат файлы карт.
  2. Прототипы станций хранятся в другой папке - в /Resources/Prototypes/Maps/. Зайдите туда и скопируйте любой из лежащих там .yml файлов. Оставьте его в этой же папке и дайте ему название латиницей без пробелов.
  3. Откройте его в любом текстовом редакторе (блокнот подойдёт, но для редактирования прототипов Notepad++ будет удобнее).
  4. Найдите строку начинающуюся на id: (она ближе к началу файла) и впишите туда любой не занятый ID вместо существующего. Пишется латиницей без пробелов. Удобнее всего если он схож с названием карты. Этот ID будет использоваться для загрузки карты через forcemap.
  5. Найдите строку mapPath:, она тоже близко к началу файла. Укажите в ней путь к файлу карты. Обратите внимание на то что путь начинается с /Maps. Так же проверьте не используете ли вы символ \ в пути (он там может быть если вы скопировали его из проводника). Если они там есть, замените их на /
  6. Сохраните файл. Перезапустите сервер и введите в консоли forcemap . При вводе ID должен появлятся в подсказках автозаполнения. После этого введите restartroundnow. Если загрузить карту не вышло, то скорее всего вы допустили синтаксическую ошибку в прототпе карты.

Теперь вы можете тестировать вашу карту в полноценном раунде. Если вы обновили свою карту, то достаточно перекинуть её из data в Resources/Maps заменив старую версию. Убедитесь что имя файла осталось то же что и раньше. После этого будет достаточно еще раз прописать forcemap и перезапустить раунд.
Так же некоторые профессии могут отсутствовать даже если вы добавили спавнер. Это происходит из-за того, что доступные профессии и количество сотрудников перечислены в прототипе карты, ниже строки availableJobs:
Редактируйте осторожно, ошибки синтаксиса приведут к тому что прототип карты не будет загружен и вы просто не найдёте своей карты. При изменениях в прототипе перезапустить раунд недостаточно, нужно перезапускать весь сервер.

Инструментарий и управление

  • Когда вы в первый раз за раунд используете mapping, у вас из-за бага не загружается панель быстрых действий. Исправьте это с помощью команды loadmapacts
    Это добавит быстрый выбор объектов для спавна на вашей левой панели действий. У вас заполнятся сразу несколько панелей, которые вы можете переключать с помощью Shift+<цифра>. Что самое главное, у вас появится инструмент для быстрого удаления объектов на кнопку 0. Вы можете выключить инструмент удаления так же, как вы выключаете инструмент спавна - на ПКМ. При использовании будьте аккуратны - вы можете удалить себя!
  • На P (английскую) вы активируете спавн того же объекта что и под курсором. Так же работает с плиткой, но к сожалению не работает с декалями.
  • Вы можете вращать объект перед тем как его заспавнить, просто нажимайте на СКМ (колёсико).
  • Если вы удалили клетки станции, или наоборот построили их там где был космос - перед сохранением пропишите fixgridatmos <ID грида>. Если вы этого не сделаете, то у вас будет вакуум на созданной части станции. Вы можете узнать грид на котором сейчас находитесь нажав F3.
  • Вы можете прописать zoom <дробь с запятой (не точкой!)> для отдаления карты. Стандартное значение - 1. Отдалять дальше чем на 1,5 не практично так как дальность рендера ограничена.
  • Чтобы покрасить трубы введите команду colornetwork <ID объекта трубы> Pipe <Цвет в hex в форме RGB, можно с решеткой> Это покрасит все соединенные с ней трубы, что так же позволит проверить не соединили ли вы вейст с дистрой. Стандартный цвет дистры - 0335FC (синий), вейста - FF1212 (красный).
  • В меню песочницы (английская B) вы можете включать/отключать отсвещение, FOV, отображение спавнов и труб под полом.
  • Варп-поинты всё так же работают, если вы случайно удалили себя - делайте админ-гост, loadmapacts и варпайтесь обратно на карту.
  • Не забывайте, у вас есть VariableViewer позволяющий редактировать компоненты объектов. ПКМ - Debug - View Variables.

Важно знать

  • Anchored (прикрученные) объекты могут находиться только в середине клетки. Если вы переместите предмет через телепорт или отредактировав TransformComponent, то он станет открученным (динамическим). У них пропадёт питание, а в случае с WallmountComponent (настенный предмет) у них появится коллизия со стеной. Это не относится к полностью статическим объектам, которые не могут быть откручены.
  • Если объект который вы собираетесь удалять привязан к кнопке или выключателю, то сначала отвяжите его с помощью конфигуратора сетей. Иначе связь сохранится в файле карты как invalid. В лучшем случае карта не перестаёт работать но может показывать лишние ошибки/предупреждения. В худшем - карта вообще не сохранится, и вам придётся вспоминать где вы удаляли связанные предметы.
  • Тем кто занимается репозиторием очень сложно решать конфликты между изменениями в картах из-за формата. Конфликты происходят когда два человека предлагают изменения одних и тех же строк, что может с большой вероятностью произойти из-за обновления формата или хаотичного смещения uid декалей (баг, не пофикшенный разрабами). Перед тем как маппить поинтересуйтесь не работает ли кто-то с картой.