Фикс открытия ролей, повышение пенсионного возраста... Ой, требований возраста для командования.

This commit is contained in:
VigersRay 2024-08-15 00:26:50 +03:00
parent d74a6abb31
commit afe7f25a2b
26 changed files with 84 additions and 43 deletions

View file

@ -13,7 +13,6 @@ using Robust.Shared.Network;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Content.Shared.Preferences;
using Content.Sunrise.Interfaces.Shared; // Sunrise-Sponsors
namespace Content.Client.Players.PlayTimeTracking;
@ -115,11 +114,6 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager
if (player == null)
return true;
// Sunrise-Sponsors-Start
if (_sponsorsMgr != null && _sponsorsMgr.GetClientPrototypes().Contains(job.ID))
return true;
// Sunrise-Sponsors-End
// Sunrise-Start
if (profile != null)
{
@ -137,10 +131,10 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager
public bool CheckRoleRequirements(JobPrototype job, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason)
{
var reqs = _entManager.System<SharedRoleSystem>().GetJobRequirement(job);
return CheckRoleRequirements(reqs, profile, out reason);
return CheckRoleRequirements(reqs, job.ID, profile, out reason); // Sunrise-Edit
}
public bool CheckRoleRequirements(HashSet<JobRequirement>? requirements, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason)
public bool CheckRoleRequirements(HashSet<JobRequirement>? requirements, string protoId, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason) // Sunrise-Edit
{
reason = null;
@ -150,7 +144,7 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager
var reasons = new List<string>();
foreach (var requirement in requirements)
{
if (requirement.Check(_entManager, _prototypes, profile, _roles, out var jobReason))
if (requirement.Check(_entManager, _prototypes, _sponsorsMgr, protoId, profile, _roles, out var jobReason)) // Sunrise-Edit
continue;
reasons.Add(jobReason.ToMarkup());

View file

@ -98,16 +98,11 @@ namespace Content.Client.UserInterface.Systems.Ghost.Controls.Roles
bool hasAccess = true;
FormattedMessage? reason;
if (!requirementsManager.CheckRoleRequirements(group.Key.Requirements, null, out reason))
if (!requirementsManager.CheckRoleRequirements(group.Key.Requirements, group.Key.PrototypeId, null, out reason)) // Sunrise-Edit
{
hasAccess = false;
}
// Sunrise-Sponsors-Start
if (_sponsorsManager != null && _sponsorsManager.GetClientPrototypes().Contains(group.Key.PrototypeId))
hasAccess = true;
// Sunrise-Sponsors-End
_window.AddEntry(name, description, hasAccess, reason, group, spriteSystem);
}

View file

@ -213,15 +213,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
playTimes = new Dictionary<string, TimeSpan>();
}
// Sunrise-Sponsors-Start
if (_sponsorsManager != null && _sponsorsManager.TryGetPrototypes(player.UserId, out var prototypes))
{
if (prototypes.Contains(role))
return true;
}
// Sunrise-Sponsors-End
return JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter);
return JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter, _sponsorsManager);
}
public HashSet<ProtoId<JobPrototype>> GetDisallowedJobs(ICommonSession player)
@ -238,7 +230,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
foreach (var job in _prototypes.EnumeratePrototypes<JobPrototype>())
{
if (JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter))
if (JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter, _sponsorsManager)) // Sunrise-Edit
roles.Add(job.ID);
}
@ -262,19 +254,11 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
{
if (_prototypes.TryIndex(jobs[i], out var job)
&& JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter))
&& JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter, _sponsorsManager)) // Sunrise-Edit
{
continue;
}
// Sunrise-Sponsors-Start
if (_sponsorsManager != null && _sponsorsManager.TryGetPrototypes(player.UserId, out var prototypes))
{
if (prototypes.Contains(jobs[i]))
continue;
}
// Sunrise-Sponsors-End
jobs.RemoveSwap(i);
i--;
}

View file

@ -1,6 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Players.PlayTimeTracking;
using Content.Shared.Roles;
using Content.Sunrise.Interfaces.Shared;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
@ -27,6 +28,8 @@ public sealed partial class JobRequirementLoadoutEffect : LoadoutEffect
var playtimes = manager.GetPlayTimes(session);
return Requirement.Check(collection.Resolve<IEntityManager>(),
collection.Resolve<IPrototypeManager>(),
null,
null,
profile,
playtimes,
out reason);

View file

@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Preferences;
using Content.Sunrise.Interfaces.Shared;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
@ -19,6 +20,8 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason)

View file

@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Preferences;
using Content.Sunrise.Interfaces.Shared;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
@ -25,11 +26,19 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason)
{
reason = new FormattedMessage();
// Sunrise-Sponsors-Start
if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId))
return true;
// Sunrise-Sponsors-End
var playtime = TimeSpan.Zero;
// Check all jobs' departments

View file

@ -1,6 +1,7 @@
using System.Diagnostics.CodeAnalysis;
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;
@ -18,12 +19,19 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason)
{
reason = new FormattedMessage();
// Sunrise-Sponsors-Start
if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId))
return true;
// Sunrise-Sponsors-End
var overallTime = playTimes.GetValueOrDefault(PlayTimeTrackingShared.TrackerOverall);
var overallDiff = Time.TotalMinutes - overallTime.TotalMinutes;

View file

@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis;
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;
@ -25,12 +26,19 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason)
{
reason = new FormattedMessage();
// Sunrise-Sponsors-Start
if (sponsorsManager != null && protoId != null && sponsorsManager.GetClientPrototypes().Contains(protoId))
return true;
// Sunrise-Sponsors-End
string proto = Role;
playTimes.TryGetValue(proto, out var roleTime);

View file

@ -2,6 +2,7 @@ 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;
@ -21,6 +22,8 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason)

