public static async ValueTask <NetFieldExport> ReadNetFieldExportAsync(this ArchiveAsync ar) { bool exported = await ar.ReadByteAsync() == 1; if (!exported) { return(NetFieldExport.InstantiateNotExported()); } uint handle = await ar.ReadIntPackedAsync(); uint checksum = await ar.ReadUInt32Async(); if (ar.EngineNetVer < EngineNetworkVersionHistory.HISTORY_NETEXPORT_SERIALIZATION) { string name = await ar.ReadStringAsync(); string type = await ar.ReadStringAsync(); return(NetFieldExport.InstantiateExported(handle, checksum, name, type)); } if (ar.EngineNetVer < EngineNetworkVersionHistory.HISTORY_NETEXPORT_SERIALIZE_FIX) { string exportName = await ar.ReadStringAsync(); return(NetFieldExport.InstantiateExported(handle, checksum, exportName, "")); } StaticName staticName = await ar.ReadStaticNameAsync(); return(NetFieldExport.InstantiateExported(handle, checksum, staticName.Name, "")); }
public static async ValueTask <StaticName> ReadStaticNameAsync(ArchiveAsync ar) { Memory <byte> bits = await ar.ReadBitsAsync(1); Debug.Assert(bits.Length == 1); bool hardcoded = bits.ToArray()[0] > 0; if (hardcoded) { const uint MAX_NETWORKED_HARDCODED_NAME = 410; uint nameIndex; if (ar.EngineNetVer < DemoHeader.EngineNetworkVersionHistory.HISTORY_CHANNEL_NAMES) { nameIndex = await ar.ReadUInt32Async(MAX_NETWORKED_HARDCODED_NAME + 1); } else { nameIndex = await ar.ReadIntPackedAsync(); } if (nameIndex >= MAX_NETWORKED_HARDCODED_NAME) { throw new InvalidDataException(); } return(new StaticName(nameIndex, "", true)); //hard coded names in "UnrealNames.inl". Didn't searched it yet, i have no need of it right now. } else { string inString = await ar.ReadStringAsync(); int inNumber = await ar.ReadInt32Async(); return(new StaticName((uint)inNumber, inString, false)); } }