Humans can be spawned through console in multiplayer

This commit is contained in:
Regalis
2016-08-23 14:19:50 +03:00
parent f03d3b2f61
commit dc67eeebd4
4 changed files with 32 additions and 20 deletions

View File

@@ -432,8 +432,7 @@ namespace Barotrauma
return enemyCharacter;
}
if (hasAi && !isNetworkPlayer)
else if (hasAi)
{
var aiCharacter = new AICharacter(file, position, characterInfo, isNetworkPlayer);
var ai = new HumanAIController(aiCharacter);
@@ -442,7 +441,6 @@ namespace Barotrauma
aiCharacter.minHealth = -100.0f;
return aiCharacter;
}
var character = new Character(file, position, characterInfo, isNetworkPlayer);
@@ -1200,7 +1198,7 @@ namespace Barotrauma
if (this == controlled) return;
if (IsNetworkPlayer && info!=null)
if (info != null)
{
Vector2 namePos = new Vector2(pos.X, pos.Y - 120.0f) - GUI.Font.MeasureString(Info.Name) * 0.5f;
spriteBatch.DrawString(GUI.Font, Info.Name, namePos - new Vector2(1.0f, 1.0f), Color.Black);

View File

@@ -252,15 +252,17 @@ namespace Barotrauma
if (commands[1].ToLowerInvariant()=="human")
{
spawnedCharacter = Character.Create(Character.HumanConfigFile, spawnPosition);
Character.Controlled = spawnedCharacter;
spawnedCharacter = Character.Create(Character.HumanConfigFile, spawnPosition);
if (GameMain.GameSession != null)
{
SinglePlayerMode mode = GameMain.GameSession.gameMode as SinglePlayerMode;
if (mode == null) break;
GameMain.GameSession.CrewManager.AddCharacter(Character.Controlled);
GameMain.GameSession.CrewManager.SelectCharacter(null, Character.Controlled);
if (mode != null)
{
Character.Controlled = spawnedCharacter;
GameMain.GameSession.CrewManager.AddCharacter(Character.Controlled);
GameMain.GameSession.CrewManager.SelectCharacter(null, Character.Controlled);
}
}
}
else

View File

@@ -890,12 +890,19 @@ namespace Barotrauma.Networking
{
string configPath = message.ReadString();
ushort id = message.ReadUInt16();
if (configPath != Character.HumanConfigFile)
{
ushort id = message.ReadUInt16();
Vector2 position = new Vector2(message.ReadFloat(), message.ReadFloat());
Vector2 position = new Vector2(message.ReadFloat(), message.ReadFloat());
var character = Character.Create(configPath, position, null, true);
if (character != null) character.ID = id;
var character = Character.Create(configPath, position, null, true);
if (character != null) character.ID = id;
}
else
{
ReadCharacterData(message, false, true);
}
}
public void RequestFile(string file, FileTransferMessageType fileType)
@@ -1069,7 +1076,7 @@ namespace Barotrauma.Networking
client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
}
public Character ReadCharacterData(NetIncomingMessage inc, bool isMyCharacter)
public Character ReadCharacterData(NetIncomingMessage inc, bool isMyCharacter, bool hasAi = false)
{
string newName = inc.ReadString();
ushort ID = inc.ReadUInt16();
@@ -1082,12 +1089,10 @@ namespace Barotrauma.Networking
string jobName = inc.ReadString();
JobPrefab jobPrefab = JobPrefab.List.Find(jp => jp.Name == jobName);
//ushort spawnPointID = inc.ReadUInt16();
CharacterInfo ch = new CharacterInfo(Character.HumanConfigFile, newName, isFemale ? Gender.Female : Gender.Male, jobPrefab);
ch.HeadSpriteId = headSpriteID;
Character character = Character.Create(ch, position, !isMyCharacter, false);
Character character = Character.Create(ch, position, !isMyCharacter, hasAi);
GameMain.GameSession.CrewManager.characters.Add(character);
character.ID = ID;

View File

@@ -1587,10 +1587,17 @@ namespace Barotrauma.Networking
message.Write(character.ConfigPath);
message.Write(character.ID);
if (character.ConfigPath == Character.HumanConfigFile)
{
WriteCharacterData(message, character.Name, character);
}
else
{
message.Write(character.ID);
message.Write(character.Position.X);
message.Write(character.Position.Y);
message.Write(character.Position.X);
message.Write(character.Position.Y);
}
SendMessage(message, NetDeliveryMethod.ReliableUnordered, recipients);
}