diff --git a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs index 8ddd2fa385..4596fc4b78 100644 --- a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs +++ b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs @@ -141,10 +141,12 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager if (requirements == null || !_cfg.GetCVar(CCVars.GameRoleTimers)) return true; + var sponsorPrototypes = _sponsorsMgr?.GetClientPrototypes().ToArray() ?? []; // Sunrise-Sponsors + var reasons = new List(); foreach (var requirement in requirements) { - if (requirement.Check(_entManager, _prototypes, _sponsorsMgr, protoId, profile, _roles, out var jobReason)) // Sunrise-Edit + if (requirement.Check(_entManager, _prototypes, profile, _roles, protoId, sponsorPrototypes, out var jobReason)) // Sunrise-Sponsors continue; reasons.Add(jobReason.ToMarkup()); diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index f3c2a1479a..a4578369a5 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -213,7 +213,13 @@ public sealed class PlayTimeTrackingSystem : EntitySystem playTimes = new Dictionary(); } - return JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter, _sponsorsManager); + // Sunrise-Sponsors-Start + var sponsorPrototypes = _sponsorsManager != null && _sponsorsManager.TryGetPrototypes(player.UserId, out var prototypes) + ? prototypes.ToArray() + : []; + // Sunrise-Sponsors-End + + return JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter, sponsorPrototypes); // Sunrise-Sponsors } public HashSet> GetDisallowedJobs(ICommonSession player) @@ -228,9 +234,15 @@ public sealed class PlayTimeTrackingSystem : EntitySystem playTimes = new Dictionary(); } + // Sunrise-Sponsors-Start + var sponsorPrototypes = _sponsorsManager != null && _sponsorsManager.TryGetPrototypes(player.UserId, out var prototypes) + ? prototypes.ToArray() + : []; + // Sunrise-Sponsors-End + foreach (var job in _prototypes.EnumeratePrototypes()) { - if (JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter, _sponsorsManager)) // Sunrise-Edit + if (JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter, sponsorPrototypes)) // Sunrise-Sponsors roles.Add(job.ID); } @@ -250,11 +262,17 @@ public sealed class PlayTimeTrackingSystem : EntitySystem playTimes ??= new Dictionary(); } + // Sunrise-Sponsors-Start + var sponsorPrototypes = _sponsorsManager != null && _sponsorsManager.TryGetPrototypes(player.UserId, out var prototypes) + ? prototypes.ToArray() + : []; + // Sunrise-Sponsors-End + for (var i = 0; i < jobs.Count; i++) { if (_prototypes.TryIndex(jobs[i], out var job) - && JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter, _sponsorsManager)) // Sunrise-Edit + && JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter, sponsorPrototypes)) // Sunrise-Sponsors { continue; } diff --git a/Content.Shared/Preferences/Loadouts/Effects/JobRequirementLoadoutEffect.cs b/Content.Shared/Preferences/Loadouts/Effects/JobRequirementLoadoutEffect.cs index acf1bb2bf9..25f1df62db 100644 --- a/Content.Shared/Preferences/Loadouts/Effects/JobRequirementLoadoutEffect.cs +++ b/Content.Shared/Preferences/Loadouts/Effects/JobRequirementLoadoutEffect.cs @@ -24,14 +24,23 @@ public sealed partial class JobRequirementLoadoutEffect : LoadoutEffect return true; } + // Sunrise-Sponsors-Start + string[] sponsorPrototypes = []; + if (collection.TryResolveType(out var sponsorsManager)) + { + sponsorPrototypes = sponsorsManager?.GetClientPrototypes().ToArray() ?? []; + } + // Sunrise-Sponsors-End + var manager = collection.Resolve(); var playtimes = manager.GetPlayTimes(session); + return Requirement.Check(collection.Resolve(), collection.Resolve(), - null, - null, profile, playtimes, + null, // Sunrise-Sponsors + sponsorPrototypes, // Sunrise-Sponsors out reason); } } diff --git a/Content.Shared/Roles/JobRequirement/AgeRequirement.cs b/Content.Shared/Roles/JobRequirement/AgeRequirement.cs index d393d2a893..6c5c411a00 100644 --- a/Content.Shared/Roles/JobRequirement/AgeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/AgeRequirement.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Preferences; -using Content.Sunrise.Interfaces.Shared; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -20,10 +19,10 @@ public sealed partial class AgeRequirement : JobRequirement public override bool Check(IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Sponsors + string[] sponsorPrototypes, // Sunrise-Sponsors [NotNullWhen(false)] out FormattedMessage? reason) { reason = new FormattedMessage(); diff --git a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs index 7d0068704e..d3c33ebf40 100644 --- a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs @@ -1,6 +1,6 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using Content.Shared.Preferences; -using Content.Sunrise.Interfaces.Shared; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -26,16 +26,16 @@ public sealed partial class DepartmentTimeRequirement : JobRequirement public override bool Check(IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Sponsors + string[] sponsorPrototypes, // Sunrise-Sponsors [NotNullWhen(false)] out FormattedMessage? reason) { reason = new FormattedMessage(); // Sunrise-Sponsors-Start - if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId)) + if (sponsorPrototypes.Contains(protoId)) return true; // Sunrise-Sponsors-End diff --git a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs index 8e473adc95..cf95c1b698 100644 --- a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; -using Content.Sunrise.Interfaces.Shared; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -19,16 +19,16 @@ public sealed partial class OverallPlaytimeRequirement : JobRequirement public override bool Check(IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Sponsors + string[] sponsorPrototypes, // Sunrise-Sponsors [NotNullWhen(false)] out FormattedMessage? reason) { reason = new FormattedMessage(); // Sunrise-Sponsors-Start - if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId)) + if (sponsorPrototypes.Contains(protoId)) return true; // Sunrise-Sponsors-End diff --git a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs index 20fa6f83f5..4a2d1c9090 100644 --- a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs @@ -1,8 +1,8 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; using Content.Shared.Roles.Jobs; -using Content.Sunrise.Interfaces.Shared; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -26,16 +26,16 @@ public sealed partial class RoleTimeRequirement : JobRequirement public override bool Check(IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Edit + string[] sponsorPrototypes, // Sunrise-Edit [NotNullWhen(false)] out FormattedMessage? reason) { reason = new FormattedMessage(); // Sunrise-Sponsors-Start - if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId)) + if (sponsorPrototypes.Contains(protoId)) return true; // Sunrise-Sponsors-End diff --git a/Content.Shared/Roles/JobRequirement/SpeciesRequirement.cs b/Content.Shared/Roles/JobRequirement/SpeciesRequirement.cs index 59b6b1da5f..8ca9d80aa3 100644 --- a/Content.Shared/Roles/JobRequirement/SpeciesRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/SpeciesRequirement.cs @@ -2,7 +2,6 @@ using System.Diagnostics.CodeAnalysis; using System.Text; using Content.Shared.Humanoid.Prototypes; using Content.Shared.Preferences; -using Content.Sunrise.Interfaces.Shared; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -22,10 +21,10 @@ public sealed partial class SpeciesRequirement : JobRequirement public override bool Check(IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Sponsors + string[] sponsorPrototypes, // Sunrise-Sponsors [NotNullWhen(false)] out FormattedMessage? reason) { reason = new FormattedMessage(); diff --git a/Content.Shared/Roles/JobRequirements.cs b/Content.Shared/Roles/JobRequirements.cs index f4c14ff43f..a3b35dc1f7 100644 --- a/Content.Shared/Roles/JobRequirements.cs +++ b/Content.Shared/Roles/JobRequirements.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Preferences; -using Content.Sunrise.Interfaces.Shared; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -16,7 +15,7 @@ public static class JobRequirements IEntityManager entManager, IPrototypeManager protoManager, HumanoidCharacterProfile? profile, - ISharedSponsorsManager? sponsorsManager) // Sunrise-Edit + string[] sponsorPrototypes) // Sunrise-Sponsors { var sys = entManager.System(); var requirements = sys.GetJobRequirement(job); @@ -26,7 +25,7 @@ public static class JobRequirements foreach (var requirement in requirements) { - if (!requirement.Check(entManager, protoManager, sponsorsManager, job.ID, profile, playTimes, out reason)) // Sunrise-Edit + if (!requirement.Check(entManager, protoManager, profile, playTimes, job.ID, sponsorPrototypes, out reason)) // Sunrise-Sponsors return false; } @@ -47,9 +46,9 @@ public abstract partial class JobRequirement public abstract bool Check( IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Sponsors + string[] sponsorPrototypes, // Sunrise-Sponsors [NotNullWhen(false)] out FormattedMessage? reason); } diff --git a/Content.Shared/_Sunrise/Roles/DiscordRoleRequirement.cs b/Content.Shared/_Sunrise/Roles/DiscordRoleRequirement.cs index 241a73e548..18dfc0962c 100644 --- a/Content.Shared/_Sunrise/Roles/DiscordRoleRequirement.cs +++ b/Content.Shared/_Sunrise/Roles/DiscordRoleRequirement.cs @@ -1,12 +1,11 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using Content.Shared.Preferences; using Content.Shared.Roles; -using Content.Sunrise.Interfaces.Shared; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Robust.Shared.Localization; namespace Content.Shared._Sunrise.Roles; @@ -16,10 +15,10 @@ public sealed partial class DiscordRoleRequirement : JobRequirement { public override bool Check(IEntityManager entManager, IPrototypeManager protoManager, - ISharedSponsorsManager? sponsorsManager, // Sunrise-Edit - string? protoId, // Sunrise-Edit HumanoidCharacterProfile? profile, IReadOnlyDictionary playTimes, + string? protoId, // Sunrise-Edit + string[] sponsorPrototypes, // Sunrise-Edit [NotNullWhen(false)] out FormattedMessage? reason) { reason = new FormattedMessage(); @@ -28,7 +27,7 @@ public sealed partial class DiscordRoleRequirement : JobRequirement return true; // Sunrise-Sponsors-Start - if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId)) + if (sponsorPrototypes.Contains(protoId)) return true; // Sunrise-Sponsors-End