fixes unlinked cloning pods roundstart (#13030)
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
using System.Linq;
|
||||
using JetBrains.Annotations;
|
||||
using Content.Server.Medical.Components;
|
||||
using Content.Server.Cloning.Components;
|
||||
using Content.Server.MachineLinking.Components;
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Server.Mind.Components;
|
||||
using Content.Server.MachineLinking.System;
|
||||
@@ -34,6 +36,7 @@ namespace Content.Server.Cloning
|
||||
SubscribeLocalEvent<CloningConsoleComponent, UiButtonPressedMessage>(OnButtonPressed);
|
||||
SubscribeLocalEvent<CloningConsoleComponent, AfterActivatableUIOpenEvent>(OnUIOpen);
|
||||
SubscribeLocalEvent<CloningConsoleComponent, PowerChangedEvent>(OnPowerChanged);
|
||||
SubscribeLocalEvent<CloningConsoleComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<CloningConsoleComponent, NewLinkEvent>(OnNewLink);
|
||||
SubscribeLocalEvent<CloningConsoleComponent, PortDisconnectedEvent>(OnPortDisconnected);
|
||||
SubscribeLocalEvent<CloningConsoleComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||
@@ -63,6 +66,27 @@ namespace Content.Server.Cloning
|
||||
UpdateUserInterface(component);
|
||||
}
|
||||
|
||||
private void OnMapInit(EntityUid uid, CloningConsoleComponent component, MapInitEvent args)
|
||||
{
|
||||
if (!TryComp<SignalTransmitterComponent>(uid, out var receiver))
|
||||
return;
|
||||
|
||||
foreach (var port in receiver.Outputs.Values.SelectMany(ports => ports))
|
||||
{
|
||||
if (TryComp<MedicalScannerComponent>(port.Uid, out var scanner))
|
||||
{
|
||||
component.GeneticScanner = port.Uid;
|
||||
scanner.ConnectedConsole = uid;
|
||||
}
|
||||
|
||||
if (TryComp<CloningPodComponent>(port.Uid, out var pod))
|
||||
{
|
||||
component.CloningPod = port.Uid;
|
||||
pod.ConnectedConsole = uid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnNewLink(EntityUid uid, CloningConsoleComponent component, NewLinkEvent args)
|
||||
{
|
||||
if (TryComp<MedicalScannerComponent>(args.Receiver, out var scanner) && args.TransmitterPort == CloningConsoleComponent.ScannerPort)
|
||||
@@ -107,15 +131,17 @@ namespace Content.Server.Cloning
|
||||
|
||||
public void UpdateUserInterface(CloningConsoleComponent consoleComponent)
|
||||
{
|
||||
var ui = _uiSystem.GetUiOrNull(consoleComponent.Owner, CloningConsoleUiKey.Key);
|
||||
if (ui == null)
|
||||
return;
|
||||
if (!_powerReceiverSystem.IsPowered(consoleComponent.Owner))
|
||||
{
|
||||
_uiSystem.GetUiOrNull(consoleComponent.Owner, CloningConsoleUiKey.Key)?.CloseAll();
|
||||
_uiSystem.CloseAll(ui);
|
||||
return;
|
||||
}
|
||||
|
||||
var newState = GetUserInterfaceState(consoleComponent);
|
||||
|
||||
_uiSystem.GetUiOrNull(consoleComponent.Owner, CloningConsoleUiKey.Key)?.SetState(newState);
|
||||
_uiSystem.SetUiState(ui, newState);
|
||||
}
|
||||
|
||||
public void TryClone(EntityUid uid, EntityUid cloningPodUid, EntityUid scannerUid, CloningPodComponent? cloningPod = null, MedicalScannerComponent? scannerComp = null, CloningConsoleComponent? consoleComponent = null)
|
||||
@@ -171,8 +197,8 @@ namespace Content.Server.Cloning
|
||||
string scanBodyInfo = Loc.GetString("generic-unknown");
|
||||
bool scannerConnected = false;
|
||||
bool scannerInRange = consoleComponent.GeneticScannerInRange;
|
||||
if (consoleComponent.GeneticScanner != null && TryComp<MedicalScannerComponent>(consoleComponent.GeneticScanner, out var scanner)) {
|
||||
|
||||
if (consoleComponent.GeneticScanner != null && TryComp<MedicalScannerComponent>(consoleComponent.GeneticScanner, out var scanner))
|
||||
{
|
||||
scannerConnected = true;
|
||||
EntityUid? scanBody = scanner.BodyContainer.ContainedEntity;
|
||||
|
||||
@@ -191,7 +217,7 @@ namespace Content.Server.Cloning
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mindComp == null || mindComp.Mind == null || mindComp.Mind.UserId == null || !_playerManager.TryGetSessionById(mindComp.Mind.UserId.Value, out var client))
|
||||
if (mindComp == null || mindComp.Mind == null || mindComp.Mind.UserId == null || !_playerManager.TryGetSessionById(mindComp.Mind.UserId.Value, out _))
|
||||
{
|
||||
clonerStatus = ClonerStatus.NoMindDetected;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user