[FEAT] Всякие прикольные разности и вкусности (#554)

* feat: трикодер

* feat: принтер документов

* fix: текст фелинидов

* feat: возможность менять голос эмоутов

* feat: мяукаем при аспекте мяуканья

* feat: ПНВ

* fix: забирай свои метадаты

* fix: oopsies

* fix: линтер снова

* fix: пожалуйста линтер отстань
# Conflicts:
#	Content.Server/Speech/Components/VocalComponent.cs
#	Content.Server/White/AspectsSystem/Aspects/CatEarsAspect.cs
#	Resources/Prototypes/Catalog/Fills/Items/belt.yml
#	Resources/Prototypes/Reagents/Materials/materials.yml
#	Resources/Prototypes/White/Catalog/seniors_fills.yml
#	Resources/Prototypes/White/Catalog/uplink.yml
#	Resources/Prototypes/White/Recipes/lathe_recipes.yml
#	Resources/Prototypes/White/Research/experimental.yml
This commit is contained in:
Remuchi
2023-11-12 21:21:53 +07:00
committed by Remuchi
parent a009a8fae3
commit 64903d1403
43 changed files with 2228 additions and 11 deletions

View File

@@ -0,0 +1,73 @@
using Content.Client.Items;
using Content.Client.Message;
using Content.Client.Stylesheets;
using Content.Shared.White.Item.Tricorder;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.GameStates;
using Robust.Shared.Timing;
namespace Content.Client.White.Items.Tricorder;
/// <inheritdoc/>
public sealed class TricorderSystem : SharedTricorderSystem
{
/// <inheritdoc/>
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TricorderComponent, ItemStatusCollectMessage>(OnCollectItemStatus);
SubscribeLocalEvent<TricorderComponent, ComponentHandleState>(HandleTricorderState);
}
private static void OnCollectItemStatus(EntityUid uid, TricorderComponent component, ItemStatusCollectMessage args)
{
if (component.CurrentMode != TricorderMode.Multitool)
{
args.Controls.Clear();
}
args.Controls.Add(new StatusControl(component));
}
private static void HandleTricorderState(EntityUid uid, TricorderComponent component, ref ComponentHandleState args)
{
if (args.Current is not TricorderComponentState state)
{
return;
}
component.CurrentMode = state.CurrentMode;
}
private sealed class StatusControl : Control
{
private readonly RichTextLabel _label;
private readonly TricorderComponent _tricorder;
private TricorderMode? _linkModeActive;
public StatusControl(TricorderComponent tricorder)
{
_tricorder = tricorder;
_label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } };
AddChild(_label);
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
if (_linkModeActive != null && _linkModeActive == _tricorder.CurrentMode)
return;
_linkModeActive = _tricorder.CurrentMode;
var modeLocString = GetNameByMode(_tricorder.CurrentMode);
_label.SetMarkup(Robust.Shared.Localization.Loc.GetString("tricorder-item-status-label",
("mode", Robust.Shared.Localization.Loc.GetString(modeLocString))));
}
}
}

View File

@@ -1,4 +1,5 @@
using Content.Server.Speech.EntitySystems;
using Content.Server.White.AspectsSystem.Aspects;
using Content.Shared.Chat.Prototypes;
using Content.Shared.Humanoid;
using Robust.Shared.Audio;
@@ -12,7 +13,7 @@ namespace Content.Server.Speech.Components;
/// Component required for entities to be able to do vocal emotions.
/// </summary>
[RegisterComponent]
[Access(typeof(VocalSystem))]
[Access(typeof(VocalSystem), typeof(CatEarsAspect))]
public sealed partial class VocalComponent : Component
{
/// <summary>
@@ -41,6 +42,6 @@ public sealed partial class VocalComponent : Component
/// Currently loaded emote sounds prototype, based on entity sex.
/// Null if no valid prototype for entity sex was found.
/// </summary>
[ViewVariables]
[ViewVariables(VVAccess.ReadWrite)]
public EmoteSoundsPrototype? EmoteSounds = null;
}

View File

@@ -1,12 +1,14 @@
using Content.Server.Chat.Systems;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules.Components;
using Content.Server.Speech.Components;
using Content.Server.White.AspectsSystem.Aspects.Components;
using Content.Server.White.AspectsSystem.Base;
using Content.Shared.GameTicking;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Speech;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
@@ -21,6 +23,9 @@ public sealed class CatEarsAspect : AspectSystem<CatEarsAspectComponent>
private MarkingPrototype _ears = default!;
private MarkingPrototype _tail = default!;
private const string FemaleFelinidVoices = "FemaleFelinid";
private const string MaleFelinidVoices = "MaleFelinid";
public override void Initialize()
{
base.Initialize();
@@ -48,7 +53,10 @@ public sealed class CatEarsAspect : AspectSystem<CatEarsAspectComponent>
}
}
protected override void Started(EntityUid uid, CatEarsAspectComponent component, GameRuleComponent gameRule,
protected override void Started(
EntityUid uid,
CatEarsAspectComponent component,
GameRuleComponent gameRule,
GameRuleStartedEvent args)
{
base.Started(uid, component, gameRule, args);
@@ -93,12 +101,14 @@ public sealed class CatEarsAspect : AspectSystem<CatEarsAspectComponent>
AddTail(appearance);
Dirty(uid, appearance);
ChangeEmotesVoice(uid, appearance);
return;
}
default:
AddEars(appearance);
AddTail(appearance);
Dirty(uid, appearance);
ChangeEmotesVoice(uid, appearance);
break;
}
}
@@ -126,4 +136,22 @@ public sealed class CatEarsAspect : AspectSystem<CatEarsAspectComponent>
new Marking(_ears.ID, GetColors(appearance, _ears)) { Forced = true });
}
}
private void ChangeEmotesVoice(EntityUid user, HumanoidAppearanceComponent appearanceComponent)
{
if (!TryComp(user, out VocalComponent? vocals))
{
return;
}
switch (appearanceComponent.Gender)
{
case Gender.Female:
_protoMan.TryIndex(FemaleFelinidVoices, out vocals.EmoteSounds);
break;
case Gender.Male:
_protoMan.TryIndex(MaleFelinidVoices, out vocals.EmoteSounds);
break;
}
}
}

View File

