82 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|