From 0125ff0f5ce0d8e757de9eb15550394c842127ad Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Mon, 10 Oct 2016 08:32:31 -0300 Subject: [PATCH 1/3] Replace mission GUI box text hack + If both teams die, they both lose --- Subsurface/Source/Events/Missions/CombatMission.cs | 13 +++---------- Subsurface/Source/GameSession/GameModes/GameMode.cs | 2 ++ .../Source/GameSession/GameModes/MissionMode.cs | 4 +--- Subsurface/Source/GameSession/GameSession.cs | 2 ++ Subsurface/Source/Networking/GameServer.cs | 3 +-- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/Subsurface/Source/Events/Missions/CombatMission.cs b/Subsurface/Source/Events/Missions/CombatMission.cs index 188f10c3f..02b9ff903 100644 --- a/Subsurface/Source/Events/Missions/CombatMission.cs +++ b/Subsurface/Source/Events/Missions/CombatMission.cs @@ -164,15 +164,6 @@ namespace Barotrauma foreach (Character character in Character.CharacterList) { - if (GameMain.NetworkMember != null && character == GameMain.NetworkMember.Character) - { - //ugly hack to switch the text in the mission popup to the team-specific description - if (GUIMessageBox.MessageBoxes.Count > 0 && GUIMessageBox.MessageBoxes.Peek().UserData as string == "missionstartmessage") - { - (GUIMessageBox.MessageBoxes.Peek() as GUIMessageBox).Text = Description; - } - } - if (character.TeamID == 1) { crews[0].Add(character); @@ -209,7 +200,7 @@ namespace Barotrauma } else { - if (subs[winner] != null && + if (winner>=0 && subs[winner] != null && (winner == 0 && subs[winner].AtStartPosition) || (winner == 1 && subs[winner].AtEndPosition) && crews[winner].Any(c => !c.IsDead && c.Submarine == subs[winner])) { @@ -220,6 +211,8 @@ namespace Barotrauma if (teamDead[0] && teamDead[1]) { + GameMain.GameSession.CrewManager.WinningTeam = 0; + winner = -1; if (GameMain.Server != null) GameMain.Server.EndGame(); } } diff --git a/Subsurface/Source/GameSession/GameModes/GameMode.cs b/Subsurface/Source/GameSession/GameModes/GameMode.cs index d104d6865..34ca97f4d 100644 --- a/Subsurface/Source/GameSession/GameModes/GameMode.cs +++ b/Subsurface/Source/GameSession/GameModes/GameMode.cs @@ -75,6 +75,8 @@ namespace Barotrauma isRunning = true; } + public virtual void MsgBox() { } + public virtual void Update(float deltaTime) { //if (!isRunning) return; diff --git a/Subsurface/Source/GameSession/GameModes/MissionMode.cs b/Subsurface/Source/GameSession/GameModes/MissionMode.cs index 243e6af89..e84fc9769 100644 --- a/Subsurface/Source/GameSession/GameModes/MissionMode.cs +++ b/Subsurface/Source/GameSession/GameModes/MissionMode.cs @@ -29,10 +29,8 @@ namespace Barotrauma mission = Mission.LoadRandom(locations, rand, param as string); } - public override void Start() + public override void MsgBox() { - base.Start(); - if (mission == null) return; var missionMsg = new GUIMessageBox(mission.Name, mission.Description, 400, 400); diff --git a/Subsurface/Source/GameSession/GameSession.cs b/Subsurface/Source/GameSession/GameSession.cs index cc5fb63ea..fb61b9206 100644 --- a/Subsurface/Source/GameSession/GameSession.cs +++ b/Subsurface/Source/GameSession/GameSession.cs @@ -170,6 +170,8 @@ namespace Barotrauma TaskManager.StartShift(level); + if (gameMode != null) gameMode.MsgBox(); + GameMain.GameScreen.ColorFade(Color.Black, Color.TransparentBlack, 5.0f); SoundPlayer.SwitchMusic(); } diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index 86109cbb3..efbe0d8ec 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -950,8 +950,7 @@ namespace Barotrauma.Networking teamClients[i].Character.TeamID = (byte)teamID; } - - //host plays in team 1 + if (characterInfo != null && teamID == hostTeam) { myCharacter = Character.Create(characterInfo, assignedWayPoints[assignedWayPoints.Length - 1].WorldPosition, false, false); From f0f385c2b26fc18babc45730b0f2b84ebd2958cc Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Mon, 10 Oct 2016 11:05:33 -0300 Subject: [PATCH 2/3] Fixed clients not seeing additional cargo + spawn monster cursor --- Subsurface/Source/DebugConsole.cs | 22 ++++++++++++---------- Subsurface/Source/Items/ItemSpawner.cs | 18 ++++++++++++++---- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index 2ea75159b..2bebba230 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -226,21 +226,22 @@ namespace Barotrauma Character spawnedCharacter = null; Vector2 spawnPosition = Vector2.Zero; - WayPoint spawnPoint = null; + + spawnPosition = Vector2.Zero; if (commands.Length > 2) { switch (commands[2].ToLowerInvariant()) { case "inside": - spawnPoint = WayPoint.GetRandom(SpawnType.Human, null, Submarine.MainSub); + spawnPosition = WayPoint.GetRandom(SpawnType.Human, null, Submarine.MainSub).WorldPosition; break; case "outside": - spawnPoint = WayPoint.GetRandom(SpawnType.Enemy); + spawnPosition = WayPoint.GetRandom(SpawnType.Enemy).WorldPosition; break; case "near": case "close": - float closestDist = 0.0f; + float closestDist = -1.0f; foreach (WayPoint wp in WayPoint.WayPointList) { if (wp.Submarine != null) continue; @@ -250,26 +251,27 @@ namespace Barotrauma float dist = Vector2.Distance(wp.WorldPosition, GameMain.GameScreen.Cam.WorldViewCenter); - if (spawnPoint == null || dist < closestDist) + if (closestDist < 0.0f || dist < closestDist) { - spawnPoint = wp; + spawnPosition = wp.WorldPosition; closestDist = dist; } } break; + case "cursor": + spawnPosition = GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); + break; default: - spawnPoint = WayPoint.GetRandom(commands[1].ToLowerInvariant()=="human" ? SpawnType.Human : SpawnType.Enemy); + spawnPosition = WayPoint.GetRandom(commands[1].ToLowerInvariant()=="human" ? SpawnType.Human : SpawnType.Enemy).WorldPosition; break; } } else { - spawnPoint = WayPoint.GetRandom(commands[1].ToLowerInvariant() == "human" ? SpawnType.Human : SpawnType.Enemy); + spawnPosition = WayPoint.GetRandom(commands[1].ToLowerInvariant() == "human" ? SpawnType.Human : SpawnType.Enemy).WorldPosition; } - spawnPosition = spawnPoint == null ? Vector2.Zero : spawnPoint.WorldPosition; - if (commands[1].ToLowerInvariant()=="human") { spawnedCharacter = Character.Create(Character.HumanConfigFile, spawnPosition); diff --git a/Subsurface/Source/Items/ItemSpawner.cs b/Subsurface/Source/Items/ItemSpawner.cs index ccaa54993..97be0110e 100644 --- a/Subsurface/Source/Items/ItemSpawner.cs +++ b/Subsurface/Source/Items/ItemSpawner.cs @@ -119,6 +119,7 @@ namespace Barotrauma message.Write(items[i].Position.X); message.Write(items[i].Position.Y); + message.Write(items[i].Submarine != null ? items[i].Submarine.ID : (ushort)0); } else { @@ -144,6 +145,7 @@ namespace Barotrauma ushort itemId = message.ReadUInt16(); Vector2 pos = Vector2.Zero; + Submarine sub = null; ushort inventoryId = message.ReadUInt16(); int inventorySlotIndex = -1; @@ -155,13 +157,18 @@ namespace Barotrauma else { pos = new Vector2(message.ReadSingle(), message.ReadSingle()); + ushort subID = message.ReadUInt16(); + if (subID > 0) + { + sub = Submarine.Loaded.Find(s => s.ID == subID); + } } string tags = ""; if (itemName == "ID Card") { tags = message.ReadString(); - } + } var prefab = MapEntityPrefab.list.Find(me => me.Name == itemName); if (prefab == null) continue; @@ -188,11 +195,14 @@ namespace Barotrauma } } - var item = new Item(itemPrefab, pos, null); + var item = new Item(itemPrefab, pos, sub); item.ID = itemId; - item.CurrentHull = Hull.FindHull(pos, null, false); - item.Submarine = item.CurrentHull == null ? null : item.CurrentHull.Submarine; + if (sub != null) + { + item.CurrentHull = Hull.FindHull(pos + sub.Position, null, true); + item.Submarine = item.CurrentHull == null ? null : item.CurrentHull.Submarine; + } if (!string.IsNullOrEmpty(tags)) item.Tags = tags; From cb992c7d6682ad3445138f6701c30d30826663d6 Mon Sep 17 00:00:00 2001 From: Regalis Date: Mon, 10 Oct 2016 21:38:19 +0300 Subject: [PATCH 3/3] Fixed crashing if a matching waypoint isn't found when spawning a monster --- Subsurface/Source/DebugConsole.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index 2bebba230..d0ed6f87d 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -226,18 +226,17 @@ namespace Barotrauma Character spawnedCharacter = null; Vector2 spawnPosition = Vector2.Zero; - - spawnPosition = Vector2.Zero; + WayPoint spawnPoint = null; if (commands.Length > 2) { switch (commands[2].ToLowerInvariant()) { case "inside": - spawnPosition = WayPoint.GetRandom(SpawnType.Human, null, Submarine.MainSub).WorldPosition; + spawnPoint = WayPoint.GetRandom(SpawnType.Human, null, Submarine.MainSub); break; case "outside": - spawnPosition = WayPoint.GetRandom(SpawnType.Enemy).WorldPosition; + spawnPoint = WayPoint.GetRandom(SpawnType.Enemy); break; case "near": case "close": @@ -253,7 +252,7 @@ namespace Barotrauma if (closestDist < 0.0f || dist < closestDist) { - spawnPosition = wp.WorldPosition; + spawnPoint = wp; closestDist = dist; } } @@ -262,16 +261,17 @@ namespace Barotrauma spawnPosition = GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); break; default: - spawnPosition = WayPoint.GetRandom(commands[1].ToLowerInvariant()=="human" ? SpawnType.Human : SpawnType.Enemy).WorldPosition; + spawnPoint = WayPoint.GetRandom(commands[1].ToLowerInvariant() == "human" ? SpawnType.Human : SpawnType.Enemy); break; } - } else { - spawnPosition = WayPoint.GetRandom(commands[1].ToLowerInvariant() == "human" ? SpawnType.Human : SpawnType.Enemy).WorldPosition; + spawnPoint = WayPoint.GetRandom(commands[1].ToLowerInvariant() == "human" ? SpawnType.Human : SpawnType.Enemy); } + if (spawnPoint != null) spawnPosition = spawnPoint.WorldPosition; + if (commands[1].ToLowerInvariant()=="human") { spawnedCharacter = Character.Create(Character.HumanConfigFile, spawnPosition);