DragonComponent.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Content.Shared.NPC.Prototypes;
  2. using Robust.Shared.Audio;
  3. using Robust.Shared.Prototypes;
  4. using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
  5. namespace Content.Server.Dragon
  6. {
  7. [RegisterComponent]
  8. public sealed partial class DragonComponent : Component
  9. {
  10. /// <summary>
  11. /// If we have active rifts.
  12. /// </summary>
  13. [DataField("rifts")]
  14. public List<EntityUid> Rifts = new();
  15. public bool Weakened => WeakenedAccumulator > 0f;
  16. /// <summary>
  17. /// When any rift is destroyed how long is the dragon weakened for
  18. /// </summary>
  19. [ViewVariables(VVAccess.ReadWrite), DataField("weakenedDuration")]
  20. public float WeakenedDuration = 120f;
  21. /// <summary>
  22. /// Has a rift been destroyed and the dragon in a temporary weakened state?
  23. /// </summary>
  24. [ViewVariables(VVAccess.ReadWrite), DataField("weakenedAccumulator")]
  25. public float WeakenedAccumulator = 0f;
  26. [ViewVariables(VVAccess.ReadWrite), DataField("riftAccumulator")]
  27. public float RiftAccumulator = 0f;
  28. /// <summary>
  29. /// Maximum time the dragon can go without spawning a rift before they die.
  30. /// </summary>
  31. [ViewVariables(VVAccess.ReadWrite), DataField("maxAccumulator")] public float RiftMaxAccumulator = 300f;
  32. [DataField("spawnRiftAction", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
  33. public string SpawnRiftAction = "ActionSpawnRift";
  34. /// <summary>
  35. /// Spawns a rift which can summon more mobs.
  36. /// </summary>
  37. [DataField("spawnRiftActionEntity")]
  38. public EntityUid? SpawnRiftActionEntity;
  39. [ViewVariables(VVAccess.ReadWrite), DataField("riftPrototype", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
  40. public string RiftPrototype = "CarpRift";
  41. [ViewVariables(VVAccess.ReadWrite), DataField("soundDeath")]
  42. public SoundSpecifier? SoundDeath = new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg");
  43. [ViewVariables(VVAccess.ReadWrite), DataField("soundRoar")]
  44. public SoundSpecifier? SoundRoar =
  45. new SoundPathSpecifier("/Audio/Animals/space_dragon_roar.ogg")
  46. {
  47. Params = AudioParams.Default.WithVolume(3f),
  48. };
  49. /// <summary>
  50. /// NPC faction to re-add after being zombified.
  51. /// Prevents zombie dragon from being attacked by its own carp.
  52. /// </summary>
  53. [DataField]
  54. public ProtoId<NpcFactionPrototype> Faction = "Dragon";
  55. }
  56. }