From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:05:32 +0000 (+0100) Subject: TryGetRandomRecord in StationRecordsSystem (#35452) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=51104a73165901e033957f5bd5ed27f4d78072c8;p=space-station-14.git TryGetRandomRecord in StationRecordsSystem (#35452) * init * requested changes * stuff --- diff --git a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs index d4f0aa1f28..a5332022ee 100644 --- a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs +++ b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Roles; using Content.Shared.StationRecords; using Robust.Shared.Enums; using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Server.StationRecords.Systems; @@ -39,6 +40,7 @@ public sealed class StationRecordsSystem : SharedStationRecordsSystem [Dependency] private readonly StationRecordKeyStorageSystem _keyStorage = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IdCardSystem _idCard = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { @@ -232,6 +234,28 @@ public sealed class StationRecordsSystem : SharedStationRecordsSystem return records.Records.TryGetRecordEntry(key.Id, out entry); } + /// + /// Gets a random record from the station's record entries. + /// + /// The EntityId of the station from which you want to get the record. + /// The resulting entry. + /// Type to get from the record set. + /// True if a record was obtained. False otherwise. + public bool TryGetRandomRecord(Entity ent, [NotNullWhen(true)] out T? entry) + { + entry = default; + + if (!Resolve(ent.Owner, ref ent.Comp)) + return false; + + if (ent.Comp.Records.Keys.Count == 0) + return false; + + var key = _random.Pick(ent.Comp.Records.Keys); + + return ent.Comp.Records.TryGetRecordEntry(key, out entry); + } + /// /// Returns an id if a record with the same name exists. ///