From 87d06110d83e597c4e3b1cff3c9319a30e0240e2 Mon Sep 17 00:00:00 2001
From: MishaUnity <81403616+MishaUnity@users.noreply.github.com>
Date: Mon, 31 Jul 2023 08:34:22 +0300
Subject: [PATCH] Mass-media console update (#18466)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Add Console, PDA news tab, and ringstone popup
* Add English localization
* Add mass-media console board to Advanced Entertainment resrarch
* Fix misprint
* Deleting unused libraries
* Fix round restart problem
* Fixing restart problem
* Just another fix
* Сode optimization
* Code optimization
* Convert News read tab to cartridge
Convert the News read tab into a cartridge, and fix a couple of bugs
* Just another fix
* Some updates
* More fixing!!
Fix cooldown, add author label to read menu
* Again, fix cooldown bug
* Some minor changes
* Revert "Some minor changes"
This reverts commit 470c8d727629ac79994f70e56162adae8659e944.
* Some minor updates
* News write Ui update
* Just another fix
* See commit below comments
* More code readability, more!
---
.../MassMedia/Ui/MiniArticleCardControl.xaml | 36 +++++++++-------
.../Ui/MiniArticleCardControl.xaml.cs | 5 ++-
.../MassMedia/Ui/NewsWriteMenu.xaml.cs | 3 +-
.../Components/NewsWriteComponent.cs | 6 +++
.../MassMedia/Systems/NewsSystem.cs | 42 +++++++++++++++----
Resources/Locale/en-US/mass-media/news-ui.ftl | 2 +
.../Machines/Computers/computers.yml | 2 +
7 files changed, 70 insertions(+), 26 deletions(-)
diff --git a/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml b/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml
index 528cbef31a..2da84e9eb1 100644
--- a/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml
+++ b/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml
@@ -1,18 +1,26 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml.cs b/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml.cs
index 86058959b4..47c0018804 100644
--- a/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml.cs
+++ b/Content.Client/MassMedia/Ui/MiniArticleCardControl.xaml.cs
@@ -15,11 +15,12 @@ public sealed partial class MiniArticleCardControl : Control
public Action? OnDeletePressed;
public int ArtcileNum;
- public MiniArticleCardControl(string name)
+ public MiniArticleCardControl(string name, string author)
{
RobustXamlLoader.Load(this);
- Name.SetMarkup(name);
+ Name.Text = name;
+ Author.SetMarkup(author);
Delete.OnPressed += _ => OnDeletePressed?.Invoke();
}
diff --git a/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs b/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs
index 99b1f47fd1..6d05505bcb 100644
--- a/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs
+++ b/Content.Client/MassMedia/Ui/NewsWriteMenu.xaml.cs
@@ -32,7 +32,8 @@ public sealed partial class NewsWriteMenu : DefaultWindow
for (int i = 0; i < articles.Length; i++)
{
- var mini = new MiniArticleCardControl(articles[i].Name);
+ var article = articles[i];
+ var mini = new MiniArticleCardControl(article.Name, (article.Author != null ? article.Author : Loc.GetString("news-read-ui-no-author")));
mini.ArtcileNum = i;
mini.OnDeletePressed += () => DeleteButtonPressed?.Invoke(mini.ArtcileNum);
diff --git a/Content.Server/MassMedia/Components/NewsWriteComponent.cs b/Content.Server/MassMedia/Components/NewsWriteComponent.cs
index d99d23fe15..7308959d56 100644
--- a/Content.Server/MassMedia/Components/NewsWriteComponent.cs
+++ b/Content.Server/MassMedia/Components/NewsWriteComponent.cs
@@ -1,3 +1,4 @@
+using Robust.Shared.Audio;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server.MassMedia.Components
@@ -13,5 +14,10 @@ namespace Content.Server.MassMedia.Components
[ViewVariables(VVAccess.ReadWrite), DataField("shareCooldown")]
public float ShareCooldown = 60f;
+
+ [DataField("noAccessSound")]
+ public SoundSpecifier NoAccessSound = new SoundPathSpecifier("/Audio/Machines/airlock_deny.ogg");
+ [DataField("confirmSound")]
+ public SoundSpecifier ConfirmSound = new SoundPathSpecifier("/Audio/Machines/scan_finish.ogg");
}
}
diff --git a/Content.Server/MassMedia/Systems/NewsSystem.cs b/Content.Server/MassMedia/Systems/NewsSystem.cs
index 5c62a2879a..403687d672 100644
--- a/Content.Server/MassMedia/Systems/NewsSystem.cs
+++ b/Content.Server/MassMedia/Systems/NewsSystem.cs
@@ -14,6 +14,7 @@ using Content.Shared.CartridgeLoader.Cartridges;
using Content.Server.CartridgeLoader;
using Robust.Shared.Timing;
using TerraFX.Interop.Windows;
+using Content.Server.Popups;
namespace Content.Server.MassMedia.Systems;
@@ -23,6 +24,8 @@ public sealed class NewsSystem : EntitySystem
[Dependency] private readonly UserInterfaceSystem _ui = default!;
[Dependency] private readonly RingerSystem _ringer = default!;
[Dependency] private readonly CartridgeLoaderSystem? _cartridgeLoaderSystem = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly AccessReaderSystem _accessReader = default!;
@@ -131,6 +134,8 @@ public sealed class NewsSystem : EntitySystem
}
}
+ _audio.PlayPvs(component.ConfirmSound, uid);
+
_articles.Add(article);
component.ShareAvalible = false;
@@ -146,20 +151,15 @@ public sealed class NewsSystem : EntitySystem
if (msg.ArticleNum > _articles.Count)
return;
- var articleToDelete = _articles[msg.ArticleNum];
- if (articleToDelete.AuthorStationRecordKeyIds == null || !articleToDelete.AuthorStationRecordKeyIds.Any())
+ if (CheckDeleteAccess(_articles[msg.ArticleNum], uid, msg.Session.AttachedEntity))
{
_articles.RemoveAt(msg.ArticleNum);
+ _audio.PlayPvs(component.ConfirmSound, uid);
}
else
{
- var author = msg.Session.AttachedEntity;
- if (author.HasValue
- && _accessReader.FindStationRecordKeys(author.Value, out var recordKeys)
- && recordKeys.Intersect(articleToDelete.AuthorStationRecordKeyIds).Any())
- {
- _articles.RemoveAt(msg.ArticleNum);
- }
+ _popup.PopupEntity(Loc.GetString("news-write-no-access-popup"), uid);
+ _audio.PlayPvs(component.NoAccessSound, uid);
}
UpdateReadDevices();
@@ -217,6 +217,30 @@ public sealed class NewsSystem : EntitySystem
}
}
+ private bool CheckDeleteAccess(NewsArticle articleToDelete, EntityUid device, EntityUid? user)
+ {
+ if (EntityManager.TryGetComponent(device, out var accessReader) &&
+ user.HasValue &&
+ _accessReader.IsAllowed(user.Value, accessReader))
+ {
+ return true;
+ }
+
+ if (articleToDelete.AuthorStationRecordKeyIds == null ||
+ !articleToDelete.AuthorStationRecordKeyIds.Any())
+ {
+ return true;
+ }
+ if (user.HasValue
+ && _accessReader.FindStationRecordKeys(user.Value, out var recordKeys)
+ && recordKeys.Intersect(articleToDelete.AuthorStationRecordKeyIds).Any())
+ {
+ return true;
+ }
+
+ return false;
+ }
+
public override void Update(float frameTime)
{
base.Update(frameTime);
diff --git a/Resources/Locale/en-US/mass-media/news-ui.ftl b/Resources/Locale/en-US/mass-media/news-ui.ftl
index 2f1f634abf..3371ffeb9f 100644
--- a/Resources/Locale/en-US/mass-media/news-ui.ftl
+++ b/Resources/Locale/en-US/mass-media/news-ui.ftl
@@ -13,3 +13,5 @@ news-write-ui-delete-text = Delete
news-write-ui-share-text = Publish
news-write-ui-article-name-label = Heading:
news-write-ui-article-content-label = Content:
+news-write-no-access-popup = No access
+
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
index 85b221a103..27ad39fafb 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml
@@ -961,6 +961,8 @@
board: ComputerMassMediaCircuitboard
- type: DeviceNetworkRequiresPower
- type: NewsWrite
+ - type: AccessReader
+ access: [[ "Command" ]]
- type: ActivatableUI
key: enum.NewsWriteUiKey.Key
- type: ActivatableUIRequiresVision