@@ -0,0 +1,161 @@
using Content.Server.Medical.Components;
using Content.Server.UserInterface;
using Content.Shared.Atmos.Components;
using Content.Shared.Database;
using Content.Shared.DeviceNetwork;
using Content.Shared.DeviceNetwork.Components;
using Content.Shared.Examine;
using Content.Shared.MedicalScanner;
using Content.Shared.Verbs;
using Content.Shared.White.Item.Tricorder;
using Robust.Server.GameObjects;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Utility;
namespace Content.Server.White.Items.Tricorder;
public sealed class TricorderSystem : SharedTricorderSystem
{
[Dependency] private readonly IComponentFactory _componentFactory = default!;
[Dependency] private readonly AudioSystem _audioSystem = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TricorderComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<TricorderComponent, GetVerbsEvent<AlternativeVerb>>(OnAddSwitchModeVerbs);
}
private void OnExamined(EntityUid uid, TricorderComponent component, ExaminedEvent args)
{
var mode = GetNameByMode(component.CurrentMode);
args.PushMarkup(Loc.GetString("network-configurator-examine-current-mode", ("mode", Loc.GetString(mode))));
}
private void OnAddSwitchModeVerbs(EntityUid uid, TricorderComponent component, GetVerbsEvent<AlternativeVerb> args)
{
if (!args.CanAccess || !args.CanInteract || !args.Using.HasValue ||
!HasComp<TricorderComponent>(args.Target))
{
return;
}
var icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/settings.svg.192dpi.png"));
AlternativeVerb switchToMultitoolVerb = new()
{
Text = "Переключить на мультитул",
Icon = icon,
Act = () => SwitchToMode(args.User, uid, component, TricorderMode.Multitool),
Impact = LogImpact.Low
};
AlternativeVerb switchToGasAnalyzerlVerb = new()
{
Text = "Переключить на газоанализатор",
Icon = icon,
Act = () => SwitchToMode(args.User, uid, component, TricorderMode.GasAnalyzer),
Impact = LogImpact.Low
};
AlternativeVerb switchToHealthAnalyzerVerb = new()
{
Text = "Переключить на анализатор здоровья",
Icon = icon,
Act = () => SwitchToMode(args.User, uid, component, TricorderMode.HealthAnalyzer),
Impact = LogImpact.Low
};
args.Verbs.Add(switchToHealthAnalyzerVerb);
args.Verbs.Add(switchToGasAnalyzerlVerb);
args.Verbs.Add(switchToMultitoolVerb);
}
public void SwitchToMode(EntityUid? user, EntityUid tricoderUid, TricorderComponent tricorder, TricorderMode mode)
{
if (tricorder.CurrentMode == mode)
{
return;
}
tricorder.CurrentMode = mode;
switch (mode)
{
case TricorderMode.Multitool:
SetToMultitool(tricoderUid);
break;
case TricorderMode.GasAnalyzer:
SetToGasAnalyzer(tricoderUid);
break;
case TricorderMode.HealthAnalyzer:
SetToHealthAnalyzer(tricoderUid);
break;
}
if (!user.HasValue)
return;
UpdateModeAppearance(user.Value, tricorder);
}
private void UpdateModeAppearance(
EntityUid userUid,
TricorderComponent tricorder)
{
Dirty(tricorder);
_audioSystem.PlayPvs(tricorder.SoundSwitchMode, userUid, AudioParams.Default.WithVolume(1.5f));
}
private void SetToMultitool(EntityUid uid)
{
var comp = AddComp<NetworkConfiguratorComponent>(uid);
RemComp<GasAnalyzerComponent>(uid);
RemComp<HealthAnalyzerComponent>(uid);
Dirty(comp);
if (!TryComp(uid, out ActivatableUIComponent? ui))
{
return;
}
ui.Key = NetworkConfiguratorUiKey.Configure;
}
private void SetToGasAnalyzer(EntityUid uid)
{
RemComp<NetworkConfiguratorComponent>(uid);
AddComp<GasAnalyzerComponent>(uid);
RemComp<HealthAnalyzerComponent>(uid);
if (!TryComp(uid, out ActivatableUIComponent? ui))
{
return;
}
ui.Key = GasAnalyzerComponent.GasAnalyzerUiKey.Key;
}
private void SetToHealthAnalyzer(EntityUid uid)
{
RemComp<NetworkConfiguratorComponent>(uid);
RemComp<GasAnalyzerComponent>(uid);
var healthAnalyzerComponent = _componentFactory.GetComponent<HealthAnalyzerComponent>();
healthAnalyzerComponent.ScanningEndSound = new SoundPathSpecifier("/Audio/Items/Medical/healthscanner.ogg");
healthAnalyzerComponent.Owner = uid;
_entityManager.AddComponent(uid, healthAnalyzerComponent);
if (!TryComp(uid, out ActivatableUIComponent? ui))
{
return;
}
ui.Key = HealthAnalyzerUiKey.Key;
}
}

View File

@@ -0,0 +1,30 @@
using Robust.Shared.GameStates;
namespace Content.Shared.White.Item.Tricorder;
public abstract class SharedTricorderSystem : EntitySystem
{
/// <inheritdoc/>
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TricorderComponent, ComponentGetState>(GetTricorderState);
}
private static void GetTricorderState(EntityUid uid, TricorderComponent component, ref ComponentGetState args)
{
args.State = new TricorderComponentState(component.CurrentMode);
}
public static string GetNameByMode(TricorderMode mode)
{
return mode switch
{
TricorderMode.Multitool => "[color=yellow]мультитул[/color]",
TricorderMode.GasAnalyzer => "[color=cyan]газоанализатор[/color]",
TricorderMode.HealthAnalyzer => "[color=green]анализатор здоровья[/color]",
_ => "[color=yellow]мультитул[/color]"
};
}
}

View File

@@ -0,0 +1,38 @@
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
namespace Content.Shared.White.Item.Tricorder;
[RegisterComponent]
[NetworkedComponent]
[Access(typeof(SharedTricorderSystem))]
public sealed class TricorderComponent : Component
{
[DataField("currentState"), ViewVariables(VVAccess.ReadWrite)]
public TricorderMode CurrentMode = TricorderMode.Multitool;
[DataField("soundSwitchMode")]
public SoundSpecifier SoundSwitchMode = new SoundPathSpecifier("/Audio/Machines/quickbeep.ogg");
}
/// <summary>
/// Contains network state for TricorderComponent.
/// </summary>
[Serializable, NetSerializable]
public sealed class TricorderComponentState : ComponentState
{
public TricorderMode CurrentMode;
public TricorderComponentState(TricorderMode currentMode)
{
CurrentMode = currentMode;
}
}
public enum TricorderMode
{
Multitool,
GasAnalyzer,
HealthAnalyzer
}

View File

@@ -8,6 +8,7 @@ materials-steel = сталь
materials-gold = золото
materials-silver = серебро
materials-plasteel = пласталь
materials-paper = бумага
# Other
materials-biomass = биомасса
materials-cloth = ткань

View File

@@ -0,0 +1 @@
tricorder-item-status-label = Текущий режим: { $mode }

View File

@@ -1,7 +1,7 @@
hairball-action = Откашлять комок шерсти.
hairball-action-desc = Люди это не любят.
hairball-mask = Сначала сними { $mask }.
hairball-cough = { CAPITALIZE(THE($name)) } пытается выкашлять комок шесрти!
hairball-cough = { CAPITALIZE(THE($name)) } пытается выкашлять комок шерсти!
action-name-eat-mouse = Съесть мышь.
action-description-eat-mouse = Съешьте мышь в своей руке, получая питательные вещества и заряд комка шерсти.

View File

