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