diff --git a/Content.Client/White/CriminalRecords/UI/CriminalRecordsBoundUserInterface.cs b/Content.Client/White/CriminalRecords/UI/CriminalRecordsBoundUserInterface.cs index f780c59c9d..9a8bddf68e 100644 --- a/Content.Client/White/CriminalRecords/UI/CriminalRecordsBoundUserInterface.cs +++ b/Content.Client/White/CriminalRecords/UI/CriminalRecordsBoundUserInterface.cs @@ -26,6 +26,10 @@ public sealed class CriminalRecordsBoundUserInterface : BoundUserInterface { SendMessage(new ItemSlotButtonPressedEvent(CriminalRecordsConsoleComponent.IdSlotId)); }; + _window.NonLogOutButton.Controller.OnPressed += _ => + { + SendMessage(new ItemSlotButtonPressedEvent(CriminalRecordsConsoleComponent.IdSlotId)); + }; _window.LogInButton.Controller.OnPressed += _ => { SendMessage(new ItemSlotButtonPressedEvent(CriminalRecordsConsoleComponent.IdSlotId)); diff --git a/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml b/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml index e1ee972723..2459da27cd 100644 --- a/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml +++ b/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml @@ -16,10 +16,40 @@ HorizontalAlignment="Center" Icon="/Textures/Interface/VerbIcons/close.svg.192dpi.png" Label="{Loc 'criminal-login-in'}" + ToolTip="{Loc 'criminal-login-in-desc'}" Margin="10 0 10 0"> + + + + + + + + + + @@ -35,6 +65,7 @@ HorizontalAlignment="Right" Icon="/Textures/Interface/VerbIcons/close.svg.192dpi.png" Label="{Loc 'criminal-login-out'}" + ToolTip="{Loc 'criminal-login-out-desc'}" Margin="10 0 10 0"> diff --git a/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml.cs b/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml.cs index 654e3330ac..bf575f6c4c 100644 --- a/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml.cs +++ b/Content.Client/White/CriminalRecords/UI/CriminalRecordsWindow.xaml.cs @@ -1,6 +1,7 @@ using System.Linq; using Content.Client.Humanoid; using Content.Client.Inventory; +using Content.Client.Resources; using Content.Client.White.CriminalRecords.UI.Controls; using Content.Shared.Access.Systems; using Content.Shared.CrewManifest; @@ -13,6 +14,7 @@ using Content.Shared.StationRecords; using Content.Shared.White.CriminalRecords; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; +using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -57,11 +59,29 @@ public sealed partial class CriminalRecordsWindow : DefaultWindow messageHint.AddMarkup(Loc.GetString("criminal-login-warn")); LoginHint.SetMessage(messageHint); MainContent.Visible = false; + NonServerContent.Visible = false; NonAccessContent.Visible = true; return; } + if (!state.HasServer) + { + var shader = _prototypeManager.Index("CameraStatic").Instance().Duplicate(); + NoiseBackground.Texture = _resourceCache.GetTexture("/Textures/Interface/Nano/square_black.png"); + NoiseBackground.ShaderOverride = shader; + + NonUserLabel.SetMessage(Loc.GetString("criminal-login-info", + ("user", (state.ContainedId.FullName ?? string.Empty) + ", " + + (state.ContainedId.JobTitle ?? string.Empty) ))); + + MainContent.Visible = false; + NonServerContent.Visible = true; + NonAccessContent.Visible = false; + return; + } + MainContent.Visible = true; + NonServerContent.Visible = false; NonAccessContent.Visible = false; // Init header panel @@ -90,6 +110,7 @@ public sealed partial class CriminalRecordsWindow : DefaultWindow foreach (var (recordKey, name) in RecordListing) { var element = CreateRecordItem(State, recordKey, name); + element.ButtonElement.ToolTip = Loc.GetString("criminal-list-focus"); element.ButtonElement.OnPressed += _ => { OnKeySelected?.Invoke(recordKey); diff --git a/Content.Server/White/CriminalRecords/CriminalRecordsConsoleSystem.cs b/Content.Server/White/CriminalRecords/CriminalRecordsConsoleSystem.cs index a6149a9469..0b76a4c676 100644 --- a/Content.Server/White/CriminalRecords/CriminalRecordsConsoleSystem.cs +++ b/Content.Server/White/CriminalRecords/CriminalRecordsConsoleSystem.cs @@ -86,7 +86,10 @@ public sealed class CriminalRecordsConsoleSystem : EntitySystem RaiseLocalEvent(hasServer); if (!hasServer.Result) + { + UpdateUserInterface(uid, component); return; + } var ev = new EventChangeReason(msg.SelectedKey, msg.Text); RaiseLocalEvent(ev); @@ -104,7 +107,10 @@ public sealed class CriminalRecordsConsoleSystem : EntitySystem RaiseLocalEvent(hasServer); if (!hasServer.Result) + { + UpdateUserInterface(uid, component); return; + } var messageId = "null"; switch (msg.SelectedStatus.CriminalType) @@ -166,7 +172,7 @@ public sealed class CriminalRecordsConsoleSystem : EntitySystem if (!TryComp(owningStation, out var stationRecordsComponent)) { - CriminalRecordsConsoleBuiState state = new(null, null, null, null, null, false); //null + CriminalRecordsConsoleBuiState state = new(null, null, null, null, null, false, false); //null SetStateForInterface(uid, state); return; } @@ -183,7 +189,7 @@ public sealed class CriminalRecordsConsoleSystem : EntitySystem if (listing.Count == 0) { - CriminalRecordsConsoleBuiState state = new(null, null, null, null, null, false); //console!.Filter + CriminalRecordsConsoleBuiState state = new(null, null, null, null, null, false, false); //console!.Filter SetStateForInterface(uid, state); return; } @@ -202,9 +208,12 @@ public sealed class CriminalRecordsConsoleSystem : EntitySystem var serverEv = new EventGetCache(); RaiseLocalEvent(serverEv); + var hasServer = new EventCheckServer(); + RaiseLocalEvent(hasServer); + var idCardInfo = console.ContainedID != null ? new IdCardNetInfo(console.ContainedID.FullName, console.ContainedID.JobTitle) : null; - CriminalRecordsConsoleBuiState newState = new(console.ActiveKey, record, listing, serverEv.Cache, idCardInfo, AccessCheck(console.ContainedID)); //console.Filter + CriminalRecordsConsoleBuiState newState = new(console.ActiveKey, record, listing, serverEv.Cache, idCardInfo, AccessCheck(console.ContainedID), hasServer.Result); //console.Filter SetStateForInterface(uid, newState); } diff --git a/Content.Shared/White/CriminalRecords/CriminalRecordsConsoleComponent.cs b/Content.Shared/White/CriminalRecords/CriminalRecordsConsoleComponent.cs index 1ad7f4a3cc..0c94fca614 100644 --- a/Content.Shared/White/CriminalRecords/CriminalRecordsConsoleComponent.cs +++ b/Content.Shared/White/CriminalRecords/CriminalRecordsConsoleComponent.cs @@ -48,10 +48,11 @@ public sealed class CriminalRecordsConsoleBuiState : BoundUserInterfaceState public Dictionary? Cache { get; } public IdCardNetInfo? ContainedId { get; } public bool IsAllowed { get; } + public bool HasServer { get; } //public GeneralStationRecordsFilter? Filter { get; } public CriminalRecordsConsoleBuiState(StationRecordKey? key, GeneralStationRecord? record, Dictionary? recordListing, Dictionary? cache - , IdCardNetInfo? containedId, bool isAllowed) //GeneralStationRecordsFilter? newFilter + , IdCardNetInfo? containedId, bool isAllowed, bool hasServer) //GeneralStationRecordsFilter? newFilter { SelectedKey = key; Record = record; @@ -59,6 +60,7 @@ public sealed class CriminalRecordsConsoleBuiState : BoundUserInterfaceState Cache = cache; ContainedId = containedId; IsAllowed = isAllowed; + HasServer = hasServer; //Filter = newFilter; } diff --git a/Resources/Locale/ru-RU/white/criminal-console.ftl b/Resources/Locale/ru-RU/white/criminal-console.ftl index c63a7f9dad..8d15c145c4 100644 --- a/Resources/Locale/ru-RU/white/criminal-console.ftl +++ b/Resources/Locale/ru-RU/white/criminal-console.ftl @@ -2,8 +2,12 @@ criminal-console-list = Список экипажа criminal-console-name = консоль криминальных записей criminal-grant-status-button-name = Статус +criminal-list-focus = Нажмите для редактирования + criminal-login-out = Log Out +criminal-login-out-desc = Выйти criminal-login-in = Log In +criminal-login-in-desc = Войти criminal-login-info = ID: {$user} criminal-login-hint = Вставьте ID карту в консоль, нажав на "{$name}" (нужно держать ID карту в руке) criminal-login-warn = WARNING: Доступ к системе осуществляется уровнем доступа "службы безопасности" @@ -36,4 +40,7 @@ criminal-fingerprint-desc = - [color={$color}]{$info}[/color] criminal-detail-info = Заметка: ent-CriminalRecordsServer = сервер криминальных записей - .desc = Содержит все преступные записи об экипажа на станции. Не дайте злоумышлиникам уничтожить его! + .desc = Содержит все преступные записи об экипаже на станции. Не дайте злоумышлиникам уничтожить его! + +ent-CriminalRecordsServerCircuitboard = схема платы сервера криминальных записей + .desc = Если сломали старый, постройте новый! diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 3d6b173f3d..12e64c6d0c 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -83,6 +83,9 @@ - type: Stripping - type: SolutionScanner - type: IgnoreUIRange + - type: ShowSecurityIcons + - type: ShowHealthIcons + - type: ShowWhiteHealthBars - type: entity id: ActionAGhostShowSolar diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 287171d429..59f135cef7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -436,6 +436,7 @@ - SodaDispenserMachineCircuitboard - TelecomServerCircuitboard - MassMediaCircuitboard + - CriminalRecordsServerCircuitboard # WD-EDIT - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 3b5c04f4fe..543cc81ca4 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -781,3 +781,13 @@ Steel: 100 Glass: 900 Gold: 100 + +# WD-EDIT + +- type: latheRecipe + id: CriminalRecordsServerCircuitboard + result: CriminalRecordsServerCircuitboard + completetime: 4 + materials: + Steel: 100 + Glass: 900