using System.ComponentModel.DataAnnotations; using Content.Shared._Horizon.FlavorText; using Content.Shared._Horizon.OutpostCapture.Components; using Content.Shared.Store; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; namespace Content.Server.Store.Conditions; /// /// Позволяет назначить какие из захваченных аванпостов будут /// расширять список приобретений в маркетах /// public sealed partial class BuyerOutpostCondition : ListingCondition { // Фракция которая должна захватить аванпост [DataField(required: true)] public string Faction = string.Empty; // Количество захваченных аванпостов [DataField("totalOutpostWhitelist")] public int OutpostCapturedCount; // Белый список "именованных" аванпостов [DataField("namedOutpostWhitelist")] public HashSet OutpostCapturedWhitelist = []; public override bool Condition(ListingConditionArgs args) { if (Faction == string.Empty) return true; var outpostCapturedCount = 0; var namedOutpostCaptured = 0; var query = args.EntityManager.AllEntityQueryEnumerator(); while (query.MoveNext(out var outpost)) { if (outpost.CapturedFaction == null || outpost.CapturedFaction != Faction) continue; if (outpost.OutpostName == string.Empty && OutpostCapturedWhitelist.Contains(outpost.OutpostName)) namedOutpostCaptured++; outpostCapturedCount++; } return outpostCapturedCount >= OutpostCapturedCount && namedOutpostCaptured >= OutpostCapturedWhitelist.Count; } }