using Content.Server.Objectives;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
namespace Content.Server.GameTicking.Rules.Configurations;
///
/// Configuration for the Space Ninja antag.
///
public sealed class NinjaRuleConfiguration : StationEventRuleConfiguration
{
///
/// List of objective prototype ids to add
///
[DataField("objectives", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer))]
public readonly List Objectives = new();
// TODO: move to job and use job???
///
/// List of implants to inject on spawn
///
[DataField("implants", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer))]
public readonly List Implants = new();
///
/// List of threats that can be called in
///
[DataField("threats", required: true)]
public readonly List Threats = new();
///
/// Sound played when making the player a ninja via antag control or ghost role
///
[DataField("greetingSound", customTypeSerializer: typeof(SoundSpecifierTypeSerializer))]
public SoundSpecifier? GreetingSound = new SoundPathSpecifier("/Audio/Misc/ninja_greeting.ogg");
///
/// Distance that the ninja spawns from the station's half AABB radius
///
[DataField("spawnDistance")]
public float SpawnDistance = 20f;
}
///
/// A threat that can be called in to the station by a ninja hacking a communications console.
/// Generally some kind of mid-round antag, though you could make it call in scrubber backflow if you wanted to.
/// You wouldn't do that, right?
///
[DataDefinition]
public sealed class Threat
{
///
/// Locale id for the announcement to be made from CentCom.
///
[DataField("announcement")]
public readonly string Announcement = default!;
///
/// The game rule for the threat to be added, it should be able to work when added mid-round otherwise this will do nothing.
///
[DataField("rule", customTypeSerializer: typeof(PrototypeIdSerializer))]
public readonly string Rule = default!;
}