示例#1
0
        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, ""));
        }
示例#2
0
        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));
            }
        }