]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Track Admin Game Time (#24945)
authorRepo <47093363+Titian3@users.noreply.github.com>
Thu, 2 May 2024 06:23:22 +0000 (18:23 +1200)
committerGitHub <noreply@github.com>
Thu, 2 May 2024 06:23:22 +0000 (23:23 -0700)
* AdminTime tracked

* Attempts to fix PR issues.

* Admin afk logic update

Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs
Content.Shared/Players/PlayTimeTracking/PlayTimeTrackingShared.cs

index 035b60e4f33c94451375a549b8729c815986b951..e594e4de26969502f0ca85134b93ebb4a72bd2ce 100644 (file)
@@ -1,4 +1,6 @@
 using System.Linq;
+using Content.Server.Administration;
+using Content.Server.Administration.Managers;
 using Content.Server.Afk;
 using Content.Server.Afk.Events;
 using Content.Server.GameTicking;
@@ -31,6 +33,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
     [Dependency] private readonly IConfigurationManager _cfg = default!;
     [Dependency] private readonly MindSystem _minds = default!;
     [Dependency] private readonly PlayTimeTrackingManager _tracking = default!;
+    [Dependency] private readonly IAdminManager _adminManager = default!;
 
     public override void Initialize()
     {
@@ -47,6 +50,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
         SubscribeLocalEvent<UnAFKEvent>(OnUnAFK);
         SubscribeLocalEvent<MobStateChangedEvent>(OnMobStateChanged);
         SubscribeLocalEvent<PlayerJoinedLobbyEvent>(OnPlayerJoinedLobby);
+        _adminManager.OnPermsChanged += AdminPermsChanged;
     }
 
     public override void Shutdown()
@@ -54,6 +58,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
         base.Shutdown();
 
         _tracking.CalcTrackers -= CalcTrackers;
+        _adminManager.OnPermsChanged -= AdminPermsChanged;
     }
 
     private void CalcTrackers(ICommonSession player, HashSet<string> trackers)
@@ -61,6 +66,13 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
         if (_afk.IsAfk(player))
             return;
 
+        if (_adminManager.IsAdmin(player))
+        {
+            trackers.Add(PlayTimeTrackingShared.TrackerAdmin);
+            trackers.Add(PlayTimeTrackingShared.TrackerOverall);
+            return;
+        }
+
         if (!IsPlayerAlive(player))
             return;
 
@@ -131,6 +143,11 @@ public sealed class PlayTimeTrackingSystem : EntitySystem
         _tracking.QueueRefreshTrackers(ev.Session);
     }
 
+    private void AdminPermsChanged(AdminPermsChangedEventArgs admin)
+    {
+        _tracking.QueueRefreshTrackers(admin.Player);
+    }
+
     private void OnPlayerAttached(PlayerAttachedEvent ev)
     {
         _tracking.QueueRefreshTrackers(ev.Player);
index e300524d8768d44682e8a80cb40dba7a37610bb0..ccaf9c17dd4026d68d35f93f922ae9777c047dde 100644 (file)
@@ -1,9 +1,18 @@
-namespace Content.Shared.Players.PlayTimeTracking;
+using Content.Shared.Dataset;
+
+namespace Content.Shared.Players.PlayTimeTracking;
 
 public static class PlayTimeTrackingShared
 {
     /// <summary>
     /// The prototype ID of the play time tracker that represents overall playtime, i.e. not tied to any one role.
     /// </summary>
+    [ValidatePrototypeId<PlayTimeTrackerPrototype>]
     public const string TrackerOverall = "Overall";
+
+    /// <summary>
+    /// The prototype ID of the play time tracker that represents admin time, when a player is in game as admin.
+    /// </summary>
+    [ValidatePrototypeId<PlayTimeTrackerPrototype>]
+    public const string TrackerAdmin = "Admin";
 }