diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index 32ba78085a..76f01ec26d 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -387,7 +387,7 @@ namespace Content.Client.Examine _lastExaminedEntity = entity; } - private void CloseTooltip() + public void CloseTooltip() { if (_examineTooltipOpen != null) { diff --git a/Content.Client/FlavorText/FlavorText.xaml b/Content.Client/FlavorText/FlavorText.xaml index 37d4b5fda0..f36bf9fe18 100644 --- a/Content.Client/FlavorText/FlavorText.xaml +++ b/Content.Client/FlavorText/FlavorText.xaml @@ -1,5 +1,12 @@ - - - - + + + + + + + + + + diff --git a/Content.Client/White/CharacterExamine/CharacterInformationSystem.cs b/Content.Client/White/CharacterExamine/CharacterInformationSystem.cs new file mode 100644 index 0000000000..934e2e1640 --- /dev/null +++ b/Content.Client/White/CharacterExamine/CharacterInformationSystem.cs @@ -0,0 +1,151 @@ +using System.Linq; +using Content.Client.Examine; +using Content.Client.Inventory; +using Content.Shared.Access.Components; +using Content.Shared.CCVar; +using Content.Shared.PDA; +using Content.Shared.Roles; +using Content.Shared.Verbs; +using Content.Shared.White.CharacterExamine; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Client.White.CharacterExamine; + + +public sealed class CharacterInformationSystem : EntitySystem +{ + [Dependency] private readonly ExamineSystem _examine = default!; + [Dependency] private readonly ClientInventorySystem _inventory = default!; + [Dependency] private readonly IEntityManager _entity = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IConfigurationManager _config = default!; + + private CharacterInformationWindow? _window; + + + public override void Initialize() + { + base.Initialize(); + + _window = new CharacterInformationWindow(); + + SubscribeLocalEvent>(OnGetExamineVerbs); + } + + + private void OnGetExamineVerbs(EntityUid uid, CharacterInformationComponent component, GetVerbsEvent args) + { + var verb = new ExamineVerb() + { + Act = () => + { + // TODO: Better name? + Do(args.Target); + }, + Text = Loc.GetString("character-information-verb-text"), + Message = Loc.GetString("character-information-verb-message"), + Category = VerbCategory.Examine, + Disabled = !_examine.IsInDetailsRange(args.User, uid), + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/sentient.svg.192dpi.png")), + ClientExclusive = true, + }; + + args.Verbs.Add(verb); + } + + + private void Do(EntityUid uid) + { + if (_window == null) + return; + + string? name = null; + string? job = null; + string? flavorText = null; + + // Get ID from inventory, get name and job from ID + if (_inventory.TryGetSlotEntity(uid, "id", out var idUid)) + { + var id = GetId(idUid); + if (id is not null) + { + var info = GetNameAndJob(id); + + name = info.Item1; + job = info.Item2; + } + } + + // Fancy job title + if (!string.IsNullOrEmpty(job)) + { + var test = job.Replace(" ", ""); + // Command will be last in the list + // TODO: Make this not revolve around this fact ^ + var departments = _prototype.EnumeratePrototypes().OrderBy(d => d.ID).Reverse(); + var department = departments.FirstOrDefault(d => d.Roles.Contains(test)); + + if (department is not null) + { + // Department (ex: Command or Security) + var dept = string.Join(" ", Loc.GetString($"department-{department.ID}").Split(' ').Select(s => s[0].ToString().ToUpper() + s[1..].ToLower())); + // Redo the job title with the department color and department (ex: Captain (Command) or Security Officer (Security)) + job = $"[color={department.Color.ToHex()}]{job} ({dept})[/color]"; + } + } + + // Get and set flavor text + if (!_config.GetCVar(CCVars.FlavorText)) + { + flavorText = Loc.GetString("character-information-ui-flavor-text-disabled"); + } + else if (_entity.TryGetComponent(uid, out var detail)) + { + flavorText = detail.Content; + } + + _window.OpenCentered(); + _window.UpdateUi(uid, name, job, flavorText); + _examine.CloseTooltip(); + } + + /// + /// Gets the ID card component from either a PDA or an ID card if the entity has one + /// + /// Entity to check + /// ID card component if they have one on the entity + private IdCardComponent? GetId(EntityUid? idUid) + { + // PDA + if (_entity.TryGetComponent(idUid, out PdaComponent? pda) && + TryComp(pda.ContainedId, out IdCardComponent? idCard)) + return idCard; + // ID Card + if (_entity.TryGetComponent(idUid, out IdCardComponent? id)) + return id; + + return null; + } + + /// + /// Gets the name and job title from an ID card component + /// + /// The ID card to retrieve the information from + /// Name, Job Title + private static (string, string) GetNameAndJob(IdCardComponent id) + { + var name = id.FullName; + if (string.IsNullOrEmpty(name)) + name = "Unknown"; + + var jobTitle = id.JobTitle; + if (string.IsNullOrEmpty(jobTitle)) + jobTitle = "Unknown"; + jobTitle = string.Join(" ", jobTitle.Split(' ').Select(s => s[0].ToString().ToUpper() + s[1..].ToLower())); + + return (name, jobTitle); + } +} + diff --git a/Content.Client/White/CharacterExamine/CharacterInformationWindow.xaml b/Content.Client/White/CharacterExamine/CharacterInformationWindow.xaml new file mode 100644 index 0000000000..37c3803a74 --- /dev/null +++ b/Content.Client/White/CharacterExamine/CharacterInformationWindow.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/White/CharacterExamine/CharacterInformationWindow.xaml.cs b/Content.Client/White/CharacterExamine/CharacterInformationWindow.xaml.cs new file mode 100644 index 0000000000..abf0d041f2 --- /dev/null +++ b/Content.Client/White/CharacterExamine/CharacterInformationWindow.xaml.cs @@ -0,0 +1,115 @@ +using System.Linq; +using System.Numerics; +using Content.Client.Message; +using Content.Client.UserInterface.Controls; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.White.CharacterExamine; + +[GenerateTypedNameReferences] +public sealed partial class CharacterInformationWindow : FancyWindow +{ + private readonly IEntityManager _entity; + + // ReSharper disable once InconsistentNaming + private GridContainer _sprites => SpriteContainer; + // ReSharper disable once InconsistentNaming + private RichTextLabel _name => Name; + // ReSharper disable once InconsistentNaming + private RichTextLabel _job => Job; + // ReSharper disable once InconsistentNaming + private RichTextLabel _flavor => FlavorText; + + public CharacterInformationWindow() + { + RobustXamlLoader.Load(this); + + _entity = IoCManager.Resolve(); + + ResetUi(); + } + + + /// + /// Placeholder entries + /// + public void ResetUi() + { + _sprites.RemoveAllChildren(); + + var unknown = Loc.GetString("generic-unknown"); + // Capitalize the first letter of each word (Title Case) + unknown = string.Join(" ", unknown.Split(' ').Select(s => char.ToUpper(s[0]) + s[1..])); + + _name.SetMarkup(unknown); + _job.SetMarkup(unknown); + + _flavor.SetMarkup(Loc.GetString("character-information-ui-flavor-text-placeholder")); + } + + /// + /// Updates the UI to show all relevant information about the entity + /// + /// The entity to become informed about + /// The name of the examined entity, taken from their ID + /// The job of the examined entity, taken from their ID + /// The flavor text of the examined entity + public void UpdateUi(EntityUid examined, string? name = null, string? job = null, string? flavorText = null) + { + ResetUi(); + + // Fill in the omnidirectional sprite views + FillSprites(examined); + + // Fill in the name and job + if (!string.IsNullOrEmpty(name)) + _name.SetMarkup(name); + if (!string.IsNullOrEmpty(job)) + _job.SetMarkup(job); + + // Fill in the flavor text + if (!string.IsNullOrEmpty(flavorText)) + _flavor.SetMessage(flavorText); + } + + + /// + /// Fills the sprite views with the sprite from the sprite component + /// + /// + /// Stupid, redefines the sprite view 4 times, can't find another way to do this + /// + /// Sprite component to use + private void FillSprites(EntityUid uid) + { + _sprites.AddChild(new SpriteView(uid, _entity) + { + Scale = new Vector2(4, 4), + OverrideDirection = Direction.South, + Margin = new Thickness(0, 0, 8, 8), + }); + + _sprites.AddChild(new SpriteView(uid, _entity) + { + Scale = new Vector2(4, 4), + OverrideDirection = Direction.North, + Margin = new Thickness(8, 0, 0, 8), + }); + + _sprites.AddChild(new SpriteView(uid, _entity) + { + Scale = new Vector2(4, 4), + OverrideDirection = Direction.West, + Margin = new Thickness(0, 8, 8, 0), + }); + + _sprites.AddChild(new SpriteView(uid, _entity) + { + Scale = new Vector2(4, 4), + OverrideDirection = Direction.East, + Margin = new Thickness(8, 8, 0, 0), + }); + } +} diff --git a/Content.Server/Access/Systems/IdExaminableSystem.cs b/Content.Server/Access/Systems/IdExaminableSystem.cs index c2231605e4..eddc213c7e 100644 --- a/Content.Server/Access/Systems/IdExaminableSystem.cs +++ b/Content.Server/Access/Systems/IdExaminableSystem.cs @@ -16,7 +16,7 @@ public sealed class IdExaminableSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent>(OnGetExamineVerbs); + //SubscribeLocalEvent>(OnGetExamineVerbs); } private void OnGetExamineVerbs(EntityUid uid, IdExaminableComponent component, GetVerbsEvent args) diff --git a/Content.Server/DetailExaminable/DetailExaminableComponent.cs b/Content.Server/DetailExaminable/DetailExaminableComponent.cs index 3cefb75869..af52b85ed9 100644 --- a/Content.Server/DetailExaminable/DetailExaminableComponent.cs +++ b/Content.Server/DetailExaminable/DetailExaminableComponent.cs @@ -1,4 +1,4 @@ -namespace Content.Server.DetailExaminable +/*namespace Content.Server.DetailExaminable { [RegisterComponent] public sealed partial class DetailExaminableComponent : Component @@ -7,3 +7,4 @@ public string Content = ""; } } +*/ diff --git a/Content.Server/DetailExaminable/DetailExaminableystem.cs b/Content.Server/DetailExaminable/DetailExaminableystem.cs index c0acd87ca4..30c98ef95d 100644 --- a/Content.Server/DetailExaminable/DetailExaminableystem.cs +++ b/Content.Server/DetailExaminable/DetailExaminableystem.cs @@ -1,6 +1,7 @@ -using Content.Shared.Examine; +/*using Content.Shared.Examine; using Content.Shared.IdentityManagement; using Content.Shared.Verbs; +using Content.Shared.White.CharacterExamine; using Robust.Shared.Utility; namespace Content.Server.DetailExaminable @@ -42,3 +43,4 @@ namespace Content.Server.DetailExaminable } } } +*/ diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 9f9e371104..dde95d28b0 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -1,5 +1,4 @@ using Content.Server.Access.Systems; -using Content.Server.DetailExaminable; using Content.Server.Humanoid; using Content.Server.IdentityManagement; using Content.Server.Mind.Commands; @@ -18,6 +17,7 @@ using Content.Shared.Roles; using Content.Shared.Roles.Jobs; using Content.Shared.Station; using Content.Shared.StatusIcon; +using Content.Shared.White.CharacterExamine; using JetBrains.Annotations; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -157,7 +157,9 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem _metaSystem.SetEntityName(entity.Value, profile.Name); if (profile.FlavorText != "" && _configurationManager.GetCVar(CCVars.FlavorText)) { - AddComp(entity.Value).Content = profile.FlavorText; + var detail = AddComp(entity.Value); + detail.Content = profile.FlavorText; + Dirty(detail); } } diff --git a/Content.Server/White/Other/DeathGasps/DeathGaspsComponent.cs b/Content.Server/White/Other/DeathGasps/DeathGaspsComponent.cs new file mode 100644 index 0000000000..d49a4a9f20 --- /dev/null +++ b/Content.Server/White/Other/DeathGasps/DeathGaspsComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server.White.Other.DeathGasps; + +[RegisterComponent] +public sealed partial class DeathGaspsComponent : Component +{ +} diff --git a/Content.Server/White/Other/OnDeath.cs b/Content.Server/White/Other/DeathGasps/OnDeath.cs similarity index 86% rename from Content.Server/White/Other/OnDeath.cs rename to Content.Server/White/Other/DeathGasps/OnDeath.cs index 9420f7cfcf..90d8b5f7b6 100644 --- a/Content.Server/White/Other/OnDeath.cs +++ b/Content.Server/White/Other/DeathGasps/OnDeath.cs @@ -6,7 +6,7 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Player; using Robust.Shared.Random; -namespace Content.Server.White.Other; +namespace Content.Server.White.Other.DeathGasps; public sealed class OnDeath : EntitySystem { @@ -16,8 +16,8 @@ public sealed class OnDeath : EntitySystem public override void Initialize() { - SubscribeLocalEvent(HandleDeathEvent); - SubscribeLocalEvent(OnDetach); + SubscribeLocalEvent(HandleDeathEvent); + SubscribeLocalEvent(OnDetach); } private readonly Dictionary _playingStreams = new(); @@ -30,7 +30,7 @@ public sealed class OnDeath : EntitySystem "death-gasp-normal" }; - private void HandleDeathEvent(EntityUid uid, HumanoidAppearanceComponent component, MobStateChangedEvent args) + private void HandleDeathEvent(EntityUid uid, DeathGaspsComponent component, MobStateChangedEvent args) { //^.^ switch (args.NewMobState) @@ -96,7 +96,7 @@ public sealed class OnDeath : EntitySystem _audio.PlayEntity(DeathSounds, uid, uid, AudioParams.Default); } - private void OnDetach(EntityUid uid, HumanoidAppearanceComponent component, PlayerDetachedEvent args) + private void OnDetach(EntityUid uid, DeathGaspsComponent component, PlayerDetachedEvent args) { StopPlayingStream(args.Entity); } diff --git a/Content.Server/White/Other/ExamineSystem/ExaminableClothesComponent.cs b/Content.Server/White/Other/ExamineSystem/ExaminableClothesComponent.cs new file mode 100644 index 0000000000..d4450e8163 --- /dev/null +++ b/Content.Server/White/Other/ExamineSystem/ExaminableClothesComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server.White.Other.ExamineSystem; + +[RegisterComponent] +public sealed partial class ExaminableClothesComponent : Component +{ +} diff --git a/Content.Server/White/Other/ExamineSystem/ExamineSystem.cs b/Content.Server/White/Other/ExamineSystem/ExamineSystem.cs new file mode 100644 index 0000000000..6d67b8f363 --- /dev/null +++ b/Content.Server/White/Other/ExamineSystem/ExamineSystem.cs @@ -0,0 +1,106 @@ +using Content.Shared.Access.Components; +using Content.Shared.Examine; +using Robust.Shared.Enums; +using Content.Shared.Humanoid; +using Content.Shared.Inventory; +using Content.Shared.PDA; + +namespace Content.Server.White.Other.ExamineSystem +{ + public sealed class ExamineSystem : EntitySystem + { + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly EntityManager _entityManager = default!; + + public override void Initialize() + { + SubscribeLocalEvent(HandleExamine); + } + + private void HandleExamine(EntityUid uid, ExaminableClothesComponent comp, ExaminedEvent args) + { + var slotLabels = new Dictionary + { + { "head", "head-" }, + { "eyes", "eyes-" }, + { "mask", "mask-" }, + { "neck", "neck-" }, + { "ears", "ears-" }, + { "jumpsuit", "jumpsuit-" }, + { "outerClothing", "outer-" }, + { "back", "back-" }, + { "gloves", "gloves-" }, + { "belt", "belt-" }, + { "shoes", "shoes-" } + }; + + foreach (var slotEntry in slotLabels) + { + var slotName = slotEntry.Key; + var slotLabel = slotEntry.Value; + + if (_entityManager.TryGetComponent(uid, out var appearanceComponent)) + { + switch (appearanceComponent.Gender) + { + case Gender.Male: + slotLabel += "he"; + break; + case Gender.Neuter: + slotLabel += "it"; + break; + case Gender.Epicene: + slotLabel += "they"; + break; + case Gender.Female: + slotLabel += "she"; + break; + } + } + + if (!_inventorySystem.TryGetSlotEntity(uid, slotName, out var slotEntity)) + continue; + + if (_entityManager.TryGetComponent(slotEntity, out var metaData)) + args.PushMarkup($"[color=silver]{Loc.GetString(slotLabel)} [/color][font size=11][bold][color=lightgray]{metaData.EntityName}[/color][/bold][/font]."); + } + + var id = GetInfo(uid); + if (id != null) + args.PushMarkup(id); + } + + private string? GetInfo(EntityUid uid) + { + if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid)) + { + // PDA + if (EntityManager.TryGetComponent(idUid, out PdaComponent? pda) && + TryComp(pda.ContainedId, out IdCardComponent? idCard)) + { + return GetNameAndJob(idCard); + } + // ID Card + if (EntityManager.TryGetComponent(idUid, out IdCardComponent? id)) + { + return GetNameAndJob(id); + } + } + return null; + } + + private string GetNameAndJob(IdCardComponent id) + { + var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + + var val = string.IsNullOrWhiteSpace(id.FullName) + ? Loc.GetString("access-id-card-component-owner-name-job-title-text", + ("jobSuffix", jobSuffix)) + : Loc.GetString("access-id-card-component-owner-full-name-job-title-text", + ("fullName", id.FullName), + ("jobSuffix", jobSuffix)); + + return val; + } + } +} diff --git a/Content.Shared/White/CharacterExamine/CharacterInformationComponent.cs b/Content.Shared/White/CharacterExamine/CharacterInformationComponent.cs new file mode 100644 index 0000000000..e547c3a67f --- /dev/null +++ b/Content.Shared/White/CharacterExamine/CharacterInformationComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.White.CharacterExamine; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CharacterInformationComponent : Component +{ + +} diff --git a/Content.Shared/White/CharacterExamine/DetailExaminableComponent.cs b/Content.Shared/White/CharacterExamine/DetailExaminableComponent.cs new file mode 100644 index 0000000000..9e641ab374 --- /dev/null +++ b/Content.Shared/White/CharacterExamine/DetailExaminableComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.White.CharacterExamine; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class DetailExaminableComponent : Component +{ + [DataField("content", required: true)] + [ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public string Content = ""; +} diff --git a/Resources/Locale/ru-RU/white/something.ftl b/Resources/Locale/ru-RU/white/something.ftl index 8d750fd21f..19ef6419c4 100644 --- a/Resources/Locale/ru-RU/white/something.ftl +++ b/Resources/Locale/ru-RU/white/something.ftl @@ -1,6 +1,14 @@ +# Reflect + reflect-shot = Отразил! + +# Carry + carry-verb = Тащить на руках + chat-manager-entity-say-god-wrap-message = [BubbleHeader][bold]{$entityName}[/bold][/BubbleHeader] командует, "[BubbleContent][color={ $color }][bold]{$message}[/bold][/color][/BubbleContent]" + +# Stats eorstats-bloodlost-total = { $bloodLost } единиц крови было потеряно в этом раунде! eorstats-cuffedtime-hasusername = { $username } под именем { $name } провел(а) { $timeCuffedMinutes } минут в наручниках в этом раунде! Что он натворил? eorstats-cuffedtime-hasnousername = { $name } провел(а) { $timeCuffedMinutes } минут в наручниках в этом раунде! Что он натворил? @@ -14,3 +22,71 @@ eorstats-slippedcount-totalslips = Экипаж поскользнулся { $ti eorstats-slippedcount-none = Экипаж не поскользнулся ни разу за эту смену! eorstats-slippedcount-topslipper-hasusername = { $username } под именем { $name } был неуклюжим в эту смену и поскользнулся { $slipcount } раз! eorstats-slippedcount-topslipper-hasnousername = { $name } был неуклюжим в эту смену и поскользнулся { $slipcount } раз! + + +# Cringers examine system + +# Он + +head-he = На его голове +eyes-he = На его глазах надеты +mask-he = На его лице +neck-he = Вокруг его шеи +ears-he = На его ушах +jumpsuit-he = На нем +outer-he = А так же +back-he = На его спине +gloves-he = На его руках +belt-he = На нем весит +shoes-he = На ногах у него + +# Она + +head-she = На ее голове +eyes-she = На ее глазах надеты +mask-she = На ее лице +neck-she = Вокруг ее шеи +ears-she = На ее ушах +jumpsuit-she = На ней +outer-she = А так же +back-she = На ее спине +gloves-she = На ее руках +belt-she = На ней весит +shoes-she = На ногах у нее + +# Оно + +head-it = On its head, it wears +eyes-it = In its eyes, it has +mask-it = It is wearing a mask on its face +neck-it = Around its neck, it has +ears-it = It has something on its ears +jumpsuit-it = It is wearing +outer-it = Also +back-it = On its back, it carries +gloves-it = On its hands +belt-it = It is wearing +shoes-it = It is wearing + +# Они + +head-they = На их головах +eyes-they = На их глазах +mask-they = На их лицах +neck-they = Вокруг их шеи +ears-they = На их ушах +jumpsuit-they = Они носят +outer-they = А так же +back-they = На их спинах +gloves-they = На их руках +belt-they = На них весит +shoes-they = На ногах у них + +# Character information + +character-information-verb-message = Информация о персонаже +character-information-ui-title = Информация о персонаже +character-information-ui-flavor-text-placeholder = + Нет заданного флавора. +character-information-ui-flavor-text-disabled = + На этом сервере отключен флавор. diff --git a/Resources/Maps/White/WonderBox.yml b/Resources/Maps/White/WonderBox.yml index 54cb79b98a..687ec11027 100644 --- a/Resources/Maps/White/WonderBox.yml +++ b/Resources/Maps/White/WonderBox.yml @@ -10491,6 +10491,90 @@ entities: - 22483 - 22412 type: DeviceList + - uid: 23150 + components: + - rot: -1.5707963267948966 rad + pos: 24.5,-26.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23149 + type: DeviceNetwork + - devices: + - 23149 + type: DeviceList + - uid: 23151 + components: + - rot: -1.5707963267948966 rad + pos: 24.5,-30.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23148 + type: DeviceNetwork + - devices: + - 23148 + type: DeviceList + - uid: 23152 + components: + - rot: -1.5707963267948966 rad + pos: 24.5,-34.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23147 + type: DeviceNetwork + - devices: + - 23147 + type: DeviceList + - uid: 23153 + components: + - rot: -1.5707963267948966 rad + pos: 24.5,-38.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23143 + type: DeviceNetwork + - devices: + - 23143 + type: DeviceList + - uid: 23154 + components: + - rot: 3.141592653589793 rad + pos: 22.5,-43.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23146 + type: DeviceNetwork + - devices: + - 23146 + type: DeviceList + - uid: 23155 + components: + - rot: 3.141592653589793 rad + pos: 18.5,-43.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23145 + type: DeviceNetwork + - devices: + - 23145 + type: DeviceList + - uid: 23156 + components: + - rot: 3.141592653589793 rad + pos: 14.5,-43.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23144 + type: DeviceNetwork + - devices: + - 23144 + type: DeviceList - proto: AirAlarmElectronics entities: - uid: 16705 @@ -12950,6 +13034,64 @@ entities: - pos: 45.5,-38.5 parent: 2 type: Transform +- proto: AirSensor + entities: + - uid: 23143 + components: + - pos: 27.5,-38.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23153 + type: DeviceNetwork + - uid: 23144 + components: + - pos: 14.5,-46.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23156 + type: DeviceNetwork + - uid: 23145 + components: + - pos: 18.5,-46.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23155 + type: DeviceNetwork + - uid: 23146 + components: + - pos: 22.5,-46.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23154 + type: DeviceNetwork + - uid: 23147 + components: + - pos: 27.5,-34.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23152 + type: DeviceNetwork + - uid: 23148 + components: + - pos: 27.5,-30.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23151 + type: DeviceNetwork + - uid: 23149 + components: + - pos: 27.5,-26.5 + parent: 2 + type: Transform + - ShutdownSubscribers: + - 23150 + type: DeviceNetwork - proto: AltarSpawner entities: - uid: 11765 @@ -13193,6 +13335,9 @@ entities: - pos: -7.5,6.5 parent: 2 type: Transform + - autoRechargeRate: 50000 + autoRecharge: True + type: BatterySelfRecharger - uid: 40 components: - rot: 1.5707963267948966 rad @@ -13204,6 +13349,9 @@ entities: - pos: 10.5,6.5 parent: 2 type: Transform + - autoRechargeRate: 50000 + autoRecharge: True + type: BatterySelfRecharger - uid: 42 components: - pos: 11.5,-1.5 @@ -14463,6 +14611,15 @@ entities: type: MeleeWeapon - nextSound: 6080.043536 type: EmitSoundOnCollide + - uid: 23140 + components: + - pos: 41.671833,-6.1851153 + parent: 2 + type: Transform + - nextAttack: 968.0781566 + type: MeleeWeapon + - nextSound: 968.2781566 + type: EmitSoundOnCollide - proto: Bed entities: - uid: 7564 @@ -15620,6 +15777,14 @@ entities: type: EmitSoundOnCollide - proto: BlastDoor entities: + - uid: 8042 + components: + - pos: 28.5,-24.5 + parent: 2 + type: Transform + - links: + - 21934 + type: DeviceLinkSink - uid: 11950 components: - rot: 3.141592653589793 rad @@ -15645,14 +15810,6 @@ entities: - links: - 21500 type: DeviceLinkSink - - uid: 17109 - components: - - pos: 28.5,-24.5 - parent: 2 - type: Transform - - links: - - 8166 - type: DeviceLinkSink - uid: 17507 components: - rot: 3.141592653589793 rad @@ -16458,12 +16615,12 @@ entities: type: Transform - proto: BoozeDispenserMachineCircuitboard entities: - - uid: 16700 + - uid: 23135 components: - - pos: -28.463802,22.710964 + - pos: -28.427408,24.568483 parent: 2 type: Transform - - nextSound: 5696.7902582 + - nextSound: 739.0311004 type: EmitSoundOnCollide - proto: BoxBeaker entities: @@ -74510,6 +74667,15 @@ entities: - pos: 57.5,0.5 parent: 2 type: Transform +- proto: ChemDispenserMachineCircuitboard + entities: + - uid: 23134 + components: + - pos: -27.227444,26.512293 + parent: 2 + type: Transform + - nextSound: 644.479248 + type: EmitSoundOnCollide - proto: ChemistryHotplate entities: - uid: 22008 @@ -77891,19 +78057,19 @@ entities: type: Transform - proto: ComputerAnalysisConsole entities: - - uid: 10223 + - uid: 3165 components: - rot: -1.5707963267948966 rad pos: 85.5,-17.5 parent: 2 type: Transform - - uid: 10224 + - uid: 7819 components: - rot: -1.5707963267948966 rad pos: 85.5,-19.5 parent: 2 type: Transform - - uid: 20188 + - uid: 8117 components: - rot: 3.141592653589793 rad pos: 67.5,-42.5 @@ -78145,18 +78311,18 @@ entities: type: Transform - proto: ComputerResearchAndDevelopment entities: - - uid: 10222 - components: - - rot: -1.5707963267948966 rad - pos: 85.5,-21.5 - parent: 2 - type: Transform - - uid: 10489 + - uid: 8118 components: - rot: -1.5707963267948966 rad pos: 85.5,-15.5 parent: 2 type: Transform + - uid: 8119 + components: + - rot: -1.5707963267948966 rad + pos: 85.5,-21.5 + parent: 2 + type: Transform - uid: 10732 components: - pos: 67.5,-38.5 @@ -78308,6 +78474,13 @@ entities: - pos: 1.5,59.5 parent: 2 type: Transform +- proto: ComputerTechnologyDiskTerminal + entities: + - uid: 23142 + components: + - pos: 60.5,-23.5 + parent: 2 + type: Transform - proto: ComputerTelevisionCircuitboard entities: - uid: 15671 @@ -90443,6 +90616,14 @@ entities: pos: 11.5,-27.5 parent: 2 type: Transform + - uid: 7796 + components: + - rot: 1.5707963267948966 rad + pos: 41.5,-22.5 + parent: 2 + type: Transform + - nextSound: 388.9877584 + type: EmitSoundOnCollide - uid: 19941 components: - rot: 3.141592653589793 rad @@ -90510,31 +90691,25 @@ entities: pos: 11.5,-23.5 parent: 2 type: Transform - - uid: 7796 - components: - - rot: 1.5707963267948966 rad - pos: 41.5,-22.5 - parent: 2 - type: Transform - - uid: 10531 + - uid: 8120 components: - rot: 3.141592653589793 rad - pos: 21.5,-37.5 + pos: 23.5,-33.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - - nextSound: 1751.2006293 + - nextSound: 171.4655737 type: EmitSoundOnCollide - - uid: 10552 + - uid: 10222 components: - rot: 3.141592653589793 rad - pos: 21.5,-33.5 + pos: 23.5,-37.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - - nextSound: 1746.7217988 + - nextSound: 170.6890107 type: EmitSoundOnCollide - uid: 19940 components: @@ -90556,15 +90731,15 @@ entities: type: EmitSoundOnCollide - proto: GasMixerFlipped entities: - - uid: 10490 + - uid: 10535 components: - rot: 1.5707963267948966 rad - pos: 21.5,-29.5 + pos: 23.5,-29.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - - nextSound: 1836.5091391 + - nextSound: 175.3753758 type: EmitSoundOnCollide - proto: GasOutletInjector entities: @@ -90644,6 +90819,27 @@ entities: pos: -20.5,-55.5 parent: 2 type: Transform +- proto: GasPassiveGate + entities: + - uid: 8047 + components: + - pos: 21.5,-42.5 + parent: 2 + type: Transform + - color: '#03FCD3FF' + type: AtmosPipeColor + - nextSound: 184.980044 + type: EmitSoundOnCollide + - uid: 10516 + components: + - rot: -1.5707963267948966 rad + pos: 23.5,-24.5 + parent: 2 + type: Transform + - color: '#03FCD3FF' + type: AtmosPipeColor + - nextSound: 109.9506407 + type: EmitSoundOnCollide - proto: GasPassiveVent entities: - uid: 7806 @@ -90658,6 +90854,16 @@ entities: pos: 66.5,20.5 parent: 2 type: Transform + - uid: 8046 + components: + - rot: 3.141592653589793 rad + pos: 23.5,-46.5 + parent: 2 + type: Transform + - color: '#03FCD3FF' + type: AtmosPipeColor + - nextSound: 363.0824922 + type: EmitSoundOnCollide - uid: 18420 components: - rot: 3.141592653589793 rad @@ -90730,14 +90936,6 @@ entities: type: Transform - nextSound: 2776.426086 type: EmitSoundOnCollide - - uid: 21934 - components: - - rot: 3.141592653589793 rad - pos: 23.5,-46.5 - parent: 2 - type: Transform - - nextSound: 71.2847824 - type: EmitSoundOnCollide - proto: GasPipeBend entities: - uid: 7808 @@ -90848,16 +91046,6 @@ entities: type: AtmosPipeColor - enabled: True type: AmbientSound - - uid: 7819 - components: - - rot: -1.5707963267948966 rad - pos: 21.5,-38.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - uid: 7820 components: - rot: 1.5707963267948966 rad @@ -92266,6 +92454,18 @@ entities: type: AtmosPipeColor - nextSound: 1039.9806048 type: EmitSoundOnCollide + - uid: 10223 + components: + - rot: -1.5707963267948966 rad + pos: 23.5,-38.5 + parent: 2 + type: Transform + - color: '#A1A100FF' + type: AtmosPipeColor + - enabled: True + type: AmbientSound + - nextSound: 164.7155397 + type: EmitSoundOnCollide - uid: 10253 components: - rot: -1.5707963267948966 rad @@ -92765,15 +92965,6 @@ entities: type: AtmosPipeColor - enabled: True type: AmbientSound - - uid: 8042 - components: - - pos: 21.5,-42.5 - parent: 2 - type: Transform - - color: '#03FCD3FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - uid: 8043 components: - pos: 21.5,-43.5 @@ -92801,33 +92992,18 @@ entities: type: AtmosPipeColor - enabled: True type: AmbientSound - - uid: 8046 - components: - - pos: 23.5,-45.5 - parent: 2 - type: Transform - - color: '#03FCD3FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - - uid: 8047 - components: - - pos: 23.5,-44.5 - parent: 2 - type: Transform - - color: '#03FCD3FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - uid: 8048 components: - - pos: 23.5,-43.5 + - rot: 3.141592653589793 rad + pos: 23.5,-45.5 parent: 2 type: Transform - color: '#03FCD3FF' type: AtmosPipeColor - enabled: True type: AmbientSound + - nextSound: 359.0825597 + type: EmitSoundOnCollide - uid: 8049 components: - rot: 1.5707963267948966 rad @@ -93258,14 +93434,16 @@ entities: type: AmbientSound - uid: 8094 components: - - rot: -1.5707963267948966 rad - pos: 23.5,-24.5 + - rot: 3.141592653589793 rad + pos: 23.5,-44.5 parent: 2 type: Transform - color: '#03FCD3FF' type: AtmosPipeColor - enabled: True type: AmbientSound + - nextSound: 358.7476422 + type: EmitSoundOnCollide - uid: 8095 components: - rot: 3.141592653589793 rad @@ -93456,60 +93634,30 @@ entities: type: AtmosPipeColor - enabled: True type: AmbientSound - - uid: 8117 - components: - - pos: 21.5,-36.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - - uid: 8118 - components: - - pos: 21.5,-35.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - - uid: 8119 - components: - - pos: 21.5,-34.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - - uid: 8120 - components: - - pos: 21.5,-32.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - uid: 8121 components: - - pos: 21.5,-31.5 + - rot: 1.5707963267948966 rad + pos: 21.5,-38.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - enabled: True type: AmbientSound + - nextSound: 162.8572141 + type: EmitSoundOnCollide - uid: 8122 components: - - pos: 21.5,-30.5 + - rot: 3.141592653589793 rad + pos: 23.5,-32.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - enabled: True type: AmbientSound + - nextSound: 155.8803069 + type: EmitSoundOnCollide - uid: 8123 components: - pos: 19.5,-41.5 @@ -93794,6 +93942,18 @@ entities: type: AtmosPipeColor - enabled: True type: AmbientSound + - uid: 8166 + components: + - rot: 3.141592653589793 rad + pos: 23.5,-43.5 + parent: 2 + type: Transform + - color: '#03FCD3FF' + type: AtmosPipeColor + - enabled: True + type: AmbientSound + - nextSound: 358.4164894 + type: EmitSoundOnCollide - uid: 8169 components: - rot: -1.5707963267948966 rad @@ -110056,6 +110216,18 @@ entities: type: Transform - color: '#E32636FF' type: AtmosPipeColor + - uid: 10224 + components: + - rot: 1.5707963267948966 rad + pos: 22.5,-38.5 + parent: 2 + type: Transform + - color: '#A1A100FF' + type: AtmosPipeColor + - enabled: True + type: AmbientSound + - nextSound: 163.1442256 + type: EmitSoundOnCollide - uid: 10239 components: - rot: 3.141592653589793 rad @@ -110113,17 +110285,41 @@ entities: type: AmbientSound - nextSound: 3839.1869217 type: EmitSoundOnCollide - - uid: 10526 + - uid: 10489 components: - - rot: -1.5707963267948966 rad - pos: 22.5,-29.5 + - rot: 3.141592653589793 rad + pos: 23.5,-34.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - enabled: True type: AmbientSound - - nextSound: 5428.8295768 + - nextSound: 158.1262552 + type: EmitSoundOnCollide + - uid: 10490 + components: + - rot: 3.141592653589793 rad + pos: 23.5,-30.5 + parent: 2 + type: Transform + - color: '#A1A100FF' + type: AtmosPipeColor + - enabled: True + type: AmbientSound + - nextSound: 156.833405 + type: EmitSoundOnCollide + - uid: 10526 + components: + - rot: 3.141592653589793 rad + pos: 23.5,-31.5 + parent: 2 + type: Transform + - color: '#A1A100FF' + type: AtmosPipeColor + - enabled: True + type: AmbientSound + - nextSound: 156.2777833 type: EmitSoundOnCollide - uid: 10530 components: @@ -110137,29 +110333,29 @@ entities: type: AmbientSound - nextSound: 1787.2437557 type: EmitSoundOnCollide + - uid: 10531 + components: + - rot: -1.5707963267948966 rad + pos: 22.5,-29.5 + parent: 2 + type: Transform + - color: '#A1A100FF' + type: AtmosPipeColor + - enabled: True + type: AmbientSound + - nextSound: 154.0230302 + type: EmitSoundOnCollide - uid: 10533 components: - - rot: -1.5707963267948966 rad - pos: 22.5,-33.5 + - rot: 3.141592653589793 rad + pos: 23.5,-36.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - enabled: True type: AmbientSound - - nextSound: 5428.3721426 - type: EmitSoundOnCollide - - uid: 10535 - components: - - rot: -1.5707963267948966 rad - pos: 22.5,-37.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - - nextSound: 5427.9088719 + - nextSound: 158.7320558 type: EmitSoundOnCollide - uid: 10554 components: @@ -110197,39 +110393,27 @@ entities: type: EmitSoundOnCollide - uid: 11547 components: - - rot: 1.5707963267948966 rad - pos: 23.5,-37.5 + - rot: -1.5707963267948966 rad + pos: 21.5,-29.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - enabled: True type: AmbientSound - - nextSound: 2048.1755402 + - nextSound: 153.6985233 type: EmitSoundOnCollide - uid: 11569 components: - - rot: 1.5707963267948966 rad - pos: 23.5,-29.5 + - rot: 3.141592653589793 rad + pos: 23.5,-35.5 parent: 2 type: Transform - color: '#A1A100FF' type: AtmosPipeColor - enabled: True type: AmbientSound - - nextSound: 2021.9911872 - type: EmitSoundOnCollide - - uid: 11644 - components: - - rot: 1.5707963267948966 rad - pos: 23.5,-33.5 - parent: 2 - type: Transform - - color: '#A1A100FF' - type: AtmosPipeColor - - enabled: True - type: AmbientSound - - nextSound: 2019.2270531 + - nextSound: 158.4656921 type: EmitSoundOnCollide - uid: 20037 components: @@ -110605,7 +110789,7 @@ entities: type: AtmosPipeColor - enabled: True type: AmbientSound - - nextSound: 532.004612 + - nextSound: 532.0046119 type: EmitSoundOnCollide - proto: GasPipeTJunction entities: @@ -113202,14 +113386,6 @@ entities: type: AtmosPipeColor - nextSound: 3462.1446685 type: EmitSoundOnCollide - - uid: 10516 - components: - - rot: 3.141592653589793 rad - pos: 23.5,-42.5 - parent: 2 - type: Transform - - color: '#03FCD3FF' - type: AtmosPipeColor - uid: 10517 components: - rot: 3.141592653589793 rad @@ -113321,7 +113497,7 @@ entities: pos: 20.5,-27.5 parent: 2 type: Transform - - color: '#007700FF' + - color: '#A1A100FF' type: AtmosPipeColor - uid: 10541 components: @@ -113428,6 +113604,16 @@ entities: type: Transform - nextSound: 1676.3606957 type: EmitSoundOnCollide + - uid: 17109 + components: + - rot: 3.141592653589793 rad + pos: 23.5,-42.5 + parent: 2 + type: Transform + - color: '#03FCD3FF' + type: AtmosPipeColor + - nextSound: 356.6096634 + type: EmitSoundOnCollide - proto: GasRecycler entities: - uid: 23083 @@ -124503,6 +124689,29 @@ entities: - pos: 29.5,-13.5 parent: 2 type: Transform +- proto: HydroponicsTrayMachineCircuitboard + entities: + - uid: 16089 + components: + - pos: -28.541992,22.681757 + parent: 2 + type: Transform + - nextSound: 758.2692071 + type: EmitSoundOnCollide + - uid: 23136 + components: + - pos: -28.541992,22.358616 + parent: 2 + type: Transform + - nextSound: 759.2768303 + type: EmitSoundOnCollide + - uid: 23137 + components: + - pos: -28.437824,22.514975 + parent: 2 + type: Transform + - nextSound: 760.5097482 + type: EmitSoundOnCollide - proto: IngotGold entities: - uid: 13454 @@ -126201,22 +126410,20 @@ entities: type: Gun - proto: MachineArtifactAnalyzer entities: - - uid: 3165 + - uid: 11644 components: - - rot: -1.5707963267948966 rad + - rot: 3.141592653589793 rad pos: 70.5,-41.5 parent: 2 type: Transform + - uid: 18683 + components: + - pos: 88.5,-16.5 + parent: 2 + type: Transform - uid: 18684 components: - - rot: -1.5707963267948966 rad - pos: 88.5,-16.5 - parent: 2 - type: Transform - - uid: 20038 - components: - - rot: -1.5707963267948966 rad - pos: 88.5,-20.5 + - pos: 88.5,-20.5 parent: 2 type: Transform - proto: MachineFrame @@ -126243,9 +126450,9 @@ entities: type: Transform - proto: MachineTraversalDistorter entities: - - uid: 10181 + - uid: 19536 components: - - rot: -1.5707963267948966 rad + - rot: 3.141592653589793 rad pos: 70.5,-39.5 parent: 2 type: Transform @@ -127149,6 +127356,35 @@ entities: type: Transform - nextSound: 5280.2602981 type: EmitSoundOnCollide +- proto: NetworkConfigurator + entities: + - uid: 20133 + components: + - pos: 82.07351,-17.337616 + parent: 2 + type: Transform + - lastUseAttempt: 91.3492187 + type: NetworkConfigurator + - nextSound: 91.5492187 + type: EmitSoundOnCollide + - uid: 23132 + components: + - pos: 65.33538,-38.339333 + parent: 2 + type: Transform + - lastUseAttempt: 299.2549183 + type: NetworkConfigurator + - nextSound: 299.4549182 + type: EmitSoundOnCollide + - uid: 23133 + components: + - pos: 58.363525,-21.325645 + parent: 2 + type: Transform + - lastUseAttempt: 313.5709298 + type: NetworkConfigurator + - nextSound: 313.7709298 + type: EmitSoundOnCollide - proto: NitrogenCanister entities: - uid: 15187 @@ -127930,6 +128166,15 @@ entities: type: Paper - nextSound: 461.366322 type: EmitSoundOnCollide + - uid: 23124 + components: + - pos: 54.065674,-17.572702 + parent: 2 + type: Transform + - content: Кнопка ставней под столом + type: Paper + - nextSound: 578.0901601 + type: EmitSoundOnCollide - proto: PaperBin10 entities: - uid: 18616 @@ -128486,6 +128731,29 @@ entities: type: Transform - nextSound: 1641.1929596 type: EmitSoundOnCollide +- proto: PillCanister + entities: + - uid: 23138 + components: + - pos: 53.726166,-20.060066 + parent: 2 + type: Transform + - nextSound: 945.2292518 + type: EmitSoundOnCollide + - uid: 23139 + components: + - pos: 41.36157,-6.3846793 + parent: 2 + type: Transform + - nextSound: 955.2353414 + type: EmitSoundOnCollide + - uid: 23141 + components: + - pos: 56.780357,-0.4558823 + parent: 2 + type: Transform + - nextSound: 986.1524252 + type: EmitSoundOnCollide - proto: PinpointerNuclear entities: - uid: 16208 @@ -133681,31 +133949,11 @@ entities: - pos: 11.5,-21.5 parent: 2 type: Transform - - uid: 16085 - components: - - pos: 12.5,-21.5 - parent: 2 - type: Transform - uid: 16086 components: - pos: 15.5,-20.5 parent: 2 type: Transform - - uid: 16087 - components: - - pos: 16.5,-20.5 - parent: 2 - type: Transform - - uid: 16088 - components: - - pos: 17.5,-20.5 - parent: 2 - type: Transform - - uid: 16089 - components: - - pos: 18.5,-20.5 - parent: 2 - type: Transform - uid: 16096 components: - pos: 24.5,-18.5 @@ -134546,21 +134794,21 @@ entities: type: Transform - proto: RandomArtifactSpawner entities: - - uid: 3173 + - uid: 16088 components: - pos: 70.5,-41.5 parent: 2 type: Transform - - uid: 18683 - components: - - pos: 88.5,-16.5 - parent: 2 - type: Transform - - uid: 19536 + - uid: 23130 components: - pos: 88.5,-20.5 parent: 2 type: Transform + - uid: 23131 + components: + - pos: 88.5,-16.5 + parent: 2 + type: Transform - proto: RandomPosterAny entities: - uid: 19491 @@ -140715,6 +140963,22 @@ entities: type: DeviceLinkSink - proto: ShuttersNormalOpen entities: + - uid: 10181 + components: + - pos: 55.5,1.5 + parent: 2 + type: Transform + - links: + - 20038 + type: DeviceLinkSink + - uid: 10552 + components: + - pos: 54.5,1.5 + parent: 2 + type: Transform + - links: + - 20038 + type: DeviceLinkSink - uid: 11224 components: - rot: -1.5707963267948966 rad @@ -141225,7 +141489,7 @@ entities: parent: 2 type: Transform - links: - - 20133 + - 20188 type: DeviceLinkSink - uid: 20137 components: @@ -141233,7 +141497,7 @@ entities: parent: 2 type: Transform - links: - - 20133 + - 20188 type: DeviceLinkSink - uid: 21514 components: @@ -141423,6 +141687,30 @@ entities: - links: - 19261 type: DeviceLinkSink + - uid: 23126 + components: + - pos: -0.5,47.5 + parent: 2 + type: Transform + - links: + - 23129 + type: DeviceLinkSink + - uid: 23127 + components: + - pos: 0.5,47.5 + parent: 2 + type: Transform + - links: + - 23129 + type: DeviceLinkSink + - uid: 23128 + components: + - pos: 1.5,47.5 + parent: 2 + type: Transform + - links: + - 23129 + type: DeviceLinkSink - proto: ShuttersWindow entities: - uid: 17469 @@ -141558,19 +141846,6 @@ entities: - 3168 - 11580 type: DeviceLinkSource - - uid: 8166 - components: - - rot: -1.5707963267948966 rad - pos: 24.5,-26.5 - parent: 2 - type: Transform - - linkedPorts: - 17109: - - Pressed: Toggle - registeredSinks: - Pressed: - - 17109 - type: DeviceLinkSource - uid: 10184 components: - rot: -1.5707963267948966 rad @@ -141885,21 +142160,41 @@ entities: Pressed: - 19357 type: DeviceLinkSource - - uid: 20133 + - uid: 20038 components: - - rot: -1.5707963267948966 rad - pos: 65.24802,-0.4668766 + - desc: Переключает ставни окошка + name: Напольная кнопка + type: MetaData + - pos: 55.79856,0.77082825 parent: 2 type: Transform - linkedPorts: - 20136: + 10181: - Pressed: Toggle - 20137: + 10552: + - Pressed: Toggle + registeredSinks: + Pressed: + - 10181 + - 10552 + type: DeviceLinkSource + - uid: 20188 + components: + - desc: Переключает ставни окошка + name: Напольная кнопка + type: MetaData + - pos: 63.80413,-0.22184539 + parent: 2 + type: Transform + - linkedPorts: + 20137: + - Pressed: Toggle + 20136: - Pressed: Toggle registeredSinks: Pressed: - - 20136 - 20137 + - 20136 type: DeviceLinkSource - uid: 20192 components: @@ -142324,6 +142619,9 @@ entities: type: DeviceLinkSource - uid: 21511 components: + - desc: Переключает ставни в комнату + name: Кнопка ставней + type: MetaData - rot: -1.5707963267948966 rad pos: 3.2486713,57.155914 parent: 2 @@ -142346,6 +142644,9 @@ entities: type: DeviceLinkSource - uid: 21512 components: + - desc: Переключает гермозатворы в оружейную комнату + name: Кнопка гермозатворов + type: MetaData - rot: -1.5707963267948966 rad pos: 3.2486713,57.843346 parent: 2 @@ -142466,6 +142767,19 @@ entities: - 21929 - 21930 type: DeviceLinkSource + - uid: 21934 + components: + - rot: -1.5707963267948966 rad + pos: 24.5,-25.5 + parent: 2 + type: Transform + - linkedPorts: + 8042: + - Pressed: Toggle + registeredSinks: + Pressed: + - 8042 + type: DeviceLinkSource - uid: 21949 components: - pos: 53.5,-16.5 @@ -142523,8 +142837,8 @@ entities: type: DeviceLinkSource - uid: 21992 components: - - desc: Открывает защитные ставни в оружейной - name: кнопка оружейной + - desc: Переключает гермозатворы в оружейную комнату + name: Кнопка гермозатворов type: MetaData - pos: -13.497953,51.28295 parent: 2 @@ -142601,6 +142915,28 @@ entities: Pressed: - 22721 type: DeviceLinkSource + - uid: 23129 + components: + - desc: Переключает ставни, ведущие в отдел + name: Кнопка ставней + type: MetaData + - rot: 3.141592653589793 rad + pos: -1.0789707,51.100887 + parent: 2 + type: Transform + - linkedPorts: + 23126: + - Pressed: Toggle + 23127: + - Pressed: Toggle + 23128: + - Pressed: Toggle + registeredSinks: + Pressed: + - 23126 + - 23127 + - 23128 + type: DeviceLinkSource - proto: SignArmory entities: - uid: 19296 @@ -146800,6 +147136,26 @@ entities: - pos: 29.5,-34.5 parent: 2 type: Transform + - uid: 16053 + components: + - pos: 12.5,-21.5 + parent: 2 + type: Transform + - uid: 16054 + components: + - pos: 17.5,-20.5 + parent: 2 + type: Transform + - uid: 16085 + components: + - pos: 16.5,-20.5 + parent: 2 + type: Transform + - uid: 16087 + components: + - pos: 18.5,-20.5 + parent: 2 + type: Transform - uid: 18685 components: - pos: 7.5,-22.5 @@ -147585,6 +147941,13 @@ entities: type: Transform - proto: SurveillanceWirelessCameraAnchoredCircuitboard entities: + - uid: 3173 + components: + - pos: -30.427408,23.546942 + parent: 2 + type: Transform + - nextSound: 746.2756345 + type: EmitSoundOnCollide - uid: 15665 components: - pos: -19.567112,-29.183058 @@ -147599,13 +147962,6 @@ entities: type: Transform - nextSound: 5520.7355956 type: EmitSoundOnCollide - - uid: 16697 - components: - - pos: -28.495052,22.419096 - parent: 2 - type: Transform - - nextSound: 5708.5844301 - type: EmitSoundOnCollide - proto: SurveillanceWirelessCameraMonitorCircuitboard entities: - uid: 15666 @@ -170208,18 +170564,18 @@ entities: pos: -3.5,55.5 parent: 2 type: Transform -- proto: WardrobeAtmospherics +- proto: WardrobeAtmosphericsFilled entities: - - uid: 16053 - components: - - pos: 10.5,-31.5 - parent: 2 - type: Transform - - uid: 16054 + - uid: 16697 components: - pos: 11.5,-31.5 parent: 2 type: Transform + - uid: 16700 + components: + - pos: 10.5,-31.5 + parent: 2 + type: Transform - proto: WardrobeBlackFilled entities: - uid: 17575 @@ -171146,6 +171502,11 @@ entities: - pos: 6.5,1.5 parent: 2 type: Transform + - uid: 23125 + components: + - pos: -0.5,57.5 + parent: 2 + type: Transform - proto: WeaponDisabler entities: - uid: 20120 diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index bccf40c76b..2dffc838ef 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -205,7 +205,6 @@ spawned: - id: FoodMeat amount: 5 - - type: TTS - type: Speech speechSounds: Alto - type: DamageForceSay @@ -230,6 +229,10 @@ - FootstepSound - DoorBumpOpener - type: Carriable + - type: TTS + - type: DeathGasps + - type: ExaminableClothes + - type: CharacterInformation - type: entity save: false diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index 16929ce68c..369c0dc235 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -26,12 +26,6 @@ collection: Snores Honk: collection: BikeHorn - Sigh: - collection: MaleSigh - Crying: - collection: MaleCry - Whistle: - collection: Whistles - type: emoteSounds id: FemaleHuman @@ -60,12 +54,6 @@ collection: Snores Honk: collection: CluwneHorn - Sigh: - collection: FemaleSigh - Crying: - collection: FemaleCry - Whistle: - collection: Whistles - type: emoteSounds id: MaleFelinid @@ -148,10 +136,6 @@ path: /Audio/Animals/lizard_happy.ogg Honk: collection: BikeHorn - Whistle: - collection: Whistles - Crying: - collection: MaleCry - type: emoteSounds id: MaleSlime @@ -286,10 +270,6 @@ collection: MaleSigh Honk: collection: BikeHorn - Crying: - collection: MaleCry - Whistle: - collection: Whistles params: variation: 0.125 pitch: 0.75 @@ -353,8 +333,6 @@ collection: Snaps params: volume: -6 - Salute: - collection: Salutes - type: emoteSounds id: DionaBodyEmotes