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;
[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()
{
SubscribeLocalEvent<UnAFKEvent>(OnUnAFK);
SubscribeLocalEvent<MobStateChangedEvent>(OnMobStateChanged);
SubscribeLocalEvent<PlayerJoinedLobbyEvent>(OnPlayerJoinedLobby);
+ _adminManager.OnPermsChanged += AdminPermsChanged;
}
public override void Shutdown()
base.Shutdown();
_tracking.CalcTrackers -= CalcTrackers;
+ _adminManager.OnPermsChanged -= AdminPermsChanged;
}
private void CalcTrackers(ICommonSession player, HashSet<string> trackers)
if (_afk.IsAfk(player))
return;
+ if (_adminManager.IsAdmin(player))
+ {
+ trackers.Add(PlayTimeTrackingShared.TrackerAdmin);
+ trackers.Add(PlayTimeTrackingShared.TrackerOverall);
+ return;
+ }
+
if (!IsPlayerAlive(player))
return;
_tracking.QueueRefreshTrackers(ev.Session);
}
+ private void AdminPermsChanged(AdminPermsChangedEventArgs admin)
+ {
+ _tracking.QueueRefreshTrackers(admin.Player);
+ }
+
private void OnPlayerAttached(PlayerAttachedEvent ev)
{
_tracking.QueueRefreshTrackers(ev.Player);
-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";
}