(db7e4d6d5) Fix "crawler balling" caused by crawlers taking damage when targeting the sub and not yet latched on it.

This commit is contained in:
Joonas Rikkonen
2019-04-11 18:25:58 +03:00
parent 16cc5c8bc2
commit e7e858c05b
3 changed files with 11 additions and 10 deletions
@@ -1114,9 +1114,7 @@ namespace Barotrauma.Networking
if (campaign == null) if (campaign == null)
{ {
GameMain.GameSession = missionIndex < 0 ? GameMain.GameSession = new GameSession(GameMain.NetLobbyScreen.SelectedSub, "", gameMode, missionIndex < 0 ? null : MissionPrefab.List[missionIndex]);
new GameSession(GameMain.NetLobbyScreen.SelectedSub, "", gameMode, MissionType.None) :
new GameSession(GameMain.NetLobbyScreen.SelectedSub, "", gameMode, MissionPrefab.List[missionIndex]);
GameMain.GameSession.StartRound(levelSeed, levelDifficulty, loadSecondSub); GameMain.GameSession.StartRound(levelSeed, levelDifficulty, loadSecondSub);
} }
else else
@@ -1756,8 +1756,9 @@ namespace Barotrauma.Networking
Log("Level seed: " + GameMain.NetLobbyScreen.LevelSeed, ServerLog.MessageType.ServerMessage); Log("Level seed: " + GameMain.NetLobbyScreen.LevelSeed, ServerLog.MessageType.ServerMessage);
} }
MissionMode missionMode = GameMain.GameSession.GameMode as MissionMode; bool missionAllowRespawn = campaign == null &&
bool missionAllowRespawn = campaign == null && (missionMode?.Mission == null || missionMode.Mission.AllowRespawn); (!(GameMain.GameSession.GameMode is MissionMode) ||
((MissionMode)GameMain.GameSession.GameMode).Mission.AllowRespawn);
if (serverSettings.AllowRespawn && missionAllowRespawn) respawnManager = new RespawnManager(this, usingShuttle ? selectedShuttle : null); if (serverSettings.AllowRespawn && missionAllowRespawn) respawnManager = new RespawnManager(this, usingShuttle ? selectedShuttle : null);
@@ -1940,8 +1941,10 @@ namespace Barotrauma.Networking
MultiPlayerCampaign campaign = GameMain.GameSession?.GameMode as MultiPlayerCampaign; MultiPlayerCampaign campaign = GameMain.GameSession?.GameMode as MultiPlayerCampaign;
MissionMode missionMode = GameMain.GameSession.GameMode as MissionMode; bool missionAllowRespawn = campaign == null &&
bool missionAllowRespawn = campaign == null && (missionMode?.Mission == null || missionMode.Mission.AllowRespawn); (!(GameMain.GameSession.GameMode is MissionMode) ||
((MissionMode)GameMain.GameSession.GameMode).Mission.AllowRespawn);
msg.Write(serverSettings.AllowRespawn && missionAllowRespawn); msg.Write(serverSettings.AllowRespawn && missionAllowRespawn);
msg.Write(Submarine.MainSubs[1] != null); //loadSecondSub msg.Write(Submarine.MainSubs[1] != null); //loadSecondSub
@@ -207,10 +207,10 @@ namespace Barotrauma
break; break;
} }
if (attachTargetBody != null && deattachTimer < 0.0f) if (IsAttached && attachTargetBody != null && deattachTimer < 0.0f)
{ {
Entity entity = attachTargetBody.UserData as Entity; Entity entity = attachTargetBody.UserData as Entity;
Submarine attachedSub = entity is Submarine ? (Submarine)entity : entity?.Submarine; Submarine attachedSub = entity is Submarine sub ? sub : entity?.Submarine;
if (attachedSub != null) if (attachedSub != null)
{ {
float velocity = attachedSub.Velocity == Vector2.Zero ? 0.0f : attachedSub.Velocity.Length(); float velocity = attachedSub.Velocity == Vector2.Zero ? 0.0f : attachedSub.Velocity.Length();