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>
This commit is contained in:
beck-thompson
2024-10-09 11:01:32 -07:00
committed by GitHub
parent 6d99597349
commit 327466a6e2
12 changed files with 102 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ using Content.Server.Stack;
using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components;
using Content.Shared.Containers.ItemSlots; using Content.Shared.Containers.ItemSlots;
using Content.Shared.Destructible;
using Content.Shared.FixedPoint; using Content.Shared.FixedPoint;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Kitchen; using Content.Shared.Kitchen;
@@ -122,6 +123,9 @@ namespace Content.Server.Kitchen.EntitySystems
if (solution.Volume > containerSolution.AvailableVolume) if (solution.Volume > containerSolution.AvailableVolume)
continue; continue;
var dev = new DestructionEventArgs();
RaiseLocalEvent(item, dev);
QueueDel(item); QueueDel(item);
} }

View File

@@ -33,6 +33,7 @@ using System.Linq;
using Content.Shared.Containers.ItemSlots; using Content.Shared.Containers.ItemSlots;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Content.Shared.Whitelist; using Content.Shared.Whitelist;
using Content.Shared.Destructible;
namespace Content.Server.Nutrition.EntitySystems; namespace Content.Server.Nutrition.EntitySystems;
@@ -335,6 +336,9 @@ public sealed class FoodSystem : EntitySystem
if (ev.Cancelled) if (ev.Cancelled)
return; return;
var dev = new DestructionEventArgs();
RaiseLocalEvent(food, dev);
if (component.Trash.Count == 0) if (component.Trash.Count == 0)
{ {
QueueDel(food); QueueDel(food);

View File

@@ -0,0 +1,18 @@
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
namespace Content.Shared.ChangeNameInContainer;
/// <summary>
/// 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".
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(ChangeNameInContainerSystem))]
public sealed partial class ChangeVoiceInContainerComponent : Component
{
/// <summary>
/// A whitelist of containers that will change the name.
/// </summary>
[DataField]
public EntityWhitelist? Whitelist;
}

View File

@@ -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<ChangeVoiceInContainerComponent, TransformSpeakerNameEvent>(OnTransformSpeakerName);
}
private void OnTransformSpeakerName(Entity<ChangeVoiceInContainerComponent> 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<SpeechComponent>(container.Owner, out var speechComp))
args.SpeechVerb = speechComp.SpeechVerb;
}
}

View File

@@ -8,6 +8,7 @@ using Robust.Shared.GameStates;
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Content.Shared.Whitelist;
namespace Content.Shared.Storage.Components namespace Content.Shared.Storage.Components
{ {
@@ -26,6 +27,12 @@ namespace Content.Shared.Storage.Components
[DataField("maxItemSize")] [DataField("maxItemSize")]
public ProtoId<ItemSizePrototype> MaxItemSize = "Small"; public ProtoId<ItemSizePrototype> MaxItemSize = "Small";
/// <summary>
/// Entity blacklist for secret stashes.
/// </summary>
[DataField]
public EntityWhitelist? Blacklist;
/// <summary> /// <summary>
/// This sound will be played when you try to insert an item in the stash. /// 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. /// The sound will be played whether or not the item is actually inserted.

View File

@@ -13,6 +13,7 @@ using Robust.Shared.Audio.Systems;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Tools.EntitySystems; using Content.Shared.Tools.EntitySystems;
using Content.Shared.Whitelist;
namespace Content.Shared.Storage.EntitySystems; namespace Content.Shared.Storage.EntitySystems;
@@ -27,7 +28,7 @@ public sealed class SecretStashSystem : EntitySystem
[Dependency] private readonly SharedItemSystem _item = default!; [Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly ToolOpenableSystem _toolOpenableSystem = default!; [Dependency] private readonly ToolOpenableSystem _toolOpenableSystem = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -90,8 +91,9 @@ public sealed class SecretStashSystem : EntitySystem
return false; return false;
} }
// check if item is too big to fit into secret stash // 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)) 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", var msg = Loc.GetString("comp-secret-stash-action-hide-item-too-big",
("item", itemToHideUid), ("stashname", GetStashName(entity))); ("item", itemToHideUid), ("stashname", GetStashName(entity)));

View File

@@ -22,3 +22,4 @@ comp-secret-stash-verb-open = Open
### Stash names ### Stash names
secret-stash-plant = plant secret-stash-plant = plant
secret-stash-toilet = toilet cistern secret-stash-toilet = toilet cistern
secret-stash-plushie = plushie

View File

@@ -69,6 +69,10 @@
Searching: { state: pai-searching-overlay } Searching: { state: pai-searching-overlay }
On: { state: pai-on-overlay } On: { state: pai-on-overlay }
- type: StationMap - type: StationMap
- type: ChangeVoiceInContainer
whitelist:
components:
- SecretStash
- type: entity - type: entity
parent: [ PersonalAI, BaseSyndicateContraband] parent: [ PersonalAI, BaseSyndicateContraband]

View File

@@ -52,6 +52,24 @@
reagents: reagents:
- ReagentId: Fiber - ReagentId: Fiber
Quantity: 10 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 - type: entity
parent: BasePlushie parent: BasePlushie
@@ -323,6 +341,8 @@
equippedPrefix: lizard equippedPrefix: lizard
slots: slots:
- HEAD - HEAD
- type: Speech
speechVerb: Reptilian # for pais (In the secret stash)
- type: entity - type: entity
parent: PlushieLizard parent: PlushieLizard

View File

@@ -35,3 +35,6 @@
state: icon state: icon
- type: StaticPrice - type: StaticPrice
price: 1 # it's worth even less than normal items. Perfection. price: 1 # it's worth even less than normal items. Perfection.
- type: Tag
tags:
- FakeNukeDisk

View File

@@ -25,6 +25,8 @@
offset: "0.0,0.3" offset: "0.0,0.3"
sprite: Structures/Furniture/potted_plants.rsi sprite: Structures/Furniture/potted_plants.rsi
noRot: true noRot: true
- type: Speech
speechVerb: Plant # for pais (In the secret stash)
- type: SecretStash - type: SecretStash
tryInsertItemSound: /Audio/Effects/plant_rustle.ogg tryInsertItemSound: /Audio/Effects/plant_rustle.ogg
tryRemoveItemSound: /Audio/Effects/plant_rustle.ogg tryRemoveItemSound: /Audio/Effects/plant_rustle.ogg

View File

@@ -993,6 +993,9 @@
- type: Tag - type: Tag
id: Nugget # for chicken nuggets id: Nugget # for chicken nuggets
- type: Tag
id: FakeNukeDisk
- type: Tag - type: Tag
id: NukeOpsUplink id: NukeOpsUplink