diff --git a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs index 82de3230d..fdc0164cf 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs @@ -1382,9 +1382,12 @@ namespace Barotrauma.Networking { MultiPlayerCampaign.ClientRead(inc); } + else if (GameMain.NetLobbyScreen.SelectedMode.Identifier != "multiplayercampaign") + { + GameMain.NetLobbyScreen.SetCampaignCharacterInfo(null); + } lastSentChatMsgID = inc.ReadUInt16(); - break; case ServerNetObject.CLIENT_LIST: ReadClientList(inc); diff --git a/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs index 02f6ba21c..8c1472305 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs @@ -866,18 +866,21 @@ namespace Barotrauma spectateButton.Enabled = true; } - public void SetCampaignCharacterInfo(CharacterInfo characterInfo) - { - if (CampaignCharacterDiscarded) return; - - campaignCharacterInfo = characterInfo; - if (campaignCharacterInfo != null) + public void SetCampaignCharacterInfo(CharacterInfo newCampaignCharacterInfo) + { + if (newCampaignCharacterInfo != null) { - UpdatePlayerFrame(campaignCharacterInfo, false); + if (CampaignCharacterDiscarded) { return; } + if (campaignCharacterInfo != newCampaignCharacterInfo) + { + campaignCharacterInfo = newCampaignCharacterInfo; + UpdatePlayerFrame(campaignCharacterInfo, false); + } } - else + else if (campaignCharacterInfo != null) { - UpdatePlayerFrame(null, true); + campaignCharacterInfo = null; + UpdatePlayerFrame(campaignCharacterInfo, false); } } diff --git a/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs index b4e3bf3a9..d99e30c5f 100644 --- a/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/Source/Networking/GameServer.cs @@ -1226,6 +1226,7 @@ namespace Barotrauma.Networking ClientWriteLobby(c); if (GameMain.GameSession?.GameMode is MultiPlayerCampaign campaign && + GameMain.NetLobbyScreen.SelectedMode == campaign.Preset && NetIdUtils.IdMoreRecent(campaign.LastSaveID, c.LastRecvCampaignSave)) { //already sent an up-to-date campaign save @@ -1543,7 +1544,8 @@ namespace Barotrauma.Networking } var campaign = GameMain.GameSession?.GameMode as MultiPlayerCampaign; - if (campaign != null && NetIdUtils.IdMoreRecent(campaign.LastUpdateID, c.LastRecvCampaignUpdate)) + if (campaign != null && campaign.Preset == GameMain.NetLobbyScreen.SelectedMode && + NetIdUtils.IdMoreRecent(campaign.LastUpdateID, c.LastRecvCampaignUpdate)) { outmsg.Write(true); outmsg.WritePadBits(); diff --git a/Barotrauma/BarotraumaShared/Source/Map/Map/Location.cs b/Barotrauma/BarotraumaShared/Source/Map/Map/Location.cs index 5c2a35a8c..e397d485f 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Map/Location.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Map/Location.cs @@ -129,7 +129,7 @@ namespace Barotrauma availableMissions.RemoveAll(m => m.Completed); } - public void Remove() + private string RandomName(LocationType type) { baseName = type.GetRandomName(); nameFormatIndex = Rand.Int(type.NameFormats.Count, Rand.RandSync.Server);