diff --git a/Content.IntegrationTests/Tests/Administration/Logs/AddTests.cs b/Content.IntegrationTests/Tests/Administration/Logs/AddTests.cs index 57bc5f113c..7f338c300c 100644 --- a/Content.IntegrationTests/Tests/Administration/Logs/AddTests.cs +++ b/Content.IntegrationTests/Tests/Administration/Logs/AddTests.cs @@ -291,4 +291,49 @@ public class AddTests : ContentIntegrationTest json.Dispose(); } } + + [Test] + public async Task DuplicatePlayerDoesNotThrowTest() + { + var (client, server) = await StartConnectedServerClientPair(serverOptions: new ServerContentIntegrationOption + { + CVarOverrides = + { + [CCVars.AdminLogsQueueSendDelay.Name] = "0" + }, + }); + + await Task.WhenAll(client.WaitIdleAsync(), server.WaitIdleAsync()); + + var sPlayers = server.ResolveDependency(); + var sSystems = server.ResolveDependency(); + + var sAdminLogSystem = sSystems.GetEntitySystem(); + + var guid = Guid.NewGuid(); + + await server.WaitPost(() => + { + var player = sPlayers.ServerSessions.Single(); + + sAdminLogSystem.Add(LogType.Unknown, $"{player} {player} test log: {guid}"); + }); + + await WaitUntil(server, async () => + { + var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter + { + Search = guid.ToString() + }); + + if (logs.Count == 0) + { + return false; + } + + return true; + }); + + Assert.Pass(); + } } diff --git a/Content.Shared/Administration/Logs/LogStringHandler.cs b/Content.Shared/Administration/Logs/LogStringHandler.cs index a6529c653c..621d1f959b 100644 --- a/Content.Shared/Administration/Logs/LogStringHandler.cs +++ b/Content.Shared/Administration/Logs/LogStringHandler.cs @@ -40,7 +40,23 @@ public ref struct LogStringHandler format = argument[0] == '@' ? argument[1..] : argument; } - Values.Add(format, value); + if (!Values.TryAdd(format, value)) + { + if (Values[format] == (object?) value) + { + return; + } + + var originalFormat = format; + var i = 2; + format = $"{originalFormat}_{i}"; + + while (!Values.TryAdd(format, value)) + { + format = $"{originalFormat}_{i}"; + i++; + } + } } public void AppendLiteral(string value)