From d3d842eecd6366c05f3e6843fa2a15cfaef3cb44 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Wed, 25 Jul 2018 11:49:10 +0300 Subject: [PATCH] Added error checking and logging to wire cloning logic in MapEntity.Clone (see #527) --- .../BarotraumaShared/Source/Map/MapEntity.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs b/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs index ab868b2d1..2c1516ecf 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs @@ -220,12 +220,29 @@ namespace Barotrauma var connectedItem = originalWire.Connections[n].Item; if (connectedItem == null) continue; - + //index of the item the wire is connected to int itemIndex = entitiesToClone.IndexOf(connectedItem); + if (itemIndex < 0) + { + DebugConsole.ThrowError("Error while cloning wires - item \"" + connectedItem.Name + "\" was not found in entities to clone."); + GameAnalyticsManager.AddErrorEventOnce("MapEntity.Clone:ConnectedNotFound" + connectedItem.ID, + GameAnalyticsSDK.Net.EGAErrorSeverity.Error, + "Error while cloning wires - item \"" + connectedItem.Name + "\" was not found in entities to clone."); + continue; + } + //index of the connection in the connectionpanel of the target item int connectionIndex = connectedItem.Connections.IndexOf(originalWire.Connections[n]); - + if (connectionIndex < 0) + { + DebugConsole.ThrowError("Error while cloning wires - connection \"" + originalWire.Connections[n].Name + "\" was not found in connected item \"" + connectedItem.Name + "\"."); + GameAnalyticsManager.AddErrorEventOnce("MapEntity.Clone:ConnectionNotFound" + connectedItem.ID, + GameAnalyticsSDK.Net.EGAErrorSeverity.Error, + "Error while cloning wires - connection \"" + originalWire.Connections[n].Name + "\" was not found in connected item \"" + connectedItem.Name + "\"."); + continue; + } + (clones[itemIndex] as Item).Connections[connectionIndex].TryAddLink(cloneWire); cloneWire.Connect((clones[itemIndex] as Item).Connections[connectionIndex], false); }