Esempio n. 1
0
        /// <summary>
        /// Reads the function and returns a parsed object contianing information about the function
        /// Ported from Unhood (Modified by Mgamerz)
        /// </summary>
        /// <param name="export"></param>
        /// <returns></returns>
        public static UnFunction ReadFunction(ExportEntry export, byte[] dataOverride = null)
        {
            if (dataOverride == null)
            {
                dataOverride = export.Data;
            }
            using var reader = new EndianReader(dataOverride)
                  {
                      Endian = export.FileRef.Endian
                  };
            reader.ReadBytes(12); //netindex?, none
            int super = reader.ReadInt32();
            int nextCompilingChainItem = reader.ReadInt32();

            reader.ReadBytes(12);
            int line       = reader.ReadInt32(); //??
            int textPos    = reader.ReadInt32(); //??
            int scriptSize = reader.ReadInt32();

            byte[] bytecode           = reader.ReadBytes(scriptSize);
            int    nativeIndex        = reader.ReadInt16();
            int    operatorPrecedence = reader.ReadByte();
            int    functionFlags      = reader.ReadInt32();

            if ((functionFlags & _flagSet.GetMask("Net")) != 0)
            {
                reader.ReadInt16(); // repOffset
            }

            int friendlyNameIndex = reader.ReadInt32();

            reader.ReadInt32();
            return(new UnFunction(export, export.FileRef.GetNameEntry(friendlyNameIndex),
                                  new FlagValues(functionFlags, _flagSet), bytecode, nativeIndex, operatorPrecedence));
        }
Esempio n. 2
0
        public FlagValues Except(params string[] exceptNames)
        {
            int newFlags = _flags;

            foreach (var name in exceptNames)
            {
                newFlags &= ~_set.GetMask(name);
            }
            return(new FlagValues(newFlags, _set));
        }