From: Ed <96445749+TheShuEd@users.noreply.github.com>
Date: Mon, 13 Nov 2023 23:55:47 +0000 (+0300)
Subject: Pet Carrier (Zookeeper gameplay?) (#21545)
X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=786bb79ebc50ca79d76186068cf204c2271e6ea1;p=space-station-14.git
Pet Carrier (Zookeeper gameplay?) (#21545)
* add visual
* fix item + entityStorage problem, add generation in maints
* make pet carrier two-handed
* added to cargo
* add resistlocker component
---
diff --git a/Content.Shared/Storage/Components/SharedEntityStorageComponent.cs b/Content.Shared/Storage/Components/SharedEntityStorageComponent.cs
index 80f38188ea..b4cd18f4d5 100644
--- a/Content.Shared/Storage/Components/SharedEntityStorageComponent.cs
+++ b/Content.Shared/Storage/Components/SharedEntityStorageComponent.cs
@@ -1,4 +1,4 @@
-using System.Numerics;
+using System.Numerics;
using Content.Shared.Physics;
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
@@ -64,6 +64,12 @@ public abstract partial class SharedEntityStorageComponent : Component
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float EnteringRange = 0.18f;
+ ///
+ /// If true, there may be mobs inside the container, even if the container is an Item
+ ///
+ [DataField]
+ public bool ItemCanStoreMobs = false;
+
///
/// Whether or not to show the contents when the storage is closed
///
diff --git a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs
index 31803c394f..f84a65398d 100644
--- a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs
+++ b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs
@@ -1,4 +1,4 @@
-using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Numerics;
using Content.Shared.Body.Components;
@@ -413,6 +413,9 @@ public abstract class SharedEntityStorageSystem : EntitySystem
var storeEv = new StoreMobInItemContainerAttemptEvent();
RaiseLocalEvent(container, ref storeEv);
allowedToEat = storeEv is { Handled: true, Cancelled: false };
+
+ if (component.ItemCanStoreMobs)
+ allowedToEat = true;
}
}
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_service.yml b/Resources/Prototypes/Catalog/Cargo/cargo_service.yml
index 0ddf41a464..f010f1ef2f 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_service.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_service.yml
@@ -137,3 +137,13 @@
cost: 2000
category: Service
group: market
+
+- type: cargoProduct
+ id: ServiceAnimalCarrier
+ icon:
+ sprite: Objects/Storage/petcarrier.rsi
+ state: icon
+ product: PetCarrier
+ cost: 500
+ category: Service
+ group: market
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml
index a2d8f4b381..9aa1271044 100644
--- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml
+++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml
@@ -184,6 +184,7 @@
- CableHVStack10
- CableMVStack10
- CableApcStack10
+ - PetCarrier
chance: 0.6
offset: 0.0
diff --git a/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml b/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml
new file mode 100644
index 0000000000..2e19d0ba19
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml
@@ -0,0 +1,66 @@
+- type: entity
+ id: PetCarrier
+ name: big pet carrier
+ description: Allows large animals to be carried comfortably.
+ parent: BaseStructureDynamic
+ components:
+ - type: Sprite
+ noRot: true
+ drawdepth: Objects
+ sprite: Objects/Storage/petcarrier.rsi
+ layers:
+ - state: pet_carrier_base
+ map: ["enum.StorageVisualLayers.Base"]
+ - state: pet_carrier_door
+ map: ["enum.StorageVisualLayers.Door"]
+ - state: welded
+ visible: false
+ map: ["enum.WeldableLayers.BaseWelded"]
+ - type: Icon
+ sprite: Objects/Storage/petcarrier.rsi
+ state: icon
+ - type: InteractionOutline
+ - type: Physics
+ - type: MultiHandedItem
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeCircle
+ radius: 0.45
+ density: 25
+ mask:
+ - SmallMobMask
+ layer:
+ - MachineLayer
+ - type: EntityStorage
+ capacity: 1
+ airtight: false
+ itemCanStoreMobs: true
+ - type: Weldable
+ - type: ResistLocker
+ - type: PlaceableSurface
+ isPlaceable: false
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Wood
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 50
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Appearance
+ - type: EntityStorageVisuals
+ stateDoorOpen: pet_carrier_open
+ stateDoorClosed: pet_carrier_door
+ - type: ContainerContainer
+ containers:
+ entity_storage: !type:Container
+ paper_label: !type:ContainerSlot
+ - type: ItemSlots
+ - type: Item
+ size: Ginormous
+ sprite: Objects/Storage/petcarrier.rsi
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/icon.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/icon.png
new file mode 100644
index 0000000000..a4a3b9f90e
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/inhand-left.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/inhand-left.png
new file mode 100644
index 0000000000..d633c11225
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/inhand-right.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/inhand-right.png
new file mode 100644
index 0000000000..d633c11225
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/meta.json b/Resources/Textures/Objects/Storage/petcarrier.rsi/meta.json
new file mode 100644
index 0000000000..0843ad299c
--- /dev/null
+++ b/Resources/Textures/Objects/Storage/petcarrier.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "license": "CC0-1.0",
+ "copyright": "Taken from TGstation at https://github.com/tgstation/tgstation/commit/8b1ffd1e49a2d30a0aab63264106a3ec0e07f415 and edited by TheShuEd",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "pet_carrier_base"
+ },
+ {
+ "name": "pet_carrier_door"
+ },
+ {
+ "name": "pet_carrier_open"
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "welded"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_base.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_base.png
new file mode 100644
index 0000000000..1b4e86d740
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_base.png differ
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_door.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_door.png
new file mode 100644
index 0000000000..4208bb961f
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_door.png differ
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_open.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_open.png
new file mode 100644
index 0000000000..3bc200bded
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/pet_carrier_open.png differ
diff --git a/Resources/Textures/Objects/Storage/petcarrier.rsi/welded.png b/Resources/Textures/Objects/Storage/petcarrier.rsi/welded.png
new file mode 100644
index 0000000000..93b9c1dbc8
Binary files /dev/null and b/Resources/Textures/Objects/Storage/petcarrier.rsi/welded.png differ