using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.Radio.EntitySystems; using Content.Shared.Access.Systems; using Content.Shared.Popups; using Content.Shared.Research.Components; using Content.Shared.Research.Systems; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Timing; namespace Content.Server.Research.Systems { [UsedImplicitly] public sealed partial class ResearchSystem : SharedResearchSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly RadioSystem _radio = default!; public override void Initialize() { base.Initialize(); InitializeClient(); InitializeConsole(); InitializeSource(); InitializeServer(); SubscribeLocalEvent(OnDatabaseRegistrationChanged); } /// /// Gets a server based on it's unique numeric id. /// /// /// /// /// public bool TryGetServerById(int id, [NotNullWhen(true)] out EntityUid? serverUid, [NotNullWhen(true)] out ResearchServerComponent? serverComponent) { serverUid = null; serverComponent = null; var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var server)) { if (server.Id != id) continue; serverUid = uid; serverComponent = server; return true; } return false; } /// /// Gets all the servers on the grid. /// public List GetAllServers(EntityUid client) { var query = EntityQueryEnumerator(); var clientTransform = Transform(client); var list = new List(3); while (query.MoveNext(out var uid, out var server)) { var serverTransform = Transform(uid); if (clientTransform.GridUid != serverTransform.GridUid) { continue; } list.Add(server); } return list; } /// /// Gets the names of all the servers on the grid. /// /// public List GetServerNames(EntityUid client) { var query = EntityQueryEnumerator(); var clientTransform = Transform(client); var list = new List(3); while (query.MoveNext(out var uid, out var server)) { var serverTransform = Transform(uid); if (clientTransform.GridUid != serverTransform.GridUid) { continue; } list.Add(server.ServerName); } return list; } /// /// Gets the ids of all the servers on the grid. /// /// public List GetServerIds(EntityUid client) { var query = EntityQueryEnumerator(); var clientTransform = Transform(client); var list = new List(3); while (query.MoveNext(out var uid, out var server)) { var serverTransform = Transform(uid); if (clientTransform.GridUid != serverTransform.GridUid) { continue; } list.Add(server.Id); } return list; } public override void Update(float frameTime) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var server)) { if (server.NextUpdateTime > _timing.CurTime) continue; server.NextUpdateTime = _timing.CurTime + server.ResearchConsoleUpdateTime; UpdateServer(uid, (int) server.ResearchConsoleUpdateTime.TotalSeconds, server); } } } }