Фикс открытия ролей спонсоркой

This commit is contained in:
VigersRay 2024-08-15 21:08:28 +03:00
parent 605e3f1fd2
commit e081aa66fd
10 changed files with 59 additions and 34 deletions

View file

@ -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<string>();
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());

View file

@ -213,7 +213,13 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
playTimes = new Dictionary<string, TimeSpan>();
}
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<ProtoId<JobPrototype>> GetDisallowedJobs(ICommonSession player)
@ -228,9 +234,15 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
playTimes = new Dictionary<string, TimeSpan>();
}
// 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<JobPrototype>())
{
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<string, TimeSpan>();
}
// 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;
}

View file

@ -24,14 +24,23 @@ public sealed partial class JobRequirementLoadoutEffect : LoadoutEffect
return true;
}
// Sunrise-Sponsors-Start
string[] sponsorPrototypes = [];
if (collection.TryResolveType<ISharedSponsorsManager>(out var sponsorsManager))
{
sponsorPrototypes = sponsorsManager?.GetClientPrototypes().ToArray() ?? [];
}
// Sunrise-Sponsors-End
var manager = collection.Resolve<ISharedPlaytimeManager>();
var playtimes = manager.GetPlayTimes(session);
return Requirement.Check(collection.Resolve<IEntityManager>(),
collection.Resolve<IPrototypeManager>(),
null,
null,
profile,
playtimes,
null, // Sunrise-Sponsors
sponsorPrototypes, // Sunrise-Sponsors
out reason);
}
}

View file

@ -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<string, TimeSpan> playTimes,
string? protoId, // Sunrise-Sponsors
string[] sponsorPrototypes, // Sunrise-Sponsors
[NotNullWhen(false)] out FormattedMessage? reason)
{
reason = new FormattedMessage();

View file

@ -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<string, TimeSpan> 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

View file

@ -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<string, TimeSpan> 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

View file

@ -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<string, TimeSpan> 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

View file

@ -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<string, TimeSpan> playTimes,
string? protoId, // Sunrise-Sponsors
string[] sponsorPrototypes, // Sunrise-Sponsors
[NotNullWhen(false)] out FormattedMessage? reason)
{
reason = new FormattedMessage();

View file

@ -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<SharedRoleSystem>();
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<string, TimeSpan> playTimes,
string? protoId, // Sunrise-Sponsors
string[] sponsorPrototypes, // Sunrise-Sponsors
[NotNullWhen(false)] out FormattedMessage? reason);
}

View file

@ -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<string, TimeSpan> 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