diff --git a/Content.Client/White/CriminalRecords/UI/Controls/RecordIconButton.xaml b/Content.Client/White/CriminalRecords/UI/Controls/RecordIconButton.xaml index 2f07f8ab37..53ca862fae 100644 --- a/Content.Client/White/CriminalRecords/UI/Controls/RecordIconButton.xaml +++ b/Content.Client/White/CriminalRecords/UI/Controls/RecordIconButton.xaml @@ -10,7 +10,7 @@ Access="Public" HorizontalExpand="True" VerticalExpand="False" - ToolTip="foobar" + ToolTip="{Loc 'criminal-login-in-desc'}" TooltipDelay="0.25"> _cacheReputation = new(); private readonly Dictionary _playerConnectionTime = new(); + private ISawmill _sawmill = default!; + private const string SawmillId = "reputation.logs"; + public override void Initialize() { base.Initialize(); @@ -95,18 +101,30 @@ public sealed class ReputationManager : EntitySystem #region PublicApi - public async void SetPlayerReputation(NetUserId player, float value) + public async void SetPlayerReputation(NetUserId player, float value, string? admin = null) { + var preValue = await GetPlayerReputation(player); + if (preValue == null) + return; + var guid = player.UserId; await SetPlayerReputationTask(guid, value); + RaiseLocalEvent(new UpdateCachedReputationEvent(player)); + await LogReputationChange(player, preValue.Value, false, admin); } - public async void ModifyPlayerReputation(NetUserId player, float value) + public async void ModifyPlayerReputation(NetUserId player, float value, string? admin = null) { + var preValue = await GetPlayerReputation(player); + if (preValue == null) + return; + var guid = player.UserId; await ModifyPlayerReputationTask(guid, value); + RaiseLocalEvent(new UpdateCachedReputationEvent(player)); + await LogReputationChange(player, preValue.Value, true, admin); } public async Task GetPlayerReputation(NetUserId player) @@ -217,5 +235,25 @@ public sealed class ReputationManager : EntitySystem } } + private async Task LogReputationChange(NetUserId user, float preValue, bool modify, string? admin = null) + { + var located = await _locator.LookupIdAsync(user); + if (located == null) + return; + + var newValue = await GetPlayerReputation(user); + if (newValue == null) + return; + + var adminName = admin != null ? $" by {admin}" : ""; + + var msg = modify + ? $"Reputation of {located.Username} was modified from {preValue} to {newValue.Value}{adminName}." + : $"Reputation of {located.Username} was set from {preValue} to {newValue.Value}{adminName}."; + + _sawmill = _logManager.GetSawmill(SawmillId); + _sawmill.Info(msg); + } + #endregion }