55 lines
2.3 KiB
C#
55 lines
2.3 KiB
C#
using Barotrauma.Networking;
|
|
|
|
namespace Barotrauma
|
|
{
|
|
partial class EntitySpawner : Entity, IServerSerializable
|
|
{
|
|
public void CreateNetworkEvent(Entity entity, bool remove)
|
|
{
|
|
CreateNetworkEventProjSpecific(entity, remove);
|
|
}
|
|
|
|
partial void CreateNetworkEventProjSpecific(Entity entity, bool remove)
|
|
{
|
|
if (GameMain.Server == null || entity == null) { return; }
|
|
|
|
GameMain.Server.CreateEntityEvent(this, new object[] { new SpawnOrRemove(entity, remove) });
|
|
if (entity is Character character && character.Info != null)
|
|
{
|
|
foreach (var statKey in character.Info.SavedStatValues.Keys)
|
|
{
|
|
GameMain.NetworkMember.CreateEntityEvent(character, new object[] { NetEntityEvent.Type.UpdatePermanentStats, statKey });
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ServerWrite(IWriteMessage message, Client client, object[] extraData = null)
|
|
{
|
|
if (GameMain.Server == null) { return; }
|
|
|
|
SpawnOrRemove entities = (SpawnOrRemove)extraData[0];
|
|
|
|
message.Write(entities.Remove);
|
|
if (entities.Remove)
|
|
{
|
|
message.Write(entities.OriginalID);
|
|
}
|
|
else
|
|
{
|
|
if (entities.Entity is Item item)
|
|
{
|
|
message.Write((byte)SpawnableType.Item);
|
|
DebugConsole.Log("Writing item spawn data " + entities.Entity.ToString() + " (original ID: " + entities.OriginalID + ", current ID: " + entities.Entity.ID + ")");
|
|
item.WriteSpawnData(message, entities.OriginalID, entities.OriginalInventoryID, entities.OriginalItemContainerIndex, entities.OriginalSlotIndex);
|
|
}
|
|
else if (entities.Entity is Character character)
|
|
{
|
|
message.Write((byte)SpawnableType.Character);
|
|
DebugConsole.Log("Writing character spawn data: " + entities.Entity.ToString() + " (original ID: " + entities.OriginalID + ", current ID: " + entities.Entity.ID + ")");
|
|
character.WriteSpawnData(message, entities.OriginalID, restrictMessageSize: true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|