Англоязычный гайд по маппингу: https://docs.spacestation14.io/en/content/mapping Англоязычный гайд по сборке проекта: https://docs.spacestation14.io/en/getting-started/dev-setup --- Маппинг происходит на сервере, поэтому для маппинга необходимо поднять свой локальный сервер. Для этого будет необходимо сначала скачать актуальную версию кода проекта из репозитория используя Git, а затем собрать её. ## Сборка и поднятие локального сервера ### Для сборки потребуется скачать и установить: * Git - https://git-scm.com * Python 3.7 или новее - https://www.python.org - качать именно с оф. сайта а не с Windows Store иначе могут возникнуть проблемы со скриптом * .NET 7 SDK x64 - https://dotnet.microsoft.com/en-us/download ### Клонирование кода После установки всего вышеперечисленного теперь нужно скачать код проекта через Git. 1. Для этого сначала нужно получить ссылку на репозиторий, оканчивающуюся на `.git` . Для этого нужно зайти на страницу репозитория на GitHub и нажать справа сверху на кнопку "Code". Скопируйте ссылку из выпавшего окна (вам нужна ссылка по HTTPS). **Для билда SS220 вы можете просто скопировать вот эту ссылку:** https://github.com/SerbiaStrong-220/space-station-14.git 2. После этого вам нужно открыть командную строку вашей системы (в Windows 10 - Win+R и введите cmd) и перейти в папку, куда вы будете клонировать. В cmd и PowerShell (Windows) для этого используется команда cd, например `cd C:\Users\VasyaPupkin\Desktop`. Вы можете копировать путь прямо из проводника. Если папка находится на диске, отличном от C то сначала переключитесь на этот диск введя `<буква диска>:` Например `E:` ![](https://hackmd.io/_uploads/ByeTjjz53.png) Учитывайте то, что в процессе клонирования Git сам создаст подпапку для кода проекта. Убедитесь что у вас достаточно места! Билд после сборки может весить больше 4ГБ. 4. Теперь введите git clone <ссылка из шага 1>. Для билда SS220 команда будет выглядеть так: `git clone https://github.com/SerbiaStrong-220/space-station-14.git` 5. Дождитесь конца клонирования. Проверьте результат, по указанному вами пути будет подпапка "space-station-14" с кодом проекта. ### Сборка 1. Откройте командную строку и перейдите через cd в папку проекта (space-station-14). Введите `py -3 .\RUN_THIS.py`. Дождитесь окончания. 2. Введите `dotnet build --configuration Release`. Дождитесь окончания. В консоли жёлтым цветом может показаться очень много предупреждений, игнорируйте их. Ошибки будут показаны красным цветом. После окончания сборки у вас должно быть 0 ошибкок как на скриншоте: ![](https://hackmd.io/_uploads/Sk6W8_f53.png) Теперь у вас есть **релиз-сборка**. Она отличается от дебаг-сборки тем, что имеет автосохранение карт во время маппинга и реже крашится. Именно её рекомендуется использовать для маппинга. Если вам вдруг потребуется **дебаг-сборка**, то введите просто `dotnet build` (без `--configuration Release`). Её для маппинга использовать не рекомендуется. ### Запуск Сервер запускается с помощью runserver.bat в папке билда, клиент с помощью runclient.bat Сервер можно настраивать в файле конфигурации `server_config.toml` в папке `bin\Content.Server`, однако для маппинга или тестирования это не требуется. ### Обновление Расписано для тех, кто не использует Git для коммита своих обновлений в основной репозиторий или делает это через других людей. 1. Сохраните нужные вам файлы (вашу карту и прототип) в отдельной папке. Выключите сервер и клиент. Все лишние файлы в папке игры будут потом удалены, как и изменения в существующих файлах. Исключением будет конфигурация сервера и файлы в data. 2. Откройте консоль и сделайте cd в главную папку билда. Введите `git clean -fd` Это удалит все лишние файлы (файлы которые не существовали изначально или которых нет в .gitignore). 3. Введите `git reset --hard` Это откатит изменения в тех файлах, которые не были удалены в предыдущем шаге 4. Это было сделано чтобы не было конфликтов с загружаемым обновлением. Теперь введите `git pull` 5. Если обновление загрузилось успешно, переходите к сборке (`dotnet build` или `dotnet build --configuration 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 который указан в вашем прототипе>. При вводе 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 позволяющий редактировать компоненты объектов. ### Важно знать * Если вы подберёте гостом предмет, то на полу останется его копия которую нельзя удалить. Эта копия на самом деле не существует на сервере и не сохраняется в файле карты. Это баг от разработчиков официального билда, с которым пока нельзя ничего сделать. (17.07.2023) * Anchored (прикрученные) объекты (не важно Anchorable или просто через поле anchored в TransformComponent) могут находиться только в середине клетки. Если вы переместите предмет через телепорт или отредактировав TransformComponent, то он станет открученным (динамическим). У них пропадёт питание, а в случае с WallmountComponent (настенный предмет) у них появится коллизия со стеной. Это не относится к полностью статическим объектам, которые не могут быть откручены. * Если объект который вы собираетесь удалять привязан к кнопке или выключателю, то сначала отвяжите его с помощью конфигуратора сетей. Иначе связь сохранится в файле карты как invalid. Обычно от этого карта не перестаёт работать но может показывать лишние ошибки/предупреждения. * Тем кто занимается репозиторием очень сложно решать конфликты между изменениями в картах из-за формата. Конфликты происходят когда два человека предлагают изменения одних и тех же строк, что может с большой вероятностью произойти из-за обновления формата или хаотичного смещения uid декалей (баг, не пофикшенный разрабами). Перед тем как делать большие ремапы или ремапы затрагивающие декали, поинтересуйтесь не работает ли кто-то с картой. В данный момент следующими картами заняты: * Delta - VladIsLove ( discord - vladislove._. ) * Box - TheArturZh ( discord - thearturzh ) ### Прочее: Для удобства работы через командную строку рекомендую поставить Windows Terminal из Microsoft Store если он у вас еще не стоит. Выглядит более современно и можно открывать сразу в папке через контекстное меню. Это то чем я пользуюсь для разработки https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701