]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Figures can now be activated remotely (#32769)
authorbeck-thompson <107373427+beck-thompson@users.noreply.github.com>
Mon, 16 Dec 2024 18:52:09 +0000 (10:52 -0800)
committerGitHub <noreply@github.com>
Mon, 16 Dec 2024 18:52:09 +0000 (19:52 +0100)
* First commit

* I'm silly

* weh

* will this work?

* Better design

* Fixes!

* rider :(

* L rider

Content.Server/Chat/SpeakOnTriggerComponent.cs [new file with mode: 0644]
Content.Server/Chat/SpeakOnUseComponent.cs [deleted file]
Content.Server/Chat/Systems/SpeakOnTriggerSystem.cs [new file with mode: 0644]
Content.Server/Chat/Systems/SpeakOnUseSystem.cs [deleted file]
Resources/Prototypes/Entities/Objects/Fun/figurines.yml

diff --git a/Content.Server/Chat/SpeakOnTriggerComponent.cs b/Content.Server/Chat/SpeakOnTriggerComponent.cs
new file mode 100644 (file)
index 0000000..d879cbf
--- /dev/null
@@ -0,0 +1,17 @@
+using Content.Shared.Dataset;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Chat;
+
+/// <summary>
+///     Makes the entity speak when triggered. If the item has UseDelay component, the system will respect that cooldown.
+/// </summary>
+[RegisterComponent]
+public sealed partial class SpeakOnTriggerComponent : Component
+{
+    /// <summary>
+    ///     The identifier for the dataset prototype containing messages to be spoken by this entity.
+    /// </summary>
+    [DataField(required: true)]
+    public ProtoId<LocalizedDatasetPrototype> Pack = string.Empty;
+}
diff --git a/Content.Server/Chat/SpeakOnUseComponent.cs b/Content.Server/Chat/SpeakOnUseComponent.cs
deleted file mode 100644 (file)
index f8953ae..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-using Content.Shared.Dataset;
-using Robust.Shared.Prototypes;
-
-namespace Content.Server.Chat;
-
-/// <summary>
-/// Entity will say the things when activated
-/// </summary>
-[RegisterComponent]
-public sealed partial class SpeakOnUseComponent : Component
-{
-    /// <summary>
-    /// The identifier for the dataset prototype containing messages to be spoken by this entity.
-    /// </summary>
-    [DataField(required: true)]
-    public ProtoId<LocalizedDatasetPrototype> Pack { get; private set; }
-
-}
diff --git a/Content.Server/Chat/Systems/SpeakOnTriggerSystem.cs b/Content.Server/Chat/Systems/SpeakOnTriggerSystem.cs
new file mode 100644 (file)
index 0000000..d8800a8
--- /dev/null
@@ -0,0 +1,42 @@
+using Content.Server.Explosion.EntitySystems;
+using Content.Shared.Timing;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
+
+namespace Content.Server.Chat.Systems;
+
+public sealed class SpeakOnTriggerSystem : EntitySystem
+{
+    [Dependency] private readonly UseDelaySystem _useDelay = default!;
+    [Dependency] private readonly IRobustRandom _random = default!;
+    [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+    [Dependency] private readonly ChatSystem _chat = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+        SubscribeLocalEvent<SpeakOnTriggerComponent, TriggerEvent>(OnTrigger);
+    }
+
+    private void OnTrigger(Entity<SpeakOnTriggerComponent> ent, ref TriggerEvent args)
+    {
+        TrySpeak(ent);
+        args.Handled = true;
+    }
+
+    private void TrySpeak(Entity<SpeakOnTriggerComponent> ent)
+    {
+        // If it doesn't have the use delay component, still send the message.
+        if (TryComp<UseDelayComponent>(ent.Owner, out var useDelay) && _useDelay.IsDelayed((ent.Owner, useDelay)))
+            return;
+
+        if (!_prototypeManager.TryIndex(ent.Comp.Pack, out var messagePack))
+            return;
+
+        var message = Loc.GetString(_random.Pick(messagePack.Values));
+        _chat.TrySendInGameICMessage(ent.Owner, message, InGameICChatType.Speak, true);
+
+        if (useDelay != null)
+            _useDelay.TryResetDelay((ent.Owner, useDelay));
+    }
+}
diff --git a/Content.Server/Chat/Systems/SpeakOnUseSystem.cs b/Content.Server/Chat/Systems/SpeakOnUseSystem.cs
deleted file mode 100644 (file)
index addec79..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-using Content.Server.Chat;
-using Content.Shared.Dataset;
-using Content.Shared.Interaction.Events;
-using Content.Shared.Timing;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Random;
-
-namespace Content.Server.Chat.Systems;
-
-/// <summary>
-/// Handles the speech on activating an entity
-/// </summary>
-public sealed partial class SpeakOnUIClosedSystem : EntitySystem
-{
-    [Dependency] private readonly UseDelaySystem _useDelay = default!;
-    [Dependency] private readonly IRobustRandom _random = default!;
-    [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
-    [Dependency] private readonly ChatSystem _chat = default!;
-
-    public override void Initialize()
-    {
-        base.Initialize();
-        SubscribeLocalEvent<SpeakOnUseComponent, UseInHandEvent>(OnUseInHand);
-    }
-
-    public void OnUseInHand(EntityUid uid, SpeakOnUseComponent? component, UseInHandEvent args)
-    {
-        if (!Resolve(uid, ref component))
-            return;
-
-        // Yes it won't work without UseDelayComponent, but we don't want any kind of spam
-        if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay)))
-            return;
-
-        if (!_prototypeManager.TryIndex(component.Pack, out var messagePack))
-            return;
-
-        var message = Loc.GetString(_random.Pick(messagePack.Values));
-        _chat.TrySendInGameICMessage(uid, message, InGameICChatType.Speak, true);
-        _useDelay.TryResetDelay((uid, useDelay));
-    }
-}
index 5f962b90c871f288fb6d21525a3aa09e994841f4..1431c8eaf2c48ef50885daf24025ac9c47cd2a66 100644 (file)
     - Figurine
   - type: UseDelay
     delay: 10
