diff --git a/Content.Server/Salvage/SalvageMagnetComponent.cs b/Content.Server/Salvage/SalvageMagnetComponent.cs
index af2d354fd4..a6b9e75cf7 100644
--- a/Content.Server/Salvage/SalvageMagnetComponent.cs
+++ b/Content.Server/Salvage/SalvageMagnetComponent.cs
@@ -47,6 +47,34 @@ namespace Content.Server.Salvage
[DataField("magnetState")]
public MagnetState MagnetState = MagnetState.Inactive;
+ ///
+ /// How long it takes for the magnet to pull in the debris
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("attachingTime")]
+ public TimeSpan AttachingTime = TimeSpan.FromSeconds(10);
+
+ ///
+ /// How long the magnet can hold the debris until it starts losing the lock
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("holdTime")]
+ public TimeSpan HoldTime = TimeSpan.FromSeconds(10);
+
+ ///
+ /// How long the magnet can hold the debris while losing the lock
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("detachingTime")]
+ public TimeSpan DetachingTime = TimeSpan.FromSeconds(10);
+
+ ///
+ /// How long the magnet has to cool down after use
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("cooldownTime")]
+ public TimeSpan CooldownTime = TimeSpan.FromSeconds(10);
+
[DataField("salvageChannel", customTypeSerializer: typeof(PrototypeIdSerializer))]
public string SalvageChannel = "Supply";
diff --git a/Content.Server/Salvage/SalvageSystem.cs b/Content.Server/Salvage/SalvageSystem.cs
index 5e33fb55f4..739eb3431b 100644
--- a/Content.Server/Salvage/SalvageSystem.cs
+++ b/Content.Server/Salvage/SalvageSystem.cs
@@ -30,10 +30,6 @@ namespace Content.Server.Salvage
[Dependency] private readonly RadioSystem _radioSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
- private static readonly TimeSpan AttachingTime = TimeSpan.FromSeconds(30);
- private static readonly TimeSpan HoldTime = TimeSpan.FromMinutes(4);
- private static readonly TimeSpan DetachingTime = TimeSpan.FromSeconds(30);
- private static readonly TimeSpan CooldownTime = TimeSpan.FromMinutes(1);
private static readonly int SalvageLocationPlaceAttempts = 16;
// TODO: This is probably not compatible with multi-station
@@ -76,18 +72,18 @@ namespace Content.Server.Salvage
if (!Resolve(uid, ref component, false))
return;
- int timeLeft = (component.MagnetState.Until.Minutes * 60 + component.MagnetState.Until.Seconds) - (currentTime.Minutes * 60 + currentTime.Seconds);
+ int timeLeft = Convert.ToInt32(component.MagnetState.Until.TotalSeconds - currentTime.TotalSeconds);
if (component.MagnetState.StateType == MagnetStateType.Inactive)
component.ChargeRemaining = 5;
else if (component.MagnetState.StateType == MagnetStateType.Holding)
{
- component.ChargeRemaining = (timeLeft / ((HoldTime.Minutes * 60 + HoldTime.Seconds) / component.ChargeCapacity)) + 1;
+ component.ChargeRemaining = (timeLeft / (Convert.ToInt32(component.HoldTime.TotalSeconds) / component.ChargeCapacity)) + 1;
}
else if (component.MagnetState.StateType == MagnetStateType.Detaching)
component.ChargeRemaining = 0;
else if (component.MagnetState.StateType == MagnetStateType.CoolingDown)
{
- component.ChargeRemaining = component.ChargeCapacity - (timeLeft / ((CooldownTime.Minutes * 60 + CooldownTime.Seconds) / component.ChargeCapacity)) - 1;
+ component.ChargeRemaining = component.ChargeCapacity - (timeLeft / (Convert.ToInt32(component.CooldownTime.TotalSeconds) / component.ChargeCapacity)) - 1;
}
if (component.PreviousCharge != component.ChargeRemaining)
{
@@ -202,7 +198,7 @@ namespace Content.Server.Salvage
_salvageGridStates[gridId] = gridState;
}
gridState.ActiveMagnets.Add(component);
- component.MagnetState = new MagnetState(MagnetStateType.Attaching, gridState.CurrentTime + AttachingTime);
+ component.MagnetState = new MagnetState(MagnetStateType.Attaching, gridState.CurrentTime + component.AttachingTime);
RaiseLocalEvent(new SalvageMagnetActivatedEvent(component.Owner));
Report(component.Owner, component.SalvageChannel, "salvage-system-report-activate-success");
break;
@@ -348,7 +344,7 @@ namespace Content.Server.Salvage
var pulledTransform = EntityManager.GetComponent(salvageEntityId.Value);
pulledTransform.WorldRotation = spAngle;
- Report(component.Owner, component.SalvageChannel, "salvage-system-announcement-arrived", ("timeLeft", HoldTime.TotalSeconds));
+ Report(component.Owner, component.SalvageChannel, "salvage-system-announcement-arrived", ("timeLeft", component.HoldTime.TotalSeconds));
return true;
}
@@ -368,16 +364,16 @@ namespace Content.Server.Salvage
case MagnetStateType.Attaching:
if (SpawnSalvage(magnet))
{
- magnet.MagnetState = new MagnetState(MagnetStateType.Holding, currentTime + HoldTime);
+ magnet.MagnetState = new MagnetState(MagnetStateType.Holding, currentTime + magnet.HoldTime);
}
else
{
- magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + CooldownTime);
+ magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + magnet.CooldownTime);
}
break;
case MagnetStateType.Holding:
- Report(magnet.Owner, magnet.SalvageChannel, "salvage-system-announcement-losing", ("timeLeft", DetachingTime.TotalSeconds));
- magnet.MagnetState = new MagnetState(MagnetStateType.Detaching, currentTime + DetachingTime);
+ Report(magnet.Owner, magnet.SalvageChannel, "salvage-system-announcement-losing", ("timeLeft", magnet.DetachingTime.TotalSeconds));
+ magnet.MagnetState = new MagnetState(MagnetStateType.Detaching, currentTime + magnet.DetachingTime);
break;
case MagnetStateType.Detaching:
if (magnet.AttachedEntity.HasValue)
@@ -389,7 +385,7 @@ namespace Content.Server.Salvage
Logger.ErrorS("salvage", "Salvage detaching was expecting attached entity but it was null");
}
Report(magnet.Owner, magnet.SalvageChannel, "salvage-system-announcement-lost");
- magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + CooldownTime);
+ magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + magnet.CooldownTime);
break;
case MagnetStateType.CoolingDown:
magnet.MagnetState = MagnetState.Inactive;
diff --git a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml
index da578d9877..522e10297d 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml
@@ -62,6 +62,10 @@
offset: 0, 0
offsetRadiusMin: 24
offsetRadiusMax: 48
+ attachingTime: 30
+ holdTime: 240
+ detachingTime: 30
+ cooldownTime: 60
- type: ApcPowerReceiver
powerLoad: 2500 # TODO change this to a HV power draw that really hits the grid hard WHEN active