]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Msg Toolshed Command (#41936)
authorScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Mon, 5 Jan 2026 21:00:15 +0000 (22:00 +0100)
committerGitHub <noreply@github.com>
Mon, 5 Jan 2026 21:00:15 +0000 (21:00 +0000)
* init

* subfolder

* note

Content.Server/Prayer/PrayerSystem.cs
Content.Server/Toolshed/Commands/Misc/MsgCommand.cs [new file with mode: 0644]
Resources/Locale/en-US/commands/toolshed/msg-command.ftl [new file with mode: 0644]
Resources/Locale/en-US/commands/toolshed/toolshed-commands.ftl [moved from Resources/Locale/en-US/commands/toolshed-commands.ftl with 99% similarity]

index 4235fa2a1cbe3a35eba9f0b6f483c95064b60be7..cc627af1a10db64ce264fda663a0f3a067a4e0e5 100644 (file)
@@ -75,7 +75,7 @@ public sealed class PrayerSystem : EntitySystem
     /// <param name="source">The IPlayerSession that sent the message</param>
     /// <param name="messageString">The main message sent to the player via the chatbox</param>
     /// <param name="popupMessage">The popup to notify the player, also prepended to the messageString</param>
-    public void SendSubtleMessage(ICommonSession target, ICommonSession source, string messageString, string popupMessage)
+    public void SendSubtleMessage(ICommonSession target, ICommonSession? source, string messageString, string popupMessage)
     {
         if (target.AttachedEntity == null)
             return;
@@ -84,7 +84,7 @@ public sealed class PrayerSystem : EntitySystem
 
         _popupSystem.PopupEntity(popupMessage, target.AttachedEntity.Value, target, PopupType.Large);
         _chatManager.ChatMessageToOne(ChatChannel.Local, messageString, message, EntityUid.Invalid, false, target.Channel);
-        _adminLogger.Add(LogType.AdminMessage, LogImpact.Low, $"{ToPrettyString(target.AttachedEntity.Value):player} received subtle message from {source.Name}: {message}");
+        _adminLogger.Add(LogType.AdminMessage, LogImpact.Low, $"{ToPrettyString(target.AttachedEntity.Value):player} received subtle message from {source?.Name ?? "unknown source"}: {message}");
     }
 
     /// <summary>
diff --git a/Content.Server/Toolshed/Commands/Misc/MsgCommand.cs b/Content.Server/Toolshed/Commands/Misc/MsgCommand.cs
new file mode 100644 (file)
index 0000000..119a637
--- /dev/null
@@ -0,0 +1,83 @@
+using Content.Server.Administration;
+using Content.Server.Chat.Managers;
+using Content.Server.Popups;
+using Content.Server.Prayer;
+using Content.Server.Tips;
+using Content.Shared.Administration;
+using Content.Shared.Chat;
+using Content.Shared.Popups;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Toolshed;
+
+namespace Content.Server.Toolshed.Commands.Misc;
+
+[ToolshedCommand, AdminCommand(AdminFlags.Fun)]
+public sealed class MsgCommand : ToolshedCommand
+{
+    [Dependency] private IChatManager _chatManager = default!;
+
+    private PrayerSystem? _prayer;
+    private PopupSystem? _popup;
+    private TipsSystem? _tips;
+
+    [CommandImplementation("subtle")]
+    public IEnumerable<EntityUid> Subtle(IInvocationContext ctx, [PipedArgument] IEnumerable<EntityUid> targets, string popup, string message)
+    {
+        _prayer ??= GetSys<PrayerSystem>();
+
+        foreach (var ent in targets)
+        {
+            if (!TryComp<ActorComponent>(ent, out var actor))
+                continue;
+
+            _prayer.SendSubtleMessage(actor.PlayerSession, ctx.Session, message, popup);
+
+            yield return ent;
+        }
+    }
+
+    [CommandImplementation("chat")]
+    public IEnumerable<EntityUid> Chat([PipedArgument] IEnumerable<EntityUid> targets, string message)
+    {
+        foreach (var ent in targets)
+        {
+            if (!TryComp<ActorComponent>(ent, out var actor))
+                continue;
+
+            _chatManager.ChatMessageToOne(ChatChannel.Local, message, message, EntityUid.Invalid, false, actor.PlayerSession.Channel);
+            yield return ent;
+        }
+    }
+
+    [CommandImplementation("popup")]
+    public IEnumerable<EntityUid> Popup([PipedArgument] IEnumerable<EntityUid> targets, string popup, PopupType type, bool recipientOnly)
+    {
+        _popup ??= GetSys<PopupSystem>();
+
+        foreach (var ent in targets)
+        {
+            if (recipientOnly)
+                _popup.PopupEntity(popup, ent, ent, type); // If recipientOnly, show the popup only to the recipient.
+            else
+                _popup.PopupEntity(popup, ent, type); // Otherwise, show it to everyone within PVS of the target entity.
+            yield return ent;
+        }
+    }
+
+    [CommandImplementation("tippy")]
+    public IEnumerable<EntityUid> Tippy([PipedArgument] IEnumerable<EntityUid> targets, string message, EntProtoId prototype, float speakTime, float slideTime, float waddleInterval)
+    {
+        _tips ??= GetSys<TipsSystem>();
+
+        foreach (var ent in targets)
+        {
+            if (!TryComp<ActorComponent>(ent, out var actor))
+                continue;
+
+            _tips.SendTippy(actor.PlayerSession, message, prototype, speakTime, slideTime, waddleInterval);
+
+            yield return ent;
+        }
+    }
+}
diff --git a/Resources/Locale/en-US/commands/toolshed/msg-command.ftl b/Resources/Locale/en-US/commands/toolshed/msg-command.ftl
new file mode 100644 (file)
index 0000000..3891dec
--- /dev/null
@@ -0,0 +1,5 @@
+# Msg
+command-description-msg-subtle = Sends a combination of a popup and a message to the input entities. Behaves same as the Subtle Message admin verb. Outputs entities that successfuly received a message.
+command-description-msg-chat = Sends a chat message to the sessions of the input entities. Outputs entities that successfuly received a message.
+command-description-msg-popup = Displays a popup above the input entiites. Can specify to only be visible to the target.
+command-description-msg-tippy = Sends a Tippy to the sessions of the input entities. All parameters must be specified. Outputs entities that successfuly received a tippy.
similarity index 99%
rename from Resources/Locale/en-US/commands/toolshed-commands.ftl
rename to Resources/Locale/en-US/commands/toolshed/toolshed-commands.ftl
index bfd2f780b1a9d29c0d4298be759cae9d2d8b8640..662a5a920dd6014e518bd863e8519364eed03e7b 100644 (file)
@@ -1,3 +1,5 @@
+# Please add future toolshed locale to their own files. This needs to be cleaned up.
+
 command-description-visualize =
     Takes the input list of entities and puts them into a UI window for easy browsing.
 command-description-runverbas =