From 9d916109e80dba26b00b4fc567d413a4544d73f9 Mon Sep 17 00:00:00 2001 From: Aylong <69762909+Aylong220@users.noreply.github.com> Date: Fri, 8 Sep 2023 23:56:31 +0300 Subject: [PATCH] feat: Photocopier blanks and TGUI port (Rebased) (#148) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В принтер добавлены бюрократические формы с парашизы Код полностью... практически полностью соответствует парашизовскому, если не хуже, так что можно сказать я НАСРАЛ. В будущем думаю переписать весь UI и добавить сканер как у оффовского, поиск в бланки, и выпадающее меню, в общем, справа должны быть только бланки Больше бланков богу бланков, не надо ручками писать ![image](https://github.com/ss220club/Paradise-Remake/assets/69762909/1f8198ea-bbb8-4b84-a8d5-c6c10f5a6a5d) Тыкал кнопочки, в том числе за ИИ Есть пара багов, если выставить 0 копий и пытаться распечатать фотку жопы, звук будет стакаться и разрывать уши. Не понимаю зачем кнопка с папкой, на офф тгуи она по всей видимости тоже ничего не делает, кроме возможности хранить папку. :cl: add: Добавлены бланки в ксерокс. /:cl: --------- Co-authored-by: Furior Co-authored-by: Furior <68264134+Furrior@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --- modular_ss220/bureaucracy/_bureaucracy.dm | 9 + modular_ss220/bureaucracy/_bureaucracy.dme | 5 + modular_ss220/bureaucracy/code/forms.dm | 539 ++++++++++++++++++ modular_ss220/bureaucracy/code/paper.dm | 23 + modular_ss220/bureaucracy/code/photocopier.dm | 113 ++++ modular_ss220/modular_ss220.dme | 1 + .../tgui/interfaces/Photocopier220.js | 235 ++++++++ 7 files changed, 925 insertions(+) create mode 100644 modular_ss220/bureaucracy/_bureaucracy.dm create mode 100644 modular_ss220/bureaucracy/_bureaucracy.dme create mode 100644 modular_ss220/bureaucracy/code/forms.dm create mode 100644 modular_ss220/bureaucracy/code/paper.dm create mode 100644 modular_ss220/bureaucracy/code/photocopier.dm create mode 100644 tgui/packages/tgui/interfaces/Photocopier220.js diff --git a/modular_ss220/bureaucracy/_bureaucracy.dm b/modular_ss220/bureaucracy/_bureaucracy.dm new file mode 100644 index 000000000000..cc9b26b56dab --- /dev/null +++ b/modular_ss220/bureaucracy/_bureaucracy.dm @@ -0,0 +1,9 @@ +/datum/modpack/bureaucracy + name = "Бюрократия" + desc = "Добавляет бланки в ксерокс." + author = "Aylong220, Furior, RV666" + +/datum/modpack/bureaucracy/initialize() + . = ..() + for(var/datum/bureaucratic_form/form as anything in subtypesof(/datum/bureaucratic_form)) + GLOB.bureaucratic_forms["[form]"] = new form diff --git a/modular_ss220/bureaucracy/_bureaucracy.dme b/modular_ss220/bureaucracy/_bureaucracy.dme new file mode 100644 index 000000000000..ed7bf92d9036 --- /dev/null +++ b/modular_ss220/bureaucracy/_bureaucracy.dme @@ -0,0 +1,5 @@ +#include "_bureaucracy.dm" + +#include "code/paper.dm" +#include "code/forms.dm" +#include "code/photocopier.dm" diff --git a/modular_ss220/bureaucracy/code/forms.dm b/modular_ss220/bureaucracy/code/forms.dm new file mode 100644 index 000000000000..9d74ba71898b --- /dev/null +++ b/modular_ss220/bureaucracy/code/forms.dm @@ -0,0 +1,539 @@ +GLOBAL_LIST_INIT(bureaucratic_forms, list()) + +/datum/bureaucratic_form + /// Form name. Will be applied to a paper + var/name + /// Form id + var/id + /// Alternative form name. Appears in printer this way with id + var/altername + /// In what category the form is + var/category + /// What access is required to print this form + var/req_access + + /// Text that will be applied to a paper + var/text + var/is_header_needed = TRUE + /// Header that will be apllied to a paper + var/header + /// Footer that will be apllied to a paper + var/footer = footer_signstampfax + + /// Used in header to decide to add or not CONFEDENTIAL text + var/confidential = FALSE + /// Used in some forms as a reminder of some stuff + var/notice = "Перед заполнением прочтите от начала до конца | Во всех PDA имеется ручка" + /// Is generated based on station name. Used in some forms + var/from + var/const/footer_signstampfax = "

Подписи глав являются доказательством их согласия.
Данный документ является недействительным при отсутствии релевантной печати.
Пожалуйста, отправьте обратно подписанную/проштампованную копию факсом.
" + var/const/footer_signstamp = "

Подписи глав являются доказательством их согласия.
Данный документ является недействительным при отсутствии релевантной печати.
" + var/const/footer_confidential = "

Данный документ является недействительным при отсутствии печати.
Отказ от ответственности: Данный факс является конфиденциальным и не может быть прочтен сотрудниками не имеющего доступа. Если вы получили данный факс по ошибке, просим вас сообщить отправителю и удалить его из вашего почтового ящика или любого другого носителя. И Nanotrasen, и любой её агент не несёт ответственность за любые сделанные заявления, они являются исключительно заявлениями отправителя, за исключением если отправителем является Nanotrasen или один из её агентов. Отмечаем, что ни Nanotrasen, ни один из агентов корпорации не несёт ответственности за наличие вирусов, который могут содержаться в данном факсе или его приложения, и это только ваша прерогатива просканировать факс и приложения на них. Никакие контракты не могут быть заключены посредством факсимильной связи.
" + +/datum/bureaucratic_form/New() + . = ..() + from = "Научная станция Nanotrasen\ + "[SSmapping.map_datum.fluff_name]"" + if(is_header_needed) + header = "
[name][confidential ? " \[КОНФИДЕНЦИАЛЬНО\]" : ""]
[altername]
[from][category]
[notice]



" + +/datum/bureaucratic_form/proc/apply_to_paper(obj/item/paper/paper, mob/user = null) + paper.name = name + paper.info = admin_pencode_to_html(text, user) + paper.header = header + paper.footer = footer + paper.force_big = TRUE + paper.populatefields() + +// Главы станции +/datum/bureaucratic_form/NT_COM_ST + name = "Форма NT-COM-ST" + id = "NT-COM-ST" + altername = "Отчет о ситуации на станции" + category = "Главы станции" + text = "
Приветствую Центральное командование

Сообщает вам , в должности .

В данный момент на станции код:
Активные угрозы для станции:
Потери среди экипажа:
Повреждения на станции:
Общее состояние станции:
Дополнительная информация:


Подписи и штампы

Подпись:
*В данном документе описывается полное состояние станции, необходимо перечислить всю доступную информацию.
*Информацию, которую вы считаете нужной, необходимо сообщить в разделе – дополнительная информация.
*Данный документ считается официальным только после подписи уполномоченного лица и наличии на документе его печати.
" + +/datum/bureaucratic_form/NT_COM_ACAP + name = "Форма NT-COM-ACAP" + id = "NT-COM-ACAP" + altername = "Заявление о повышении главы отдела до и.о. капитана" + category = "Главы станции" + text = "Я, , в должности главы отделения , прошу согласовать нынешнее командование станции Керберос, в повышении меня до и.о. капитана.

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

⠀⠀⠀При появлении капитана мне необходибо будет сообщить: состояние и статус станции, о своем продвижении до и.о. капитана, и обнулить капитанский доступ при первому требованию капитана.

Подписи и штампы


Подпись заявителя:
Подпись инициатора повышения:
Время вступления в должность и.о. капитана:
Подпись главы отделения :
Подпись главы отделения :
Подпись главы отделения :

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченного лица, производившего инициацию повышения, и выдаче заявителю.
*Если один (или более) глав отсутствуют, необходимо собрать подписи, действующих глав.
*Так же в данном документе, главам, которые согласились с кандидатом, необходимо поставить свою печать и подпись.
" + +/datum/bureaucratic_form/NT_COM_ACOM + name = "Форма NT-COM-ACOM" + id = "NT-COM-ACOM" + altername = "Заявление о повышении сотрудника до и.о. главы отделения" + category = "Главы станции" + text = "
ᅠᅠЯ, , в должности сотрудника отделения , прошу согласовать нынешнее командование станции Керберос, в повышении меня до звания и.о. главы .

⠀⠀⠀При назначении меня на данную должность, я обязуюсь выполнять все рекомендации, и правила, которые присутствуют на главе отделения . До появления основного главы отделения, я обеспечиваю порядок и управление своим отделом, сохранность и безопасность личных вещей главы отделения.

⠀⠀⠀При появлении главы отделения, мне неообходимо сообщить: состояние и статус своего отдела, о своем продвижении до и.о. главы отделения, и сдать доступ и.о. главы и взятые вещи при первом требовании прибывшего главы.


Подписи и штампы

Подпись заявителя:
Подпись инициатора повышения:
Время вступления в и.о. :
Подпись главы отделения :
Подпись главы отделения :
Подпись главы отделения :

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченного лица, производившего инициацию повышения, и выдаче заявителю.
*При указании главы, рекомендуется использовать сокращения:
*СМО (главврач), СЕ (глав. инженер), РД (дир. исследований), КМ (завхоз), ГСБ (глава СБ), ГП (глава персонала).
*Если один (или более) глав отсутствуют, необходимо собрать подписи, действующих глав.
*Так же в данном документе, главам, которые согласились с кандидатом, необходимо поставить свою печать и подпись.
" + +/datum/bureaucratic_form/NT_COM_LCOM + name = "Форма NT-COM-LCOM" + id = "NT-COM-LCOM" + altername = "Заявление об увольнении главы отделения" + category = "Главы станции" + text = "
ᅠᅠЯ, , в должности – , заявляю об официальном увольнении действующего главы , отделения . Причина увольнения:
⠀⠀⠀При наличии иных причин, от других глав, они так же могут написать их в данном документе.



Подписи и штампы

Подпись инициатора увольнения:
Подпись увольняемого, о ознакомлении:
Дата и время увольнения:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченного лица, производившего инициацию увольнения, и выдаче увольняемому.
*Для полной эффективности данного документа, необходимо собрать как можно больше причин для увольнения, и перечислить их. Инициировать увольнение может только капитан или глава персонала.
" + +/datum/bureaucratic_form/NT_COM_REQ + name = "Форма NT-COM-REQ" + id = "NT-COM-REQ" + altername = "Запрос на поставку с Центрального командования" + category = "Главы станции" + text = "
Приветствую Центральное командование


Сообщает вам , в должности .

Текст запроса:

Причина запроса:


Подписи и штампы


Подпись:

*В данном документе описывается запросы на поставку оборудования/ресурсов, необходимо перечислить по пунктно необходимое для поставки.
*Данный документ считается, официальным, только после подписи уполномоченного лица, и наличии на документе его печати.
" + +/datum/bureaucratic_form/NT_COM_OS + name = "Форма NT-COM-OS" + id = "NT-COM-OS" + altername = "Отчёт о выполнении цели" + category = "Главы станции" + text = "
Цель станции:
Статус цели:
Общее состояние станции:
Активные угрозы:
Оценка работы экипажа:
Дополнительные замечания:


Подписи и штампы
Должность уполномоченного лица:
Подпись уполномоченного лица:
*Данное сообщение должно сообщить вам о состоянии цели, установленной Центральным командованием Nanotrasen для ИСН "Керберос". Убедительная просьба внимательно прочитать данное сообщение для вынесения наиболее эффективных указаний для последующей деятельности станции.
*Данный документ считается официальным только при наличии подписи уполномоченного лица и соответствующего его должности штампа. В случае отсутствия любого из указанных элементов данный документ не является официальным и рекомендуется его удалить с любого информационного носителя.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Корпорация Nanotrasen не несёт ответственности, если данный документ не попал в руки первоначального предполагаемого получателя. Однако, корпорация Nanotrasen запрещает использование любой имеющейся в данном документе информации третьими лицами и сообщает, что это преследуется по закону, даже если информация в данном документе не является достоверной.
" + +//Медицинский Отдел + +/datum/bureaucratic_form/NT_MD_01 + name = "Форма NT-MD-01" + id = "NT-MD-01" + altername = "Постановление на поставку медикаментов" + category = "Медицинский отдел" + text = "⠀⠀⠀ Я, , в должности , запрашиваю следующие медикаменты на поставку в медбей:



Подписи и штампы
Подпись заказчика:
Подпись грузчика:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче грузчику или производившему поставку.
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_MD_02 + name = "Форма NT-MD-02" + id = "NT-MD-02" + altername = "Отчёт о вскрытии" + category = "Медицинский отдел" + text = "
Основная информация

Скончавшийся:
Раса:
Пол:
Возраст:
Группа крови:
Должность:



Отчёт о вскрытии

Тип смерти:
Описание тела:
Метки и раны:
Вероятная причина смерти:

Детали:




Подписи и штампы

Время:
Вскрытие провёл:
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_MD_03 + name = "Форма NT-MD-03" + id = "NT-MD-03" + altername = "Постановление на изготовление химических препаратов" + category = "Медицинский отдел" + text = "⠀⠀⠀ Я, , в должности , запрашиваю следующие химические медикаменты, для служебного использования в медбее:



Подписи и штампы
Подпись заказчика:
Подпись исполняющего:
Время заказа:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче лицу исполнившему заказ
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_MD_04 + name = "Форма NT-MD-04" + id = "NT-MD-04" + altername = "Сводка о вирусе" + category = "Медицинский отдел" + text = "
Вирус:

Полное название вируса:
Свойства вируса:
Передача вируса:
Побочные эффекты:

Дополнительная информация:

Лечение вируса:



Подписи и штампы

Подпись вирусолога:
*В дополнительной информации, указывается вся остальная информация, по поводу данного вируса.
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_MD_05 + name = "Форма NT-MD-05" + id = "NT-MD-05" + altername = "Отчет об психологическом состоянии" + category = "Медицинский отдел" + text = "
Пациент:
Раздражители:
Симптомы и побочные действия:
Дополнительная информация:


Подписи и штампы

Подпись психолога:
Время обследования:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче пациенту
" + footer = footer_signstamp + +//Мед-без нумерации +/datum/bureaucratic_form/NT_MD_VRR + name = "Форма NT-MD-VRR" + id = "NT-MD-VRR" + altername = "Запрос на распространение вируса" + category = "Медицинский отдел" + text = "
Основная информация

Я, , в должности – , запрашиваю право на распространение вируса среди экипажа станции.
Название вируса:
Задачи вируса:
Лечение:
Вакцина была произведена
и в данный момент находится:




Подписи и штампы

Подпись вирусолога:
Подпись глав. Врача:
Подпись капитана:

*Производитель вируса несет полную ответственность за его распространение, изолирование и лечение
*При возникновении опасных или смертельных побочных эффектов у членов экипажа, производитель должен незамедлительно предоставить вакцину, от данного вируса.
" + footer = footer_signstamp + +//Исследовательский отдел +/datum/bureaucratic_form/NT_RND_01 + name = "Форма NT-RND-01" + id = "NT-RND-01" + altername = "Отчет о странном предмете" + category = "Исследовательский отдел" + text = "
Название предмета:
Тип предмета:
Строение:
Особенности и функционал:
Дополнительная информация:


Подписи и штампы

Подпись производившего осмотр:

*В дополнительной информации, рекомендуется указать остальную информацию о предмете, любое взаимодействие с ним, модификации, итоговый вариант после модификации.
" + +/datum/bureaucratic_form/NT_RND_02 + name = "Форма NT-RND-02" + id = "NT-RND-02" + altername = "Заявление на киберизацию" + category = "Исследовательский отдел" + text = "⠀⠀⠀ Я, , в должности , самовольно подтверждаю согласие на проведение киберизации.
⠀⠀⠀ Я полностью доверяю работнику в должности – . Я хорошо осведомлен о рисках, связанных как с операцией, так и с киберизацией, и понимаю, что Nanotrasen не несет ответственности, если эти процедуры вызовут боль, заражение или иные случаи летального характера.


Подписи и штампы

Подпись заявителя:
Подпись уполномоченного:

*Если член экипажа мертв, данный документ нету необходимости создавать.
*Если член экипажа жив, данный документ сохраняется только у уполномоченного лица.
*Данный документ может использоваться как для создания киборгов, так и для ИИ" + +/datum/bureaucratic_form/NT_RND_03 + name = "Форма NT-RND-03" + id = "NT-RND-03" + altername = "Заявление на получение и установку импланта" + category = "Исследовательский отдел" + text = "
Заявление

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Требуемый имплантат:
Может требовать дополнительного согласования

Причина:
Объясните свои намерения





Подписи и штампы

Дата и время:
Подпись заявителя:
Подпись Руководителя Исследований:
Подпись выполняющего установку имплантата:
" + +// Общие формы +/datum/bureaucratic_form/NT_BLANK + name = "Форма NT" + id = "NT-BLANK" + altername = "Пустой бланк для любых целей" + category = "Общие формы" + text = "
Основная информация

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте




Заявление




Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
Подпись (дополнительная):" + footer = null + +/datum/bureaucratic_form/NT_E_112 + name = "Форма NT-E-112" + id = "NT-E-112" + altername = "Экстренное письмо" + category = "Общие формы" + notice = "Форма предназначена только для экстренного использования." + text = "
Основная информация

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте




Отчёт о ситуации




Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_signstamp + +// Отдел кадров +/datum/bureaucratic_form/NT_HR_00 + name = "Форма NT-HR-00" + id = "NT-HR-00" + altername = "Бланк заявления" + category = "Отдел кадров" + text = "
Основная информация

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте




Заявление




Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
Подпись (дополнительная):
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_HR_01 + name = "Форма NT-HR-01" + id = "NT-HR-01" + altername = "Заявление о приеме на работу" + category = "Отдел кадров" + text = "
Заявление

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Запрашиваемая должность:
Требует наличия квалификации

Список компетенций:




Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
Подпись будущего главы:
" + +/datum/bureaucratic_form/NT_HR_02 + name = "Форма NT-HR-02" + id = "NT-HR-02" + altername = "Заявление на смену должности" + category = "Отдел кадров" + text = "
Заявление

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Запрашиваемая должность:
Требует наличия квалификации

Причина:
Объясните свои намерения




Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
Подпись текущего главы:
Подпись будущего главы:
" + +/datum/bureaucratic_form/NT_HR_12 + name = "Форма NT-HR-12" + id = "NT-HR-12" + altername = "Приказ на смену должности" + category = "Отдел кадров" + text = "
Приказ

Имя сотрудника:
Полностью и без ошибок

Номер аккаунта сотрудника:
Эта информация есть у главы персонала

Текущая должность:
Указано на ID карте

Запрашиваемая должность:
Требует наличия квалификации

Причина:
Объясните свои намерения





Подписи и штампы

Время:
Подпись инициатора:
Подпись главы персонала:
" + +/datum/bureaucratic_form/NT_HR_03 + name = "Форма NT-HR-03" + id = "NT-HR-03" + altername = "Заявление об увольнении" + category = "Отдел кадров" + text = "
Заявление

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Причина:
Объясните свои намерения




Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
Подпись текущего главы:
" + +/datum/bureaucratic_form/NT_HR_13 + name = "Форма NT-HR-13" + id = "NT-HR-13" + altername = "Приказ об увольнении" + category = "Отдел кадров" + text = "
Приказ

Имя увольняемого:
Полностью и без ошибок

Номер аккаунта увольняемого:
Эта информация есть у главы персонала

Текущая должность:
Указано на ID карте

Причина:
Объясните свои намерения





Подписи и штампы

Время:
Подпись инициатора:
Подпись главы персонала:
" + +/datum/bureaucratic_form/NT_HR_04 + name = "Форма NT-HR-04" + id = "NT-HR-04" + altername = "Заявление на выдачу новой ID карты" + category = "Отдел кадров" + text = "
Заявление

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Причина:
Объясните свои намерения





Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
" + +/datum/bureaucratic_form/NT_HR_05 + name = "Форма NT-HR-05" + id = "NT-HR-05" + altername = "Заявление на дополнительный доступ" + category = "Отдел кадров" + text = "
Заявление

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Требуемый доступ:
Может требовать дополнительного согласования

Причина:
Объясните свои намерения





Подписи и штампы

Время:
Подпись заявителя:
Подпись главы персонала:
Подпись текущего главы:
" + +/datum/bureaucratic_form/NT_HR_06 + name = "Форма NT-HR-06" + id = "NT-HR-06" + altername = "Лицензия на создание организации/отдела" + category = "Отдел кадров" + text = "
Заявление


Я , прошу Вашего разрешения на создание для работы с экипажем.

Наше Агенство/Отдел займет .

Наша Организация обязуется соблюдать Космический Закон. Также я , как глава отдела, буду нести ответственность за своих сотрудников и обязуюсь наказывать их за несоблюдение Космического Закона. Или же передавать сотрудникам Службы Безопасности.



Подписи и штампы


Время:

Подпись заявителя:

Подпись главы персонала:


*Обязательно провести копирование документа для главы персонала, оригинал документа должен быть выдан обладателю лицензии.

*Данная форма документа, обязательно должна подтверждаться печатью ответственного лица. В случае наличия опечаток и отсутствия подписей или печатей, лицензия будет являться недействительной.
" + +/datum/bureaucratic_form/NT_HR_07 + name = "Форма NT-HR-07" + id = "NT-HR-07" + altername = "Разрешение на перестройку/перестановку" + category = "Отдел кадров" + text = "
Разрешение

Я , прошу Вашего разрешения на перестройку/перестановку помещения под свои нужды или нужды организации.

Должность заявителя:



Подписи и штампы


Время:

Подпись заявителя:

Подпись главы персонала:



*Обязательно провести копирование документа для главы персонала, оригинал документа должен быть выдан заявителю.
" + +/datum/bureaucratic_form/NT_HR_08 + name = "Форма NT-HR-08" + id = "NT-HR-08" + altername = "Запрос о постройке меха" + category = "Отдел кадров" + text = "⠀⠀⠀Я, , прошу произвести постройку меха – , с данными модификациями – , для выполнения задач: .
⠀⠀⠀Так же я, , обязуюсь соблюдать все правила, законы и предупреждения, а также соглашаюсь выполнять все устные или письменные инструкции, или приказы со стороны командования, представителей или агентов Nanotrasen, и Центрального командования.
⠀⠀⠀При получении меха, я становлюсь ответственным за его повреждение, уничтожение, похищение, или попадание в руки людей, относящимся к врагам Nanotrasen.


Подписи и штампы

Подпись заявителя:
Время постройки меха:
Время передачи меха заявителю:
Подпись изготовителя меха:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче заявителю.
" + +/datum/bureaucratic_form/NT_HR_09 + name = "Форма NT-HR-09" + id = "NT-HR-09" + altername = "Квитанция о продаже пода" + category = "Отдел кадров" + text = "⠀⠀⠀Я, , в должности – произвожу передачу транспортного средства на платной основе члену экипажа , в должности – . Продаваемый под имеет модификации: . Стоимость пода: .
⠀⠀⠀Я, , как покупатель, становлюсь ответственным за его повреждение, уничтожение, похищение, или попадание в руки людей, относящимся к врагам Nanotrasen.
⠀⠀⠀Так же я, обязуюсь соблюдать все правила, законы и предупреждения, а также соглашаюсь выполнять все устные или письменные инструкции, или приказы со стороны командования, представителей или агентов Nanotrasen, и Центрального командования.


Подписи и штампы

Подпись продавца:
Подпись покупателя:
Время сделки:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче покупателю.
" + +// Отдел сервиса +/datum/bureaucratic_form/NT_MR + name = "Форма NT-MR" + id = "NT-MR" + altername = "Свидетельство о заключении брака" + category = "Отдел сервиса" + text = "⠀⠀⠀Объявляется, что , и , официально прошли процедуру заключения гражданского брака.



Подписи и штампы

Подпись уполномоченного:
Подпись свидетеля:
Подпись свидетеля:


*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче одному из представителей брака.
*При заявлении о расторжении брака, необходимо наличие двух супругов, и данного документа.
" + +/datum/bureaucratic_form/NT_MRL + name = "Форма NT-MRL" + id = "NT-MRL" + altername = "Заявление о расторжении брака" + category = "Отдел сервиса" + text = "⠀⠀⠀Просим произвести регистрацию расторжения брака, подтверждаем взаимное согласие на расторжение брака.



Подписи и штампы

Подпись супруга:
Подпись супруги:

Подпись уполномоченного:


*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче каждому, из супругов.
" + +// Отдел снабжения +/datum/bureaucratic_form/NT_REQ_01 + name = "Форма NT-REQ-01" + id = "NT-REQ-01" + altername = "Запрос на поставку" + category = "Отдел снабжения" + text = "
Сторона запроса

Имя запросившего:
Полностью и без ошибок

Номер аккаунта:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Способ получения:
Предпочитаемый способ


Причина запроса:


Список запроса:




Сторона поставки

Имя поставщика:
Полностью и без ошибок

Номер аккаунта:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте

Способ доставки:
Утверждённый способ


Комментарии:


Список поставки и цены:


Итоговая стоимость:
Пропустите, если бесплатно




Подписи и штампы

Время:
Подпись стороны запроса:
Подпись стороны поставки:
Подпись главы (если требуется):
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_SUP_01 + name = "Форма NT-SUP-01" + id = "NT-SUP-01" + altername = "Регистрационная форма для подтверждения заказа" + category = "Отдел снабжения" + text = "

Отдел снабжения

Регистрационная форма для подтверждения заказа

Имя заявителя:
Должность заявителя:
Подробное объяснение о необходимости заказа:

Время:
Подпись заявителя:
Подпись руководителя:
Подпись сотрудника снабжения:

Данная форма является приложением для оригинального автоматического документа, полученного с рук заявителя. Для подтверждения заказа заявителя необходимы указанные подписи и соответствующие печати отдела по заказу.
" + footer = null + +// Служба безопасности +/datum/bureaucratic_form/NT_SEC_01 + name = "Форма NT-SEC-01" + id = "NT-SEC-01" + altername = "Свидетельские показания" + category = "Служба безопасности" + text = "
Информация о свидетеле

Имя свидетеля:
Полностью и без ошибок

Номер аккаунта свидетеля:
Эта информация есть у главы персонала

Должность свидетеля:
Указано на ID карте




Свидетельство



Я, (подпись свидетеля) , подтверждаю, что приведенная выше информация является правдивой и точной, насколько мне известно, и передана в меру моих возможностей. Подписываясь ниже, я тем самым подтверждаю, что Верховный Суд может признать меня неуважительным или виновным в лжесвидетельстве согласно Закону SolGov 552 (a) (c) и Постановлению корпорации Nanotrasen 7716 (c).



Подписи и штампы

Время:
Подпись сотрудника, получающего показания:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_11 + name = "Форма NT-SEC-11" + id = "NT-SEC-11" + altername = "Ордер на обыск" + category = "Служба безопасности" + text = "
Информация о свидетеле

Имя свидетеля:
Полностью и без ошибок

Номер аккаунта свидетеля:
Эта информация есть у главы персонала

Должность свидетеля:
Указано на ID карте




Ордер

В целях обыска:
(помещения, имущества, лица)

Ознакомившись с письменными показаниями свидетеля(-ей), у меня появились основания полагать, что на лицах или помещениях, указанных выше, имеются соответствующие доказательства в этой связи или в пределах, в частности:



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

Я удовлетворен тем, что показания под присягой и любые записанные показания устанавливают вероятную причину полагать, что описанное имущество в данный момент скрыто в описанных выше помещениях, лицах или имуществе, и устанавливают законные основания для выдачи этого ордера.

ВЫ НАСТОЯЩИМ КОМАНДИРОВАНЫ для обыска вышеуказанного помещения, имущества или лица в течение минут с даты выдачи настоящего ордера на указанное скрытое имущество, и если будет установлено, что имущество изъято, оставить копию этого ордера в качестве доказательства на реквизированную собственность, в соответствии с требованиями указа корпорации Nanotrasen.

Слава Корпорации Nanotrasen!


Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_21 + name = "Форма NT-SEC-21" + id = "NT-SEC-21" + altername = "Ордер на арест" + category = "Служба безопасности" + text = "
Ордер

В целях ареста:
Имя полностью и без ошибок

Должность:

Сотрудники Службы Безопасности настоящим уполномочены и направлены на задержание и арест указанного лица. Они будут игнорировать любые заявления о неприкосновенности или привилегии со стороны подозреваемого или агентов, действующих от его имени. Сотрудники немедленно доставят указанное лицо в Бриг для отбывать наказание за следующие преступления:



Предполагается, что подозреваемый будет отбывать наказание в за вышеуказанные преступления.

Слава Корпорации Nanotrasen!


Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_02 + name = "Форма NT-SEC-02" + id = "NT-SEC-02" + altername = "Отчёт по результатам расследования" + category = "Служба безопасности" + text = "
Дело

Тип проишествия/преступления:
Время проишествия/преступления:
Местоположение:
Краткое описание:



Участвующие лица

Арестованные:
Подозреваемые:
Свидетели:
Раненные:
Пропавшие:
Скончавшиеся:



Ход расследования



Прикреплённые доказательства:
Дополнительные замечания:



Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_03 + name = "Форма NT-SEC-03" + id = "NT-SEC-03" + altername = "Заявление о краже" + category = "Служба безопасности" + text = "⠀⠀⠀Я, , в должности , заявляю:



Подписи и штампы

Подпись потерпевшего:
Подпись принимавшего заявление:
Время принятия заявления:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче потерпевшему.
*При обнаружении предмета кражи (предмет, жидкость или существо), данный предмет необходимо передать детективу, для дальнейшего осмотра и обследования.
*После заключения детектива, предмет можно выдать владельцу.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_04 + name = "Форма NT-SEC-04" + id = "NT-SEC-04" + altername = "Заявление о причинении вреда здоровью или имуществу" + category = "Служба безопасности" + text = "⠀⠀⠀Я, , в должности , заявляю:



Подписи и штампы

Подпись пострадавшего:
Время происшествия:
Подпись уполномоченного:
Время принятия заявления:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче пострадавшему.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_05 + name = "Форма NT-SEC-05" + id = "NT-SEC-05" + altername = "Разрешение на оружие" + category = "Служба безопасности" + text = "⠀⠀⠀Члену экипажа, , в должности , было выдано разрешение на оружие. Я соглашаюсь с условиями его использования, хранения и применения. Данное оружие я обязуюсь применять только в целях самообороны, защиты своих личных вещей, и рабочего места, а так же для защиты своих коллег.
⠀⠀⠀При попытке применения оружия, против остальных членов экипажа не предоставляющих угрозу, или при запугивании данным оружием, я лишаюсь лицензии на оружие, а так же понесу наказания, при нарушении закона.

Название и тип оружия:




Подписи и штампы

Подпись уполномоченного:
Подпись получателя:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче получателю.
*Документ не является действительным без печати Вардена/ГСБ и его подписи.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_06 + name = "Форма NT-SEC-06" + id = "NT-SEC-06" + altername = "Разрешение на присваивание канала связи" + category = "Служба безопасности" + text = "
Разрешение

Я , прошу Вашего разрешения на присваивание канала связи , для грамотной работы организации.

Должность заявителя:



Подписи и штампы


Время:

Подпись заявителя:

Подпись главы персонала:

Подпись главы службы безопасности:



*Обязательно провести копирование документа для главы персонала, оригинал документа должен быть выдан заявителю.

*Обязательно провести копирование документа для службы безопасности.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_07 + name = "Форма NT-SEC-07" + id = "NT-SEC-07" + altername = "Лицензия на использование канала связи и владение дополнительным оборудованием" + category = "Служба безопасности" + text = "
Лицензия

Имя обладателя лицензии:

Должность обладателя лицензии:

Зарегистрированный канал связи:

Перечень зарегистрированной экипировки:


Подписи и штампы


Время:

Подпись заявителя:

Подпись главы персонала:

Подпись главы службы безопасности:


*Обязательно провести копирование документа для главы персонала, оригинал документа должен быть выдан обладателю лицензии.

*Обязательно провести копирование документа для службы безопасности.

*Данная форма документа, обязательно должна подтверждаться печатью ответственного лица. В случае наличия опечаток и отсутствия подписей или печатей, лицензия будет являться недействительной.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_SEC_08 + name = "Форма NT-SEC-08" + id = "NT-SEC-08" + altername = "Лицензирование вооружения и экипировки для исполнения деятельности" + category = "Служба безопасности" + text = "
Лицензия


Имя обладателя лицензии:
Должность обладателя лицензии:
Перечень зарегистрированного вооружения:
Перечень зарегистрированной экипировки:



Подписи и штампы


Время:
Подпись обладателя лицензии:
Подпись главы службы безопасности:


*Данная форма документа, обязательно должна подтверждаться печатью ответственного лица. В случае наличия опечаток и отсутствия подписей или печатей, лицензия будет является недействительной. Обязательно провести копирование документа для службы безопасности, оригинал документа должен быть выдан обладателю лицензии. В случае несоответствия должности обладателя лицензии, можно приступить к процедуре аннулирования лицензии и изъятию вооружения, экипировки.
" + footer = footer_confidential + +// Юридический отдел +/datum/bureaucratic_form/NT_LD_00 + name = "Форма NT-LD-00" + id = "NT-LD-00" + altername = "Бланк заявления" + category = "Юридический отдел" + text = "
Основная информация

Имя заявителя:
Полностью и без ошибок

Номер аккаунта заявителя:
Эта информация есть в ваших заметках

Текущая должность:
Указано на ID карте




Заявление




Подписи и штампы

Время:
Подпись заявителя:
Подпись уполномоченного сотрудника:
" + footer = footer_signstamp + +/datum/bureaucratic_form/NT_LD_01 + name = "Форма NT-LD-01" + id = "NT-LD-01" + altername = "Судебный приговор" + category = "Юридический отдел" + notice = "Данный документ является законным решением суда.
Пожалуйста внимательно прочитайте его и следуйте предписаниям, указанные в нем." + text = "
Дело

Имя обвинителя:
Полностью и без ошибок

Имя обвиняемого:
Полностью и без ошибок


Приговор





Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_LD_02 + name = "Форма NT-LD-02" + id = "NT-LD-02" + altername = "Смертный приговор" + category = "Юридический отдел" + notice = "Любой смертный приговор, выданный человеком, званием младше, чем капитан, является не действительным, и все казни, действующие от этого приговора являются незаконными. Любой, кто незаконно привел в исполнение смертный приговор действую согласно ложному ордену виновен в убийстве первой степени, и должен быть приговорен минимум к пожизненному заключению и максимум к кибернизации. Этот документ или его факс-копия являются Приговором, который может оспорить только Магистрат или Дивизией защиты активов Nanotrasen (далее именуемой «Компанией»)" + text = "
Дело

Принимая во внимание, что (далее именуемый \"подсудимый\"),
сознательно совершил преступления статей Космического закона (далее указаны как \"преступления\"),
а именно: ,
суд приговаривает подсудимого к смертной казни через .

Приговор должен быть приведен в исполнение в течение 15 минут после получения данного приказа. Вещи подсудимого, включая ID-карту, ПДА, униформу и рюкзак, должны быть сохранены и переданы соответствующем органам (ID-карту передать главе персонала или капитану для уничтожения), возвращены в соответсвующий отдел или сложены в хранилище улик. Любая контрабанда должна немедленно помещена в хранилище улик. Любую контрабанду запрещено использовать защитой активов или другими персонами, представляющих компанию или её активы и цели, кроме сотрудников отдела исследований и развития.

Тело подсудимого должно быть помещено в морг и забальзамировано, только если данное действие не будет нести опасность станции, активам компании или её имуществу. Останки подсудимого должны быть собраны и подготовлены к доставке к близлежащему административному центру компании, всё имущество и активы должны быть переданы семье подсудимого после окончания смены.

Слава Nanotrasen!



Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_LD_03 + name = "Форма NT-LD-03" + id = "NT-LD-03" + altername = "Заявление о нарушении СРП членом экипажа" + category = "Юридический отдел" + text = "
⠀⠀⠀Я, , в должности – , заявляю, что член экипажа – , в должности , нарушил один (или несколько) пунктов из Стандартных Рабочих Процедур, а именно:

Примерное время нарушения:



Подписи и штампы

Подпись заявителя:
Подпись принимающего:
Время принятия заявления:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче заявителю.
*После вынесения решения в отношении правонарушителя, желательно сообщить о решении заявителю.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_LD_04 + name = "Форма NT-LD-04" + id = "NT-LD-04" + altername = "Заявление о нарушении СРП одним из отделов" + category = "Юридический отдел" + text = "
⠀⠀⠀Я, , в должности – , заявляю, что сотрудники в отделении , нарушили один (или несколько) пунктов из Стандартных Рабочих Процедур, а именно:

Примерное время нарушения:
Подпись заявителя:



Подписи и штампы

Подпись принимающего:
Время принятия заявления:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче заявителю.
*После вынесения решения в отношении правонарушителей, желательно сообщить о решении заявителю.
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_LD_05 + name = "Форма NT-LD-05" + id = "NT-LD-05" + altername = "Отчет агента внутренних дел" + category = "Юридический отдел" + text = "ᅠᅠЯ, , Как агент внутренних дел, сообщаю:



Подписи и штампы

Подпись АВД:
Подпись уполномоченного:
Время принятия отчета:

*Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче агенту.
*Данный документ может содержать нарушения, неправильность выполнения работы, невыполнение правил/сводов/законов/СРП
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_LD_06 + name = "Форма NT-LD-06" + id = "NT-LD-06" + altername = "Бланк жалоб АВД" + category = "Юридический отдел" + text = "
Заявление



Заявитель:
Укажите своё полное имя, должность и номер акаунта.
Предмет жалобы:
Укажите на что/кого вы жалуетесь.
Обстоятельства:
Укажите подробные обстоятельства произошедшего.



Подписи и штампы

Подпись:
Ваша подпись.
Жалоба рассмотрена:
Имя и фамилия рассмотревшего.



*Обязательно провести копирование документа для агента внутренних дел, оригинал документа должен быть приложен к отчету о расследовании. Копия документа должна быть сохранена в картотеке офиса агента внутренних дел.

*Обязательно донести жалобу до главы отдела, который отвечает за данного сотрудника, если таковой имеется. Если главы отдела нет на смене или он отсуствует по какой то причине, жалобу следует донести до вышестоящего сотрудника станции.

*Если жалоба была написана на главу отдела, следует донести жалобу до вышестоящего сотрудника станции.

*Глава отдела, которому была донесена жалоба, обязан провести беседу с указаным в жалобе сотрудником станции. В зависимости от тяжести проступка, глава отдела имеет право подать приказ об увольнении.
" + footer = footer_confidential + +// Центральное командование + +/datum/bureaucratic_form/NT_COM_00 + name = "Форма NT-COM-00" + id = "NT-COM-00" + altername = "Общая форма ЦК" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "\[small\]Станция — \[b\]Центральное командование\[/b\]\[br\]Год: 2567\[br\]Время: \[time\]\[/small\]\[br\]\[i\]\[large\]\[b\]\[field\] \[b\]\[/large\]\[/i\]\[/grid\]\[hr\]\[center\]Приветствую экипаж и руководство \[station\]!\[/center\]\[br\]\[br\]\[field\]\[br\]\[small\]\[i\]\[br\]Подпись: \[sign\]\[/i\], в должности: \[i\]\[field\].\[/i\]\[/small\]" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_01 + name = "Форма NT-COM-01" + id = "NT-COM-01" + altername = "Запрос отчёта общего состояния станции" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "
Запрос

Уполномоченный офицер, , в должности , запрашивает сведения об общем состоянии станции.



Ответ

Общее состояние станции:
Криминальный статус:

Повышений:
Понижений:
Увольнений:

Раненные:
Пропавшие:
Скончавшиеся:



Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_02 + name = "Форма NT-COM-02" + id = "NT-COM-02" + altername = "Запрос отчёта состояния трудовых активов станции" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "
Запрос

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



Ответ

Количество сотрудников:
Количество гражданских:
Количество киборгов:
Количество ИИ:

Заявлений о приёме на работу:
Заявлений на смену должности:
Приказов на смену должности:
Заявлений об увольнении:
Приказов об увольнении:
Заявлений на выдачу новой ID карты:
Заявлений на дополнительный доступ:

Медианный уровень кваллификации смены:
Уровень взаимодействия отделов:
Самый продуктивный отдел смены:

Приложите все имеющиеся документы:NT-HR-00
NT-HR-01
NT-HR-02
NT-HR-12
NT-HR-03
NT-HR-13
NT-HR-04
NT-HR-05



Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_03 + name = "Форма NT-COM-03" + id = "NT-COM-03" + altername = "Запрос отчёта криминального статуса станции" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "
Запрос
\ +
Уполномоченный офицер, , в должности , запрашивает сведения о криминальном статусе станции.\ +



Ответ

\ +
Текущий статус угрозы:
Количество офицеров в отделе:
Количество раненных офицеров:
Количество скончавшихся офицеров:
Количество серъёзных инцидентов:
Количество незначительных инцидентов:
Количество раскрытых дел:
Количество арестованных:
Количество сбежавших:

Приложите все имеющиеся документы:NT-SEC-01
NT-SEC-11
NT-SEC-21
NT-SEC-02
Лог камер заключения



Подписи и штампы

Время:
Подпись уполномоченного лица:
Должность уполномоченного лица:
" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_04 + name = "Форма NT-COM-04" + id = "NT-COM-04" + altername = "Запрос отчёта здравоохранения станции" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_05 + name = "Форма NT-COM-05" + id = "NT-COM-05" + altername = "Запрос отчёта научно-технического прогресса станции" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_06 + name = "Форма NT-COM-06" + id = "NT-COM-06" + altername = "Запрос отчёта инженерного обеспечения станции" + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "" + footer = footer_confidential + +/datum/bureaucratic_form/NT_COM_07 + name = "Форма NT-COM-07" + id = "NT-COM-07" + altername = "Запрос отчёта статуса снабжения станции " + category = "Центральное командование" + from = "Административная станция Nanotrasen "Trurl"" + notice = "Перед заполнением прочтите от начала до конца | Высокий приоритет" + confidential = TRUE + req_access = ACCESS_CENT_GENERAL + text = "" + footer = footer_confidential diff --git a/modular_ss220/bureaucracy/code/paper.dm b/modular_ss220/bureaucracy/code/paper.dm new file mode 100644 index 000000000000..093557d90d32 --- /dev/null +++ b/modular_ss220/bureaucracy/code/paper.dm @@ -0,0 +1,23 @@ +/obj/item/paper + var/paper_width_big = 600 + var/paper_height_big = 700 + var/small_paper_cap = 1024 + var/force_big = FALSE + +/obj/item/paper/updateinfolinks() + . = ..() + update_size() + +/obj/item/paper/proc/update_size() + if(force_big || length(info) > small_paper_cap) + become_big() + else + reset_size() + +/obj/item/paper/proc/become_big() + paper_width = paper_width_big + paper_height = paper_height_big + +/obj/item/paper/proc/reset_size() + paper_width = initial(paper_width) + paper_height = initial(paper_height) diff --git a/modular_ss220/bureaucracy/code/photocopier.dm b/modular_ss220/bureaucracy/code/photocopier.dm new file mode 100644 index 000000000000..4392c1933085 --- /dev/null +++ b/modular_ss220/bureaucracy/code/photocopier.dm @@ -0,0 +1,113 @@ +/obj/machinery/photocopier + /// Selected form's category + var/category = "" + /// Selected form's id + var/form_id = "" + /// List of available forms + var/list/forms + /// Selected form's datum + var/datum/bureaucratic_form/form + /// Printing sound + var/print_sound = 'sound/goonstation/machines/printer_dotmatrix.ogg' + +/obj/machinery/photocopier/Initialize(mapload) + . = ..() + forms = new + +/obj/machinery/photocopier/attack_ai(mob/user) + add_hiddenprint(user) + parse_forms(user) + ui_interact(user) + return attack_hand(user) + +/obj/machinery/photocopier/attack_ghost(mob/user) + ui_interact(user) + return attack_hand(user) + +/obj/machinery/photocopier/attack_hand(mob/user) + if(..()) + return TRUE + + user.set_machine(src) + parse_forms(user) + ui_interact(user) + +/obj/machinery/photocopier/ui_act(action, list/params) + if(..()) + return + + switch(action) + if("print_form") + for(var/i in 1 to copies) + if(toner <= 0) + break + print_form(form) + use_power(active_power_consumption) + sleep(15) + . = TRUE + if("choose_form") + form = GLOB.bureaucratic_forms[params["path"]] + form_id = params["id"] + . = TRUE + if("choose_category") + category = params["category"] + . = TRUE + if("aipic") + aipic() + . = TRUE + +/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "Photocopier220", name, 650, 635, master_ui, state) + ui.open() + +/obj/machinery/photocopier/ui_data(mob/user) + if(!length(forms)) + parse_forms(user) + + var/list/data = list() + + data["isAI"] = issilicon(user) + data["copynumber"] = copies + data["toner"] = toner + data["copyitem"] = (copyitem ? copyitem.name : null) + data["folder"] = (folder ? folder.name : null) + data["mob"] = (copymob ? copymob.name : null) + data["files"] = list() + data["form"] = form + data["category"] = category + data["form_id"] = form_id + data["forms"] = forms + + if(LAZYLEN(saved_documents)) + for(var/obj/item/O in saved_documents) + var/list/document_data = list( + name = O.name, + uid = O.UID() + ) + data["files"] += list(document_data) + return data + +/obj/machinery/photocopier/proc/parse_forms(mob/user) + var/list/access = user.get_access() + forms.Cut() + for(var/path in GLOB.bureaucratic_forms) + var/datum/bureaucratic_form/F = GLOB.bureaucratic_forms[path] + var/req_access = F.req_access + if(req_access && !(req_access in access)) + continue + var/form[0] + form["path"] = F.type + form["id"] = F.id + form["altername"] = F.altername + form["category"] = F.category + forms.Add(list(form)) + +/obj/machinery/photocopier/proc/print_form(datum/bureaucratic_form/form) + playsound(loc, print_sound, 25, TRUE) + toner-- + if(toner <= 0) + visible_message("На [src] мигает красная лампочка. Похоже, закончился тонер.") + var/obj/item/paper/paper = new(loc) + form.apply_to_paper(paper, usr) diff --git a/modular_ss220/modular_ss220.dme b/modular_ss220/modular_ss220.dme index cf4d4960393a..dd6a0358a629 100644 --- a/modular_ss220/modular_ss220.dme +++ b/modular_ss220/modular_ss220.dme @@ -29,6 +29,7 @@ // --- MISC --- // #include "aesthetics_sounds/_aesthetics_sounds.dme" +#include "bureaucracy/_bureaucracy.dme" #include "crawl_speed/_crawl_speed.dme" #include "discord_link/_discord_link.dme" #include "emotes/_emotes.dme" diff --git a/tgui/packages/tgui/interfaces/Photocopier220.js b/tgui/packages/tgui/interfaces/Photocopier220.js new file mode 100644 index 000000000000..0a2d58c21353 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Photocopier220.js @@ -0,0 +1,235 @@ +import { useBackend, useLocalState } from '../backend'; +import { Button, Section, Flex, Input } from "../components"; +import { Window } from '../layouts'; +import { filter, sortBy } from 'common/collections'; +import { FlexItem } from '../components/Flex'; +import { flow } from 'common/fp'; +import { createSearch } from 'common/string'; + +String.prototype.trimLongStr = function (length) { + return this.length > length ? this.substring(0, length) + "..." : this; +}; + +const selectForms = (forms, searchText = '') => { + const testSearch = createSearch(searchText, (form) => form.altername); + return flow([ + filter((form) => form?.altername), + searchText && filter(testSearch), + sortBy((form) => form.id), + ])(forms); +}; + + +export const Photocopier220 = (props, context) => { + const { act, data } = useBackend(context); + + const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); + + const forms = selectForms(sortBy(form => form.category)(data.forms || []), searchText); + const categories = []; + for (let form of forms) { + if (!categories.includes(form.category)) { + categories.push(form.category); + } + } + + let category; + if (data.category === "") { + category = forms; + } else { + category = forms.filter(form => form.category === data.category); + } + + return ( + + + + +
+ + + Заряд тонера: + + 0 ? "good" : "bad"} bold> + {data.toner} + + + + +
+
+ + +
+
+ + + Форма: + + + {data.form_id === "" ? "Не выбрана" : data.form_id} + + + + +
+
+ +
+ setSearchText(value)} + /> + + {category.map(form => ( + +
+
+
+
+
+ ); +};