@@ -0,0 +1,610 @@
paper-text-request = Запрос Центральному Командованию
---------------------------------------------------------------------
Я, "имя капитана", в должности Капитана, запрашиваю цель для станции "номер станции"
---------------------------------------------------------------------
Для выполнения задачи Центрального Командования будут задействованы все доступные ресурсы станции с минимальным ущербом самой станции, если не было приказано иначе.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-report = Заявление в штаб Центрального Командования
---------------------------------------------------------------------
Я, "имя заявителя" "должность" станции "номер станции", отправляю рапорт о ходе выполнения цели станции и ее продвижении.
Цель: "цель смены".
Ситуация: "как проходит цель".
---------------------------------------------------------------------
Рапорт был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-completed = Заявление в штаб Центрального Командования
---------------------------------------------------------------------
Я, Капитан "имя заявителя" станции "номер станции", с гордостью сообщаю об успешном выполнении экипажем назначенной цели текущей смены.
Цель: "цель смены".
Оценка личного состава и состояния станции: "кратко опишите ситуацию на станции".
---------------------------------------------------------------------
Запрашиваю начало процедуры смены экипажа и ожидаю дальнейших указаний.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-failed = Заявление в штаб Центрального Командования
---------------------------------------------------------------------
Я, Капитан "имя заявителя" станции "номер станции", с прискорбием сообщаю о невозможности выполнения экипажем назначенной цели текущей смены.
Цель: "цель смены".
Причина: "почему ее нельзя выполнить".
---------------------------------------------------------------------
Вследствие провала задания, запрашиваю начало "процедуры смены экипажа / эвакуации" и ожидаю дальнейших указаний.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-request-CentComm = Рапорт Офицерскому составу Центрального Командования
---------------------------------------------------------------------
Номер станции: "укажите номер станции из ПДА"
Я, "имя заявителя", в должности "должность заявителя", представляю доклад о "происшествии/несоответствии" Офицерскому составу Центрального Командования.
Причина:"описание происшествия/несоответствия".
Данная ситуация требует вмешательства "сотрудника ЦК", так как не может быть решена силами экипажа и командования станции.
---------------------------------------------------------------------
Рапорт был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-request-ERT = Запрос в отдел Аварийно-Восстановительных Формирований NanoTrasen
---------------------------------------------------------------------
Я, "имя заявителя", в должности "должность заявителя", отправляю запрос в отдел Аварийно-Восстановительного Формирования для вызова на станцию "номер станции из ПДА" Отряда Быстрого Реагирования.
Причина: "описание происшествия".
Данная ситуация требует вмешательства "название типа ОБР" ОБР, так как не может быть решена силами экипажа и командования станции и ставит под угрозу существование самой станции.
---------------------------------------------------------------------
Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-request-RXBZZ = Запрос в отдел Аварийно-Восстановительных Формирований NanoTrasen
---------------------------------------------------------------------
Я, "имя заявителя", в должности "должность заявителя", отправляю запрос в отдел Аварийно-Восстановительного Формирования для вызова на станцию "номер станции из ПДА" Отряда Быстрого Реагирования.
Причина: "описание происшествия".
Данная ситуация требует вмешательства "название типа ОБР" ОБР, так как не может быть решена силами экипажа и командования станции и ставит под угрозу существование самой станции.
---------------------------------------------------------------------
Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-request-high-order-compaint = Заявление в бюро доносов NanoTrasen
---------------------------------------------------------------------
Номер станции: "укажите номер станции из ПДА"
Заявитель: "имя заявителя"
Должность: "должность заявителя"
Субъект правонарушения: "имя нарушителя"
Должность: "должность нарушителя"
Нарушенные пункты КЗ: "нарушенные статьи/отсутствует"
Нарушенные пункты СОП: "нарушенные пункты/отсутствует"
Нарушенные пункты ОПЧК: "нарушенные пункты/отсутствует"
Свидетели нарушений: "имена свидетелей/отсутствуют"
---------------------------------------------------------------------
Описание: "подробное, но лаконичное описание правонарушения".
Жалоба была составлена мною в пребывании адекватного состояния. Все, расписанное в данной жалобе, готов подтвердить повторно, при необходимости.
Запрос: "ожидаемый заявителем исход/принять соответствующие меры по пресечению будущих нарушений".
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-text-request-magistrat = Запрос в Верховный суд Nanotrasen
---------------------------------------------------------------------
Я, "имя заявителя", в должности "должность заявителя", отправляю запрос в Верховный суд для вызова на станцию "номер станции из ПДА" Магистрата.
Заявление об инициации судебного процесса: прилагается.
Данная ситуация требует вмешательства сотрудника Верховного суда, так как не может быть решена компетенцией экипажа и командования станции и ставит под угрозу справедливость вынесенного приговора.
---------------------------------------------------------------------
Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-comm-text-crew-mem-domotion = Постановление в архив командования станции
---------------------------------------------------------------------
Главе персонала станции "номер станции из ПДА".
Я, "имя заявителя", в должности главы отдела "ваш отдел" приказываю понизить сотрудника "должность сотрудника" "имя сотрудника" до должности "должность после понижения".
Причина: "кратко опишите причину понижения".
---------------------------------------------------------------------
Обязуюсь восполнить отсутствие персонала и поддерживать эффективность отдела на высшем уровне.
Приказ ввести в исполнение немедленно во избежание необратимого ущерба.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-comm-text-crew-mem-dismissal = Постановление в архив командования станции
---------------------------------------------------------------------
Главе персонала станции "номер станции из ПДА".
Я, "имя заявителя", в должности главы отдела "ваш отдел" приказываю немедленно уволить сотрудника "имя сотрудника" с должности "должность сотрудника".
Причина: "кратко опишите причину увольнения".
Сотрудник обязан(-а) немедленно покинуть рабочее место и сдать все выданное снаряжение и имущество отдела. В случае нарушения данного приказа, будут приняты дополнительные меры в соответствии с настоящим законодательством.
---------------------------------------------------------------------
Обязуюсь восполнить отсутствие персонала и поддерживать эффективность отдела на высшем уровне.
Приказ ввести в исполнение немедленно во избежание необратимого ущерба.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-comm-text-request-council = Запрос командному составу станции
---------------------------------------------------------------------
Я, "имя заявителя", в должности "ваша должность" запрашиваю провести голосование среди командного состава станции "номер станции".
Причина: "причина голосования".
Цель: "ожидаемый итог голосования".
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-comm-text-council-end = Отчет по голосованию
---------------------------------------------------------------------
Голосованием глав станции "номер станции", по вопросу "причина голосования", было принято решение "Поддержать / Отклонить" инициативу.
Количество голосов "За": "кол-во"
Количество голосов "Против": "кол-во"
---------------------------------------------------------------------
Подпись: "подпись"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-order = Ордер на обыск
---------------------------------------------------------------------
Выдан: "имя заявителя" "Юрист/Капитан".
Подозреваемый: "имя подозреваемого" "должность".
Характер обыска: "обыск отдела/обыск сотрудника".
Причина обыска: "причина подозрения"
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-complaint = Жалоба
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
Субъект правонарушения: "имя нарушителя"
Должность: "должность нарушителя"
Свидетели нарушений: "имена свидетелей/отсутствуют"
---------------------------------------------------------------------
Описание: "нарушение".
---------------------------------------------------------------------
Жалоба была составлена мною в пребывании адекватного состояния. Все, расписанное в данной жалобе, готов подтвердить повторно, при необходимости.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-lic = Разрешение на ношение оружия
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
Разрешение на ношение: "название оружия"
---------------------------------------------------------------------
Причина: "причина на запрос оружия".
---------------------------------------------------------------------
Обязуюсь, что орудоваемое мною оружие будет использовано в целях описаных выше или в целях вынужденной самообороны.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-request-weapon = Временный запрос оружия
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
Запрос оружия: "название оружия"
---------------------------------------------------------------------
Причина: "причина на запрос оружия".
На период: "через сколько обязан вернуть оружие"
---------------------------------------------------------------------
Обязуюсь использовать исключительно в целях указанных выше или при вынужденной самообороне и сдать оружие в арсенал в указанное время или по первому требованию службы безопасности.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-request-execution = Запрос на казнь сотрудника
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
Нарушитель: "имя и фамилия"
---------------------------------------------------------------------
Причина: "что нарушил".
---------------------------------------------------------------------
Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
Данный документ приобретает юридическую силу, если имеет печать Капитана или Центрального Командования.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-request-cargo-weapon = Разрешение на заказ оружие отделом Снабжения
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
Причина: "по какой причине нужно оружие".
---------------------------------------------------------------------
Отправляя этот запрос, возлагаю на себя полную ответственность за заказанное оружие.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sec-text-request-guard = Заявление под программу защиты свидетелей
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
---------------------------------------------------------------------
Причина: "что угрожает вашей жизни".
Запрос: "убежища в бриге / предоставить вам защиту"
---------------------------------------------------------------------
Служба безопасности берет ответственность за жизнь данного сотрудника и обязана предоставить ему защиту.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-eng-text-request-build = Заявление о проведении строительных работ
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
---------------------------------------------------------------------
Строительные работы будут проведены в отделе "название отдела".
Объект: "что будет сделано".
---------------------------------------------------------------------
Исполнитель несёт полную ответственность за качество выполненных работ.
Во время строительства обязаны быть соблюдены все нормы безопасности.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-eng-text-request-material = Запрос материалов
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
---------------------------------------------------------------------
Список: "что вам нужно".
Причина: "зачем вам материалы".
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-eng-text-report-elect = Отчет об электроснабжении
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
---------------------------------------------------------------------
Производитель электроэнергии: "ДАМ / Сингулярность / альтернативный источник"
Коэффициент потраченной / производимой электроэнергии: "указать коэффициент, к примеру: 2/9"
Стабильность электропитания: "указать уровень стабильности"
---------------------------------------------------------------------
Я - подотчетное лицо, несу полную ответственность своих действий и не пытаюсь скрыть какую-либо информацию.
В случае сокрытия информации подотчетное лицо будет подвержено наказанию высшей степени.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-eng-text-report-atmos = Отчет об атмосфере
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
---------------------------------------------------------------------
Производимые газы:"указать производимые газы"
Коэффициент газов в атмосфере станции:"указать коэффициент газов, к примеру кислород - 22%, азот - 77%, углерод - 1%"
Дополнительно производимые газы:"указать дополнительно производимые газы, к примеру - тритий, фрезон и т.п."
---------------------------------------------------------------------
Я - подотчетное лицо, несу полную ответственность своих действий и не пытаюсь скрыть какую-либо информацию.
В случае сокрытия информации подотчетное лицо будет подвержено наказанию высшей степени.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-med-text-request-perm-narc = Лекарственный рецепт
---------------------------------------------------------------------
Я, "имя и фамилия", в должности "психолога/СМО", выписываю для лечения пациента "имя пациента" следующие препараты: "названия препаратов".
Причина: "заболевание".
---------------------------------------------------------------------
Этот документ подтверждает право пациента на хранение и употребление вышеперечисленных препаратов.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-med-text-request-execution = Запрос на проведение эвтаназии
---------------------------------------------------------------------
Я, "имя и фамилия", в должности "должность" в связи "указать причину", прошу провести для себя процедуру эвтаназии.
---------------------------------------------------------------------
Претензий к медицинскому отделу, при соблюдении ими протоколов, не имею.
Данный документ приобретает юридическую силу, если имеет печать Юриста.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-med-text-waiver-claims = Отказ от претензий
---------------------------------------------------------------------
Я, "имя и фамилия", в должности "должность" даю разрешение провести на мне ряд научных исследований во благо науки.
Эксперимент: "что на вас будут проверять".
---------------------------------------------------------------------
Претензий к "медицинскому/научному" отделу, при соблюдении ими протоколов, не имею.
Я полностью осведомлен(а) и информирован(а) об эксперименте и возможных угрозах.
Настоящая расписка составлена и подписана добровольно, без какого-либо давления, обещаний или угроз.
Данный документ приобретает юридическую силу, если имеет печать Юриста.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-med-text-durka = Заключение о невменяемости
---------------------------------------------------------------------
Я, "имя и фамилия", в должности "СМО/Психолога" признаю сотрудника "имя пациента" невменяемым. В связи с тем, что психические расстройства несут опасность как для самого пациента, так и для остального экипажа, пациент должен быть помещен в перманентную тюрьму.
---------------------------------------------------------------------
Служба безопасности обязана соблюдать все права в отношении пациента, защищать и проводить его для эвакуации до Центрального Командования.
Подписывая данный документ, возлагаю на себя полную ответственность и, в случае неправильного диагноза, понесу высшую меру наказания.
Данный документ приобретает юридическую силу, если имеет печать ГСБ или Капитана.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sci-text-reasonable = Признание разумности существа
---------------------------------------------------------------------
Я, "имя и фамилия", в должности "Ученого/Научного руководителя", подтверждаю разумность существа.
Существо: "название"
---------------------------------------------------------------------
В процессе проведения экспериментов было подтверждено, что данное существо обладает характеристиками, необходимыми для признания его разумным, такими как: способность к мышлению, обучаемость, понимание моральных норм и способность осознавать последствия своих действий.
Существо имеет потенциал для работы на корпорацию NanoTrasen, в связи с чем должно пройти процедуру найма.
---------------------------------------------------------------------
После того, как глава персонала сделает ПДА данному существу, оно официально войдёт под юрисдикцию ОПЧК на равных основах с остальными членами корпорации.
Заявитель несет ответственность за правильное признание существа разумным.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sci-text-request-law = Постановление о изменении законов боргов
---------------------------------------------------------------------
Данный документ информирует о изменении законов "всех/название борга" борга/ов.
Вносимые изменения: "перечень внесённых изменений".
---------------------------------------------------------------------
Данный документ приобретает юридическую силу, если имеет печати и подписи двух или более глав.
Подписи глав: "подписи через запятую"
Новые законы не нарушают ОПЧК и Космический Закон, направлены на принесение пользы корпорации NanoTrasen.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-sci-text-brain = Постановление о пересадке мозга
---------------------------------------------------------------------
Данный документ информирует о пересадке мозга человека в борга по причине невозможности реанимировать прошлого владельца.
Я, "имя и фамилия", в должности "должность" проведу операцию по пересадки мозга "должность" "имя и фамилия пациента" в тело борга.
---------------------------------------------------------------------
Данный документ приобретает юридическую силу, если имеет печать СМО.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-car-text-order = Заказ товара
---------------------------------------------------------------------
Заявитель: "имя заявителя"
Должность: "должность заявителя"
---------------------------------------------------------------------
Товар: "кол-во - название товара"
Причина: "зачем вам это".
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-up-IDcard = Повышение доступа
---------------------------------------------------------------------
Я, "имя заявителя" "должность", прошу предоставить мне дополнительно следующие доступы: "название мест".
Причина: "причина повышения доступов"
---------------------------------------------------------------------
Доступ будет использован исключительно в интересах станции и экипажа. Я обязуюсь не заимствовать вещи из других отделов без разрешения главы отдела, а также покину отдел в случае приказа главы.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-work = Ускоренный найм
---------------------------------------------------------------------
Главе персонала станции "номер станции из ПДА".
Я, "имя заявителя", желаю пройти процедуру ускоренного найма на космической станции NanoTrasen. Ознакомившись с условиями и положениями ускоренного трудоустройства.
Желаемая должность: "название должности"
Отдел: "название отдела"
"По желанию - опыт в профессии, причина трудоустройства"
---------------------------------------------------------------------
Со стандартными рабочими процедурами, правилами и политикой NanoTrasen ознакомлен. Ответственность, возлагаемую на себя, осознаю.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-trash = Свидетельство о заключении брака
---------------------------------------------------------------------
Я, "имя и фамилия", в должности священника, заключаю брак между "имя и фамилия" и "имя и фамилия" с согласия обоих сторон.
---------------------------------------------------------------------
После заключения брака присвоены фамилии: Мужу "фамилия" Жене "фамилия"
Подпись жениха: "имя и фамилия"
Подпись невесты: "имя и фамилия"
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-trash-end = Свидетельство о расторжении брака
---------------------------------------------------------------------
Я, "имя и фамилия", в должности священника, расторгаю брак между "имя и фамилия" и "имя и фамилия" с согласия обоих сторон.
---------------------------------------------------------------------
После расторжения брака присвоены фамилии: Мужу "фамилия" Жене "фамилия"
Подпись мужа: "имя и фамилия"
Подпись жены: "имя и фамилия"
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-court = Инициация судебного процесса
---------------------------------------------------------------------
Я, "имя и фамилия", в должности "должность", настаиваю на немедленной инициации судебного процесса в отношении "имя обвиняемого" в должности "должность обвиняемого".
Безотлагательный судебный процесс необходим, поскольку: "почему приговор несправедливый со стороны охранной службы".
Дополнительная документация: "прилагается / отсутствует".
Свидетели: "список свидетелей / отсутствуют".
Исходя из данных, представленных выше, должен пройти публичный судейский процесс, подающий пример остальным сотрудникам станции.
---------------------------------------------------------------------
Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
Данный документ приобретает юридическую силу, если имеет печать Юриста.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-dismissal = Увольнение
---------------------------------------------------------------------
Я, "имя заявителя", прошу уволить меня с должности "ваша должность" по собственному желанию.
Причина: "кратко опишите причину увольнения".
---------------------------------------------------------------------
Документ составлен в адекватном состоянии, со всеми последствиями ознакомлен.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-promotion = Повышение
---------------------------------------------------------------------
Я, "имя заявителя", в должности "ваша должность" прошу повысить меня до "желаемая должность" в отделе "название отдела".
Причина: "кратко опишите свои заслуги".
---------------------------------------------------------------------
Я убежден, что повышение позволит мне сделать значительный вклад в работу отдела и обязуюсь с особой старательностью выполнять свои обязанности. Со стандартными рабочими процедурами, правилами и политикой NanoTrasen ознакомлен. Ответственность, возлагаемую на себя, осознаю.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-ser-text-request-botan = Запрос растений
---------------------------------------------------------------------
Я, "имя заявителя", в должности "должность" запрашиваю растения в ботанике.
Растения: "название растения"
Причина: "причина".
---------------------------------------------------------------------
Данное растения будет использовано исключительно в выше описанных целях.
---------------------------------------------------------------------
Подпись: "подпись заявителя"
Дата: "день"."месяц".2562
Печать:
paper-syn-text-ha-ha = .
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣷⣦⣀⡄⠀⠀⣠⣤⣾⡿⢿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣷⣜⣋⣸⣿⣿⣷⣤⣾⣿⣷⣤⣴⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⠏⠉⠻⣿⣿⣿⣿⣿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⡿⠟⠉⠀⠀⠀⠨⠛⠿⠿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢰⣦⡀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡆⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢰⣶⣤⠀⠙⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⣠⡄⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⣠⣼⡟⠁⠀⢠⠄⠀⠀⠀
⠀⠀⠀⠈⢿⣯⡀⠀⠈⠛⢿⣷⣦⣤⣤⣤⣶⣿⣿⠃⠀⢻⣿⣶⣤⣤⣤⣤⣴⣿⠟⠉⠀⠀⢰⠃⠀⠀⠀⠀
⠀⠀⠀⠀⠘⠿⡀⠀⢀⠀⠀⠈⠙⠛⠛⠛⠋⠉⠀⠀⠀⠀⠈⠛⠛⠛⠛⠋⠁⠀⢀⣤⣴⣶⠃⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠳⢶⣏⡀⣠⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣠⣴⣾⡿⠿⠛⠁⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠛⠿⠿⠿⠿⠿⠿⠿⠟⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴
⣿⣿⣿⣿⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀⠀⠀⢠⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⡄⠀⠀⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡘⢿⡿⣿⠛⠉⠉⠉⠉⠙⠻⡿⢿⡿⢁⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣴⣿⣦⠀⠀⠀⠀⢀⣼⣿⣦⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⠓⠀⠀⠀⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿

