Unstable 0.17.1.0

This commit is contained in:
Markus Isberg
2022-03-17 01:25:04 +09:00
parent 3974067915
commit 6d410cc1b7
302 changed files with 5878 additions and 3317 deletions
@@ -1,52 +1,55 @@
using Barotrauma.Networking;
using System;
using Barotrauma.Networking;
namespace Barotrauma
{
partial class EntitySpawner : Entity, IServerSerializable
{
public void CreateNetworkEvent(Entity entity, bool remove)
public void CreateNetworkEvent(SpawnOrRemove spawnOrRemove)
{
CreateNetworkEventProjSpecific(entity, remove);
CreateNetworkEventProjSpecific(spawnOrRemove);
}
partial void CreateNetworkEventProjSpecific(Entity entity, bool remove)
partial void CreateNetworkEventProjSpecific(SpawnOrRemove spawnOrRemove)
{
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)
if (GameMain.Server == null || spawnOrRemove?.Entity == null) { return; }
GameMain.Server.CreateEntityEvent(this, spawnOrRemove);
if (spawnOrRemove.Entity is Character { Info: { } } character)
{
foreach (var statKey in character.Info.SavedStatValues.Keys)
{
GameMain.NetworkMember.CreateEntityEvent(character, new object[] { NetEntityEvent.Type.UpdatePermanentStats, statKey });
}
}
GameMain.NetworkMember.CreateEntityEvent(character, new Character.UpdatePermanentStatsEventData(statKey));
}
}
}
public void ServerWrite(IWriteMessage message, Client client, object[] extraData = null)
public void ServerEventWrite(IWriteMessage message, Client client, NetEntityEvent.IData extraData = null)
{
if (GameMain.Server == null) { return; }
if (GameMain.Server is null) { return; }
if (!(extraData is SpawnOrRemove entities)) { throw new Exception($"Malformed {nameof(EntitySpawner)} event: expected {nameof(SpawnOrRemove)}"); }
SpawnOrRemove entities = (SpawnOrRemove)extraData[0];
message.Write(entities.Remove);
if (entities.Remove)
message.Write(entities is RemoveEntity);
if (entities is RemoveEntity)
{
message.Write(entities.OriginalID);
message.Write(entities.ID);
}
else
{
if (entities.Entity is Item item)
switch (entities.Entity)
{
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);
case Item item:
message.Write((byte)SpawnableType.Item);
DebugConsole.Log(
$"Writing item spawn data {item} (ID: {entities.ID})");
item.WriteSpawnData(message, entities.ID, entities.InventoryID, entities.ItemContainerIndex, entities.SlotIndex);
break;
case Character character:
message.Write((byte)SpawnableType.Character);
DebugConsole.Log(
$"Writing character spawn data: {character} (ID: {entities.ID})");
character.WriteSpawnData(message, entities.ID, restrictMessageSize: true);
break;
}
}
}