Песочница/Pok/3: различия между версиями

Материал из Space Station 14 Вики
Нет описания правки
Нет описания правки
 
(не показано 211 промежуточных версий 4 участников)
Строка 1: Строка 1:
{{СРП/CO/Info/Main}}__NOTOC__
{{docpage}}{{TOC hidden}}
{{OnLua|Сущность|module1=Сущность|module2=Сущность/поля|module3=GetField}}


{{GradientHeaderFrame
Модульный набор {{tl|Модуль:Сущность}} + {{tl|Модуль:Сущность/поля}} + {{tl|Модуль:GetField}} предназначен для:
|title  = Общие СРП
* автоматической сборки карточек сущностей (компонентов и прототипов) по их ID;
|picture = [[Файл:Sci_dep.png|30px|link=]]
* описания полей в шаблонах компонентов (какие поля идут в карточку, как подписаны);
|content =
* удобного доступа к данным из JSON (как простыми значениями, так и готовыми вызовами шаблонов).


{{Шаблон:СРП/CO/Научный отдел/Общие СРП}}
Ниже описан общий принцип работы и отдельные режимы.


}}
== Общий принцип работы ==
* В шаблонах компонентов/прототипов (<code>Template:Component/...</code>, <code>Template:prototype/...</code>) через {{tl|Модуль:Сущность/поля}} описываются поля:
** '''лейблы''' (<code>cardLabel_*</code>) и '''содержимое''' (<code>cardContent_*</code>), заголовки (<code>title_*</code>) и т. п.;
** '''мета‑информация''' о том, какие ключи доступны для <code>card</code> / <code>title</code> и в каком порядке.
* {{tl|Модуль:Сущность}} по ID сущности:
** находит связанные с ней компоненты и прототипы по JSON‑данным;
** для каждого компонента/прототипа читает шаблоны и метаданные;
** собирает все поля в единую структуру;
** формирует один вызов карточки <code><nowiki>{{карточка/сущность|...}}</nowiki></code> (и блоки заголовков).
* Внутри полей можно писать вики‑параметры <code>{{{...}}}</code> и вызывать дополнительные модули.
* {{tl|Модуль:GetField}} даёт доступ к JSON‑данным на низком уровне:
** как «расплющенный» набор параметров (<code>flattenField</code>);
** как отдельные значения (<code>get</code>);
** как готовые вызовы шаблонов с нужными параметрами (<code>getTpl</code>, <code>getTplProto</code>).


{{GradientHeaderFrame
== Модуль: Сущность/поля ==
|title  = Ведомственные СРП
Шаблоны компонентов используют модуль <code>Сущность/поля</code> для объявления полей, которые будут собираться в карточку.
|picture = [[Файл:Sci_dep.png|30px|link=]]
|content =


{{Шаблон:СРП/CO/Научный отдел/Научный руководитель}}
Пример шаблона компонента:
{{Шаблон:СРП/CO/Научный отдел/Учёный}}
{{Шаблон:СРП/CO/Научный отдел/Научный ассистент}}


<pre>
{{#invoke:Сущность/поля|main
|cardLabel_Стоимость  = [[Стоимость]]
|cardContent_Стоимость = '''{{{price}}}'''
}}
}}
</pre>


