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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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)));
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user