View File

@@ -26,6 +26,7 @@
- id: Welder
- id: Multitool
# WD EDIT START
- type: entity
id: ClothingBeltChiefEngineerFilled
parent: ClothingBeltChiefEngineer
@@ -36,10 +37,11 @@
- id: PowerDrill
- id: JawsOfLife
- id: WelderExperimental
- id: Multitool
- id: Tricorder
- id: HolofanProjector
- id: GasAnalyzer
- id: trayScanner
amount: 2
- id: CableApcStack
# WD EDIT END
- type: entity
id: ClothingBeltSecurityFilled

View File

@@ -84,3 +84,15 @@
Telecrystal: 15
categories:
- UplinkImplants
# Night Vision
- type: listing
id: UplinkNightGoggles
name: ПНВ [Хамелеон]
description: Теперь ты видишь во тьме!
productEntity: ClothingEyesNightVisionGogglesSyndie
icon: { sprite: White/Clothing/Head/nightvision.rsi, state: icon }
cost:
Telecrystal: 3
categories:
- UplinkArmor

View File

@@ -0,0 +1,27 @@
# Night Vision Goggles
- type: entity
parent: ClothingEyesBase
id: ClothingEyesNightVisionGoggles
name: ПНВ
description: Теперь ты видишь во тьме!
components:
- type: Sprite
sprite: White/Clothing/Head/nightvision.rsi
- type: Clothing
sprite: White/Clothing/Head/nightvision.rsi
- type: ClothingGrantComponent
component:
- type: NightVision
# Night Vision Goggles (Chameleon)
- type: entity
parent: ClothingEyesNightVisionGoggles
id: ClothingEyesNightVisionGogglesSyndie
components:
- type: ChameleonClothing
slot: [ eyes ]
default: ClothingEyesGlassesSunglasses
- type: UserInterface
interfaces:
- key: enum.ChameleonUiKey.Key
type: ChameleonBoundUserInterface

