(afe15e7b2) Fixed server sending campaign saves and campaign character data to clients after the game mode has been switched to something else. Closes #1346

This commit is contained in:
Joonas Rikkonen
2019-03-26 17:10:35 +02:00
parent 6c4649fe3f
commit 237f164123
4 changed files with 20 additions and 12 deletions
@@ -1382,9 +1382,12 @@ namespace Barotrauma.Networking
{ {
MultiPlayerCampaign.ClientRead(inc); MultiPlayerCampaign.ClientRead(inc);
} }
else if (GameMain.NetLobbyScreen.SelectedMode.Identifier != "multiplayercampaign")
{
GameMain.NetLobbyScreen.SetCampaignCharacterInfo(null);
}
lastSentChatMsgID = inc.ReadUInt16(); lastSentChatMsgID = inc.ReadUInt16();
break; break;
case ServerNetObject.CLIENT_LIST: case ServerNetObject.CLIENT_LIST:
ReadClientList(inc); ReadClientList(inc);
@@ -866,18 +866,21 @@ namespace Barotrauma
spectateButton.Enabled = true; spectateButton.Enabled = true;
} }
public void SetCampaignCharacterInfo(CharacterInfo characterInfo) public void SetCampaignCharacterInfo(CharacterInfo newCampaignCharacterInfo)
{ {
if (CampaignCharacterDiscarded) return; if (newCampaignCharacterInfo != null)
campaignCharacterInfo = characterInfo;
if (campaignCharacterInfo != 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);
} }
} }
@@ -1226,6 +1226,7 @@ namespace Barotrauma.Networking
ClientWriteLobby(c); ClientWriteLobby(c);
if (GameMain.GameSession?.GameMode is MultiPlayerCampaign campaign && if (GameMain.GameSession?.GameMode is MultiPlayerCampaign campaign &&
GameMain.NetLobbyScreen.SelectedMode == campaign.Preset &&
NetIdUtils.IdMoreRecent(campaign.LastSaveID, c.LastRecvCampaignSave)) NetIdUtils.IdMoreRecent(campaign.LastSaveID, c.LastRecvCampaignSave))
{ {
//already sent an up-to-date campaign save //already sent an up-to-date campaign save
@@ -1543,7 +1544,8 @@ namespace Barotrauma.Networking
} }
var campaign = GameMain.GameSession?.GameMode as MultiPlayerCampaign; 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.Write(true);
outmsg.WritePadBits(); outmsg.WritePadBits();
@@ -129,7 +129,7 @@ namespace Barotrauma
availableMissions.RemoveAll(m => m.Completed); availableMissions.RemoveAll(m => m.Completed);
} }
public void Remove() private string RandomName(LocationType type)
{ {
baseName = type.GetRandomName(); baseName = type.GetRandomName();
nameFormatIndex = Rand.Int(type.NameFormats.Count, Rand.RandSync.Server); nameFormatIndex = Rand.Int(type.NameFormats.Count, Rand.RandSync.Server);