using Content.Shared.Store; using Content.Shared.Store.Components; using Robust.Shared.Prototypes; namespace Content.Server.Store.Conditions; public sealed partial class BuyBeforeCondition : ListingCondition { /// /// Required listing(s) needed to purchase before this listing is available /// [DataField(required: true)] public HashSet> Whitelist; /// /// Listing(s) that if bought, block this purchase, if any. /// public HashSet>? Blacklist; public override bool Condition(ListingConditionArgs args) { if (!args.EntityManager.TryGetComponent(args.StoreEntity, out var storeComp)) return false; var allListings = storeComp.FullListingsCatalog; var purchasesFound = false; if (Blacklist != null) { foreach (var blacklistListing in Blacklist) { foreach (var listing in allListings) { if (listing.ID == blacklistListing.Id && listing.PurchaseAmount > 0) return false; } } } foreach (var requiredListing in Whitelist) { foreach (var listing in allListings) { if (listing.ID == requiredListing.Id) { purchasesFound = listing.PurchaseAmount > 0; break; } } } return purchasesFound; } }