Spawning client characters with correct characterinfo
This commit is contained in:
@@ -534,6 +534,8 @@ namespace Barotrauma.Networking
|
|||||||
GameMain.NetLobbyScreen.TrySelectSub(subName, subHash, GameMain.NetLobbyScreen.SubList) &&
|
GameMain.NetLobbyScreen.TrySelectSub(subName, subHash, GameMain.NetLobbyScreen.SubList) &&
|
||||||
GameMain.NetLobbyScreen.TrySelectSub(shuttleName, shuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox));
|
GameMain.NetLobbyScreen.TrySelectSub(shuttleName, shuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox));
|
||||||
|
|
||||||
|
WriteCharacterInfo(readyToStartMsg);
|
||||||
|
|
||||||
client.SendMessage(readyToStartMsg, NetDeliveryMethod.ReliableUnordered);
|
client.SendMessage(readyToStartMsg, NetDeliveryMethod.ReliableUnordered);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -602,7 +604,7 @@ namespace Barotrauma.Networking
|
|||||||
GameMain.GameScreen.Select();
|
GameMain.GameScreen.Select();
|
||||||
|
|
||||||
DebugConsole.NewMessage(Convert.ToString(posX) + "," + Convert.ToString(posY), Color.Lime);
|
DebugConsole.NewMessage(Convert.ToString(posX) + "," + Convert.ToString(posY), Color.Lime);
|
||||||
Character myChar = Character.Create(Character.HumanConfigFile, new Vector2(posX, posY), null, true, false);
|
Character myChar = Character.Create(Character.HumanConfigFile, new Vector2(posX, posY), characterInfo, true, false);
|
||||||
Character.Controlled = myChar;
|
Character.Controlled = myChar;
|
||||||
|
|
||||||
yield return CoroutineStatus.Success;
|
yield return CoroutineStatus.Success;
|
||||||
@@ -800,18 +802,31 @@ namespace Barotrauma.Networking
|
|||||||
{
|
{
|
||||||
spriteBatch.DrawString(GUI.Font, "Disconnected", new Vector2(x + 10, y + 25), Color.White);
|
spriteBatch.DrawString(GUI.Font, "Disconnected", new Vector2(x + 10, y + 25), Color.White);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override void Disconnect()
|
public override void Disconnect()
|
||||||
{
|
{
|
||||||
//TODO: tell server
|
|
||||||
client.Shutdown("");
|
client.Shutdown("");
|
||||||
GameMain.NetworkMember = null;
|
GameMain.NetworkMember = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void WriteCharacterInfo(NetOutgoingMessage msg)
|
||||||
|
{
|
||||||
|
if (characterInfo == null) return;
|
||||||
|
|
||||||
|
msg.Write(characterInfo.Gender == Gender.Male);
|
||||||
|
msg.Write((byte)characterInfo.HeadSpriteId);
|
||||||
|
|
||||||
|
var jobPreferences = GameMain.NetLobbyScreen.JobPreferences;
|
||||||
|
int count = Math.Min(jobPreferences.Count, 3);
|
||||||
|
msg.Write((byte)count);
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
msg.Write(jobPreferences[i].Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public override bool SelectCrewCharacter(GUIComponent component, object obj)
|
public override bool SelectCrewCharacter(GUIComponent component, object obj)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -499,6 +499,7 @@ namespace Barotrauma.Networking
|
|||||||
if (connectedClient != null)
|
if (connectedClient != null)
|
||||||
{
|
{
|
||||||
connectedClient.ReadyToStart = inc.ReadBoolean();
|
connectedClient.ReadyToStart = inc.ReadBoolean();
|
||||||
|
UpdateCharacterInfo(inc, connectedClient);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClientPacketHeader.UPDATE_LOBBY:
|
case ClientPacketHeader.UPDATE_LOBBY:
|
||||||
@@ -848,7 +849,7 @@ namespace Barotrauma.Networking
|
|||||||
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);
|
||||||
Character spawnedCharacter = Character.Create(Character.HumanConfigFile, spawnPosition, null, true, false);
|
Character spawnedCharacter = Character.Create(Character.HumanConfigFile, spawnPosition, c.characterInfo, true, false);
|
||||||
spawnedCharacter.AnimController.Frozen = true;
|
spawnedCharacter.AnimController.Frozen = true;
|
||||||
c.Character = spawnedCharacter;
|
c.Character = spawnedCharacter;
|
||||||
|
|
||||||
@@ -1234,6 +1235,38 @@ namespace Barotrauma.Networking
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateCharacterInfo(NetIncomingMessage message, Client sender)
|
||||||
|
{
|
||||||
|
Gender gender = Gender.Male;
|
||||||
|
int headSpriteId = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
gender = message.ReadBoolean() ? Gender.Male : Gender.Female;
|
||||||
|
headSpriteId = message.ReadByte();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
gender = Gender.Male;
|
||||||
|
headSpriteId = 0;
|
||||||
|
|
||||||
|
DebugConsole.Log("Received invalid characterinfo from \"" +sender.name+"\"! { "+e.Message+" }");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<JobPrefab> jobPreferences = new List<JobPrefab>();
|
||||||
|
int count = message.ReadByte();
|
||||||
|
for (int i = 0; i < Math.Min(count, 3); i++)
|
||||||
|
{
|
||||||
|
string jobName = message.ReadString();
|
||||||
|
|
||||||
|
JobPrefab jobPrefab = JobPrefab.List.Find(jp => jp.Name == jobName);
|
||||||
|
if (jobPrefab != null) jobPreferences.Add(jobPrefab);
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.characterInfo = new CharacterInfo(Character.HumanConfigFile, name, gender);
|
||||||
|
sender.characterInfo.HeadSpriteId = headSpriteId;
|
||||||
|
sender.jobPreferences = jobPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
public void AssignJobs(List<Client> unassigned)
|
public void AssignJobs(List<Client> unassigned)
|
||||||
{
|
{
|
||||||
unassigned = new List<Client>(unassigned);
|
unassigned = new List<Client>(unassigned);
|
||||||
|
|||||||
Reference in New Issue
Block a user