using Content.Shared.Damage; // DeltaV using Content.Shared.NPC.Prototypes; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Dragon { [RegisterComponent] public sealed partial class DragonComponent : Component { /// /// If we have active rifts. /// [DataField("rifts")] public List Rifts = new(); public bool Weakened => WeakenedAccumulator > 0f; /// /// When any rift is destroyed how long is the dragon weakened for /// [ViewVariables(VVAccess.ReadWrite), DataField("weakenedDuration")] public float WeakenedDuration = 60f; /// /// Has a rift been destroyed and the dragon in a temporary weakened state? /// [ViewVariables(VVAccess.ReadWrite), DataField("weakenedAccumulator")] public float WeakenedAccumulator = 0f; [ViewVariables(VVAccess.ReadWrite), DataField("riftAccumulator")] public float RiftAccumulator = 0f; /// /// Maximum time the dragon can go without spawning a rift before they die. /// [ViewVariables(VVAccess.ReadWrite), DataField("maxAccumulator")] public float RiftMaxAccumulator = 300f; [DataField("spawnRiftAction", customTypeSerializer: typeof(PrototypeIdSerializer))] public string SpawnRiftAction = "ActionSpawnRift"; /// /// Spawns a rift which can summon more mobs. /// [DataField("spawnRiftActionEntity")] public EntityUid? SpawnRiftActionEntity; [ViewVariables(VVAccess.ReadWrite), DataField("riftPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] public string RiftPrototype = "CarpRift"; [ViewVariables(VVAccess.ReadWrite), DataField("soundDeath")] public SoundSpecifier? SoundDeath = new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg"); [ViewVariables(VVAccess.ReadWrite), DataField("soundRoar")] public SoundSpecifier? SoundRoar = new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg") { Params = AudioParams.Default.WithVolume(3f), }; /// /// NPC faction to re-add after being zombified. /// Prevents zombie dragon from being attacked by its own carp. /// [DataField] public ProtoId Faction = "Dragon"; /// /// DeltaV: Damage dealt to dragon on death /// So we dont just delete it /// [DataField] public DamageSpecifier DeathDamage = new() { DamageDict = new() { { "Blunt", 400 }, }, }; /// /// DeltaV: Stops the halftime popup from displaying 1000 times /// [DataField] public bool HalftimePopupShown; } }