TraitorRuleComponent.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Content.Shared.Dataset;
  2. using Content.Shared.FixedPoint;
  3. using Content.Shared.NPC.Prototypes;
  4. using Content.Shared.Random;
  5. using Content.Shared.Roles;
  6. using Robust.Shared.Audio;
  7. using Robust.Shared.Prototypes;
  8. using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
  9. namespace Content.Server.GameTicking.Rules.Components;
  10. [RegisterComponent, Access(typeof(TraitorRuleSystem))]
  11. public sealed partial class TraitorRuleComponent : Component
  12. {
  13. public readonly List<EntityUid> TraitorMinds = new();
  14. [DataField]
  15. public ProtoId<AntagPrototype> TraitorPrototypeId = "Traitor";
  16. [DataField]
  17. public ProtoId<NpcFactionPrototype> NanoTrasenFaction = "NanoTrasen";
  18. [DataField]
  19. public ProtoId<NpcFactionPrototype> SyndicateFaction = "Syndicate";
  20. [DataField]
  21. public ProtoId<LocalizedDatasetPrototype> CodewordAdjectives = "Adjectives";
  22. [DataField]
  23. public ProtoId<LocalizedDatasetPrototype> CodewordVerbs = "Verbs";
  24. [DataField]
  25. public ProtoId<LocalizedDatasetPrototype> ObjectiveIssuers = "TraitorCorporations";
  26. /// <summary>
  27. /// Give this traitor an Uplink on spawn.
  28. /// </summary>
  29. [DataField]
  30. public bool GiveUplink = true;
  31. /// <summary>
  32. /// Give this traitor the codewords.
  33. /// </summary>
  34. [DataField]
  35. public bool GiveCodewords = true;
  36. /// <summary>
  37. /// Give this traitor a briefing in chat.
  38. /// </summary>
  39. [DataField]
  40. public bool GiveBriefing = true;
  41. public int TotalTraitors => TraitorMinds.Count;
  42. public string[] Codewords = new string[3];
  43. public enum SelectionState
  44. {
  45. WaitingForSpawn = 0,
  46. ReadyToStart = 1,
  47. Started = 2,
  48. }
  49. /// <summary>
  50. /// Current state of the rule
  51. /// </summary>
  52. public SelectionState SelectionStatus = SelectionState.WaitingForSpawn;
  53. /// <summary>
  54. /// When should traitors be selected and the announcement made
  55. /// </summary>
  56. [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
  57. public TimeSpan? AnnounceAt;
  58. /// <summary>
  59. /// The amount of codewords that are selected.
  60. /// </summary>
  61. [DataField]
  62. public int CodewordCount = 4;
  63. /// <summary>
  64. /// The amount of TC traitors start with.
  65. /// </summary>
  66. [DataField]
  67. public FixedPoint2 StartingBalance = 20;
  68. }