using Content.Shared.Whitelist; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Cargo.Prototypes; /// /// This is a prototype for a cargo bounty, a set of items /// that must be sold together in a labeled container in order /// to receive a monetary reward. /// [Prototype, Serializable, NetSerializable] public sealed partial class CargoBountyPrototype : IPrototype { /// [IdDataField] public string ID { get; private set; } = default!; /// /// The monetary reward for completing the bounty /// [DataField(required: true)] public int Reward; /// /// A description for flava purposes. /// [DataField] public LocId Description = string.Empty; /// /// The entries that must be satisfied for the cargo bounty to be complete. /// [DataField(required: true)] public List Entries = new(); /// /// A prefix appended to the beginning of a bounty's ID. /// [DataField] public string IdPrefix = "NT"; } [DataDefinition, Serializable, NetSerializable] public readonly partial record struct CargoBountyItemEntry() { /// /// A whitelist for determining what items satisfy the entry. /// [DataField(required: true)] public EntityWhitelist Whitelist { get; init; } = default!; /// /// A blacklist that can be used to exclude items in the whitelist. /// [DataField] public EntityWhitelist? Blacklist { get; init; } = null; // todo: implement some kind of simple generic condition system /// /// How much of the item must be present to satisfy the entry /// [DataField] public int Amount { get; init; } = 1; /// /// A player-facing name for the item. /// [DataField] public LocId Name { get; init; } = string.Empty; }