diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs
index d0f97b42b..db1026bda 100644
--- a/Subsurface/Source/Networking/GameClient.cs
+++ b/Subsurface/Source/Networking/GameClient.cs
@@ -569,9 +569,6 @@ namespace Barotrauma.Networking
bool respawnAllowed = inc.ReadBoolean();
- float posX = inc.ReadFloat();
- float posY = inc.ReadFloat();
-
GameModePreset gameMode = GameModePreset.list.Find(gm => gm.Name == modeName);
if (gameMode == null)
@@ -597,16 +594,23 @@ 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;
+ }
+ }
+
gameStarted = true;
endVoteTickBox.Visible = Voting.AllowEndVoting && myCharacter != null;
GameMain.GameScreen.Select();
-
- DebugConsole.NewMessage(Convert.ToString(posX) + "," + Convert.ToString(posY), Color.Lime);
- Character myChar = Character.Create(Character.HumanConfigFile, new Vector2(posX, posY), characterInfo, true, false);
- Character.Controlled = myChar;
-
+
yield return CoroutineStatus.Success;
}
@@ -906,46 +910,5 @@ namespace Barotrauma.Networking
return false;
}
-
- ///
- /// sends some random data to the server (can be a networkevent or just something completely random)
- /// use for debugging purposes
- ///
- //public void SendRandomData()
- //{
- // NetOutgoingMessage msg = client.CreateMessage();
- // switch (Rand.Int(5))
- // {
- // case 0:
- // msg.WriteEnum(PacketTypes.NetworkEvent);
- // msg.WriteEnum(NetworkEventType.EntityUpdate);
- // msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
- // break;
- // case 1:
- // msg.WriteEnum(PacketTypes.NetworkEvent);
- // msg.Write((byte)Enum.GetNames(typeof(NetworkEventType)).Length);
- // msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
- // break;
- // case 2:
- // msg.WriteEnum(PacketTypes.NetworkEvent);
- // msg.WriteEnum(NetworkEventType.ComponentUpdate);
- // msg.Write((int)Item.ItemList[Rand.Int(Item.ItemList.Count)].ID);
- // msg.Write(Rand.Int(8));
- // break;
- // case 3:
- // msg.Write((byte)Enum.GetNames(typeof(PacketTypes)).Length);
- // break;
- // }
-
- // int bitCount = Rand.Int(100);
- // for (int i = 0; i c.Connection).ToList(), NetDeliveryMethod.ReliableUnordered, 0);
@@ -883,9 +883,9 @@ namespace Barotrauma.Networking
yield return CoroutineStatus.Success;
}
- private void CreateStartMessage(int seed, Submarine selectedSub, GameModePreset selectedMode, List clients)
+ private void SendStartMessage(int seed, Submarine selectedSub, GameModePreset selectedMode, List clients)
{
- foreach (Client c in clients)
+ foreach (Client client in clients)
{
NetOutgoingMessage msg = server.CreateMessage();
msg.Write((byte)ServerPacketHeader.STARTGAME);
@@ -905,12 +905,19 @@ namespace Barotrauma.Networking
msg.Write(selectedMode.Name);
msg.Write(AllowRespawn);
-
- msg.Write(c.Character.WorldPosition.X);
- msg.Write(c.Character.WorldPosition.Y);
-
- c.Connection.SendMessage(msg, NetDeliveryMethod.ReliableUnordered,0);
+
+ var clientsWithCharacter = clients.FindAll(c => c.Character != null);
+
+ msg.Write((byte)clientsWithCharacter.Count);
+ foreach (Client c in clientsWithCharacter)
+ {
+ c.Character.WriteSpawnData(msg);
+ msg.Write(c == client);
+ }
+
+ server.SendMessage(msg, client.Connection, NetDeliveryMethod.ReliableUnordered);
}
+
}
public void EndGame()