From: beck-thompson <107373427+beck-thompson@users.noreply.github.com>
Date: Wed, 9 Oct 2024 18:01:32 +0000 (-0700)
Subject: Plushies can now have pAIs stuffed into them (v2)! (#30805)
X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=327466a6e2e36eba03c4bee397371fec5d3e4a86;p=space-station-14.git
Plushies can now have pAIs stuffed into them (v2)! (#30805)
* First commit
* I forgot silly me
* Actually added comments
* spellin
* fixes
* more blacklists
* Minor fixes
* Speech Verb also changes now
* Simple name stuff
* Other fixes
* remove one line of whitespace
---------
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
---
diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs
index 12c5a30a4b..de848b34c2 100644
--- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs
+++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs
@@ -5,6 +5,7 @@ using Content.Server.Stack;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Components;
using Content.Shared.Containers.ItemSlots;
+using Content.Shared.Destructible;
using Content.Shared.FixedPoint;
using Content.Shared.Interaction;
using Content.Shared.Kitchen;
@@ -122,6 +123,9 @@ namespace Content.Server.Kitchen.EntitySystems
if (solution.Volume > containerSolution.AvailableVolume)
continue;
+ var dev = new DestructionEventArgs();
+ RaiseLocalEvent(item, dev);
+
QueueDel(item);
}
diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs
index 3a7c249c2b..d7daf632d6 100644
--- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs
+++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs
@@ -33,6 +33,7 @@ using System.Linq;
using Content.Shared.Containers.ItemSlots;
using Robust.Server.GameObjects;
using Content.Shared.Whitelist;
+using Content.Shared.Destructible;
namespace Content.Server.Nutrition.EntitySystems;
@@ -335,6 +336,9 @@ public sealed class FoodSystem : EntitySystem
if (ev.Cancelled)
return;
+ var dev = new DestructionEventArgs();
+ RaiseLocalEvent(food, dev);
+
if (component.Trash.Count == 0)
{
QueueDel(food);
diff --git a/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs
new file mode 100644
index 0000000000..dca8f5b29b
--- /dev/null
+++ b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs
@@ -0,0 +1,18 @@
+using Content.Shared.Whitelist;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.ChangeNameInContainer;
+
+///
+/// An entity with this component will get its name and verb chaned to the container it's inside of. E.g, if your a
+/// pAI that has this component and are inside a lizard plushie, your name when talking will be "lizard plushie".
+///
+[RegisterComponent, NetworkedComponent, Access(typeof(ChangeNameInContainerSystem))]
+public sealed partial class ChangeVoiceInContainerComponent : Component
+{
+ ///
+ /// A whitelist of containers that will change the name.
+ ///
+ [DataField]
+ public EntityWhitelist? Whitelist;
+}
diff --git a/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs
new file mode 100644
index 0000000000..f9abda3ec2
--- /dev/null
+++ b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs
@@ -0,0 +1,30 @@
+using Content.Shared.Chat;
+using Robust.Shared.Containers;
+using Content.Shared.Whitelist;
+using Content.Shared.Speech;
+
+namespace Content.Shared.ChangeNameInContainer;
+
+public sealed partial class ChangeNameInContainerSystem : EntitySystem
+{
+ [Dependency] private readonly SharedContainerSystem _container = default!;
+ [Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnTransformSpeakerName);
+ }
+
+ private void OnTransformSpeakerName(Entity ent, ref TransformSpeakerNameEvent args)
+ {
+ if (!_container.TryGetContainingContainer((ent, null, null), out var container)
+ || _whitelist.IsWhitelistFail(ent.Comp.Whitelist, container.Owner))
+ return;
+
+ args.VoiceName = Name(container.Owner);
+ if (TryComp(container.Owner, out var speechComp))
+ args.SpeechVerb = speechComp.SpeechVerb;
+ }
+
+}
diff --git a/Content.Shared/Storage/Components/SecretStashComponent.cs b/Content.Shared/Storage/Components/SecretStashComponent.cs
index 3bf8e2e871..f8fff4c194 100644
--- a/Content.Shared/Storage/Components/SecretStashComponent.cs
+++ b/Content.Shared/Storage/Components/SecretStashComponent.cs
@@ -8,6 +8,7 @@ using Robust.Shared.GameStates;
using Content.Shared.DoAfter;
using Robust.Shared.Serialization;
using Robust.Shared.Audio;
+using Content.Shared.Whitelist;
namespace Content.Shared.Storage.Components
{
@@ -26,6 +27,12 @@ namespace Content.Shared.Storage.Components
[DataField("maxItemSize")]
public ProtoId MaxItemSize = "Small";
+ ///
+ /// Entity blacklist for secret stashes.
+ ///
+ [DataField]
+ public EntityWhitelist? Blacklist;
+
///
/// This sound will be played when you try to insert an item in the stash.
/// The sound will be played whether or not the item is actually inserted.
diff --git a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs
index 901d744df5..08a69c345f 100644
--- a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs
+++ b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs
@@ -13,6 +13,7 @@ using Robust.Shared.Audio.Systems;
using Content.Shared.Verbs;
using Content.Shared.IdentityManagement;
using Content.Shared.Tools.EntitySystems;
+using Content.Shared.Whitelist;
namespace Content.Shared.Storage.EntitySystems;
@@ -27,7 +28,7 @@ public sealed class SecretStashSystem : EntitySystem
[Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly ToolOpenableSystem _toolOpenableSystem = default!;
-
+ [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
public override void Initialize()
{
@@ -90,8 +91,9 @@ public sealed class SecretStashSystem : EntitySystem
return false;
}
- // check if item is too big to fit into secret stash
- if (_item.GetSizePrototype(itemComp.Size) > _item.GetSizePrototype(entity.Comp.MaxItemSize))
+ // check if item is too big to fit into secret stash or is in the blacklist
+ if (_item.GetSizePrototype(itemComp.Size) > _item.GetSizePrototype(entity.Comp.MaxItemSize) ||
+ _whitelistSystem.IsBlacklistPass(entity.Comp.Blacklist, itemToHideUid))
{
var msg = Loc.GetString("comp-secret-stash-action-hide-item-too-big",
("item", itemToHideUid), ("stashname", GetStashName(entity)));
diff --git a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl
index 3689242807..16e575c0f1 100644
--- a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl
+++ b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl
@@ -22,3 +22,4 @@ comp-secret-stash-verb-open = Open
### Stash names
secret-stash-plant = plant
secret-stash-toilet = toilet cistern
+secret-stash-plushie = plushie
diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml
index ff662c2186..b4af7f010e 100644
--- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml
+++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml
@@ -69,6 +69,10 @@
Searching: { state: pai-searching-overlay }
On: { state: pai-on-overlay }
- type: StationMap
+ - type: ChangeVoiceInContainer
+ whitelist:
+ components:
+ - SecretStash
- type: entity
parent: [ PersonalAI, BaseSyndicateContraband]
diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml
index ffb1611a71..a5105fac5f 100644
--- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml
+++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml
@@ -52,6 +52,24 @@
reagents:
- ReagentId: Fiber
Quantity: 10
+ - type: ContainerContainer
+ containers:
+ stash: !type:ContainerSlot {}
+ - type: Speech
+ speechVerb: Default # for pais (In the secret stash)
+ - type: SecretStash
+ secretStashName: secret-stash-plushie
+ blacklist:
+ components:
+ - SecretStash # Prevents being able to insert plushies inside each other (infinite plush)!
+ - NukeDisk # Could confuse the nukies if they don't know that plushies have a stash.
+ tags:
+ - QuantumSpinInverter # It will cause issues with the grinder...
+ - FakeNukeDisk # So you can't tell if the nuke disk is real or fake depending on if it can be inserted or not.
+ - type: ToolOpenable
+ openToolQualityNeeded: Slicing
+ closeToolQualityNeeded: Slicing # Should probably be stitching or something if that gets added
+ name: secret-stash-plushie
- type: entity
parent: BasePlushie
@@ -323,6 +341,8 @@
equippedPrefix: lizard
slots:
- HEAD
+ - type: Speech
+ speechVerb: Reptilian # for pais (In the secret stash)
- type: entity
parent: PlushieLizard
diff --git a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml
index 90e975b93e..e1fc3fa5b6 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml
@@ -35,3 +35,6 @@
state: icon
- type: StaticPrice
price: 1 # it's worth even less than normal items. Perfection.
+ - type: Tag
+ tags:
+ - FakeNukeDisk
diff --git a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml
index 97c845a786..9e6d6580b3 100644
--- a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml
+++ b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml
@@ -25,6 +25,8 @@
offset: "0.0,0.3"
sprite: Structures/Furniture/potted_plants.rsi
noRot: true
+ - type: Speech
+ speechVerb: Plant # for pais (In the secret stash)
- type: SecretStash
tryInsertItemSound: /Audio/Effects/plant_rustle.ogg
tryRemoveItemSound: /Audio/Effects/plant_rustle.ogg
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 86ade97d4e..4f9d0eb3f8 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -993,6 +993,9 @@
- type: Tag
id: Nugget # for chicken nuggets
+- type: Tag
+ id: FakeNukeDisk
+
- type: Tag
id: NukeOpsUplink
@@ -1177,7 +1180,7 @@
- type: Tag
id: SecureWindoor
-- type: Tag
+- type: Tag
id: SecurityHelmet
- type: Tag