Clean up YAML issues in animals.yml (#26696)
* Cleaned up YAML issues in animals.yml * Cleaned up TimedSpawnerComponent
This commit is contained in:
@@ -1,40 +1,54 @@
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Random;
|
|
||||||
using Robust.Shared.Serialization;
|
using Robust.Shared.Serialization;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
|
||||||
|
|
||||||
namespace Content.Server.Spawners.Components
|
namespace Content.Server.Spawners.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Spawns entities at a set interval.
|
||||||
|
/// Can configure the set of entities, spawn timing, spawn chance,
|
||||||
|
/// and min/max number of entities to spawn.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class TimedSpawnerComponent : Component, ISerializationHooks
|
||||||
{
|
{
|
||||||
[RegisterComponent]
|
/// <summary>
|
||||||
public sealed partial class TimedSpawnerComponent : Component, ISerializationHooks
|
/// List of entities that can be spawned by this component. One will be randomly
|
||||||
|
/// chosen for each entity spawned. When multiple entities are spawned at once,
|
||||||
|
/// each will be randomly chosen separately.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public List<EntProtoId> Prototypes = [];
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Chance of an entity being spawned at the end of each interval.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public float Chance = 1.0f;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Length of the interval between spawn attempts.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public int IntervalSeconds = 60;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The minimum number of entities that can be spawned when an interval elapses.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public int MinimumEntitiesSpawned = 1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The maximum number of entities that can be spawned when an interval elapses.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public int MaximumEntitiesSpawned = 1;
|
||||||
|
|
||||||
|
public CancellationTokenSource? TokenSource;
|
||||||
|
|
||||||
|
void ISerializationHooks.AfterDeserialization()
|
||||||
{
|
{
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
if (MinimumEntitiesSpawned > MaximumEntitiesSpawned)
|
||||||
[DataField("prototypes", customTypeSerializer:typeof(PrototypeIdListSerializer<EntityPrototype>))]
|
throw new ArgumentException("MaximumEntitiesSpawned can't be lower than MinimumEntitiesSpawned!");
|
||||||
public List<string> Prototypes { get; set; } = new();
|
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
|
||||||
[DataField("chance")]
|
|
||||||
public float Chance { get; set; } = 1.0f;
|
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
|
||||||
[DataField("intervalSeconds")]
|
|
||||||
public int IntervalSeconds { get; set; } = 60;
|
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
|
||||||
[DataField("MinimumEntitiesSpawned")]
|
|
||||||
public int MinimumEntitiesSpawned { get; set; } = 1;
|
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
|
||||||
[DataField("MaximumEntitiesSpawned")]
|
|
||||||
public int MaximumEntitiesSpawned { get; set; } = 1;
|
|
||||||
|
|
||||||
public CancellationTokenSource? TokenSource;
|
|
||||||
|
|
||||||
void ISerializationHooks.AfterDeserialization()
|
|
||||||
{
|
|
||||||
if (MinimumEntitiesSpawned > MaximumEntitiesSpawned)
|
|
||||||
throw new ArgumentException("MaximumEntitiesSpawned can't be lower than MinimumEntitiesSpawned!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -415,7 +415,6 @@
|
|||||||
makeSentient: true
|
makeSentient: true
|
||||||
allowSpeech: true
|
allowSpeech: true
|
||||||
allowMovement: true
|
allowMovement: true
|
||||||
whitelistRequired: false
|
|
||||||
name: ghost-role-information-mothroach-name
|
name: ghost-role-information-mothroach-name
|
||||||
description: ghost-role-information-mothroach-description
|
description: ghost-role-information-mothroach-description
|
||||||
- type: Fixtures
|
- type: Fixtures
|
||||||
@@ -744,9 +743,8 @@
|
|||||||
Quantity: 30
|
Quantity: 30
|
||||||
- type: Udder
|
- type: Udder
|
||||||
reagentId: Milk
|
reagentId: Milk
|
||||||
targetSolution: udder
|
quantityPerUpdate: 25
|
||||||
quantity: 25
|
growthDelay: 30
|
||||||
updateRate: 30
|
|
||||||
- type: Butcherable
|
- type: Butcherable
|
||||||
spawned:
|
spawned:
|
||||||
- id: FoodMeat
|
- id: FoodMeat
|
||||||
@@ -3057,7 +3055,7 @@
|
|||||||
- type: Bloodstream
|
- type: Bloodstream
|
||||||
bloodMaxVolume: 60
|
bloodMaxVolume: 60
|
||||||
- type: CanEscapeInventory
|
- type: CanEscapeInventory
|
||||||
BaseResistTime: 3
|
baseResistTime: 3
|
||||||
- type: MobPrice
|
- type: MobPrice
|
||||||
price: 60
|
price: 60
|
||||||
- type: NonSpreaderZombie
|
- type: NonSpreaderZombie
|
||||||
|
|||||||
Reference in New Issue
Block a user