Play time tracking: Job timers 3: more titles: when the (#9978)
Co-authored-by: Veritius <veritiusgaming@gmail.com> Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
committed by
GitHub
parent
6b94db0336
commit
e852ada6c8
336
Content.Server/Administration/Commands/PlayTimeCommands.cs
Normal file
336
Content.Server/Administration/Commands/PlayTimeCommands.cs
Normal file
@@ -0,0 +1,336 @@
|
||||
using Content.Server.Players.PlayTimeTracking;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Players.PlayTimeTracking;
|
||||
using Robust.Server.Player;
|
||||
using Robust.Shared.Console;
|
||||
|
||||
namespace Content.Server.Administration.Commands;
|
||||
|
||||
[AdminCommand(AdminFlags.Admin)]
|
||||
public sealed class PlayTimeAddOverallCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
|
||||
public string Command => "playtime_addoverall";
|
||||
public string Description => Loc.GetString("cmd-playtime_addoverall-desc");
|
||||
public string Help => Loc.GetString("cmd-playtime_addoverall-help", ("command", Command));
|
||||
|
||||
public async void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||
{
|
||||
if (args.Length != 2)
|
||||
{
|
||||
shell.WriteError(Loc.GetString("cmd-playtime_addoverall-error-args"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!int.TryParse(args[1], out var minutes))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parse-minutes-fail", ("minutes", args[1])));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_playerManager.TryGetSessionByUsername(args[0], out var player))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parse-session-fail", ("username", args[0])));
|
||||
return;
|
||||
}
|
||||
|
||||
_playTimeTracking.AddTimeToOverallPlaytime(player, TimeSpan.FromMinutes(minutes));
|
||||
var overall = _playTimeTracking.GetOverallPlaytime(player);
|
||||
|
||||
shell.WriteLine(Loc.GetString(
|
||||
"cmd-playtime_addoverall-succeed",
|
||||
("username", args[0]),
|
||||
("time", overall)));
|
||||
}
|
||||
|
||||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||
{
|
||||
if (args.Length == 1)
|
||||
return CompletionResult.FromHintOptions(CompletionHelper.SessionNames(),
|
||||
Loc.GetString("cmd-playtime_addoverall-arg-user"));
|
||||
|
||||
if (args.Length == 2)
|
||||
return CompletionResult.FromHint(Loc.GetString("cmd-playtime_addoverall-arg-minutes"));
|
||||
|
||||
return CompletionResult.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class PlayTimeAddRoleCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
|
||||
public string Command => "playtime_addrole";
|
||||
public string Description => Loc.GetString("cmd-playtime_addrole-desc");
|
||||
public string Help => Loc.GetString("cmd-playtime_addrole-help", ("command", Command));
|
||||
|
||||
public async void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||
{
|
||||
if (args.Length != 3)
|
||||
{
|
||||
shell.WriteError(Loc.GetString("cmd-playtime_addrole-error-args"));
|
||||
return;
|
||||
}
|
||||
|
||||
var userName = args[0];
|
||||
if (!_playerManager.TryGetSessionByUsername(userName, out var player))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parse-session-fail", ("username", userName)));
|
||||
return;
|
||||
}
|
||||
|
||||
var role = args[1];
|
||||
|
||||
var m = args[2];
|
||||
if (!int.TryParse(m, out var minutes))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parse-minutes-fail", ("minutes", minutes)));
|
||||
return;
|
||||
}
|
||||
|
||||
_playTimeTracking.AddTimeToTracker(player, role, TimeSpan.FromMinutes(minutes));
|
||||
var time = _playTimeTracking.GetOverallPlaytime(player);
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_addrole-succeed",
|
||||
("username", userName),
|
||||
("role", role),
|
||||
("time", time)));
|
||||
}
|
||||
|
||||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||
{
|
||||
if (args.Length == 1)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.SessionNames(players: _playerManager),
|
||||
Loc.GetString("cmd-playtime_addrole-arg-user"));
|
||||
}
|
||||
|
||||
if (args.Length == 2)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.PrototypeIDs<PlayTimeTrackerPrototype>(),
|
||||
Loc.GetString("cmd-playtime_addrole-arg-role"));
|
||||
}
|
||||
|
||||
if (args.Length == 3)
|
||||
return CompletionResult.FromHint(Loc.GetString("cmd-playtime_addrole-arg-minutes"));
|
||||
|
||||
return CompletionResult.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
[AdminCommand(AdminFlags.Admin)]
|
||||
public sealed class PlayTimeGetOverallCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
|
||||
public string Command => "playtime_getoverall";
|
||||
public string Description => Loc.GetString("cmd-playtime_getoverall-desc");
|
||||
public string Help => Loc.GetString("cmd-playtime_getoverall-help", ("command", Command));
|
||||
|
||||
public async void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||
{
|
||||
if (args.Length != 1)
|
||||
{
|
||||
shell.WriteError(Loc.GetString("cmd-playtime_getoverall-error-args"));
|
||||
return;
|
||||
}
|
||||
|
||||
var userName = args[0];
|
||||
if (!_playerManager.TryGetSessionByUsername(userName, out var player))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parser-session-fail", ("username", userName)));
|
||||
return;
|
||||
}
|
||||
|
||||
var value = _playTimeTracking.GetOverallPlaytime(player);
|
||||
shell.WriteLine(Loc.GetString(
|
||||
"cmd-playtime_getoverall-success",
|
||||
("username", userName),
|
||||
("time", value)));
|
||||
}
|
||||
|
||||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||
{
|
||||
if (args.Length == 1)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.SessionNames(players: _playerManager),
|
||||
Loc.GetString("cmd-playtime_getoverall-arg-user"));
|
||||
}
|
||||
|
||||
return CompletionResult.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
[AdminCommand(AdminFlags.Admin)]
|
||||
public sealed class PlayTimeGetRoleCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
|
||||
public string Command => "playtime_getrole";
|
||||
public string Description => Loc.GetString("cmd-playtime_getrole-desc");
|
||||
public string Help => Loc.GetString("cmd-playtime_getrole-help", ("command", Command));
|
||||
|
||||
public async void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||
{
|
||||
if (args.Length is not (1 or 2))
|
||||
{
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_getrole-error-args"));
|
||||
return;
|
||||
}
|
||||
|
||||
var userName = args[0];
|
||||
if (!_playerManager.TryGetSessionByUsername(userName, out var session))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parser-session-fail", ("username", userName)));
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Length == 1)
|
||||
{
|
||||
var timers = _playTimeTracking.GetTrackerTimes(session);
|
||||
|
||||
if (timers.Count == 0)
|
||||
{
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_getrole-no"));
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var (role, time) in timers)
|
||||
{
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_getrole-role", ("role", role), ("time", time)));
|
||||
}
|
||||
}
|
||||
|
||||
if (args.Length >= 2)
|
||||
{
|
||||
if (args[1] == "Overall")
|
||||
{
|
||||
var timer = _playTimeTracking.GetOverallPlaytime(session);
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_getrole-overall", ("time", timer)));
|
||||
return;
|
||||
}
|
||||
|
||||
var time = _playTimeTracking.GetPlayTimeForTracker(session, args[1]);
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_getrole-succeed", ("username", session.Name),
|
||||
("time", time)));
|
||||
}
|
||||
}
|
||||
|
||||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||
{
|
||||
if (args.Length == 1)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.SessionNames(players: _playerManager),
|
||||
Loc.GetString("cmd-playtime_getrole-arg-user"));
|
||||
}
|
||||
|
||||
if (args.Length == 2)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.PrototypeIDs<PlayTimeTrackerPrototype>(),
|
||||
Loc.GetString("cmd-playtime_getrole-arg-role"));
|
||||
}
|
||||
|
||||
return CompletionResult.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the timers for a particular player immediately
|
||||
/// </summary>
|
||||
[AdminCommand(AdminFlags.Admin)]
|
||||
public sealed class PlayTimeSaveCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
|
||||
public string Command => "playtime_save";
|
||||
public string Description => Loc.GetString("cmd-playtime_save-desc");
|
||||
public string Help => Loc.GetString("cmd-playtime_save-help", ("command", Command));
|
||||
|
||||
public async void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||
{
|
||||
if (args.Length != 1)
|
||||
{
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_save-error-args"));
|
||||
return;
|
||||
}
|
||||
|
||||
var name = args[0];
|
||||
if (!_playerManager.TryGetSessionByUsername(name, out var pSession))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parse-session-fail", ("username", name)));
|
||||
return;
|
||||
}
|
||||
|
||||
_playTimeTracking.SaveSession(pSession);
|
||||
shell.WriteLine(Loc.GetString("cmd-playtime_save-succeed", ("username", name)));
|
||||
}
|
||||
|
||||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||
{
|
||||
if (args.Length == 1)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.SessionNames(players: _playerManager),
|
||||
Loc.GetString("cmd-playtime_save-arg-user"));
|
||||
}
|
||||
|
||||
return CompletionResult.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
[AdminCommand(AdminFlags.Debug)]
|
||||
public sealed class PlayTimeFlushCommand : IConsoleCommand
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
[Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!;
|
||||
|
||||
public string Command => "playtime_flush";
|
||||
public string Description => Loc.GetString("cmd-playtime_flush-desc");
|
||||
public string Help => Loc.GetString("cmd-playtime_flush-help", ("command", Command));
|
||||
|
||||
public void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||
{
|
||||
if (args.Length is not (0 or 1))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("cmd-playtime_flush-error-args"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Length == 0)
|
||||
{
|
||||
_playTimeTracking.FlushAllTrackers();
|
||||
return;
|
||||
}
|
||||
|
||||
var name = args[0];
|
||||
if (!_playerManager.TryGetSessionByUsername(name, out var pSession))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("parse-session-fail", ("username", name)));
|
||||
return;
|
||||
}
|
||||
|
||||
_playTimeTracking.FlushTracker(pSession);
|
||||
}
|
||||
|
||||
public CompletionResult GetCompletion(IConsoleShell shell, string[] args)
|
||||
{
|
||||
if (args.Length == 1)
|
||||
{
|
||||
return CompletionResult.FromHintOptions(
|
||||
CompletionHelper.SessionNames(players: _playerManager),
|
||||
Loc.GetString("cmd-playtime_flush-arg-user"));
|
||||
}
|
||||
|
||||
return CompletionResult.Empty;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user