View File

@@ -0,0 +1,53 @@
- type: entity
parent: BaseItem
id: Tricorder
name: трикодер
description: Многофункциональное устройство, которое может выполнять огромный спектр задач.
components:
- type: Sprite
sprite: White/Items/Tools/tricorder.rsi
layers:
- state: icon
- state: on
map: [ "tricorder_power" ]
- type: Tricorder
- type: StaticPrice
price: 300
- type: Tool
qualities:
- Pulsing
- type: ActivatableUI
key: enum.NetworkConfiguratorUiKey.List
inHandsOnly: true
- type: UserInterface
interfaces:
- key: enum.NetworkConfiguratorUiKey.List
type: NetworkConfiguratorBoundUserInterface
- key: enum.NetworkConfiguratorUiKey.Configure
type: NetworkConfiguratorBoundUserInterface
- key: enum.NetworkConfiguratorUiKey.Link
type: NetworkConfiguratorBoundUserInterface
- key: enum.GasAnalyzerUiKey.Key
type: GasAnalyzerBoundUserInterface
- key: enum.HealthAnalyzerUiKey.Key
type: HealthAnalyzerBoundUserInterface
- type: NetworkConfigurator
- type: Tag
tags:
- DroneUsable
- Multitool
- DiscreteHealthAnalyzer
- type: Clothing
sprite: Objects/Tools/multitool.rsi
quickEquip: false
slots:
- Belt
- type: EmitSoundOnPickup
sound:
path: /Audio/White/Items/handling/multitool_pickup.ogg
- type: EmitSoundOnDrop
sound:
path: /Audio/Items/multitool_drop.ogg
- type: EmitSoundOnLand
sound:
path: /Audio/Items/multitool_drop.ogg

