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