+  - type: TriggerOnActivate
+  - type: TriggerOnSignal
   - type: Speech
     speechSounds: Pai # it just sounds better
+  - type: DeviceNetwork
+    deviceNetId: Wireless
+    receiveFrequencyId: BasicDevice
+  - type: WirelessNetworkConnection
+    range: 200
+  - type: DeviceLinkSink
+    ports:
+    - Trigger
 
 - type: entity
   parent: BaseFigurine
@@ -30,7 +40,7 @@
   components:
   - type: Sprite
     state: hop
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesHoP
 
 - type: entity
@@ -41,7 +51,7 @@
   components:
   - type: Sprite
     state: passenger
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesPassenger
 
 - type: entity
@@ -52,7 +62,7 @@
   components:
   - type: Sprite
     state: passenger_greytide
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesGreytider
 
 - type: entity
@@ -63,7 +73,7 @@
   components:
   - type: Sprite
     state: clown
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesClown
 
 - type: entity
@@ -74,7 +84,7 @@
   components:
   - type: Sprite
     state: holoclown
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesHoloClown
 
 - type: entity
@@ -85,7 +95,7 @@
   components:
   - type: Sprite
     state: mime
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesMime
 
 - type: entity
   components:
   - type: Sprite
     state: musician
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesMusician
 
 - type: entity
   components:
   - type: Sprite
     state: boxer
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesBoxer
 
 - type: entity
   components:
   - type: Sprite
     state: captain
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesCaptain
 
 - type: entity
   components:
   - type: Sprite
     state: hos
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesHoS
 
 - type: entity
   components:
   - type: Sprite
     state: warden
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesWarden
 
 - type: entity
   components:
   - type: Sprite
     state: detective
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesDetective
 
 - type: entity
   components:
   - type: Sprite
     state: security
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesSecurity
 
 - type: entity
   components:
   - type: Sprite
     state: lawyer
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesLawyer
 
 - type: entity
   components:
   - type: Sprite
     state: cargotech
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesCargoTech
 
 - type: entity
   components:
   - type: Sprite
     state: salvage
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesSalvage
 
 - type: entity
   components:
   - type: Sprite
     state: qm
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesQM
 
 - type: entity
   components:
   - type: Sprite
     state: ce
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesCE
 
 - type: entity
   components:
   - type: Sprite
     state: engineer
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesEngineer
 
 - type: entity
   components:
   - type: Sprite
     state: atmos
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesAtmosTech
 
 - type: entity
   components:
   - type: Sprite
     state: rd
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesRD
 
 - type: entity
   components:
   - type: Sprite
     state: scientist
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesScientist
 
 - type: entity
   components:
   - type: Sprite
     state: cmo
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesCMO
 
 - type: entity
   components:
   - type: Sprite
     state: chemist
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesChemist
 
 - type: entity
   components:
   - type: Sprite
     state: paramedic
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesParamedic
 
 - type: entity
   components:
   - type: Sprite
     state: medical
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesDoctor
 
 - type: entity
   components:
   - type: Sprite
     state: librarian
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesLibrarian
 
 - type: entity
   components:
   - type: Sprite
     state: chaplain
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesChaplain
 
 - type: entity
   components:
   - type: Sprite
     state: chef
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesChef
 
 - type: entity
   components:
   - type: Sprite
     state: bartender
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesBartender
 
 - type: entity
   components:
   - type: Sprite
     state: botanist
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesBotanist
 
 - type: entity
   components:
   - type: Sprite
     state: janitor
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesJanitor
 
 - type: entity
   components:
   - type: Sprite
     state: nukie
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesNukie
 
 - type: entity
   components:
   - type: Sprite
     state: nukie_elite
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesNukieElite
 
 - type: entity
   components:
   - type: Sprite
     state: nukie_commander
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesNukieCommander
 
 - type: entity
   components:
   - type: Sprite
     state: footsoldier
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesFootsoldier
 
 - type: entity
   components:
   - type: Sprite
     state: wizard
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesWizard
 
 - type: entity
   components:
   - type: Sprite
     state: wizard_fake
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesWizard
 
 #Nonhuman Figurines
   components:
   - type: Sprite
     state: spacedragon
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesSpaceDragon
 
 - type: entity
   components:
   - type: Sprite
     state: queen
-  # - type: SpeakOnUse # TODO add something
+  # - type: SpeakOnTrigger # TODO add something
   #   pack: FigurinesQueen
 
 - type: entity
   components:
   - type: Sprite
     state: ratking
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesRatKing
 
 - type: entity
   components:
   - type: Sprite
     state: ratservant
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesRatServant
 
 - type: entity
   components:
   - type: Sprite
     state: mouse
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesMouse
 
 - type: entity
   components:
   - type: Sprite
     state: slime
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesSlime
 
 - type: entity
   components:
   - type: Sprite
     state: hamlet
-  - type: SpeakOnUse
+  - type: SpeakOnTrigger
     pack: FigurinesHamlet
 
 #TODO: Convert these to the new figurine sprite template and rename their sprite name.