using Content.Server.Research.Systems; using Content.Server.Xenoarchaeology.Artifact; using Content.Shared.Popups; using Content.Shared.Xenoarchaeology.Equipment; using Content.Shared.Xenoarchaeology.Equipment.Components; using Robust.Shared.Audio.Systems; namespace Content.Server.Xenoarchaeology.Equipment; /// public sealed class ArtifactAnalyzerSystem : SharedArtifactAnalyzerSystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly ResearchSystem _research = default!; [Dependency] private readonly XenoArtifactSystem _xenoArtifact = default!; /// public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnExtractButtonPressed); } private void OnExtractButtonPressed(Entity ent, ref AnalysisConsoleExtractButtonPressedMessage args) { if (!TryGetArtifactFromConsole(ent, out var artifact)) return; if (!_research.TryGetClientServer(ent, out var server, out var serverComponent)) return; var sumResearch = 0; foreach (var node in _xenoArtifact.GetAllNodes(artifact.Value)) { var research = _xenoArtifact.GetResearchValue(node); _xenoArtifact.SetConsumedResearchValue(node, node.Comp.ConsumedResearchValue + research); sumResearch += research; } // 4-16-25: It's a sad day when a scientist makes negative 5k research if (sumResearch <= 0) return; _research.ModifyServerPoints(server.Value, sumResearch, serverComponent); _audio.PlayPvs(ent.Comp.ExtractSound, artifact.Value); _popup.PopupEntity(Loc.GetString("analyzer-artifact-extract-popup"), artifact.Value, PopupType.Large); } }