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:
Regalis
2016-09-26 20:02:23 +03:00
parent c402ba208b
commit bc5ace4f53
2 changed files with 29 additions and 59 deletions

View File

@@ -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;
}
/// <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);
//}
}
}

View File

@@ -740,7 +740,7 @@ namespace Barotrauma.Networking
}
}
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)
@@ -845,7 +845,7 @@ namespace Barotrauma.Networking
{
c.inGame = true;
WayPoint spawnPoint = WayPoint.GetRandom(SpawnType.Human);
WayPoint spawnPoint = WayPoint.GetRandom(SpawnType.Human, null, selectedSub);
Vector2 spawnPosition = spawnPoint.WorldPosition;
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);
}
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);
//server.SendMessage(startMessage, connectedClients.Select(c => 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<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();
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()