diff --git a/Subsurface/Source/Events/Missions/CombatMission.cs b/Subsurface/Source/Events/Missions/CombatMission.cs index 87809baf0..768668136 100644 --- a/Subsurface/Source/Events/Missions/CombatMission.cs +++ b/Subsurface/Source/Events/Missions/CombatMission.cs @@ -19,6 +19,11 @@ namespace Barotrauma private static string[] teamNames; + public override bool AllowRespawn + { + get { return false; } + } + public override string Description { get @@ -126,11 +131,6 @@ namespace Barotrauma public override void Start(Level level) { - if (GameMain.Server != null) - { - GameMain.Server.AllowRespawn = false; - } - if (GameMain.NetworkMember == null) { DebugConsole.ThrowError("Combat missions cannot be played in the single player mode."); @@ -154,11 +154,6 @@ namespace Barotrauma { if (crews[0].Count == 0 && crews[1].Count == 0) { - if (GameMain.Server != null) - { - GameMain.Server.AllowRespawn = false; - } - foreach (Character character in Character.CharacterList) { if (character.TeamID == 1) diff --git a/Subsurface/Source/Events/Missions/Mission.cs b/Subsurface/Source/Events/Missions/Mission.cs index 1dd37f692..c6088203a 100644 --- a/Subsurface/Source/Events/Missions/Mission.cs +++ b/Subsurface/Source/Events/Missions/Mission.cs @@ -48,6 +48,11 @@ namespace Barotrauma set { completed = value; } } + public virtual bool AllowRespawn + { + get { return true; } + } + public virtual string RadarLabel { get { return radarLabel; } diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index 16a546cf7..933606a51 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -923,7 +923,11 @@ namespace Barotrauma.Networking GameServer.Log("Game mode: " + selectedMode.Name, Color.Cyan); GameServer.Log("Level seed: " + GameMain.NetLobbyScreen.LevelSeed, Color.Cyan); - if (AllowRespawn) respawnManager = new RespawnManager(this, selectedShuttle); + bool missionAllowRespawn = + !(GameMain.GameSession.gameMode is MissionMode) || + ((MissionMode)GameMain.GameSession.gameMode).Mission.AllowRespawn; + + if (AllowRespawn && missionAllowRespawn) respawnManager = new RespawnManager(this, selectedShuttle); for (int teamID = 1; teamID <= teamCount; teamID++) { @@ -1072,7 +1076,12 @@ namespace Barotrauma.Networking msg.Write(selectedMode.Name); - msg.Write(AllowRespawn); + + bool missionAllowRespawn = + !(GameMain.GameSession.gameMode is MissionMode) || + ((MissionMode)GameMain.GameSession.gameMode).Mission.AllowRespawn; + + msg.Write(AllowRespawn && missionAllowRespawn); msg.Write(Submarine.MainSubs[1] != null); //loadSecondSub //msg.Write(GameMain.NetLobbyScreen.GameDuration.TotalMinutes);