View File

@@ -0,0 +1,985 @@
# Base Document Printer
- type: entity
id: BaseDocPrinter
parent: BaseMachinePowered
abstract: true
name: принтер
components:
- type: Appearance
- type: Physics
bodyType: Static
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.25,-0.25,0.25,0.25"
density: 25
mask:
- TabletopMachineMask
layer:
- TabletopMachineLayer
- type: Lathe
- type: MaterialStorage
- type: ActivatableUI
key: enum.LatheUiKey.Key
- type: ActivatableUIRequiresPower
- type: UserInterface
interfaces:
- key: enum.LatheUiKey.Key
type: LatheBoundUserInterface
- key: enum.ResearchClientUiKey.Key
type: ResearchClientBoundUserInterface
- type: Transform
anchored: true
- type: Pullable
- type: StaticPrice
price: 800
- type: ResearchClient
- type: TechnologyDatabase
# Document Printer
- type: entity
parent: BaseDocPrinter
id: DocPrinter
name: принтер форм документов
description: Принтер для распечатки разных форм документов. Блюспейс-технологии на службе бюрократии!
components:
- type: Physics
bodyType: Static
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
drawdepth: SmallObjects
layers:
- state: icon
map: ["enum.LatheVisualLayers.IsRunning"]
- state: unlit
shader: unshaded
map: ["enum.PowerDeviceVisualLayers.Powered"]
- state: inserting
map: ["enum.MaterialStorageVisualLayers.Inserting"]
- type: Lathe
producingSound: /Audio/Machines/scanning.ogg
idleState: icon
runningState: printing
staticRecipes:
- BoxFolderGreenBAN
- PaperRequestTargetStation
- PaperReportCC
- PaperCompletedStation
- PaperFailedStation
- PaperRequestCentComm
- PaperRequestERT
- PaperRequestRXBZZ
- PaperRequestExecution
- PaperRequestMagistrat
- BoxFolderBlueBAN
- PaperDomotionComm
- PaperDismissalReq
- PaperRequestHeadCouncil
- PaperHeadCouncilEnd
- BoxFolderRedBAN
- PaperOrderSec
- PaperDonos
- PaperLic
- PaperTimeRequestWeapon
- PaperRequestExecutionSec
- PaperOrderWeapon
- PaperRequestGuard
- BoxFolderRYellowBAN
- PaperRequestBuild
- PaperRequestMaterial
- PaperReportElect
- PaperReportAtmos
- BoxFolderWhiteBAN
- PaperRequestNarco
- PaperRequestExecutionMed
- PaperWaiverOfClaims
- PaperDurka
- BoxFolderPurpleBAN
- PaperRequestReasonable
- PaperRequestLaw
- PaperBrain
- BoxFolderYellowBAN
- PaperCargoOrder
- BoxFolderGreyBAN
- PaperRequestUpID
- PaperRequestWork
- PaperRequestTrash
- PaperEndTrash
- PaperRequestCourt
- PaperDismissalSer
- PaperPromotion
- PaperRequestBotan
- type: EmagLatheRecipes
emagStaticRecipes:
- BoxFolderBlackBAN
- PaperSyndicat
- type: MaterialStorage
# Recipe Paper
# Station->CentComm
- type: latheRecipe
id: PaperRequestTargetStation # Tide
result: PaperRequestTargetStation
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperReportCC # Tide
result: PaperReportCC
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperCompletedStation # Tide
result: PaperCompletedStation
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperFailedStation # Tide
result: PaperFailedStation
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestCentComm # Tide
result: PaperRequestCentComm
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestERT # Tide
result: PaperRequestERT
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestRXBZZ # Tide
result: PaperRequestRXBZZ
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestExecution # Tide
result: PaperRequestExecution
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestMagistrat # Tide
result: PaperRequestMagistrat
completetime: 1
materials:
Paper: 0
# PaperCommand
- type: latheRecipe
id: PaperDomotionComm # Tide
result: PaperDomotionComm
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperDismissalReq # Tide
result: PaperDismissalReq
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestHeadCouncil # Tide
result: PaperRequestHeadCouncil
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperHeadCouncilEnd # Tide
result: PaperHeadCouncilEnd
completetime: 1
materials:
Paper: 0
# PaperSecurity
- type: latheRecipe
id: PaperOrderSec # Tide
result: PaperOrderSec
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestExecutionSec # Tide
result: PaperRequestExecutionSec
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperDonos # Tide
result: PaperDonos
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperLic # Tide
result: PaperLic
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperTimeRequestWeapon # Tide
result: PaperTimeRequestWeapon
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperOrderWeapon # Tide
result: PaperOrderWeapon
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestGuard # Tide
result: PaperRequestGuard
completetime: 1
materials:
Paper: 0
# PaperEng
- type: latheRecipe
id: PaperRequestBuild # Tide
result: PaperRequestBuild
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestMaterial # Tide
result: PaperRequestMaterial
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperReportElect # Tide
result: PaperReportElect
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperReportAtmos # Tide
result: PaperReportAtmos
completetime: 1
materials:
Paper: 0
# PaperMed
- type: latheRecipe
id: PaperRequestNarco # Tide
result: PaperRequestNarco
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestExecutionMed # Tide
result: PaperRequestExecutionMed
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperWaiverOfClaims # Tide
result: PaperWaiverOfClaims
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperDurka # Tide
result: PaperDurka
completetime: 1
materials:
Paper: 0
# PaperSci
- type: latheRecipe
id: PaperRequestReasonable # Tide
result: PaperRequestReasonable
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestLaw # Tide
result: PaperRequestLaw
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperBrain # Tide
result: PaperBrain
completetime: 1
materials:
Paper: 0
# PaperCargo
- type: latheRecipe
id: PaperCargoOrder # Tide
result: PaperCargoOrder
completetime: 1
materials:
Paper: 0
# PaperService
- type: latheRecipe
id: PaperRequestUpID # Tide
result: PaperRequestUpID
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestWork # Tide
result: PaperRequestWork
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestTrash # Tide
result: PaperRequestTrash
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperEndTrash # Tide
result: PaperEndTrash
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestCourt # Tide
result: PaperRequestCourt
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperDismissalSer # Tide
result: PaperDismissalSer
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperPromotion # Tide
result: PaperPromotion
completetime: 1
materials:
Paper: 0
- type: latheRecipe
id: PaperRequestBotan # Tide
result: PaperRequestBotan
completetime: 1
materials:
Paper: 0
# PaperSyndicat
- type: latheRecipe
id: PaperSyndicat # Tide
result: PaperSyndicat
completetime: 1
materials:
Paper: 0
# PapersAll
# Station->CentComm
- type: entity
parent: Paper
id: PaperRequestTargetStation
noSpawn: true
name: запрос цели
components:
- type: Paper
content: paper-text-request
- type: entity
parent: Paper
id: PaperReportCC
noSpawn: true
name: отчет о цели
components:
- type: Paper
content: paper-text-report
- type: entity
parent: Paper
id: PaperCompletedStation
noSpawn: true
name: цель выполнена
components:
- type: Paper
content: paper-text-completed
- type: entity
parent: Paper
id: PaperFailedStation
noSpawn: true
name: цель провалена
components:
- type: Paper
content: paper-text-failed
- type: entity
parent: Paper
id: PaperRequestCentComm
noSpawn: true
name: запрос ПЦК
components:
- type: Paper
content: paper-text-request-CentComm
- type: entity
parent: Paper
id: PaperRequestERT
noSpawn: true
name: запрос ОБР
components:
- type: Paper
content: paper-text-request-ERT
- type: entity
parent: Paper
id: PaperRequestRXBZZ
noSpawn: true
name: запрос РХБЗЗ
components:
- type: Paper
content: paper-text-request-RXBZZ
- type: entity
parent: Paper
id: PaperRequestExecution
noSpawn: true
name: жалоба высшей степени
components:
- type: Paper
content: paper-text-request-high-order-compaint
- type: entity
parent: Paper
id: PaperRequestMagistrat
noSpawn: true
name: запрос в магистрат
components:
- type: Paper
content: paper-text-request-magistrat
# PaperCommand
- type: entity
parent: Paper
id: PaperDomotionComm
noSpawn: true
name: запрос на понижение
components:
- type: Paper
content: paper-comm-text-crew-mem-domotion
- type: entity
parent: Paper
id: PaperDismissalReq
noSpawn: true
name: запрос на увольнение
components:
- type: Paper
content: paper-comm-text-crew-mem-dismissal
- type: entity
parent: Paper
id: PaperRequestHeadCouncil
noSpawn: true
name: запрос на голосование глав
components:
- type: Paper
content: paper-comm-text-request-council
- type: entity
parent: Paper
id: PaperHeadCouncilEnd
noSpawn: true
name: отчет по голосованию глав
components:
- type: Paper
content: paper-comm-text-council-end
# PaperSecurity
- type: entity
parent: Paper
id: PaperOrderSec
noSpawn: true
name: ордер на арест
components:
- type: Paper
content: paper-sec-text-order
- type: entity
parent: Paper
id: PaperDonos
noSpawn: true
name: жалоба
components:
- type: Paper
content: paper-sec-text-complaint
- type: entity
parent: Paper
id: PaperLic
noSpawn: true
name: разрешение на ношение оружия
components:
- type: Paper
content: paper-sec-text-lic
- type: entity
parent: Paper
id: PaperTimeRequestWeapon
noSpawn: true
name: временный запрос на оружие
components:
- type: Paper
content: paper-sec-text-request-weapon
- type: entity
parent: Paper
id: PaperRequestExecutionSec
noSpawn: true
name: запрос на казнь
components:
- type: Paper
content: paper-sec-text-request-execution
- type: entity
parent: Paper
id: PaperOrderWeapon
noSpawn: true
name: разрешение на заказ оружия
components:
- type: Paper
content: paper-sec-text-request-cargo-weapon
- type: entity
parent: Paper
id: PaperRequestGuard
noSpawn: true
name: программа защиты свидетелей
components:
- type: Paper
content: paper-sec-text-request-guard
# PaperEng
- type: entity
parent: Paper
id: PaperRequestBuild
noSpawn: true
name: разрешение о проведении строительных работ
components:
- type: Paper
content: paper-eng-text-request-build
- type: entity
parent: Paper
id: PaperRequestMaterial
noSpawn: true
name: запрос материалов
components:
- type: Paper
content: paper-eng-text-request-material
- type: entity
parent: Paper
id: PaperReportElect
noSpawn: true
name: отчет об электроснабжении
components:
- type: Paper
content: paper-eng-text-report-elect
- type: entity
parent: Paper
id: PaperReportAtmos
noSpawn: true
name: отчет об атмосфере
components:
- type: Paper
content: paper-eng-text-report-atmos
# PaperMed
- type: entity
parent: Paper
id: PaperRequestNarco
noSpawn: true
name: лекарственный рецепт
components:
- type: Paper
content: paper-med-text-request-perm-narc
- type: entity
parent: Paper
id: PaperRequestExecutionMed
noSpawn: true
name: запрос на проведение эвтаназии
components:
- type: Paper
content: paper-med-text-request-execution
- type: entity
parent: Paper
id: PaperWaiverOfClaims
noSpawn: true
name: отказ от претензий
components:
- type: Paper
content: paper-med-text-waiver-claims
- type: entity
parent: Paper
id: PaperDurka
noSpawn: true
name: заключение о невменяемости
components:
- type: Paper
content: paper-med-text-durka
# PaperSci
- type: entity
parent: Paper
id: PaperRequestReasonable
noSpawn: true
name: признание разумности существа
components:
- type: Paper
content: paper-sci-text-reasonable
- type: entity
parent: Paper
id: PaperRequestLaw
noSpawn: true
name: постановление о изменении законов боргов
components:
- type: Paper
content: paper-sci-text-request-law
- type: entity
parent: Paper
id: PaperBrain
noSpawn: true
name: постановление о пересадке мозга
components:
- type: Paper
content: paper-sci-text-brain
# PaperCargo
- type: entity
parent: Paper
id: PaperCargoOrder
noSpawn: true
name: заказ товара
components:
- type: Paper
content: paper-car-text-order
# PaperService
- type: entity
parent: Paper
id: PaperRequestUpID
noSpawn: true
name: повышение доступа
components:
- type: Paper
content: paper-ser-text-up-IDcard
- type: entity
parent: Paper
id: PaperRequestWork
noSpawn: true
name: ускоренный найм
components:
- type: Paper
content: paper-ser-text-work
- type: entity
parent: Paper
id: PaperRequestTrash
noSpawn: true
name: свидетельство о заключении брака
components:
- type: Paper
content: paper-ser-text-trash
- type: entity
parent: Paper
id: PaperEndTrash
noSpawn: true
name: свидетельство о расторжении брака
components:
- type: Paper
content: paper-ser-text-trash-end
- type: entity
parent: Paper
id: PaperRequestCourt
noSpawn: true
name: инициация судебного процесса
components:
- type: Paper
content: paper-ser-text-court
- type: entity
parent: Paper
id: PaperDismissalSer
noSpawn: true
name: увольнение
components:
- type: Paper
content: paper-ser-text-dismissal
- type: entity
parent: Paper
id: PaperPromotion
noSpawn: true
name: повышение
components:
- type: Paper
content: paper-ser-text-promotion
- type: entity
parent: Paper
id: PaperRequestBotan
noSpawn: true
name: запрос растений
components:
- type: Paper
content: paper-ser-text-request-botan
# PaperSyndicat
- type: entity
parent: Paper
id: PaperSyndicat
noSpawn: true
name: секретные документы
components:
- type: Paper
content: paper-syn-text-ha-ha
# BoxFolder
- type: entity
id: BoxFolderRedBAN
parent: BoxFolderBase
noSpawn: true
name: формы службы безопасноти
suffix: Red
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-sec
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderBlueBAN
parent: BoxFolderBase
noSpawn: true
name: формы командования
suffix: Blue
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-com
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderYellowBAN
parent: BoxFolderBase
noSpawn: true
name: формы карго
suffix: Yellow
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-car
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderWhiteBAN
parent: BoxFolderBase
noSpawn: true
name: формы медиков
suffix: White
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-med
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderGreyBAN
parent: BoxFolderBase
noSpawn: true
name: формы сервиса
suffix: Grey
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-ser
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderGreenBAN
parent: BoxFolderBase
noSpawn: true
name: формы для ЦентКома
suffix: Green
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-CC
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderRYellowBAN
parent: BoxFolderBase
noSpawn: true
name: формы инженеров
suffix: RYellow
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-eng
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderPurpleBAN
parent: BoxFolderBase
noSpawn: true
name: формы учёных
suffix: Purple
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-sci
- type: TimedDespawn
lifetime: 0,1
- type: entity
id: BoxFolderBlackBAN
parent: BoxFolderBase
noSpawn: true
name: формы J@4D*S
suffix: Black
components:
- type: Sprite
sprite: White/Structures/Machines/doc_printer.rsi
layers:
- state: folder-syn
- type: TimedDespawn
lifetime: 0,1
# RecipeBoxFolder
- type: latheRecipe
id: BoxFolderGreenBAN # Tide
result: BoxFolderGreenBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderGreyBAN # Tide
result: BoxFolderGreyBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderWhiteBAN # Tide
result: BoxFolderWhiteBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderYellowBAN # Tide
result: BoxFolderYellowBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderBlueBAN # Tide
result: BoxFolderBlueBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderRedBAN # Tide
result: BoxFolderRedBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderRYellowBAN # Tide
result: BoxFolderRYellowBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderPurpleBAN # Tide
result: BoxFolderPurpleBAN
completetime: 1
materials:
Paper: 1
- type: latheRecipe
id: BoxFolderBlackBAN # Tide
result: BoxFolderBlackBAN
completetime: 1
materials:
Paper: 1

