diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs
index 12341263a..47e31d51c 100644
--- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs
+++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Reactor.cs
@@ -11,6 +11,15 @@ namespace Barotrauma.Items.Components
{
private GUITickBox autoTempTickBox;
+ private const int GraphSize = 25;
+ private float graphTimer;
+ private int updateGraphInterval = 500;
+
+ private float[] fissionRateGraph = new float[GraphSize];
+ private float[] coolingRateGraph = new float[GraphSize];
+ private float[] tempGraph = new float[GraphSize];
+ private float[] loadGraph = new float[GraphSize];
+
partial void InitProjSpecific()
{
var button = new GUIButton(new Rectangle(410, 70, 40, 40), "-", "", GuiFrame);
diff --git a/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml b/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml
index 75c6100ad..435f14547 100644
--- a/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml
+++ b/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml
@@ -39,6 +39,7 @@
+
diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs
index dcf134a29..4b539408c 100644
--- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs
+++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Reactor.cs
@@ -32,22 +32,13 @@ namespace Barotrauma.Items.Components
//turned down and cooling increased
private float shutDownTemp;
- private float fireTemp, meltDownTemp;
+ private float fireTemp, meltDownTemp, meltDownDelay;
+
+ private float meltDownTimer;
//how much power is provided to the grid per 1 temperature unit
private float powerPerTemp;
- private int graphSize = 25;
-
- private float graphTimer;
-
- private int updateGraphInterval = 500;
-
- private float[] fissionRateGraph;
- private float[] coolingRateGraph;
- private float[] tempGraph;
- private float[] loadGraph;
-
private float load;
private bool unsentChanges;
@@ -67,6 +58,13 @@ namespace Barotrauma.Items.Components
}
}
+ [Serialize(30.0f, true)]
+ public float MeltdownDelay
+ {
+ get { return meltDownDelay; }
+ set { meltDownDelay = Math.Max(value, 0.0f); }
+ }
+
[Editable(ToolTip = "The temperature at which the reactor catches fire."), Serialize(9000.0f, true)]
public float FireTemp
{
@@ -155,17 +153,9 @@ namespace Barotrauma.Items.Components
public Reactor(Item item, XElement element)
: base(item, element)
{
- fissionRateGraph = new float[graphSize];
- coolingRateGraph = new float[graphSize];
- tempGraph = new float[graphSize];
- loadGraph = new float[graphSize];
-
shutDownTemp = 500.0f;
-
- powerPerTemp = 1.0f;
-
+ powerPerTemp = 1.0f;
IsActive = true;
-
InitProjSpecific();
}
@@ -227,8 +217,19 @@ namespace Barotrauma.Items.Components
if (temperature > meltDownTemp)
{
- MeltDown();
- return;
+ item.SendSignal(0, "1", "meltdown_warning", null);
+ meltDownTimer += deltaTime;
+
+ if (meltDownTimer > MeltdownDelay)
+ {
+ MeltDown();
+ return;
+ }
+ }
+ else
+ {
+ item.SendSignal(0, "0", "meltdown_warning", null);
+ meltDownTimer = Math.Max(0.0f, meltDownTimer - deltaTime);
}
load = 0.0f;
@@ -326,28 +327,26 @@ namespace Barotrauma.Items.Components
private void MeltDown()
{
- if (item.Condition <= 0.0f) return;
+ if (item.Condition <= 0.0f || GameMain.Client != null) return;
GameServer.Log("Reactor meltdown!", ServerLog.MessageType.ItemInteraction);
-
+
item.Condition = 0.0f;
var containedItems = item.ContainedItems;
- if (containedItems == null) return;
-
- foreach (Item containedItem in item.ContainedItems)
+ if (containedItems != null)
{
- if (containedItem == null) continue;
- containedItem.Condition = 0.0f;
- }
-
- if (GameMain.Server != null)
- {
- if (GameMain.Server.ConnectedClients.Contains(BlameOnBroken))
+ foreach (Item containedItem in containedItems)
{
- BlameOnBroken.Karma = 0.0f;
+ if (containedItem == null) continue;
+ containedItem.Condition = 0.0f;
}
}
+
+ if (GameMain.Server != null && GameMain.Server.ConnectedClients.Contains(BlameOnBroken))
+ {
+ BlameOnBroken.Karma = 0.0f;
+ }
}
public override bool Pick(Character picker)
diff --git a/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub b/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub
index 46128132c..46a84530c 100644
Binary files a/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub and b/Barotrauma/BarotraumaShared/Submarines/Aegir Mark III.sub differ
diff --git a/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub b/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub
index d21d7b160..b72efa23f 100644
Binary files a/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub and b/Barotrauma/BarotraumaShared/Submarines/Nehalennia.sub differ
diff --git a/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub b/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub
index 841320461..99f0d9dd3 100644
Binary files a/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub and b/Barotrauma/BarotraumaShared/Submarines/Vellamo.sub differ