From 5e88d91cb819237d459afd9313066b94ac70f746 Mon Sep 17 00:00:00 2001 From: Regalis Date: Thu, 6 Oct 2016 15:32:38 +0300 Subject: [PATCH] Fixed mutliplayer-only missions being taken into account in the eventprobability calculation even in single player mode, which missions are sp/mp-only is determined in the mission config files --- Subsurface/Content/Missions.xml | 9 +++++---- .../Source/Events/Missions/CargoMission.cs | 2 +- .../Source/Events/Missions/CombatMission.cs | 8 ++++++++ Subsurface/Source/Events/Missions/Mission.cs | 18 +++++++++--------- .../Source/Events/Missions/MonsterMission.cs | 2 +- .../Source/Events/Missions/SalvageMission.cs | 2 +- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Subsurface/Content/Missions.xml b/Subsurface/Content/Missions.xml index 3ba323863..df09fdc82 100644 --- a/Subsurface/Content/Missions.xml +++ b/Subsurface/Content/Missions.xml @@ -178,11 +178,12 @@ - - + failuremessage="Both crews have perished."> + + \ No newline at end of file diff --git a/Subsurface/Source/Events/Missions/CargoMission.cs b/Subsurface/Source/Events/Missions/CargoMission.cs index 17bfe3783..4185fa3f1 100644 --- a/Subsurface/Source/Events/Missions/CargoMission.cs +++ b/Subsurface/Source/Events/Missions/CargoMission.cs @@ -8,7 +8,7 @@ using System.Xml.Linq; namespace Barotrauma { - class CargoMission : Mission, SinglePlayerMission + class CargoMission : Mission { private XElement itemConfig; diff --git a/Subsurface/Source/Events/Missions/CombatMission.cs b/Subsurface/Source/Events/Missions/CombatMission.cs index 57714c88d..2d5047510 100644 --- a/Subsurface/Source/Events/Missions/CombatMission.cs +++ b/Subsurface/Source/Events/Missions/CombatMission.cs @@ -74,6 +74,12 @@ namespace Barotrauma GameMain.Server.AllowRespawn = false; } + if (GameMain.NetworkMember == null) + { + DebugConsole.ThrowError("Combat missions cannot be played in the single player mode."); + return; + } + Items.Components.Radar.StartMarker = Locations[0]; Items.Components.Radar.EndMarker = Locations[1]; TeamASub = Submarine.MainSubs[0]; @@ -159,6 +165,8 @@ namespace Barotrauma public override void End() { + if (GameMain.NetworkMember==null) return; + bool ADead = TeamACrew.All(c => c.IsDead || c.IsUnconscious); bool BDead = TeamBCrew.All(c => c.IsDead || c.IsUnconscious); diff --git a/Subsurface/Source/Events/Missions/Mission.cs b/Subsurface/Source/Events/Missions/Mission.cs index 3c3edd2c7..991c2d5d8 100644 --- a/Subsurface/Source/Events/Missions/Mission.cs +++ b/Subsurface/Source/Events/Missions/Mission.cs @@ -148,8 +148,15 @@ namespace Barotrauma matchingElements = doc.Root.Elements().ToList().FindAll(m => m.Name.ToString().ToLowerInvariant().Replace("mission", "") == missionType); } - - + if (isSinglePlayer) + { + matchingElements.RemoveAll(m => ToolBox.GetAttributeBool(m, "multiplayeronly", false)); + } + else + { + matchingElements.RemoveAll(m => ToolBox.GetAttributeBool(m, "singleplayeronly", false)); + } + int i = 0; foreach (XElement element in matchingElements) { @@ -185,8 +192,6 @@ namespace Barotrauma continue; } - if (isSinglePlayer && t.GetInterface("Barotrauma.SinglePlayerMission")==null) continue; - ConstructorInfo constructor = t.GetConstructor(new[] { typeof(XElement) }); object instance = constructor.Invoke(new object[] { element }); @@ -253,9 +258,4 @@ namespace Barotrauma mode.Money += reward; } } - - interface SinglePlayerMission - { - //all valid single player missions should inherit this - } } diff --git a/Subsurface/Source/Events/Missions/MonsterMission.cs b/Subsurface/Source/Events/Missions/MonsterMission.cs index a5f4f89f1..6c4d2fa7e 100644 --- a/Subsurface/Source/Events/Missions/MonsterMission.cs +++ b/Subsurface/Source/Events/Missions/MonsterMission.cs @@ -5,7 +5,7 @@ using System.Xml.Linq; namespace Barotrauma { - class MonsterMission : Mission, SinglePlayerMission + class MonsterMission : Mission { private string monsterFile; diff --git a/Subsurface/Source/Events/Missions/SalvageMission.cs b/Subsurface/Source/Events/Missions/SalvageMission.cs index 60a1f66a5..74f7b65c7 100644 --- a/Subsurface/Source/Events/Missions/SalvageMission.cs +++ b/Subsurface/Source/Events/Missions/SalvageMission.cs @@ -8,7 +8,7 @@ using System.Xml.Linq; namespace Barotrauma { - class SalvageMission : Mission, SinglePlayerMission + class SalvageMission : Mission { private ItemPrefab itemPrefab;