{{GradientHeaderFrame
Другой компонент может добавлять тот же ключ:
|title  = Процедуры и протоколы
|picture = [[Файл:Sci_dep.png|30px|link=]]
|content =


Данные процедуры регламентируют правила работы сотрудников научного отдела и являются обязательными к исполнению.<br>
<pre>
{{#invoke:Сущность/поля|main
|cardContent_Стоимость  = '''{{{superPrice}}}'''
}}
</pre>


{{RulesBox
Особенности:
|title  = Процедура контроля аномалий
* Пара <code>cardLabel_<Ключ></code> / <code>cardContent_<Ключ></code> описывает одну строку карточки (лейбл и содержимое).
|content = <p></p>
* Если несколько шаблонов дают один и тот же <code>cardContent_Ключ</code>, содержимое '''объединяется''', а лейбл берётся первый непустой.
Выполнение данных процедур обязательно при работе с аномалиями стандартного типа, вызываемыми {{#invoke:Entity Lookup|createtexttooltip|генератором аномалий|MachineAnomalyGenerator|img=Anomaly generator.png}} или [[Список случайных событий#Гиперэнергетический волновой поток|гиперэнергетическими волновыми потоками]].
* То же относится к другим режимам, перечисленным в мета‑JSON шаблона (разделы <code>card</code>, <code>title</code> и т. п.), которые читает {{tl|Модуль:Сущность}}.
# Использование генератора для вызова аномалий должно быть одобрено научным руководителем. Если руководитель отсутствует, то требуется разрешение капитана.
# Вызов аномалий '''запрещён''' во время [[СРП#Чрезвычайные_ситуации|чрезвычайных ситуаций]].
# Перед вызовом аномалии сотрудник обязан предупредить об этом в общий канал связи.
# Сотрудник, вызвавшийся работать с аномалией, становится ответственным за её контроль.
## При обнаружении [[Список случайных событий#Гиперэнергетический волновой поток|гиперэнергетического волнового потока]] среди свободных научных сотрудников должен быть выбран ответственный за поиск и контроль возможных аномалий.
## Научный руководитель имеет право самостоятельно назначать и переназначать ответственных за аномалии.
## Передача ответственности за аномалию происходит при обоюдном согласии сторон, уведомлении об этом научного руководителя и передаче оборудования для работы с аномалией, сведений о её местоположении.
# Ответственный за аномалию сотрудник обязан в срочном порядке узнать её местоположение и начать работу с ней.
# Сотрудник должен оценить обстановку вокруг аномалии и возможные риски, связанные с её влиянием на окружение, для принятия решения о содержании, перемещении или уничтожении объекта.
## Содержание аномалии:
##* в закрытом отделе согласуется с главой этого отдела.
##* допускается в общественных и многолюдных местах, если это несильно препятствует работе и перемещению персонала.
##* допускается в технических помещениях и отдалённых местах станции, куда у сотрудника есть доступ, если зона её воздействия не охватывает многолюдные коридоры и рабочие помещения.
## Если аномалия находится в месте с повышенным трафиком или способна разрушить/покинуть зону содержания, то сотрудник обязан вести прямое наблюдение за объектом.
## Научный руководитель может потребовать ликвидацию или перемещение аномалии, независимо от её месторасположения, если посчитает это нужным.
## Аномалия должна быть ликвидирована или перемещена по первому требованию главы отдела, в котором она содержится.
# Зона для долговременного содержания аномалии должна быть обустроена так, чтобы был минимизирован потенциальный вред от её воздействия имуществу и экипажу станции с учётом местоположения, вида, дальности воздействия, поведения и иных факторов.
# '''Запрещено''' намеренно повышать показатель опасности аномалии выше '''80%''' при её долговременном содержании.
#* Аномалия с уровнем опасности выше '''85%''' должна быть ликвидирована любым из способов.
# Разрешается проводить умышленный коллапс аномалий с целью получения продуктов коллапса, если предварительно были предприняты меры по минимизации ущерба от возможного опасного воздействия.
}}<!--


-->
== Модуль: Сущность ==
{{RulesBox
|title  = Процедура признания разумности существа
|content = <p></p>
''Данная процедура направлена на выявление разумности существ. Её проведение обязательно в случае возникновения потребности наделить [[Корпоративный Закон#Основные Права Разумных Существ на территории объектов корпорации NanoTrasen|ОПРС]] любого существа, которое ранее не считалось разумным.''
# К процедуре допускаются существа, не несущие угрозу экипажу или имуществу станции.
# Процедуру может проводить любой сотрудник научного отдела.
# Сотрудник должен подготовить и провести тестирование в форме опроса или эксперимента, направленное на выявление у существа следующих признаков:
#* способность к речи и логическому мышлению;
#* неинстинктивное поведение;
#* умение обучаться;
#* способность к сознательной творческой деятельности;
# Если тестирование проводится рядовым сотрудником, то
#* его ход должен быть описан в форме [[Бумажная работа|отчёта об эксперименте]].
#* научный руководитель имеет право провести дополнительную проверку для подтверждения результатов.
# В случае успешного прохождения существом этой процедуры, научный руководитель или капитан могут издать [[Бумажная работа|приказ]] о наделении его [[Корпоративный Закон#Основные Права Разумных Существ на территории объектов корпорации NanoTrasen|Основными Правами Разумных Существ]].
}}<!--


-->
=== p.get: основная сборка карточки ===
Вызов:


== Техника безопасности научного отдела ==
<pre>
''Техника безопасности должна соблюдаться в полном объеме, пока наличие ЧС сделает невозможным ее соблюдение.''
{{#invoke:Сущность|get
<tabs>
| <ID или список ID>
<tab name="Общие положения">
| blacklist=...
== Общие положения ==
| whitelist=...
# Любые ксеноархеологические находки, аномальные объекты и ксенобиологические организмы, подлежащие изучению и представляющие угрозу, либо уровень угрозы которых известен не до конца, должны храниться в {{#invoke:Entity Lookup|createtexttooltip|защищённых контейнерах|CrateScienceSecure|img=Crate_secure_sci.png}}/{{#invoke:Entity Lookup|createtexttooltip|контейнерах артефактов|CrateArtifactContainer|img=CrateArtifactContainer.png}} или изучаться в специальных отсеках научного отдела.<br>
| ignoreComponents=...
## Если безопасная транспортировка объекта в научный отдел невозможна, то зона вокруг него должна быть закрыта от постороннего персонала и изолирована от воздействия объекта.<br><br>
| ignorePrototypes=...
# Сотрудник обязан оценивать исходящую от объекта угрозу и носить защитное снаряжение при работе.
## Это включает в себя следующие средства, но не ограничивается ими:<br>
###{{#invoke:Entity Lookup|createtexttooltip|Лабораторный халат|ClothingOuterCoatLab|img=LabCoat.png}} при любой работе в пределах отдела и работе с аномалиями, если не предусматривается использование иных средств защиты.<br>
###{{#invoke:Entity Lookup|createtexttooltip|Латексные|ClothingHandsGlovesLatex|img=Latex Gloves.png}}/{{#invoke:Entity Lookup|createtexttooltip|нитриловые|ClothingHandsGlovesNitrile|img=Nitrile Gloves.png}} перчатки при работе с химическими веществами, ксенофауной, а также при непосредственном контакте с ксеноартефактами и прочими объектами, подлежащими изучению.<br>
###{{#invoke:Entity Lookup|createtexttooltip|Противогаз|ClothingMaskGas|img=ClothingMaskGas.png}}/{{#invoke:Entity Lookup|createtexttooltip|дыхательная маска|ClothingMaskBreath|img=Breath mask.png}} с баллоном при работе с летучими химикатами, а также при входе в камеру смешивания или камеру содержания объекта, выделяющего токсичные газы.<br>
###{{#invoke:Entity Lookup|createtexttooltip|Противорадиационный костюм|ClothingOuterSuitRad|img=Radsuit.png}} при работе с радиоактивными объектами.<br>
###{{#invoke:Entity Lookup|createtexttooltip|Пожарный костюм|ClothingOuterSuitFire|img=Fire.png}} при работе с воспламеняющими объектами.<br>
###{{#invoke:Entity Lookup|createtexttooltip|Биозащитный костюм|ClothingOuterBioScientist|img=Bio_scientist.png}} при работе с объектами, оказывающими пагубное биохимическое воздействие на окружение.<br><br>
## По окончании работы с опасным объектом и/или истечении угрозы защитные костюмы должны быть помещены обратно в хранилище, из которого были взяты.<br><br>
# Научный персонал обязан поддерживать порядок и чистоту в рабочих помещениях отдела.<br><br>
# Научному сотруднику запрещено экспериментировать над самим собой, если эксперимент может принести вред здоровью.<br><br>
# Сотрудникам научного отдела '''запрещено''' как-либо изменять структуру энергопитания станции, в том числе и внутри своего отдела, без разрешения [[Старший инженер|старшего инженера]].<br><br>
# Установка и использование гиперконвекционного оборудования не допускается без заранее подготовленной системы охлаждения.
</tab>
<tab name="Ксеноархеология">
== Ксеноархеологические положения ==
# Намеренная активация неизученных или опасных артефактов, находящихся на борту станции за пределами камеры исследования, '''запрещена'''.<br><br>
# Транспортировка и хранение неизученных или опасных артефактов за пределами камеры исследования должна производиться с использованием {{#invoke:Entity Lookup|createtexttooltip|специального контейнера|CrateArtifactContainer|img=CrateArtifactContainer.png}}.<br><br>
# При исследовании артефактов обязательно наличие заполненного водой огнетушителя в ксеноархеологической лаборатории.<br><br>
# При активации артефакта сотрудник должен находиться за пределами камеры исследований, если возможно активировать артефакт вне её.
</tab>
<tab name="Работа с химией и газами">
== Нормы безопасности при работе с химией и газами ==
# Испытание взрывчатки должно проходить на специальном полигоне или за пределами станции.<br><br>
# Если планируется синтез огнеопасных веществ, то лаборатория должна быть оборудована огнетушителем, заполненным водой.<br><br>
# Уборка веществ, бурно реагирующих с водой, должна происходить после их обезвреживания с использованием безопасных химических реакций, либо "сухим" методом.<br><br>
# Сотрудникам научного отдела '''запрещено''' как-либо изменять структуру системы дистрибьюции воздуха и фильтрации отходов станции без разрешения [[Старший инженер|старшего инженера]].
</tab>
</tabs>
}}
}}
</pre>


{{NavBox/CO/СРП}}
* '''1‑й параметр''' — <code>id</code> или список <code>id</code> через запятую.
[[Категория:Стандартные рабочие процедуры (Corvax)]]
* По этому ID модуль находит:
 
** '''компоненты''' из <code>component.json</code>;
** '''прототипы''' из <code>prototype.json</code>;
и для каждого — соответствующие шаблоны <code>Template:component/...</code> / <code>Template:prototype/...</code>.
* Шаблоны описывают свои поля через <code>Сущность/поля</code>.


После сборки модуль:
* формирует один вызов <code><nowiki>{{карточка/сущность|...}}</nowiki></code> со всеми разделами и полями;
* дополняет выход при необходимости (блоки title и т. п.);
* прогоняет результат через <code>frame:preprocess</code>, чтобы отрендерить разметку.


Параметры фильтрации:
* {{пм|blacklist}} — список <code>режим_Ключ</code> через запятую, чтобы исключить поле:
** пример: <code>blacklist=card_Наносит повреждения,title_Что‑то</code>;
* {{пм|whitelist}} — наоборот, список разрешённых <code>режим_Ключ</code>, остальные игнорируются;
* {{пм|ignoreComponents}} / {{пм|ignoreComponent}} — список имён компонентов через запятую, которые полностью игнорируются для этого вызова;
* {{пм|ignorePrototypes}} / {{пм|ignorePrototype}} — аналогично для прототипов.


{{СРП/CO/Info/Main}}{{СРП/CO/Info/WarnCMD}}__NOTOC__
Пример простой сборки (через шаблон‑обёртку):


{{GradientHeaderFrame
<pre>
|title  = Иерархия командования
{{Сущность/карточка|MyEntityId}}
|picture = [[Файл:Cmd_dep.png|30px|link=]]
</pre>
|content =
[[Файл:Новая иерархия командования.png|class=noSprite]]
}}


{{GradientHeaderFrame
где в шаблоне <code>Сущность/карточка</code> внутри:
|title  = Общие СРП
|picture = [[Файл:Cmd_dep.png|30px|link=]]
|content = <p></p>


* Все СРП командования должны исполнятся наравне с ведомственными СРП.
<pre>
* СРП главы отдела распространяются на всех глав отделов и на капитана.
{{#invoke:Сущность|get|{{{1}}}}}
* СРП главы персонала распространяются на главу персонала и на капитана, в случае исполнения им обязанностей главы персонала.
</pre>
* СРП капитана распространяются на капитана.


{{Шаблон:СРП/CO/Командование/Общие СРП}}
=== p.preview: предпросмотр полей конкретного шаблона ===
Используется для проверки, что компонент/прототип правильно описал свои поля.


<pre>
{{#invoke:Сущность|preview
| Component/meleeWeapon
}}
}}
</pre>


{{GradientHeaderFrame
* Показывает, какие <code>card</code> / <code>title</code>‑поля объявлены в <code>Template:Component/meleeWeapon</code>.
|title   = Ведомственные СРП
* Удобно при разработке шаблонов компонентов.
|picture = [[Файл:Cmd_dep.png|30px|link=]]
|content =


{{Шаблон:СРП/CO/Командование/Капитан}}
=== p.jsonList: вывод JSON в виде списка ===
{{Шаблон:СРП/CO/Командование/Глава персонала}}
Режим похож на стандартный <code>arraymap</code>, но работает с JSON.


<pre>
{{#invoke:Сущность|jsonList
| <json или {{{...}}}>
| type = list / enum
| prefix = *
| sep = :
| key_pattern = (.*)
| key_replace = \1
| value_pattern = (.*)
| value_replace = \1
}}
}}
</pre>


{{GradientHeaderFrame
Примеры JSON:
|title  = Процедуры и протоколы
|picture = [[Файл:Cmd_dep.png|30px|link=]]
|content =


Порядок действий, которые необходимо принять при возникновении той или иной ситуации.<br>
<pre> <!-- <syntaxhighlight lang=json> -->
{
  "Blunt": 10,
  "Slash": 5
}
</pre> <!-- </syntaxhighlight> -->


Процедуры и протоколы командования обязаны исполняться в четком соответствии с установленными пунктами, пока наличие ЧП не сделает невозможным их выполнение, необоснованные грубые нарушения процедур командования может пресекаться ЦК, '''вплоть до расторжение всех контрактов с объектом корпорации NanoTrasen'''.
или


{{RulesBox
<pre> <!-- <syntaxhighlight lang=json> -->
|title  = Процедура назначения ВрИО капитана
["Knife", "Sword", "Bat"]
|content = <p></p>
</pre> <!-- </syntaxhighlight> -->
# В отсутствие капитана исполняющим его обязанности назначается глава персонала.
<!--#В чрезвычайных ситуациях должность капитана должна переходить ГСБ ровно до того момента, пока чрезвычайная ситуация не будет разрешена, после чего должность должна быть возвращена сотруднику, временно исполняющему обязанности капитана.-->
# В отсутствие капитана и главы персонала среди остальных глав отделов должно пройти голосование на назначение одного из них на должность исполняющего обязанности капитана.
## Должности ВрИО глав не являются кандидатами на должность ВрИО капитана.
# Центральное командование должно быть уведомлено о назначении ВрИО капитана.
# ВрИО капитана не получает юридическую неприкосновенность.
}}<!--


-->
Основные опции:
{{RulesBox
* {{пм|type}}:
|title  = Процедура отстранения капитана от командования
** <code>list</code> — список строк (с префиксом, например <code>* </code>);
|content = <p></p>
** <code>enum</code> — перечисление через запятую (<code>A, B, C</code> без префикса).
# Капитан может быть уволен по собственному желанию, по приказу ЦК или при решении не анонимного голосования глав в соответствии с [[#Причины отстранения от должности|причинами отстранения от должности]].
* {{пм|prefix}} — префикс строки списка (по умолчанию <code>* </code>).
#* ВрИО капитан обязан вернуться на свою изначальную должность после прибытия нового капитана с Центрального командования.
* {{пм|sep}} — разделитель для <code>ключ: значение</code> (по умолчанию <code>: </code>).
# В случае голосования:
* {{пм|key_pattern}} / {{пм|key_replace}} — regex и замена для ключей.
#* Необходимо большинство голосов глав отделов «ЗА» отстранение капитана.
* {{пм|value_pattern}} / {{пм|value_replace}} — regex и замена для значений.
#* При равном количестве голосов «ЗА» и «ПРОТИВ», отстранение капитана отменяется.
#* Воздержание от голоса, отказ голосовать и попытка сорвать голосование считается голосом «ЗА».
# Если на станции присутствуют менее трех глав отделов, то отстранить капитана '''с помощью голосования''' невозможно.
# По факту увольнения, бывший капитан обязан сдать всю свою должностную экипировку, включая одежду и аксессуары, понизить уровень допуска.
#* В случае сопротивления, Служба Безопасности обязана арестовать капитана по статье [[Корпоративный Закон#145|самоуправство]].
#* капитан не лишается юридической неприкосновенности, если его отстранение не было связано с нарушением Корпоративного Закона.
# Новый капитан должен быть своевременно выбран в соответствии с [[#Процедура назначения ВрИО капитана|процедурой назначения ВрИО капитана]].
}}<!--


-->
Дополнительно:
{{RulesBox
* в шаблоне замены поддерживаются:
|title  = Процедура назначения ВрИО главы отдела
** <code>\1</code> — собственное значение (ключ или значение);
|content = <p></p>
** <code>\2</code> в <code>value_replace</code> — '''сырой ключ''' (после <code>key_pattern</code>, но до <code>key_replace</code>);
# Выбор кандидата на должность ВрИО главы отдела должен быть проведен среди высших в иерархии, после должности, ВрИО которого назначается.
** <code>\2</code> в <code>key_replace</code> — итоговое отформатированное значение (после <code>value_replace</code>).
#* В качестве ВрИО главы персонала может выступать любой сотрудник станции.
# Выбор должности может быть осуществлен по уровню квалификации, конкурсному принципу или личной инициативе работника.
# Капитан вправе потребовать от кандидата на пост ВрИО пройти процедуру установки импланта защиты разума. Кандидат вправе отказать, в таком случае капитан должен либо отозвать требование, либо выбрать другого кандидата. Принудительная установка импланта строго запрещена.
# В случае отказа всех работников становится ВрИО главой отдела, капитан вправе назначить ВрИО в принудительном порядке, либо взять руководство отделом на себя до прибытия главы. При принудительном назначении сотрудника на пост ВрИО, капитан не имеет права требовать установку импланта защиты разума.
# Должность ВрИО приобретает все права, обязанности, рабочее снаряжение и доступы, соответствующие данной должности.
# Допускается назначение на должность ВрИО смотрителя в соответствии с текущей процедурой.
}}<!--


-->
Пример, где сначала форматируем тип урона, а затем подставляем его в описание:
{{RulesBox
|title  = Процедура отстранения ВрИО главы отдела
|content = <p></p>
# ВрИО глава отдела обязан вернуться на свою изначальную должность, сдать выданное снаряжение и доступы после прибытия нового главы с Центрального Командования.
# В случае, если ВрИО глава не справляется со своими обязанностями, новый глава должен быть выбран в соответствие с [[#Процедура назначения ВрИО главы отдела|процедурой назначения ВрИО главы отдела]].
# Данные пункты также применимы к должности ВрИО смотрителя.
}}<!--


-->
<pre>
== Процедуры изменения доступов ==
{{#invoke:Сущность|jsonList
{{RulesBox
| {{{damage.types}}}
|title  = Политика назначения на должность
| type = enum
|content = <p></p>
| key_replace = <nowiki>\1</nowiki>              <!-- "Blunt" -->
# Решение о назначении члена экипажа на должность ВрИО главы отдела принимает капитан.
| value_replace = <nowiki>'''\1''' \2</nowiki>  <!-- "'''10''' Blunt" -->
# Решение о приёме члена экипажа в отдел принимает глава соответствующего отдела.
}}
# Агент Внутренних Дел не может быть назначен на станции.
</pre>
# Должности Центрального Командования/ДСО могут быть назначены только Центральным Командованием/ДСО.
# При принятии сотрудника на должность, он должен быть назначен на {{Tooltip|низшую в иерархии отдела должность|Низшие в иерархии должности|• Кадет;• Интерн;• Грузчик или Утилизатор;• Научный ассистент;• Технический ассистент;• Любая должность сервисного отдела.}}.
# Лица с судимостью имеют ограничения при трудоустройстве:
## Лица, осужденные по статьям хх4, хх5, хх6 не могут быть трудоустроены.
## Лица, осужденные по статьям хх3 могут быть приняты на низшую в иерархии отдела должность.
## Лица, осужденные по статьям от хх2 не могут быть приняты в отдел СБ.
# Каждый отдел обязан иметь главу, в случае отсутствия главы должен быть назначен ВрИО, до момента назначения ВрИО за отдел отвечает капитан.
# Пост капитана или главы отдела не могут одновременно занимать два или более человека.
}}<!--


-->
=== p.json: превращение JSON в вызовы шаблонов ===
{{RulesBox
Режим для случаев, когда в JSON лежит список эффектов/объектов, и нужно по каждому вызвать отдельный шаблон.
|title  = Политика повышения/перевода на другую должность
|content = <p></p>
# Основания для повышения/перевода на другую должность:
## Наличие рекомендации от наставника (для кадетов, интернов, научных и технических ассистентов).
## Освоение всех профессиональных навыков, необходимых для новой должности.
## Отсутствие дисциплинарных взысканий (выговор, ранее понижение в должности, либо увольнение).
## Отсутствие судимостей по статьям от хх3.
# Повышение по иерархии либо перевод на аналогичную по иерархии должность требуют:
## Прямого одобрения главы отдела.
## Прямого одобрения капитана.
# Для проведения процедуры перевода или повышения необходимо составить следующие документы:
## Заявление о [[Бумажная работа#Запрос повышения|повышении]]/[[Бумажная работа#Заявление о трудоустройстве|переводе]], заверенное капитаном и главой отдела.
## [[Бумажная работа#Свидетельство о повышении квалификации|Свидетельство о повышении квалификации.]] Кандидат должен освоить все необходимые для работы навыки.
# Весь пакет документов должен быть направлен Центральному командованию.
## При получении согласия, либо в случае отсутствия прямого отказа от Центрального командования в течение 5 минут процедура повышения/перевода считается успешной.
## В случае получения отказа даже после назначенного срока, повышение/перевод считаются недействительными и должны быть аннулированы.
# С помощью данной процедуры без прямого одобрения Центрального командования невозможно получить повышение/перевод на следующие должности: смотритель, глава отдела, капитан.
## Становление ВрИО главы отдела, ВрИО Смотрителя или ВрИО капитана не является повышением.
# Данная процедура не касается следующих отделов: Снабжение, Сервис. Перевод внутри данных отделов осуществляется по личному решению главы и не требует отправки документов Центральному командованию.
# Специализация — это указанная в СРП должности возможность заниматься более узконаправленной деятельностью, получение специализации происходит по единоличному решению главы отдела и не требует отправки документов Центральному Командованию.
}}<!--


-->
<pre>
{{RulesBox
{{#invoke:Сущность|json
|title  = Процедура выдачи доступов
| <json или {{{...}}}>
|content = <p></p>
| <путь_к_шаблону>
# Процедура найма производится лично главой соответствующего отдела, главой персонала или капитаном.
}}
#* Копия или оригинал заявления на трудоустройство должны быть переданы главе персонала.
</pre>
#* В случае назначения ВрИО должность и иконка на ID карте и в манифесте должны соответствовать текущей должности иметь и следующий вид:({{Tooltip|ВрИО "название должности в родительном падеже"|Примеры|• ВрИО научного руководителя;• ВрИО главы персонала.}}).
#* В случае выдачи УДО должность и иконка на ID карте и в манифесте должны соответствовать текущей должности и иметь следующий вид:({{Tooltip|"название должности" - УДО|Примеры|• Технический ассистент - УДО;• Клоун - УДО.}}).
# Выдача дополнительных доступов производится главой персонала или капитаном.
#* Копия или оригинал заявления на получение доступа должны быть переданы главе персонала.
#** Заявление не требуется, если в СРП сотрудника есть право на получение дополнительных доступов без подачи заявления.
#* Любое заявление на дополнительные доступы должно быть заверено лицом, которое может предоставить эти доступы:
#** Глава отдела может одобрить доступ в любое из помещений своего отдела.
#** Доступ в технические помещения может быть одобрен главой персонала или старшим инженером.
#** Внешний доступ может быть одобрен старшим инженером или главой службы безопасности.
#** Капитан может одобрить доступ любого уровня.
#* При получении дополнительных доступов в графу должности может быть добавлено соответствующее примечание в виде пометки "+", "РД" и т.д. При возвращении исходных доступов примечание необходимо убрать.
}}<!--
 
-->
{{RulesBox
|title  = Политика снятия с должности
|content = <p></p>
# Сотрудник может быть уволен или понижен только в соответствии с причинами отстранения от должности.
# Агент Внутренних Дел может быть уволены только по решению магистрата, но отстранить его от работы могут представители ЦК/ДСО.
# Должности Центрального Командования/ДСО могут быть уволены только Центральным Командованием/ДСО.
# Только капитан имеет право уволить члена Командования.
# Решение о снятии с должности рядового сотрудника принимает глава соответствующего отдела или капитан.
# По решению увольняющего, законное увольнение может быть заменено на понижение в должности.
# ВрИО главы отдела сотрудник обязан сдать свои полномочия, если прибыл новый глава отдела.
# Глава отдела или капитан, высланный с ЦК в следствии бюрократической ошибки, обязан сдать свои полномочия, если действующий глава отдела или капитан не являются временно исполняющими обязанности.
# Совершивший V (особо-тяжкое) или VI (критическое) преступление сотрудник обязан быть уволен.
}}<!--
 
-->
{{RulesBox
|title  = Процедура снятия доступов
|content = <p></p>
# Процедура увольнения и снятия доступов производится исключительно главой персонала или капитаном.
# Совершающий процедуру увольнения обязан лишить сотрудника рабочих доступов, снаряжения и рабочей одежды, а также выдать новый комбинезон и гарнитуру.
#* Оригинал или копия заявления или приказа об увольнении должны быть передана главе персонала.
#** В случае увольнения по собственному желанию необходимо уведомить главу отдела, к которому относился сотрудник.
# Совершающий процедуру снятия доступов обязан лишить сотрудника дополнительных доступов.
#* При наличии приказа о лишении доступа, копия или оригинал документа должны быть переданы главе персонала.
# В случае увольнения по причине смерти сотрудника, иконка в манифесте должна соответствовать пассажирской, а должность на ID карте и манифесте должны соответствовать предыдущей должности иметь следующий вид:({{Tooltip|"Название должности" - Мертв)|Примеры|• Смотритель - Мертв;• Капитан - Мертв.}}.
#* В случае клонирования должность мертвого члена экипажа должна быть восстановлена.
}}<!--
 
-->
{{RulesBox
|title  = Причины отстранения от должности
|content = <p></p>
# Совершение преступления особо тяжкого уровня и выше.
# Многочисленные незначительные нарушения СРП.
# Серьезное нарушение СРП.
# Нахождение на рабочем месте в пьяном виде.
# Отказ следовать законным требования вышестоящего руководителя.
# Критичная некомпетентность сотрудника.
# Смерть сотрудника.
#{{Tooltip|Бездействие сотрудника|Пояснение|Это относится к сотрудникам в кататоническом ступоре, игнорирующим брифинг и вызовы по рации. Полное игнорирование своих обязательств}}.
#{{Tooltip|Создание токсичной среды на рабочем месте|Пояснение|Это относится к сотрудникам, которые регулярно неуважительно относятся к своим коллегам}}.
#{{Tooltip|Злоупотребление полномочиями|Пояснение|Это относится к ГСБ, выдавшему разрешение на ношение оружия без явной причины, продаже сотрудников станции в рабство Квартирмейстером и так далее}}.
# Уход с должности по собственному желанию.
}}<!--
 
-->
== Протоколы эвакуации ==
<tabs>
<tab name="Окончание смены">
После окончания смены начинается стандартный процесс отправки экипажа на станцию центрального командования для последующего распределения и отдыха. Отбытие производится только после выполнения цели смены, заданной Центральным Командованием.
* Капитан обязан составить [[Бумажная работа#Отчёт о ситуации|письменный отчет о выполнении цели]] и отправить его на центральное командование.
* Капитан обязан уведомить персонал соответствующим сообщением, что даст время сотрудникам привести свои рабочие места в порядок и подготовиться к отбытию.
* Службе безопасности необходимо организовать транспортировку всех заключённых. Во время перелета на шаттле, заключённые должны находиться в отсеке для заключённых.
* Медицинский персонал обязан организовать транспортировку тел погибших сотрудников, а также тяжело больных пациентов.
* Отбытие шаттла ранее установленного времени в случае, если прямая угроза для шаттла отсутствует, не допускается.
</tab>
<tab name="Невозможность выполнения цели">
Решение об окончании смены без выполнения цели и отбытии со станции принимается исключительно капитаном под его полную ответственность за принятое решение.
</tab>
<tab name="Нарушение условий содержания сингулярности">
Капитан обязан установить Желтый код. Необходимо провести наблюдение за траекторией движения сингулярности. При сильной угрозе для целостности станции эвакуационный шаттл должен быть вызван немедленно, после чего необходимо оповестить экипаж и центральное командование о возникшей чрезвычайной ситуации. В случае, если угрозы нет, допускается восстановление поврежденных отсеков и продолжение смены.
</tab>
<tab name="Вспышка зомби вируса">
До полного устранения возникшей угрозы эвакуационный шаттл не вызывается. В случае вызова эвакуационного шаттла центральным командованием, шаттл должен быть отклонен, а командованию рекомендуется запросить помощь отряда РХБЗЗ.
</tab>
</tabs>


{{ModernFrame/Сollapsible
* '''1‑й параметр / <code>json=</code>''' — строка JSON.
|title            = Присяга капитана объекта NanoTrasen
* '''2‑й параметр / <code>template=</code>''' — путь к шаблону, например <code>Component/adjustPlant</code>.
|background-color  = #375924
|border-color      = #426b2b
|sub-title        = Лицо, достигающее звания офицера NanoTrasen приводится к присяге под флагом корпорации NanoTrasen.
|content          = <hr>


Вступая на должность офицера NanoTrasen, с этой секунды и до истечения контракта, я клянусь быть преданным слугой корпорации. С этого момента я буду гордо нести звание офицера NanoTrasen, прославляя нашу великую компанию.<br><br>
Ожидаемый формат JSON‑массива:


Клянусь выполнять все поставленные задачи, даже перед лицом смерти доблестно защищать ее интересы. Соблюдать основные права разумных существ и требовать их соблюдение от своих подчиненных.<br><br>
<pre> <!-- <syntaxhighlight lang=json> -->
[
  {
    "!type:PlantAdjustNutrition": {
      "amount": 0.1
    }
  },
  {
    "!type:PlantAdjustWeeds": {
      "amount": 2
    }
  },
  {
    "!type:PlantAdjustPests": {
      "amount": 2
    }
  }
]
</pre> <!-- </syntaxhighlight> -->


Я клянусь, что буду работать только во благо корпорации и ее сотрудников.<br><br>
Для каждого элемента создаётся вызов:
 
С данной секунды я вступаю в ряды офицеров NanoTrasen и не нарушу ту клятву, что дал сегодня.


<pre>
{{Component/adjustPlant
|id=!type:PlantAdjustNutrition
|amount=0.1
}}
}}
 
{{Component/adjustPlant
|id=!type:PlantAdjustWeeds
|amount=2
}}
}}
 
{{Component/adjustPlant
{{NavBox/CO/СРП}}
|id=!type:PlantAdjustPests
 
|amount=2
[[Категория:Стандартные рабочие процедуры (Corvax)]]
 
 
 
 
 
 
 
 
 
{{СРП/CO/Info/Main}}__NOTOC__
 
{{GradientHeaderFrame
|title  = Общие СРП
|picture = [[Файл:Med_dep.png|30px|link=]]
|content =  
 
{{Шаблон:СРП/CO/Медицинский отдел/Общие СРП}}
 
}}
}}
</pre>


{{GradientHeaderFrame
Особенности:
|title  = Ведомственные СРП
* Если JSON — объект вида <code>{ "id1": {...}, "id2": {...} }</code>, происходит аналогичный проход по парам <code>ключ → объект</code>.
|picture = [[Файл:Med_dep.png|30px|link=]]
* Все вызовы склеиваются через перевод строки и прогоняются через <code>frame:preprocess</code>, поэтому внутри шаблона можно использовать любую вики‑разметку.
|content =


{{Шаблон:СРП/CO/Медицинский отдел/Главный врач}}
== Модуль: GetField ==
{{Шаблон:СРП/CO/Медицинский отдел/Парамедик}}
Модуль <code>GetField</code> используется для доступа к тем же JSON‑данным <code>.../data</code>, но на более низком уровне.
{{Шаблон:СРП/CO/Медицинский отдел/Врач}}
{{Шаблон:СРП/CO/Медицинский отдел/Химик}}
{{Шаблон:СРП/CO/Медицинский отдел/Психолог}}
{{Шаблон:СРП/CO/Медицинский отдел/Бригмедик}}
{{Шаблон:СРП/CO/Медицинский отдел/Хирург}}
{{Шаблон:СРП/CO/Медицинский отдел/Патологоанатом}}
{{Шаблон:СРП/CO/Медицинский отдел/Вирусолог}}
{{Шаблон:СРП/CO/Медицинский отдел/Интерн}}


=== p.flattenField: расплющивание записи в параметры ===
<pre>
{{#invoke:GetField|flattenField
| <id>
| <путь_к_json_странице>
}}
}}
</pre>


{{GradientHeaderFrame
Например:
|title  = Процедуры и протоколы
|picture = [[Файл:Med_dep.png|30px|link=]]
|content =
 
Процедуры регламентируют правила работы сотрудников медицинского отдела и обязательны к исполнению.<br>
 
{{RulesBox
|title  = Техника безопасности медицинского отдела
|content = <p></p>
''Техника безопасности должна соблюдаться в полном объеме, пока чрезвычайная ситуация не сделает невозможным ее исполнение.''
# В пределах медицинского отдела необходимо:
#* Носить рабочую униформу;
#* Использовать нитриловые или латексные перчатки, стерильную или медицинскую маску при работе с больными;
#* Поддерживать чистоту и порядок;
# В случае инфекции:
#* Пройти вакцинацию против инфекционных заболеваний;
#* Поместить инфекционных больных в карантин, работа с оными должна проводиться в костюме биологической защиты;
#* Сотрудники, работающие с инфекционными больными, должны оставаться в зоне карантина до завершения эпидемии;
# В пределах медицинского отдела запрещено:
## размещать объекты, создающие {{tooltip|угрозу безопасности|Примеры|• Топливные баки; <br> • Баллоны с опасными газами; <br> • Прочие потенциально опасные предметы}};
## выносить хирургический инструментарий за пределы медицинского отдела.
}}<!--
 
-->
{{RulesBox
|title  = Нормы обращения с телами разумных существ
|content = <p></p>
''Тело разумного существа — субъект, защищенный ОПРС и утративший признаки жизни.''
# Если тело возможно реанимировать, то реанимация должна быть выполнена в кратчайшие сроки.
#* По решению главного врача реанимация может быть отложена на некоторое время, если её проведение вызывает затруднения или создаёт значительную нагрузку на отдел;
#* Реанимация не должна проводиться после прямого запрета капитана;
# Если тело невозможно реанимировать:
#* Если тело {{tooltip|возможно клонировать|Душа в теле, шансы на клонирование высоки|}}, то процедура клонирования должна быть проведена в кратчайшие сроки;
#* Если проведение процедуры клонирования невозможно, тело должно быть сохранено до тех пор, пока процедура не станет возможной;
#* Если тело невозможно клонировать, то оно должно храниться в морге, пока клонирование не станет возможным;
#* Клонирование не должно проводиться после прямого запрета капитана;
# Тела неклонированных членов экипажа должны быть транспортированы на станцию центрального командования в мешках для трупов.
# Тела разумных существ могут быть использованы {{tooltip|для пользы корпорации|Создание киборгов, извлечение и продажа органов, получение биомассы|}} только с письменного разрешения главного врача или капитана.
#* Тела казненных и не принадлежащих членам экипажа лиц, «оригинальные» тела клонов, а также тела, переданные во владение NanoTrasen при эвтаназии, считаются корпоративным имуществом и могут быть использованы во благо корпорации без разрешающих документов;
# Биологические отходы должны быть утилизированы.
#* К биологическим отходам относятся:
#** Тела и органы тел неразумных существ;
#** Отделенные конечности и органы тел разумных существ, если им не было найдено полезное применение.
}}<!--
 
-->
{{RulesBox
|title  = Процедура хранения и передачи имущества пациентов
|content = <p></p>
''Имуществом пациентов считаются предметы, которыми лицо владеет на законных основаниях.''
# Если среди имущества пациента или погибшего члена экипажа были обнаружены вещи, которые могли быть получены незаконным путем, либо выглядят подозрительно, на место события должны быть вызваны сотрудники СБ.
# Сотрудникам медицинского отдела разрешено снимать любые элементы одежды пациентов, если это необходимо для оказания медицинской помощи.
#* После оказания помощи все снятые вещи должны быть возвращены владельцу.
# При размещении тела в морге все элементы одежды и снаряжения должны быть сняты и распределены:
#* Удостоверения личности должны быть переданы главе персонала;
#* Личные вещи должны храниться в пределах морга;
#* Всё {{tooltip|специализированное снаряжение|Cкафандры, оборудование и прочее|}} должно быть передано в руки главы отдела, к которому оно относится;
#** {{Tooltip|Снаряжение СБ|Снаряжение СБ|Оружие, боеприпасы, бронежилеты и прочее}} должно быть передано ГСБ в кратчайшие сроки;
#*** При передаче снаряжения, ГСБ имеет право провести процедуру обыска медицинского сотрудника;
#* Если распределение имущества в ближайшее время выполнить невозможно, вещи должны быть промаркированы и помещены в запираемый контейнер;
#* В случае успешного клонирования погибшего члена экипажа, его имущество должно быть возвращено.
}}<!--
 
-->
{{RulesBox
|title  = Алгоритм работы с пациентами с выраженным расстройством сознания
|content = <p></p>
''Пациент с расстройством сознания — лицо с ярко выраженными психическими отклонениями, обуславливающими изменение поведения, в результате чего член экипажа представляет социальную опасность для себя и (или) окружающих, либо утрачивает способность удовлетворять свои жизненные потребности.''
# Если пациент представляет угрозу для окружающих, главный врач должен в кратчайшие сроки организовать его принудительное лечение, издав соответствующий приказ и организовав размещение в изоляции от общества.
#* В случае оказания сопротивления при попытке доставить больного в место изоляции, сотрудники медицинского отдела вправе привлечь сотрудников СБ для силового перемещения пациента;
#* В случае стойкого деструктивного поведения пациента в месте изоляции ему может быть назначено принудительное введение хлоральгидрата или диоксида азота, пациент может быть закован с помощью смирительной рубашки;
#* Принудительная изоляция продолжается до момента, пока пациент не будет в состоянии принимать осознанные решения;
#** В случае отсутствия положительной динамики во время лечения, пациент должен быть закован и доставлен на станцию центрального командования по завершению смены;
# Если у пациента наблюдаются выраженные симптомы космического расстройства сна, либо катонического ступора, для обеспечения безопасности, пациента следует уложить в постель, на кушетку, либо посадить на стул.
#* Медицинский персонал обязан следить за физическим здоровьем больного, удовлетворять его пищевые потребности, регулярно утолять жажду;
#* Если в течение 15 минут пациент не проявляет признаков возвращения сознания, допустим его перевод в капсулу криосна. Данное решение принимает главный врач, либо капитан.
#** В случае размещения в капсуле криосна должностного лица, главный врач должен сообщить об этом капитану;
#** Все имущество сотрудника ушедшего в криосон должно быть распределено в соответствии с процедурой хранения и передачи имущества пациентов.
}}<!--
 
-->
 
==Врачебная тайна==
''Включает в себя информацию об обращении человека за оказанием медпомощи, о состоянии его здоровья и диагнозе, иные сведения, полученные при медицинском обследовании и лечении.''
 
Работник медицинского отдела '''обязуется''' не разглашать проблемы и дефекты здоровья без согласия пациента до того времени, пока это не вредит корпорации.
 
Согласие не требуется в случаях:
*Запроса главы службы безопасности или агента внутренних дел для проведения дознания, следствия, суда, в связи с проведением расследования или судебным разбирательством.
*Необходимости сообщить о поступлении пациента, вред здоровью которого причинен в результате противоправных действий.
*Прямого запроса капитана или центрального командования.
 
{{ModernFrame/Сollapsible
|title            = Клятва врача корпорации
|picture          = [[Файл:Клятва врача.svg.png|30px|link=]]
|background-color  = #115393
|border-color      = #135da5
|sub-title        = Лица, завершившие освоение образовательной программы высшего медицинского образования, при получении документа об образовании и о квалификации дают клятву врача следующего содержания.
|content          = <hr>
 
Получая высшее образование врача и приступая к профессиональной деятельности во имя благополучия корпорации, я торжественно клянусь:<br><br>
 
Честно исполнять свой врачебный долг, посвятить свои знания и умения предупреждению и лечению заболеваний, сохранению и укреплению здоровья существ;<br><br>
 
Быть всегда готовым оказать медицинскую помощь, хранить врачебную тайну и верность корпорации, внимательно и заботливо относиться к больному, действовать в интересах пациента при соблюдении прав, помогать пациентам независимо от пола, расы, национальности, языка, происхождения, имущественного и должностного положения, места жительства, отношения к религии, убеждений, а также других обстоятельств;<br><br>
 
Проявлять высочайшее уважение к жизни существ, стараться максимально избежать процедуры клонирования, прибегать к осуществлению эвтаназии только с согласия пациента в адекватном виде;<br><br>
 
Стараться минимизировать потери активов корпорации со стороны персонала, верой и правдой служить главе своего отдела.<br><br>
 
Использовать хирургию только в серьёзных случаях, обеспечить максимальные удобства при использовании стазиса и анестезии, беречь психику пациента после клонирования.<br><br>
 
Хранить благодарность и уважение к своим учителям и главам, быть требовательным и справедливым к своим ученикам, способствовать их профессиональному росту;<br><br>
 
Доброжелательно относиться к коллегам, обращаться к ним за помощью и советом, если этого требуют интересы больного или корпорации, и самому никогда не отказывать коллегам в помощи и совете;<br><br>
 
Постоянно совершенствовать свое профессиональное мастерство, беречь и развивать благородные традиции медицины.<br><br>
 
Я даю эту клятву свободно и искренне. Я исполню врачебный долг по совести и с достоинством.
 
}}


<pre>
{{#invoke:GetField|flattenField
| MyEntityId
| component/item.json
}}
}}
</pre>


{{NavBox/CO/СРП}}
Возвращает строку вида:
[[Категория:Стандартные рабочие процедуры (Corvax)]]
 


<pre>
damage.types={"Blunt":10}|wieldSound=someSound|...
</pre>


Особенности:
* Вложенные объекты кодируются в JSON и заворачиваются в <code><nowiki><nowiki></nowiki></code>, чтобы их можно было безопасно передавать как параметр.
* Массивы кодируются в JSON без <code><nowiki><nowiki></nowiki></code>, чтобы удобно обрабатывать их модулями вроде <code>Сущность.jsonList</code>.


Этот режим используется внутри <code>GetField.getTpl</code> и других обёрток.


 
=== p.get: получение значения по пути ===
 
<pre>
{{СРП/CO/Info/Main}}__NOTOC__
{{#invoke:GetField|get
 
| <id или пусто для "default">
{{GradientHeaderFrame
| <путь_к_json_странице>
|title  = Ведомственные СРП
| <ключ.с.точками>
|picture = [[Файл:Eng_dep.png|30px|link=]]
|content =  
 
{{Шаблон:СРП/CO/Инженерный отдел/Старший инженер}}
{{Шаблон:СРП/CO/Инженерный отдел/Инженер}}
{{Шаблон:СРП/CO/Инженерный отдел/Атмосферный техник}}
{{Шаблон:СРП/CO/Инженерный отдел/Технический ассистент}}
 
}}
}}
</pre>


{{NavBox/CO/СРП}}
Примеры:
[[Категория:Стандартные рабочие процедуры (Corvax)]]
 
 
 
 
{{СРП/CO/Info/Main}}__NOTOC__
 
{{GradientHeaderFrame
|title  = Общие СРП
|picture = [[Файл:Cargo_dep.png|30px|link=]]
|content =
 
{{Шаблон:СРП/CO/Отдел снабжения/Общие СРП}}


<pre>
{{#invoke:GetField|get
| MyEntityId
| component/item.json
| damage.types
}}
}}
</pre>


{{GradientHeaderFrame
Если в JSON:
|title  = Ведомственные СРП
|picture = [[Файл:Cargo_dep.png|30px|link=]]
|content =


{{Шаблон:СРП/CO/Отдел снабжения/Квартирмейстер}}
<pre> <!-- <syntaxhighlight lang=json> -->
{{Шаблон:СРП/CO/Отдел снабжения/Утилизатор}}
"damage": {
{{Шаблон:СРП/CO/Отдел снабжения/Грузчик}}
  "types": {
    "Blunt": 10
  }
}
</pre> <!-- </syntaxhighlight> -->


}}
то результатом будет:


{{GradientHeaderFrame
<pre>
|title  = Процедуры и протоколы
{"Blunt":10}
|picture = [[Файл:Cargo_dep.png|30px|link=]]
</pre>
|content =


{{RulesBox
то есть:
|title  = Бюрократические процедуры оформления заказа
* для таблиц модуль пытается сделать <code>mw.text.jsonEncode(v)</code> и вернуть JSON‑строку;
|content = <p></p>
* для простых значений возвращается строка <code>tostring(v)</code>.
# На накладной либо на документе заказа в обязательном порядке должны быть указаны: имя, фамилия и должность заказчика, адекватные причина, количество единиц заказываемого товара и место доставки или «самовывоз».
# Заказ не требует письменного оформления, пока квартирмейстером не сказано обратного.
# Заказ вооружения вне чрезвычайной ситуации оформляется письменно, документ должен иметь печать главы службы безопасности, смотрителя, либо капитана.
}}<!--


-->
Если <code>keyPath</code> пуст, возвращается весь объект (как JSON).
{{RulesBox
|title  = Процедура утилизации найденных вещей
|content = <p></p>
# Найденные утилизаторами предметы должны быть доставлены на склад и отсортированы. Эти предметы могут в дальнейшем хранится на складе отдела снабжения, быть распределены между отделами или доставлены на торговый пост.
# Вещи, подходящие под определение [[Контрабанда|контрабанды, вражеского снаряжения]] или ненужное утилизаторам вооружение, должны быть доставлены в отдел службы безопасности.
# Вещи, подходящие под определение мусора, должны быть переработаны для извлечения из них полезных материалов.
}}<!--
 
-->
{{RulesBox
|title  = Процедуры проведения утилизаторских экспедиций
|content = <p></p>
# К экспедиции допускается {{Tooltip|снаряженный|Снаряжение утилизаторов|Минимальным набором являются: баллон для дыхания, скафандр, нож, пояс с инструментами, инструмент раскопки, GPS, медикаменты и провизия.}} отряд утилизаторов станции.
#* Состав экспедиции может меняться с разрешения квартирмейстера.
# Экспедиция проводится при наличии рабочего шаттла утилизаторов. Допускается использование иных шаттлов при разрешении владельца шаттла.
# В случае ранения, утилизатору должна быть оказана медицинская помощь.
#* Если стабилизировать состояние утилизатора не представляется возможным, экспедиция должна быть завершена досрочно, а утилизатор должен быть немедленно доставлен в медицинский отдел.
# После сообщения о скором конце экспедиции необходимо немедленно отправляться на шаттл.
# Экспедиция может быть завершена досрочно, при наличии всех участников экспедиции на используемом шаттле.
}}<!--
 
-->


=== p.getTpl: вызов шаблона по данным JSON ===
<pre>
{{#invoke:GetField|getTpl
| <id>
| <путь_к_json_странице>
| <путь_к_шаблону>
}}
}}
</pre>


{{NavBox/CO/СРП}}
Пример:
[[Категория:Стандартные рабочие процедуры (Corvax)]]
 
 
 
 
 
 
{{СРП/CO/Info/Main}}__NOTOC__
 
{{GradientHeaderFrame
|title  = Права и обязанности экипажа на объекте корпорации NanoTrasen
|picture = [[Файл:Serv_dep.png|30px|link=]]
|content =
 
{{Шаблон:СРП/CO/Сервисный отдел/Общие СРП}}


<pre>
{{#invoke:GetField|getTpl
| MyEntityId
| component/item.json
| Component/meleeWeapon
}}
}}
</pre>


{{GradientHeaderFrame
Работа:
|title  = Ведомственные СРП
* внутри вызывает <code>flattenField</code>, получая строку <code>key=value|...</code>;
|picture = [[Файл:Serv_dep.png|30px|link=]]
* формирует строку вида:
|content =
 
{{Шаблон:СРП/CO/Командование/Глава персонала}}
{{Шаблон:СРП/CO/Сервисный отдел/Сервисный работник}}
{{Шаблон:СРП/CO/Сервисный отдел/Клоун}}
{{Шаблон:СРП/CO/Сервисный отдел/Мим}}
{{Шаблон:СРП/CO/Сервисный отдел/Шеф-повар}}
{{Шаблон:СРП/CO/Сервисный отдел/Ботаник}}
{{Шаблон:СРП/CO/Сервисный отдел/Бармен}}
{{Шаблон:СРП/CO/Сервисный отдел/Уборщик}}
{{Шаблон:СРП/CO/Сервисный отдел/Библиотекарь}}
{{Шаблон:СРП/CO/Сервисный отдел/Священник}}
{{Шаблон:СРП/CO/Сервисный отдел/Репортёр}}
{{Шаблон:СРП/CO/Сервисный отдел/Боксер}}
{{Шаблон:СРП/CO/Сервисный отдел/Зоотехник}}


<pre>
{{Component/meleeWeapon
|id=MyEntityId
|damage.types=...
|...
}}
}}
</pre>


{{NavBox/CO/СРП}}
* и прогоняет её через <code>frame:preprocess</code>, возвращая итоговый рендер.
[[Категория:Стандартные рабочие процедуры (Corvax)]]
 
 
 
 
 
 
 
 
 
 
{{СРП/CO/Info/Main}}__NOTOC__


{{GradientHeaderFrame
Это удобный способ «подключить» шаблон компонента к данным из JSON без ручного перечисления параметров.
|title  = Ведомственные СРП
|picture = [[Файл:.png|30px|link=]]
|content =
 
{{Шаблон:СРП/CO/Юридический департамент/Магистрат}}
{{Шаблон:СРП/CO/Юридический департамент/Агент внутренних дел}}


=== p.getTplProto: вызов шаблона по прототипам ===
<pre>
{{#invoke:GetField|getTplProto
| <searchId>
| <protoId>
| <путь_к_шаблону>
}}
}}
</pre>


{{GradientHeaderFrame
* Ищет в <code>prototype.json</code> все записи, где <code>protoId</code> встречается у <code>searchId</code>.
|title  = Процедуры и протоколы
* Для каждого найденного ID вызывает <code>getTpl</code> и возвращает все вызовы, склеенные через перевод строки и отрендеренные.
|picture = [[Файл:.png|30px|link=]]
|content =


Процедуры юридического департамента, как верховного органа правосудия и порядка обязаны исполняться в четком соответствии с установленными пунктами. Сотрудник департамента, игнорирующий собственные должностные обязанности обязан быть уволен при любом их нарушении.<br>
Используется для случаев, когда сущность использует '''несколько''' прототипов одного типа, и нужно вывести по одному шаблону на каждый прототип.
 
==Процедура суда==
<tabs>
<tab name="Общие положения">
===Общие положения===
#Подсудимый считается невиновным, пока в его отношении не будет зачитан обвинительный приговор.<br><br>
#Судебный процесс должен быть открытым, либо проходить в закрытом формате. Формат суда определяется судьей.<br><br>
#Проведение суда возможно, если мерой наказания для задержанного могут быть избраны пожизненное заключение или высшая мера наказания.<br><br>
#Для полноценной реализации судебного процесса требуется наличие нескольких сторон. Без упомянутых лиц проведение процедуры суда невозможно:
##Судья — выносит решение по делу, руководит процессом суда. Таковым является магистрат, в случаях, при которых личное присутствие магистрата невозможно, в качестве судьи могут выступать капитан, Представитель ЦК, Лидер ОБР.
##Сторона обвинения — выдвигает обвинение по делу, предоставляет доказательства, подтверждающие виновность подсудимого лица. В качестве данной стороны выступает Глава Службы Безопасности.
##Сторона защиты — сторона, которой было выдвинуто обвинение. Представлена лицом, которому выдвинуто обвинение, а также адвокатом, если таковой имеется.<br><br>
#Также, в суде принимают участие лица, содействующие осуществлению правосудия, приглашенные стороной обвинения или защиты. Отказ данных лиц от участия в суде может быть расценен как нарушение статьи "[[Корпоративный Закон#112|Сопротивление органам власти]]" Корпоративного Закона.
##Потерпевшие — лица, ставшие жертвами преступления и пострадавшие в ходе обстоятельств дела.
##Эксперты — лица, привлеченные и исследованию вещественных доказательств, физического состояния потерпевших и подсудимого, оценке ущерба от совершенного преступления и т.д.
##Свидетели — лица, обладающее информацией по делу, полученной при помощи органов чувств.<br><br>
</tab>
<tab name="Нормы поведения в суде">
===Нормы поведения в суде===
#Все участники суда должны обращаться к судье, используя обращение "Ваша честь". Нарушение данного требования может быть расценено как нарушение статьи "[[Корпоративный Закон#121|Неуважение к суду]]" Корпоративного Закона. Судья вправе отменить данную форму обращения.<br><br>
#Все участники суда должны говорить исключительно с разрешения судьи. Нарушение данного требования может быть расценено как нарушение статьи "[[Корпоративный Закон#121|Неуважение к суду]]" Корпоративного Закона.<br><br>
#Все участники суда должны вести себя подобающим образом. Любые случаи неподобающего и вызывающего поведения могут быт расценены как нарушение статьи "[[Корпоративный Закон#121|Неуважение к суду]]" Корпоративного Закона.<br><br>
#Все участники обязуются говорить искренне, дача ложных показаний, либо намеренное искажение информации, являются нарушением статьи "[[Корпоративный Закон#145|Крупное мошенничество]]" Корпоративного Закона.<br><br>
</tab>
<tab name="Открытый суд">
===Досудебный этап===
#Открытый судебный процесс не может быть инициирован в условиях угрозы уровня '''<span style="color:#{{ColorPalette|Threat codes|Red}}">красного кода</span>''' или '''<span style="color:#{{ColorPalette|Threat codes|Gamma}}">выше</span>''', при объявлении '''<span style="color:#{{ColorPalette|Threat codes|Red}}">красного кода</span>''' во время процедуры, суд должен быть перенесен до снижения кода угрозы до '''<span style="color:#{{ColorPalette|Threat codes|Blue}}">синего</span>'''.<br><br>
#Судья публично объявляет о предстоящем суде, называет место и время начала процедуры. С момента объявления и до начала суда должно пройти не менее 10 минут.<br><br>
#Подсудимый до начала суда должен находится под стражей. Время пребывания под стражей должно быть учтено при вынесении приговора.<br><br>
#Обязательные участники суда должны прибыть в зал суда за 5 минут до начала слушания.<br><br>
#Лица, содействующие осуществлению правосудия могут явиться до начала слушания, без опозданий.<br><br>
#В открытом судебном процессе допустимо присутствие зрителей в зале суда.<br><br>
===Подготовка к слушанию===
#Если процедура проводится в условиях '''<span style="color:#{{ColorPalette|Threat codes|Blue}}">синего кода</span>''', то все участники суда, не имеющие юридической неприкосновенности, должны быть подвергнуты процедуре обыска перед посещением зала суда.<br><br>
#Перед началом слушания все участники должны занять места в зале.<br><br>
#Подсудимый может быть закован в наручники и должен находится под контролем офицера СБ.<br><br>
#Все участники суда должны исполнять требования судьи.<br><br>
#Лица, содействующие осуществлению правосудия и зрители могут быть исключены из зала суда по решению судьи.<br><br>
===Слушание===
#Судья открывает слушание. Зачитывает вступительную речь, информирует, в каком порядке пройдет суд, оглашает правила поведения в суде.<br><br>
#Сторона обвинения представляет материалы дела.<br><br>
#Сторона защиты представляет свои интересы.<br><br>
#Судья приглашает лиц, содействующие осуществлению правосудия, для дачи показаний.<br><br>
#Судья уточняет, будут ли стороны приобщать дополнительные материалы к делу.<br><br>
#Подсудимый говорит последнее слово.
##В своем последнем слове подсудимый может признаться в преступлении и просить снисхождения, настаивать на своей невиновности, либо вовсе промолчать.<br><br>
#Судья оглашает приговор.<br><br>
===Приговор===
#При вынесении приговора судья должен руководствоваться материалами дела, чтобы установить виновность или невиновность подсудимого, и на основании полученных данных озвучить приговор.<br><br>
#Приговор вступает в силу сразу после его оглашения.
##В случае обвинительного приговора подсудимый признается виновным в совершении преступления и отправляется отбывать наказание с учетом времени, проведенного в бриге до начала слушания.
##В случае оправдательного приговора подсудимый признается невиновным и должен быть немедленно освобожден, личное имущество подсудимого должно быть возвращено в кратчайшие сроки.<br><br>
#После оглашения приговора суд считается завершенным.
##В течение 10 минут судья должен составить [[Бумажная работа#Судебное_решение|приговор]] в письменном виде, предоставить его копии стороне обвинения и защиты.<br><br>
</tab>
<tab name="Закрытый суд">
===Досудебный этап===
#Закрытый судебный процесс не может быть инициирован в условиях угрозы уровня '''<span style="color:#{{ColorPalette|Threat codes|Gamma}}">гамма кода</span>''', при объявлении Гамма-кода во время процедуры, суд должен быть перенесен до снижения кода угрозы до <span style="color:#{{ColorPalette|Threat codes|Red}}">красного кода</span>'''<br><br>
#Судья должен огласить место проведения слушания и время его начала участникам суда, либо обеспечить получение информации данными лицами. Слушание может быть начато сразу же после объявления.<br><br>
===Слушание===
#Вне зависимости от кода угрозы, все участники суда, не имеющие юридической неприкосновенности, должны быть подвергнуты процедуре обыска.<br><br>
#На постоянной основе в месте проведения суда находятся лишь обязательные участники слушания.<br><br>
#Лица, содействующие осуществлению правосудия, вызываются в зал суда по одному, после дачи показаний они покидают суд.<br><br>
#Судья проводит опрос сторон суда в удобном ему порядке.<br><br>
#Судья объявляет о готовности вынести вердикт по делу.<br><br>
===Приговор===
#При вынесении приговора судья должен руководствоваться материалами дела, чтобы установить виновность или невиновность подсудимого, и на основании полученных данных озвучить приговор.<br><br>
#Приговор вступает в силу сразу после его оглашения.
##В случае обвинительного приговора подсудимый признается виновным в совершении преступления и отправляется отбывать наказание с учетом времени, проведенного в бриге до начала слушания.
##В случае оправдательного приговора подсудимый признается невиновным и должен быть немедленно освобожден, личное имущество подсудимого должно быть возвращено в кратчайшие сроки.<br><br>
#После оглашения приговора суд считается завершенным.
##В течение 10 минут судья должен составить [[Бумажная работа#Судебное_решение|приговор]] в письменном виде, предоставить его копии стороне обвинения и защиты.<br><br><br><br>
</tab>
</tabs>
 
{{RulesBox
|title  = Процедура внутреннего расследования
|content = <p></p>
# Данная процедура может быть инициирована Агентом Внутренних Дел, если тот лично засвидетельствовал нарушение СРП в каком-либо из отделов, либо получил письменную жалобу о нарушении СРП в отделе.
## Проведение внутреннего расследования невозможно во время '''<span style="color:#{{ColorPalette|Threat codes|Gamma}}">гамма кода</span>'''.
## Проведение внутреннего расследования в отделе Службы Безопасности не может проводится во время '''<span style="color:#{{ColorPalette|Threat codes|Red}}">красного кода</span>'''.
## Проведение внутреннего расследования в медицинском отделе не может проводится во время '''<span style="color:#{{ColorPalette|Threat codes|Violet}}">фиолетового кода</span>'''.
## Проведение внутреннего расследования в инженерном отделе не может проводится во время '''<span style="color:#{{ColorPalette|Threat codes|Yellow}}">жёлтого кода</span>'''.
# Перед началом расследования, АВД обязан лично уведомить капитана о начале расследования, четко изложить причины его начала, и выполнить ряд действий:
## Получить доступ к служебной частоте проверяемого отдела.
## Получить полный доступ к отделу, исключая кабинет главы и защищенные стратегические точки.
## капитан может отказать в предоставлении доступа к отделу и вместо этого сопровождать АВД лично.
## Если объектом проверки является защищенная стратегическая точка, либо кабинет главы, то глава отдела или капитан должны сопровождать АВД лично.
# У АВД имеется 15 минут на посещение отдела и расследования фактов нарушения СРП. Если выделенного времени оказалось недостаточно, АВД может запросить дополнительное время на расследование у главы отдела или капитана.
## При проведении расследования АВД не должен мешать работе сотрудников отдела. Выявленные нарушения должны документироваться.
## АВД разрешено опрашивать сотрудников отдела, если те в данный момент не выполняют никаких срочных задач. На опрос каждого сотрудника у АВД имеется до 5 минут.
# По завершению расследования АВД обязан вернуть ключ шифрования отдела и сдать полученные доступы.
# АВД должен составить письменный отчет о проведенном расследовании и предоставить копии главе отдела и капитану для принятия мер по факту выявленных нарушений.
}}<!--
 
-->
{{RulesBox
|title  = Процедура обращения к магистрату
|content = <p></p>
# [[Бумажная работа#Обращение|Обращение]] к магистрату может быть направлено исключительно лицами, имеющими такое право, по одной из указанных причин:
## Возникновении ситуации, при которой Корпоративный Закон не способен защитить ущемление ОПРС какого-либо лица.
## Необходимости оспорить приговор, вынесенный капитаном.
## Необходимости отстранить от работы Агента Внутренних Дел при нарушении им ОПРС, КЗ или СРП.
## Необходимости проведения судебной процедуры.
# Обращение должно быть оформлено соответствующим документом и отправлено по факсу, а Оператор Центрального Командования должен быть проинформирован о его отправке.
# На основании обращения магистрат может поступить следующим образом:
## Принять решение  удаленно, затребовав от АВД сбор необходимых материалов для вынесения вердикта.
## Лично прибыть на станцию для решения поставленной задачи.
}}
 
}}


{{NavBox/CO/СРП}}
== Типичный рабочий поток ==
[[Категория:Стандартные рабочие процедуры (Corvax)]]
# В JSON‑файлах (<code>component.json</code>, <code>prototype.json</code> и др.) описываются сущности и связи компонент/прототипов.
# Для каждого компонента/прототипа создаются шаблоны <code>Template:Component/...</code>, <code>Template:prototype/...</code>, которые:
#* вызывают <code><nowiki>{{#invoke:Сущность/поля|main ...}}</nowiki></code> для описания полей карточки;
#* при необходимости используют <code>GetField</code> / <code>Сущность.jsonList</code> / <code>Сущность.json</code> для форматирования сложных JSON‑полей.
# Для вывода карточки на странице сущности используется:
#* либо прямой <code><nowiki>{{#invoke:Сущность|get|MyEntityId}}</nowiki></code>,
#* либо шаблон‑обёртка <code><nowiki>{{Сущность/карточка|MyEntityId}}</nowiki></code>.
# Для специализированных списков/таблиц:
#* <code>Сущность.jsonList</code> — если нужно красиво показать массив/словарь из JSON;
#* <code>Сущность.json</code> — если нужно превратить список эффектов в набор вызовов шаблона;
#* <code>GetField.get</code> — если нужно точечно вытащить одно поле;
#* <code>GetField.getTpl</code> / <code>getTplProto</code> — если нужно строить шаблоны по данным JSON автоматически.

Текущая версия от 16:00, 5 марта 2026

Модульный набор {{#invoke:Сущность}} + {{#invoke:Сущность/поля}} + {{#invoke:GetField}} предназначен для:

  • автоматической сборки карточек сущностей (компонентов и прототипов) по их ID;
  • описания полей в шаблонах компонентов (какие поля идут в карточку, как подписаны);
  • удобного доступа к данным из JSON (как простыми значениями, так и готовыми вызовами шаблонов).

Ниже описан общий принцип работы и отдельные режимы.

Общий принцип работы

  • В шаблонах компонентов/прототипов (Template:Component/..., Template:prototype/...) через {{#invoke:Сущность/поля}} описываются поля:
    • лейблы (cardLabel_*) и содержимое (cardContent_*), заголовки (title_*) и т. п.;
    • мета‑информация о том, какие ключи доступны для card / title и в каком порядке.
  • {{#invoke:Сущность}} по ID сущности:
    • находит связанные с ней компоненты и прототипы по JSON‑данным;
    • для каждого компонента/прототипа читает шаблоны и метаданные;
    • собирает все поля в единую структуру;
    • формирует один вызов карточки {{карточка/сущность|...}} (и блоки заголовков).
  • Внутри полей можно писать вики‑параметры {{{...}}} и вызывать дополнительные модули.
  • {{#invoke:GetField}} даёт доступ к JSON‑данным на низком уровне:
    • как «расплющенный» набор параметров (flattenField);
    • как отдельные значения (get);
    • как готовые вызовы шаблонов с нужными параметрами (getTpl, getTplProto).

Модуль: Сущность/поля

Шаблоны компонентов используют модуль Сущность/поля для объявления полей, которые будут собираться в карточку.

Пример шаблона компонента:

{{#invoke:Сущность/поля|main
 |cardLabel_Стоимость   = [[Стоимость]]
 |cardContent_Стоимость = '''{{{price}}}'''
}}

Другой компонент может добавлять тот же ключ:

{{#invoke:Сущность/поля|main
 |cardContent_Стоимость  = '''{{{superPrice}}}'''
}}

Особенности:

  • Пара cardLabel_<Ключ> / cardContent_<Ключ> описывает одну строку карточки (лейбл и содержимое).
  • Если несколько шаблонов дают один и тот же cardContent_Ключ, содержимое объединяется, а лейбл берётся первый непустой.
  • То же относится к другим режимам, перечисленным в мета‑JSON шаблона (разделы card, title и т. п.), которые читает {{#invoke:Сущность}}.

Модуль: Сущность

p.get: основная сборка карточки

Вызов:

{{#invoke:Сущность|get
 | <ID или список ID>
 | blacklist=...
 | whitelist=...
 | ignoreComponents=...
 | ignorePrototypes=...
}}
  • 1‑й параметр — id или список id через запятую.
  • По этому ID модуль находит:
    • компоненты из component.json;
    • прототипы из prototype.json;

и для каждого — соответствующие шаблоны Template:component/... / Template:prototype/....

  • Шаблоны описывают свои поля через Сущность/поля.

После сборки модуль:

  • формирует один вызов {{карточка/сущность|...}} со всеми разделами и полями;
  • дополняет выход при необходимости (блоки title и т. п.);
  • прогоняет результат через frame:preprocess, чтобы отрендерить разметку.

Параметры фильтрации:

  • |blacklist = — список режим_Ключ через запятую, чтобы исключить поле:
    • пример: blacklist=card_Наносит повреждения,title_Что‑то;
  • |whitelist = — наоборот, список разрешённых режим_Ключ, остальные игнорируются;
  • |ignoreComponents = / |ignoreComponent = — список имён компонентов через запятую, которые полностью игнорируются для этого вызова;
  • |ignorePrototypes = / |ignorePrototype = — аналогично для прототипов.

Пример простой сборки (через шаблон‑обёртку):

{{Сущность/карточка|MyEntityId}}

где в шаблоне Сущность/карточка внутри:

{{#invoke:Сущность|get|{{{1}}}}}

p.preview: предпросмотр полей конкретного шаблона

Используется для проверки, что компонент/прототип правильно описал свои поля.

{{#invoke:Сущность|preview
 | Component/meleeWeapon
}}
  • Показывает, какие card / title‑поля объявлены в Template:Component/meleeWeapon.
  • Удобно при разработке шаблонов компонентов.

p.jsonList: вывод JSON в виде списка

Режим похож на стандартный arraymap, но работает с JSON.

{{#invoke:Сущность|jsonList
 | <json или {{{...}}}>
 | type = list / enum
 | prefix = * 
 | sep = : 
 | key_pattern = (.*)
 | key_replace = \1
 | value_pattern = (.*)
 | value_replace = \1
}}

Примеры JSON:

 <!-- <syntaxhighlight lang=json> -->
{
  "Blunt": 10,
  "Slash": 5
}

или

 <!-- <syntaxhighlight lang=json> -->
["Knife", "Sword", "Bat"]

Основные опции:

  • |type =:
    • list — список строк (с префиксом, например * );
    • enum — перечисление через запятую (A, B, C без префикса).
  • |prefix = — префикс строки списка (по умолчанию * ).
  • |sep = — разделитель для ключ: значение (по умолчанию : ).
  • |key_pattern = / |key_replace = — regex и замена для ключей.
  • |value_pattern = / |value_replace = — regex и замена для значений.

Дополнительно:

  • в шаблоне замены поддерживаются:
    • \1 — собственное значение (ключ или значение);
    • \2 в value_replace — сырой ключ (после key_pattern, но до key_replace);
    • \2 в key_replace — итоговое отформатированное значение (после value_replace).

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

{{#invoke:Сущность|jsonList
 | {{{damage.types}}}
 | type = enum
 | key_replace = \1              <!-- "Blunt" -->
 | value_replace = '''\1''' \2   <!-- "'''10''' Blunt" -->
}}

p.json: превращение JSON в вызовы шаблонов

Режим для случаев, когда в JSON лежит список эффектов/объектов, и нужно по каждому вызвать отдельный шаблон.

{{#invoke:Сущность|json
 | <json или {{{...}}}>
 | <путь_к_шаблону>
}}
  • 1‑й параметр / json= — строка JSON.
  • 2‑й параметр / template= — путь к шаблону, например Component/adjustPlant.

Ожидаемый формат JSON‑массива:

 <!-- <syntaxhighlight lang=json> -->
[
  {
    "!type:PlantAdjustNutrition": {
      "amount": 0.1
    }
  },
  {
    "!type:PlantAdjustWeeds": {
      "amount": 2
    }
  },
  {
    "!type:PlantAdjustPests": {
      "amount": 2
    }
  }
]

Для каждого элемента создаётся вызов:

{{Component/adjustPlant
 |id=!type:PlantAdjustNutrition
 |amount=0.1
}}
{{Component/adjustPlant
 |id=!type:PlantAdjustWeeds
 |amount=2
}}
{{Component/adjustPlant
 |id=!type:PlantAdjustPests
 |amount=2
}}

Особенности:

  • Если JSON — объект вида { "id1": {...}, "id2": {...} }, происходит аналогичный проход по парам ключ → объект.
  • Все вызовы склеиваются через перевод строки и прогоняются через frame:preprocess, поэтому внутри шаблона можно использовать любую вики‑разметку.

Модуль: GetField

Модуль GetField используется для доступа к тем же JSON‑данным .../data, но на более низком уровне.

p.flattenField: расплющивание записи в параметры

{{#invoke:GetField|flattenField
 | <id>
 | <путь_к_json_странице>
}}

Например:

{{#invoke:GetField|flattenField
 | MyEntityId
 | component/item.json
}}

Возвращает строку вида:

damage.types={"Blunt":10}|wieldSound=someSound|...

Особенности:

  • Вложенные объекты кодируются в JSON и заворачиваются в <nowiki>, чтобы их можно было безопасно передавать как параметр.
  • Массивы кодируются в JSON без <nowiki>, чтобы удобно обрабатывать их модулями вроде Сущность.jsonList.

Этот режим используется внутри GetField.getTpl и других обёрток.

p.get: получение значения по пути

{{#invoke:GetField|get
 | <id или пусто для "default">
 | <путь_к_json_странице>
 | <ключ.с.точками>
}}

Примеры:

{{#invoke:GetField|get
 | MyEntityId
 | component/item.json
 | damage.types
}}

Если в JSON:

 <!-- <syntaxhighlight lang=json> -->
"damage": {
  "types": {
    "Blunt": 10
  }
}

то результатом будет:

{"Blunt":10}

то есть:

  • для таблиц модуль пытается сделать mw.text.jsonEncode(v) и вернуть JSON‑строку;
  • для простых значений возвращается строка tostring(v).

Если keyPath пуст, возвращается весь объект (как JSON).

p.getTpl: вызов шаблона по данным JSON

{{#invoke:GetField|getTpl
 | <id>
 | <путь_к_json_странице>
 | <путь_к_шаблону>
}}

Пример:

{{#invoke:GetField|getTpl
 | MyEntityId
 | component/item.json
 | Component/meleeWeapon
}}

Работа:

  • внутри вызывает flattenField, получая строку key=value|...;
  • формирует строку вида:
{{Component/meleeWeapon
 |id=MyEntityId
 |damage.types=...
 |...
}}
  • и прогоняет её через frame:preprocess, возвращая итоговый рендер.

Это удобный способ «подключить» шаблон компонента к данным из JSON без ручного перечисления параметров.

p.getTplProto: вызов шаблона по прототипам

{{#invoke:GetField|getTplProto
 | <searchId>
 | <protoId>
 | <путь_к_шаблону>
}}
  • Ищет в prototype.json все записи, где protoId встречается у searchId.
  • Для каждого найденного ID вызывает getTpl и возвращает все вызовы, склеенные через перевод строки и отрендеренные.

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

Типичный рабочий поток

  1. В JSON‑файлах (component.json, prototype.json и др.) описываются сущности и связи компонент/прототипов.
  2. Для каждого компонента/прототипа создаются шаблоны Template:Component/..., Template:prototype/..., которые:
    • вызывают {{#invoke:Сущность/поля|main ...}} для описания полей карточки;
    • при необходимости используют GetField / Сущность.jsonList / Сущность.json для форматирования сложных JSON‑полей.
  3. Для вывода карточки на странице сущности используется:
    • либо прямой {{#invoke:Сущность|get|MyEntityId}},
    • либо шаблон‑обёртка {{Сущность/карточка|MyEntityId}}.
  4. Для специализированных списков/таблиц:
    • Сущность.jsonList — если нужно красиво показать массив/словарь из JSON;
    • Сущность.json — если нужно превратить список эффектов в набор вызовов шаблона;
    • GetField.get — если нужно точечно вытащить одно поле;
    • GetField.getTpl / getTplProto — если нужно строить шаблоны по данным JSON автоматически.