Files
7d2dXG/Mods/0A-KFCommonUtilityLib/Scripts/NetPackages/NetPackageEntitySpawnWithCVar.cs
Nathaniel Cosford e06f2bd282 Add All Mods
2025-05-29 23:33:28 +09:30

82 lines
2.6 KiB
C#

namespace KFCommonUtilityLib.Scripts.NetPackages
{
public class NetPackageEntitySpawnWithCVar : NetPackageEntitySpawn
{
byte[] cvarData;
public NetPackageEntitySpawnWithCVar Setup(EntityCreationData _es, EntityAlive _ea)
{
Setup(_es);
using (var bw = MemoryPools.poolBinaryWriter.AllocSync(true))
{
using (var ms = MemoryPools.poolMemoryStream.AllocSync(true))
{
bw.SetBaseStream(ms);
if (_ea && _ea.Buffs != null)
{
var buff = _ea.Buffs;
bw.Write(buff.CVars.Count);
foreach (var cvar in buff.CVars)
{
bw.Write(cvar.Key);
bw.Write(cvar.Value);
}
}
else
{
bw.Write(0);
}
cvarData = ms.ToArray();
}
}
return this;
}
public override int GetLength()
{
return base.GetLength() + 200;
}
public override void ProcessPackage(World _world, GameManager _callbacks)
{
base.ProcessPackage(_world, _callbacks);
if (_world == null || _callbacks == null || es.id == -1)
{
return;
}
EntityAlive ea = _world.GetEntity(es.id) as EntityAlive;
if (!ea)
{
return;
}
using (var ms = MemoryPools.poolMemoryStream.AllocSync(true))
{
ms.Write(cvarData, 0, cvarData.Length);
ms.Position = 0;
using (var br = MemoryPools.poolBinaryReader.AllocSync(true))
{
br.SetBaseStream(ms);
var count = br.ReadInt32();
for (int i = 0; i < count; i++)
{
ea.Buffs.SetCustomVar(br.ReadString(), br.ReadSingle(), false);
}
}
}
ea.FireEvent(CustomEnums.onSelfFirstCVarSync);
}
public override void read(PooledBinaryReader _reader)
{
base.read(_reader);
cvarData = _reader.ReadBytes(_reader.ReadInt32());
}
public override void write(PooledBinaryWriter _writer)
{
base.write(_writer);
_writer.Write(cvarData.Length);
_writer.Write(cvarData);
}
}
}