From 0cd2d7a0b95e07c1914bf64157e24da130157089 Mon Sep 17 00:00:00 2001 From: Regalis Date: Mon, 30 Jan 2017 19:49:13 +0200 Subject: [PATCH] Readded traitors --- Subsurface/Barotrauma.csproj | 2 +- .../{TraitorMode.cs => TraitorManager.cs} | 18 ++++++--- Subsurface/Source/Networking/GameClient.cs | 18 ++++----- Subsurface/Source/Networking/GameServer.cs | 38 ++++++++++++------- 4 files changed, 46 insertions(+), 30 deletions(-) rename Subsurface/Source/GameSession/GameModes/{TraitorMode.cs => TraitorManager.cs} (93%) diff --git a/Subsurface/Barotrauma.csproj b/Subsurface/Barotrauma.csproj index 58e9edeaa..50fdf4c58 100644 --- a/Subsurface/Barotrauma.csproj +++ b/Subsurface/Barotrauma.csproj @@ -183,7 +183,7 @@ - + diff --git a/Subsurface/Source/GameSession/GameModes/TraitorMode.cs b/Subsurface/Source/GameSession/GameModes/TraitorManager.cs similarity index 93% rename from Subsurface/Source/GameSession/GameModes/TraitorMode.cs rename to Subsurface/Source/GameSession/GameModes/TraitorManager.cs index 0ec2d8a62..0da0d223f 100644 --- a/Subsurface/Source/GameSession/GameModes/TraitorMode.cs +++ b/Subsurface/Source/GameSession/GameModes/TraitorManager.cs @@ -5,8 +5,18 @@ namespace Barotrauma { class TraitorManager { - private Character traitorCharacter, targetCharacter; + public Character TraitorCharacter + { + get { return traitorCharacter; } + } + public Character TargetCharacter + { + get { return targetCharacter; } + } + + private Character traitorCharacter, targetCharacter; + public TraitorManager(GameServer server) { Start(server); @@ -19,8 +29,8 @@ namespace Barotrauma List characters = new List(); foreach (Client client in server.ConnectedClients) { - if (!client.inGame || client.Character==null) continue; - characters.Add(client.Character); + if (client.Character != null) + characters.Add(client.Character); } if (server.Character!= null) characters.Add(server.Character); @@ -52,8 +62,6 @@ namespace Barotrauma CreateStartPopUp(traitorCharacter.Name); return; } - - server.NewTraitor(traitorCharacter, targetCharacter); } public static void CreateStartPopUp(string targetName) diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 7be0e01d0..11bdc3ca8 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -589,6 +589,9 @@ namespace Barotrauma.Networking bool respawnAllowed = inc.ReadBoolean(); bool loadSecondSub = inc.ReadBoolean(); + + bool isTraitor = inc.ReadBoolean(); + string traitorTargetName = isTraitor ? inc.ReadString() : null; GameModePreset gameMode = GameModePreset.list.Find(gm => gm.Name == modeName); @@ -615,16 +618,10 @@ namespace Barotrauma.Networking if (respawnAllowed) respawnManager = new RespawnManager(this, GameMain.NetLobbyScreen.SelectedShuttle); - //int characterCount = inc.ReadByte(); - //for (int i = 0; i < characterCount; i++) - //{ - // var character = Character.ReadSpawnData(inc); - // if (inc.ReadBoolean()) - // { - // myCharacter = character; - // Character.Controlled = character; - // } - //} + if (isTraitor) + { + TraitorManager.CreateStartPopUp(traitorTargetName); + } gameStarted = true; @@ -678,7 +675,6 @@ namespace Barotrauma.Networking List submarines = new List(); for (int i = 0; i < subListCount; i++) { - string subName = inc.ReadString(); string subHash = inc.ReadString(); diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index e06ca68e5..3aa5d7c8d 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -1025,6 +1025,18 @@ namespace Barotrauma.Networking Entity.Spawner.AddToSpawnedList(c); Entity.Spawner.AddToSpawnedList(c.SpawnItems); } + + TraitorManager = null; + if (TraitorsEnabled == YesNoMaybe.Yes || + (TraitorsEnabled == YesNoMaybe.Maybe && Rand.Range(0.0f, 1.0f) < 0.5f)) + { + TraitorManager = new TraitorManager(this); + + if (TraitorManager.TraitorCharacter!=null && TraitorManager.TargetCharacter != null) + { + Log(TraitorManager.TraitorCharacter.Name + " is the traitor and the target is " + TraitorManager.TargetCharacter.Name, Color.Cyan); + } + } SendStartMessage(roundStartSeed, Submarine.MainSub, GameMain.GameSession.gameMode.Preset, connectedClients); //var startMessage = CreateStartMessage(roundStartSeed, Submarine.MainSub, GameMain.GameSession.gameMode.Preset); @@ -1080,6 +1092,19 @@ namespace Barotrauma.Networking msg.Write(AllowRespawn && missionAllowRespawn); msg.Write(Submarine.MainSubs[1] != null); //loadSecondSub + + if (TraitorManager != null && + TraitorManager.TraitorCharacter != null && + TraitorManager.TargetCharacter != null && + TraitorManager.TraitorCharacter == client.Character) + { + msg.Write(true); + msg.Write(TraitorManager.TargetCharacter.Name); + } + else + { + msg.Write(false); + } server.SendMessage(msg, client.Connection, NetDeliveryMethod.ReliableUnordered); } @@ -1263,19 +1288,6 @@ namespace Barotrauma.Networking } } - public void NewTraitor(Character traitor, Character target) - { - Log(traitor.Name + " is the traitor and the target is " + target.Name, Color.Cyan); - - Client traitorClient = null; - foreach (Client c in connectedClients) - { - if (c.Character != traitor) continue; - traitorClient = c; - break; - } - } - /// /// Add the message to the chatbox and pass it to all clients who can receive it ///