# Секретные цели станции
Привет Сьерра. Сейчас станция имеет глобальную общую цель на смену, предлагается добавить новую "секретную" цель доступную для прочтения изначально только капитану. Эта задача в большинстве случаев будет "серой" и её разглашение под запретом. Это добавляет капитану новый ~~SUS~~ геймплей, где капитан пытается достигнуть своих целей не говоря их напрямую, а манипулируя остальными благодаря своей власти. Предполагается возможность интеграции в текст переменной информации, например случайные имена из текущего персонала и т.п.
## Наброски заданий
1. Поймать и доставить на ЦК зомби (невыполнимо? скучно?)
1. Доставить канистру трития, миазм или плазмы на шаттле эвакуации оставив канистры в кабине или в инженерном отсеке? (чем сложнее тем больше заплатят).
> Задание которое капитану предложил руководитель ЦК, но является нелегальным так как он предлагает украсть это со станции и выручить за это деньги. Бумага написана от лица представителя, дает кодовое слово (которым можно подписать канистры?) и просит уничтожить бумагу после прочтения.
1. Проследить, что бы конкретный сотрудник остался на станции, не убивая его. (щиткур с раундстарта?)
1. Проследить что бы конкретный сотрудник выжил и улетел. (будет забавно если это будет трейтор, но его можно конвоировать)
1. Внедрение экспериментальных изменений в СРП, запрет на курение | запрет на алкоголь | запрет ...
# Представление в игре
В игре появляется 2 новых объекта:
- Конверт
- Бумага с заданием
Конверт имеет следующие состояния:
- Запечатан
- Открыт и содержит бумагу
- Открыт и пуст
Открытие конверта занимает какое-то время (прогресс-бар)
Бумага содержится в запечатанном конверте и описывает текущее секретное задание.
Запечатанный конверт появляется в сумке капитана как стартовый предмет, так как вся механика нацеленна именно для роли капитана.
# Техническое исполнение
## Конверт
Возможные состояния конверта можно отобразить следующей схемой:

 -> <-> 
Конверт должен иметь компонент контейнера ([`Storage`](https://spacestation14.io/space-station-14/api/Content.Server/Content.Server.Storage.Components.ServerStorageComponent.html)) с белым список на тэг `Document` (можно подсмотреть у реализации коробок и папок, возможно даже наследоваться от папок).
Доступ к контейнеру нельзя получить пока состояние конверта не является - "вскрыт".
Открытый же конверт должен отображать своей содержимое и выполнено это должно быть с помощью overlay, то есть простым отображением бумаги поверх пустого конверта:
 (спрайт бумаги в конверте)
Распечатка конверта должна занимать какое-то время, для скорее всего будет необходимо создать новый компонент интегрирующий событие с [`DoAfter`](https://spacestation14.io/space-station-14/api/Content.Server/Content.Server.DoAfter.DoAfter.html) ([пример события doAfter](https://github.com/space-wizards/space-station-14/blob/7fbc2608e88f9781f2a4159065caf3371de51f42/Content.Server/Cuffs/Components/HandcuffComponent.cs#L154) со снятием наручников), если возможно это должен быть унифицированный компонент который можно переиспользовать для других вещей. Дальше будет описан этот компонент и его работа.
Подводя итоги описанного выше, мы можем сказать, что нам будет необходима отдельная система позволяющая "открывать" закрытые объекты и получать после этого доступ к их содержимому, это должна быть универсальная насколько это может быть система, которую в теории можно будет переиспользовать хоть для банок с огурцами.
Это компонент должен первым отлавливать событие об использовании предмета в руке и проверять текущее состояния, в случае если предмет запечатан, нужно начать исполнять логику распечатывания и перевода в новое состояние, в случае же если предмет уже распечатан нужно пусть событие далье для других систем. Подсмотреть реализацию можно например у компонента гранат, так как граната должна быть активирована, что переведёт её в иное состояние, однако последующие попытки активации ничего не изменят.
Так же имеется другой способ реализации описанного выше поведения без создания новых собственных систем.
Для этого необходимо разделить представление состояния конверта на 2 отдельных объекта: закрытый и вскрытый.
Закрытый будет иметь на себе [`SpawnAfterInteract`](https://spacestation14.io/space-station-14/api/Content.Server/Content.Server.Engineering.Components.SpawnAfterInteractComponent.html) компонент (нужно будет только добавить ему поддержку DoAfter) и после использования его в руке он будет спавнить новый объект, уже вскрытого конверта, не забывая удалить старый конечно. Вскрытый конверт уже будет иметь обычную систему отображения содержимого (`ItemMapper`) а так же компонент хранилища (`Store`). По сути мы создаем предмет, который является спавнером случайного задания при использовании. Этот способ менее элегантный и желательно не должен быть использован.
## Бумага с заданием
Бумага должна иметь на себе новый компонент `SecretStationGoal`, тогда созданный нами новый класс системы сможет подписаться на событие об инициализации нового такого компонента и добавить на бумагу текст задания, взятый случайного из загруженных прототипов заданий.
## Задания
Для заданий будет создан новый класс прототипа с одним полем `text` в котором будет располагаться строка локализации с текстом задания.
## Конверт при спавне
Необходимо добавить в рюкзак капитана созданный нами объект письма.