Clients spawn all characters at round start (not just their own), spawnpoints that aren't inside the main sub are ignored when selecting spawnpoints for the clients
This commit is contained in:
@@ -569,9 +569,6 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
bool respawnAllowed = inc.ReadBoolean();
|
bool respawnAllowed = inc.ReadBoolean();
|
||||||
|
|
||||||
float posX = inc.ReadFloat();
|
|
||||||
float posY = inc.ReadFloat();
|
|
||||||
|
|
||||||
GameModePreset gameMode = GameModePreset.list.Find(gm => gm.Name == modeName);
|
GameModePreset gameMode = GameModePreset.list.Find(gm => gm.Name == modeName);
|
||||||
|
|
||||||
if (gameMode == null)
|
if (gameMode == null)
|
||||||
@@ -597,16 +594,23 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
if (respawnAllowed) respawnManager = new RespawnManager(this, GameMain.NetLobbyScreen.SelectedShuttle);
|
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;
|
gameStarted = true;
|
||||||
|
|
||||||
endVoteTickBox.Visible = Voting.AllowEndVoting && myCharacter != null;
|
endVoteTickBox.Visible = Voting.AllowEndVoting && myCharacter != null;
|
||||||
|
|
||||||
GameMain.GameScreen.Select();
|
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;
|
yield return CoroutineStatus.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -906,46 +910,5 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// sends some random data to the server (can be a networkevent or just something completely random)
|
|
||||||
/// use for debugging purposes
|
|
||||||
/// </summary>
|
|
||||||
//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<bitCount; i++)
|
|
||||||
// {
|
|
||||||
// msg.Write(Rand.Int(2)==0);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// client.SendMessage(msg, (Rand.Int(2)==0) ? NetDeliveryMethod.ReliableOrdered : NetDeliveryMethod.Unreliable);
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -740,7 +740,7 @@ namespace Barotrauma.Networking
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
outmsg.Write((byte)ServerNetObject.END_OF_MESSAGE);
|
outmsg.Write((byte)ServerNetObject.END_OF_MESSAGE);
|
||||||
server.SendMessage(outmsg,c.Connection,NetDeliveryMethod.Unreliable);
|
server.SendMessage(outmsg, c.Connection, NetDeliveryMethod.Unreliable);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool StartGameClicked(GUIButton button, object obj)
|
public bool StartGameClicked(GUIButton button, object obj)
|
||||||
@@ -845,7 +845,7 @@ namespace Barotrauma.Networking
|
|||||||
{
|
{
|
||||||
c.inGame = true;
|
c.inGame = true;
|
||||||
|
|
||||||
WayPoint spawnPoint = WayPoint.GetRandom(SpawnType.Human);
|
WayPoint spawnPoint = WayPoint.GetRandom(SpawnType.Human, null, selectedSub);
|
||||||
Vector2 spawnPosition = spawnPoint.WorldPosition;
|
Vector2 spawnPosition = spawnPoint.WorldPosition;
|
||||||
|
|
||||||
DebugConsole.NewMessage(Convert.ToString(spawnPosition.X) + "," + Convert.ToString(spawnPosition.Y), Color.Lime);
|
DebugConsole.NewMessage(Convert.ToString(spawnPosition.X) + "," + Convert.ToString(spawnPosition.Y), Color.Lime);
|
||||||
@@ -856,7 +856,7 @@ namespace Barotrauma.Networking
|
|||||||
GameMain.GameSession.CrewManager.characters.Add(c.Character);
|
GameMain.GameSession.CrewManager.characters.Add(c.Character);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateStartMessage(roundStartSeed, Submarine.MainSub, GameMain.GameSession.gameMode.Preset, connectedClients);
|
SendStartMessage(roundStartSeed, Submarine.MainSub, GameMain.GameSession.gameMode.Preset, connectedClients);
|
||||||
//var startMessage = CreateStartMessage(roundStartSeed, Submarine.MainSub, GameMain.GameSession.gameMode.Preset);
|
//var startMessage = CreateStartMessage(roundStartSeed, Submarine.MainSub, GameMain.GameSession.gameMode.Preset);
|
||||||
//server.SendMessage(startMessage, connectedClients.Select(c => c.Connection).ToList(), NetDeliveryMethod.ReliableUnordered, 0);
|
//server.SendMessage(startMessage, connectedClients.Select(c => c.Connection).ToList(), NetDeliveryMethod.ReliableUnordered, 0);
|
||||||
|
|
||||||
@@ -883,9 +883,9 @@ namespace Barotrauma.Networking
|
|||||||
yield return CoroutineStatus.Success;
|
yield return CoroutineStatus.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateStartMessage(int seed, Submarine selectedSub, GameModePreset selectedMode, List<Client> clients)
|
private void SendStartMessage(int seed, Submarine selectedSub, GameModePreset selectedMode, List<Client> clients)
|
||||||
{
|
{
|
||||||
foreach (Client c in clients)
|
foreach (Client client in clients)
|
||||||
{
|
{
|
||||||
NetOutgoingMessage msg = server.CreateMessage();
|
NetOutgoingMessage msg = server.CreateMessage();
|
||||||
msg.Write((byte)ServerPacketHeader.STARTGAME);
|
msg.Write((byte)ServerPacketHeader.STARTGAME);
|
||||||
@@ -905,12 +905,19 @@ namespace Barotrauma.Networking
|
|||||||
msg.Write(selectedMode.Name);
|
msg.Write(selectedMode.Name);
|
||||||
|
|
||||||
msg.Write(AllowRespawn);
|
msg.Write(AllowRespawn);
|
||||||
|
|
||||||
msg.Write(c.Character.WorldPosition.X);
|
var clientsWithCharacter = clients.FindAll(c => c.Character != null);
|
||||||
msg.Write(c.Character.WorldPosition.Y);
|
|
||||||
|
msg.Write((byte)clientsWithCharacter.Count);
|
||||||
c.Connection.SendMessage(msg, NetDeliveryMethod.ReliableUnordered,0);
|
foreach (Client c in clientsWithCharacter)
|
||||||
|
{
|
||||||
|
c.Character.WriteSpawnData(msg);
|
||||||
|
msg.Write(c == client);
|
||||||
|
}
|
||||||
|
|
||||||
|
server.SendMessage(msg, client.Connection, NetDeliveryMethod.ReliableUnordered);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EndGame()
|
public void EndGame()
|
||||||
|
|||||||
Reference in New Issue
Block a user