View File

@@ -11,3 +11,13 @@
completetime: 5
materials:
Steel: 1500
- type: latheRecipe
id: ClothingEyesNightVisionGoggles
result: ClothingEyesNightVisionGoggles
completetime: 2
materials:
Steel: 200
Glass: 100
Silver: 100
Gold: 100

View File

@@ -0,0 +1,43 @@
- type: technology
id: AdvancedRobotics
name: research-technology-advanced-robotics
icon:
sprite: White/Mobs/Player/Borgs/cyborg.rsi
state: icon
discipline: Experimental
tier: 1
cost: 5000
recipeUnlocks:
- CyborgMonitoringComputerCircuitboard
- BorgChargerMachineCircuitboard
- CyborgMonitoringServerMachineCircuitboard
- PositronicBrain
- type: technology
id: UpgradeBorgModule
name: research-technology-upgrade-borg
icon:
sprite: White/Objects/Devices/cyborgradiomodule.rsi
state: icon
discipline: Experimental
tier: 2
cost: 15000
recipeUnlocks:
- CyborgHUDModuleSec
- CyborgHUDModuleMed
- CyborgSpeedModule
- CyborgInstrumentModuleFilled
- CyborgJetpackModule
# Night Vision Tech
- type: technology
id: NightVisionTech
name: night vision technology
icon:
sprite: White/Clothing/Head/nightvision.rsi
state: icon
discipline: Experimental
tier: 2
cost: 10000
recipeUnlocks:
- ClothingEyesNightVisionGoggles

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-EYES",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

View File

@@ -0,0 +1,20 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "on"
},
{
"name": "off"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,96 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Made by Valentyi",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "unlit",
"delays": [
[
0.6,
0.7,
0.6,
0.7
]
]
},
{
"name": "folder-base"
},
{
"name": "idle"
},
{
"name": "folder-CC"
},
{
"name": "folder-overlay-paper"
},
{
"name": "folder-med"
},
{
"name": "folder-sec"
},
{
"name": "folder-eng"
},
{
"name": "folder-sci"
},
{
"name": "folder-car"
},
{
"name": "folder-syn"
},
{
"name": "folder-com"
},
{
"name": "folder-ser"
},
{
"name": "inserting",
"delays": [
[
0.2,
0.2,
0.2,
0.2,
0.2,
0.2,
0.2,
0.2,
0.2,
0.2,
0.2,
0.2
]
]
},
{
"name": "printing",
"delays": [
[
0.4,
0.4,
0.4,
0.4,
0.4,
0.4,
0.4,
0.4,
0.4
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B