- fixed dummy location generation crashing the tutorial

- gameserver handles exceptions thrown when instantiating a new gamesession
- fixed screwdrivers (and other items that can be held in either hand) going into both hand slots when equipping by double clicking
This commit is contained in:
Regalis
2016-11-03 18:22:45 +02:00
parent 799efd8474
commit 8f646a2723
4 changed files with 27 additions and 13 deletions
@@ -283,7 +283,7 @@ namespace Barotrauma.Tutorials
infoBox = CreateInfoFrame("Steer the submarine downwards, heading further into the cavern."); infoBox = CreateInfoFrame("Steer the submarine downwards, heading further into the cavern.");
while (Submarine.MainSub.WorldPosition.Y > 31900.0f) while (Submarine.MainSub.WorldPosition.Y > 36500.0f)
{ {
yield return CoroutineStatus.Running; yield return CoroutineStatus.Running;
} }
+11 -1
View File
@@ -142,7 +142,17 @@ namespace Barotrauma
{ {
dummyLocations = new Location[2]; dummyLocations = new Location[2];
MTRandom rand = new MTRandom(ToolBox.StringToInt(GameMain.NetLobbyScreen.LevelSeed)); string seed = "";
if (GameMain.GameSession != null && GameMain.GameSession.Level != null)
{
seed = GameMain.GameSession.Level.Seed;
}
else if (GameMain.NetLobbyScreen != null)
{
seed = GameMain.NetLobbyScreen.LevelSeed;
}
MTRandom rand = new MTRandom(ToolBox.StringToInt(seed));
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
dummyLocations[i] = Location.CreateRandom(new Vector2((float)rand.NextDouble() * 10000.0f, (float)rand.NextDouble() * 10000.0f)); dummyLocations[i] = Location.CreateRandom(new Vector2((float)rand.NextDouble() * 10000.0f, (float)rand.NextDouble() * 10000.0f));
@@ -184,6 +184,11 @@ namespace Barotrauma
placed = true; placed = true;
} }
} }
if (placed)
{
return true;
}
} }
+10 -11
View File
@@ -886,22 +886,22 @@ namespace Barotrauma.Networking
roundStartSeed = DateTime.Now.Millisecond; roundStartSeed = DateTime.Now.Millisecond;
Rand.SetSyncedSeed(roundStartSeed); Rand.SetSyncedSeed(roundStartSeed);
GameMain.GameSession = new GameSession(selectedSub, "", selectedMode, Mission.MissionTypes[GameMain.NetLobbyScreen.MissionTypeIndex]);
yield return CoroutineStatus.Running; bool couldNotStart = false;
int teamCount = 1; int teamCount = 1;
int hostTeam = 1; int hostTeam = 1;
if (GameMain.GameSession.gameMode.Mission != null &&
GameMain.GameSession.gameMode.Mission.AssignTeamIDs(connectedClients,out hostTeam))
{
teamCount = 2;
}
bool couldNotStart = false;
try try
{ {
GameMain.GameSession = new GameSession(selectedSub, "", selectedMode, Mission.MissionTypes[GameMain.NetLobbyScreen.MissionTypeIndex]);
if (GameMain.GameSession.gameMode.Mission != null &&
GameMain.GameSession.gameMode.Mission.AssignTeamIDs(connectedClients,out hostTeam))
{
teamCount = 2;
}
GameMain.GameSession.StartShift(GameMain.NetLobbyScreen.LevelSeed, teamCount > 1); GameMain.GameSession.StartShift(GameMain.NetLobbyScreen.LevelSeed, teamCount > 1);
} }
@@ -914,7 +914,6 @@ namespace Barotrauma.Networking
GameMain.NetLobbyScreen.StartButton.Enabled = true; GameMain.NetLobbyScreen.StartButton.Enabled = true;
couldNotStart = true; couldNotStart = true;
} }
if (couldNotStart) yield return CoroutineStatus.Failure; if (couldNotStart) yield return CoroutineStatus.Failure;