diff --git a/Subsurface/Source/Events/MonsterEvent.cs b/Subsurface/Source/Events/MonsterEvent.cs index ab240f881..bdc894828 100644 --- a/Subsurface/Source/Events/MonsterEvent.cs +++ b/Subsurface/Source/Events/MonsterEvent.cs @@ -52,13 +52,13 @@ namespace Barotrauma spawnDeep = ToolBox.GetAttributeBool(element, "spawndeep", false); - if (GameMain.Server != null) + if (GameMain.NetworkMember != null) { - List monsterNames = GameMain.Server.monsterEnabled.Keys.ToList(); + List monsterNames = GameMain.NetworkMember.monsterEnabled.Keys.ToList(); string tryKey = monsterNames.Find(s => characterFile.ToLower().Contains(s.ToLower())); if (!string.IsNullOrWhiteSpace(tryKey)) { - if (!GameMain.Server.monsterEnabled[tryKey]) disallowed = true; //spawn was disallowed by host + if (!GameMain.NetworkMember.monsterEnabled[tryKey]) disallowed = true; //spawn was disallowed by host } } } diff --git a/Subsurface/Source/Events/ScriptedEvent.cs b/Subsurface/Source/Events/ScriptedEvent.cs index 72aa5bc02..a84c01fd6 100644 --- a/Subsurface/Source/Events/ScriptedEvent.cs +++ b/Subsurface/Source/Events/ScriptedEvent.cs @@ -137,7 +137,15 @@ namespace Barotrauma } ConstructorInfo constructor = t.GetConstructor(new[] { typeof(XElement) }); - object instance = constructor.Invoke(new object[] { element }); + object instance = null; + try + { + instance = constructor.Invoke(new object[] { element }); + } + catch (Exception ex) + { + DebugConsole.ThrowError(ex.InnerException!=null ? ex.InnerException.ToString() : ex.ToString()); + } //previousEvents.Add(i); diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index e5ebaa5fa..63d03c439 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using System.ComponentModel; +using System.Linq; namespace Barotrauma.Networking { @@ -523,7 +524,7 @@ namespace Barotrauma.Networking string shuttleName = inc.ReadString(); string shuttleHash = inc.ReadString(); - + NetOutgoingMessage readyToStartMsg = client.CreateMessage(); readyToStartMsg.Write((byte)ClientPacketHeader.RESPONSE_STARTGAME); @@ -657,6 +658,28 @@ namespace Barotrauma.Networking bool isTraitor = inc.ReadBoolean(); string traitorTargetName = isTraitor ? inc.ReadString() : null; + + //monster spawn settings + if (monsterEnabled == null) + { + List monsterNames1 = Directory.GetDirectories("Content/Characters").ToList(); + for (int i = 0; i < monsterNames1.Count; i++) + { + monsterNames1[i] = monsterNames1[i].Replace("Content/Characters", "").Replace("/", "").Replace("\\", ""); + } + monsterEnabled = new Dictionary(); + foreach (string s in monsterNames1) + { + monsterEnabled.Add(s, true); + } + } + + List monsterNames = monsterEnabled.Keys.ToList(); + foreach (string s in monsterNames) + { + monsterEnabled[s] = inc.ReadBoolean(); + } + inc.ReadPadBits(); GameModePreset gameMode = GameModePreset.list.Find(gm => gm.Name == modeName); diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index eca34753f..74ac21ef6 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -997,7 +997,7 @@ namespace Barotrauma.Networking msg.Write(selectedShuttle.Name); msg.Write(selectedShuttle.MD5Hash.Hash); - + connectedClients.ForEach(c => c.ReadyToStart = false); server.SendMessage(msg, connectedClients.Select(c => c.Connection).ToList(), NetDeliveryMethod.ReliableUnordered, 0); @@ -1219,6 +1219,14 @@ namespace Barotrauma.Networking msg.Write(false); } + //monster spawn settings + List monsterNames = monsterEnabled.Keys.ToList(); + foreach (string s in monsterNames) + { + msg.Write(monsterEnabled[s]); + } + msg.WritePadBits(); + server.SendMessage(msg, client.Connection, NetDeliveryMethod.ReliableUnordered); } diff --git a/Subsurface/Source/Networking/GameServerSettings.cs b/Subsurface/Source/Networking/GameServerSettings.cs index 68b4c4515..d5d680bba 100644 --- a/Subsurface/Source/Networking/GameServerSettings.cs +++ b/Subsurface/Source/Networking/GameServerSettings.cs @@ -46,7 +46,6 @@ namespace Barotrauma.Networking private set; } - public Dictionary monsterEnabled; public Dictionary extraCargo; public bool ShowNetStats; @@ -287,7 +286,7 @@ namespace Barotrauma.Networking showLogButton.Visible = SaveServerLogs; List monsterNames = Directory.GetDirectories("Content/Characters").ToList(); - for (int i=0;i monsterEnabled; protected RespawnManager respawnManager;