From 6eba16ff4e1844003e4e7f11615bbddfa5619f88 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 8 Aug 2017 21:48:13 +0300 Subject: [PATCH] Fixed clients spawning monsters twice (first during mission/event initialization and again when the server notifies them about the spawning) --- .../BarotraumaShared/Source/Characters/Character.cs | 8 +++++--- .../Source/Events/Missions/MonsterMission.cs | 5 +++-- .../BarotraumaShared/Source/Events/MonsterEvent.cs | 12 +++--------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index bf550d137..f3bf6565e 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -450,7 +450,7 @@ namespace Barotrauma return Create(characterInfo.File, position, characterInfo, isRemotePlayer, hasAi); } - public static Character Create(string file, Vector2 position, CharacterInfo characterInfo = null, bool isRemotePlayer = false, bool hasAi=true) + public static Character Create(string file, Vector2 position, CharacterInfo characterInfo = null, bool isRemotePlayer = false, bool hasAi=true, bool createNetworkEvent = true) { #if LINUX if (!System.IO.File.Exists(file)) @@ -508,8 +508,10 @@ namespace Barotrauma newCharacter.minHealth = -100.0f; } - if (GameMain.Server != null && Entity.Spawner != null) - Entity.Spawner.CreateNetworkEvent(newCharacter, false); + if (GameMain.Server != null && Spawner != null && createNetworkEvent) + { + Spawner.CreateNetworkEvent(newCharacter, false); + } return newCharacter; } diff --git a/Barotrauma/BarotraumaShared/Source/Events/Missions/MonsterMission.cs b/Barotrauma/BarotraumaShared/Source/Events/Missions/MonsterMission.cs index 1e693717e..0784562a0 100644 --- a/Barotrauma/BarotraumaShared/Source/Events/Missions/MonsterMission.cs +++ b/Barotrauma/BarotraumaShared/Source/Events/Missions/MonsterMission.cs @@ -22,13 +22,14 @@ namespace Barotrauma : base(element, locations) { monsterFile = ToolBox.GetAttributeString(element, "monsterfile", ""); - } + } + public override void Start(Level level) { Vector2 spawnPos = Level.Loaded.GetRandomInterestingPosition(true, Level.PositionType.MainPath, true); - monster = Character.Create(monsterFile, spawnPos, null, GameMain.Client != null); + monster = Character.Create(monsterFile, spawnPos, null, GameMain.Client != null, true, false); monster.Enabled = false; radarPosition = spawnPos; } diff --git a/Barotrauma/BarotraumaShared/Source/Events/MonsterEvent.cs b/Barotrauma/BarotraumaShared/Source/Events/MonsterEvent.cs index 20bbf4e43..15bbe3cd7 100644 --- a/Barotrauma/BarotraumaShared/Source/Events/MonsterEvent.cs +++ b/Barotrauma/BarotraumaShared/Source/Events/MonsterEvent.cs @@ -73,7 +73,7 @@ namespace Barotrauma { base.Init(); - SpawnMonsters(Rand.Range(minAmount, maxAmount, Rand.RandSync.Server)); + monsters = SpawnMonsters(Rand.Range(minAmount, maxAmount, Rand.RandSync.Server)); } private Character[] SpawnMonsters(int amount) @@ -90,7 +90,7 @@ namespace Barotrauma { spawnPos.X += Rand.Range(-0.5f, 0.5f, Rand.RandSync.Server); spawnPos.Y += Rand.Range(-0.5f, 0.5f, Rand.RandSync.Server); - monsters[i] = Character.Create(characterFile, spawnPos, null, GameMain.Client != null); + monsters[i] = Character.Create(characterFile, spawnPos, null, GameMain.Client != null, true, false); } return monsters; @@ -103,13 +103,7 @@ namespace Barotrauma Finished(); return; } - - if (monsters == null) - { - monsters = SpawnMonsters(Rand.Range(minAmount, maxAmount, Rand.RandSync.Server)); - return; - } - + if (repeat) { //clients aren't allowed to spawn more monsters mid-round