View file

@ -1,5 +1,6 @@
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;
@ -14,7 +15,8 @@ public static class JobRequirements
[NotNullWhen(false)] out FormattedMessage? reason,
IEntityManager entManager,
IPrototypeManager protoManager,
HumanoidCharacterProfile? profile)
HumanoidCharacterProfile? profile,
ISharedSponsorsManager? sponsorsManager) // Sunrise-Edit
{
var sys = entManager.System<SharedRoleSystem>();
var requirements = sys.GetJobRequirement(job);
@ -24,7 +26,7 @@ public static class JobRequirements
foreach (var requirement in requirements)
{
if (!requirement.Check(entManager, protoManager, profile, playTimes, out reason))
if (!requirement.Check(entManager, protoManager, sponsorsManager, job.ID, profile, playTimes, out reason)) // Sunrise-Edit
return false;
}
@ -45,6 +47,8 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason);

View file

@ -1,6 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Preferences;
using Content.Shared.Roles;
using Content.Sunrise.Interfaces.Shared;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
@ -15,6 +16,8 @@ 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,
[NotNullWhen(false)] out FormattedMessage? reason)

View file

@ -2508,3 +2508,16 @@
id: 183
time: '2024-08-14T19:29:19.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/284
- author: VigersRay
changes:
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043E\
\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043E\u0431\u0445\u043E\
\u0434\u0438\u0442\u044C \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\
\u0438\u044F \u0440\u0430\u0441 \u0438 \u0432\u043E\u0437\u0440\u0430\u0441\u0442\
\u0430 \u0434\u043B\u044F \u0434\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u0435\
\u0439 \u0438\u043C\u0435\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u0435\
\ \u0440\u043E\u043B\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\
\u0441\u043A\u043E\u0440\u0434."
type: Fix
id: 184
time: '2024-08-14T21:26:14.019969+00:00'

View file

@ -16,7 +16,7 @@
- !type:OverallPlaytimeRequirement
time: 144000 #40 hrs
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 10
startingGear: QuartermasterGear
icon: "JobIconQuarterMaster"

View file

@ -17,7 +17,7 @@
department: Command
time: 54000 # 15 hours
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 20
startingGear: CaptainGear
icon: "JobIconCaptain"

View file

@ -17,7 +17,7 @@
department: Command
time: 36000 # 10 hours
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 20
startingGear: HoPGear
icon: "JobIconHeadOfPersonnel"

View file

@ -16,7 +16,7 @@
- !type:OverallPlaytimeRequirement
time: 144000 #40 hrs
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 10
startingGear: ChiefEngineerGear
icon: "JobIconChiefEngineer"

View file

@ -18,7 +18,7 @@
- !type:OverallPlaytimeRequirement
time: 144000 #40 hrs
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 10
startingGear: CMOGear
icon: "JobIconChiefMedicalOfficer"

View file

@ -10,7 +10,7 @@
- !type:OverallPlaytimeRequirement
time: 144000 #40 hrs
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 10
startingGear: ResearchDirectorGear
icon: "JobIconResearchDirector"

View file

@ -16,7 +16,7 @@
- !type:OverallPlaytimeRequirement
time: 144000 #40 hrs
- !type:AgeRequirement
requiredAge: 21
requiredAge: 35 # Sunrise-Edit
weight: 10
startingGear: HoSGear
icon: "JobIconHeadOfSecurity"

View file

@ -10,6 +10,8 @@
- !type:DepartmentTimeRequirement
department: Command
time: 62000 # 20 hrs
- !type:AgeRequirement
requiredAge: 30 # Sunrise-Edit
startingGear: BlueShieldGear
icon: JobIconBlueShield
supervisors: job-supervisors-centcom

View file

@ -5,6 +5,8 @@
playTimeTracker: JobCentCommOfficial
requirements:
- !type:DiscordRoleRequirement
- !type:AgeRequirement
requiredAge: 40 # Sunrise-Edit
weight: 30
setPreference: false
startingGear: CentCommOfficialGear

View file

@ -5,6 +5,8 @@
playTimeTracker: JobCentCommOperator
requirements:
- !type:DiscordRoleRequirement
- !type:AgeRequirement
requiredAge: 40 # Sunrise-Edit
weight: 30
setPreference: true
startingGear: CentCommOperatorGear

View file

@ -7,6 +7,8 @@
- !type:DepartmentTimeRequirement
department: Command
time: 62000 # 20 hrs
- !type:AgeRequirement
requiredAge: 40 # Sunrise-Edit
startingGear: NanoTrasenRepresentativeGear
icon: JobIconNanotrasen
supervisors: job-supervisors-centcom

View file

@ -7,6 +7,8 @@
- !type:DepartmentTimeRequirement
department: Command
time: 108000 #30 hrs
- !type:AgeRequirement
requiredAge: 40 # Sunrise-Edit
startingGear: MagistratGear
icon: "JobIconMagistrat"
supervisors: job-supervisors-service

View file

@ -10,6 +10,8 @@
- !type:DepartmentTimeRequirement
department: Security
time: 18000 # 5h Sunrise-RoleTime
- !type:AgeRequirement
requiredAge: 35 # Sunrise-Edit
startingGear: IAAGear
icon: "JobIconIAA"
supervisors: job-supervisors-magistrate

View file

@ -10,6 +10,8 @@
- !type:DepartmentTimeRequirement
department: Security
time: 108000 #30 hrs # Sunrise-RoleTime
- !type:AgeRequirement
requiredAge: 40 # Sunrise-Edit
weight: 10
startingGear: HeadOfPrisonGear
icon: "JobIconHeadOfPrison"