private static string ReplaceMode(List <string> args)
        {
            byte[] uasset = Program.runData.uasset;
            byte[] uexp   = Program.runData.uexp;

            Int32 exportIndex     = GetExportIndex(uasset, args).Value;
            Int32 exportDefOffset = BitConverter.ToInt32(uasset, OffsetConstants.exportOffsetOffset) + (exportIndex - 1) * OffsetConstants.exportDefSize;

            customRunDara.changedExportSerialOffset = BitConverter.ToInt32(uasset, exportDefOffset + OffsetConstants.exportSerialOffsetOffset);

            Int32 exportOffset = BitConverter.ToInt32(uasset, exportDefOffset + OffsetConstants.exportSerialOffsetOffset) -
                                 BitConverter.ToInt32(uasset, headerSizeOffset);
            Int32 exportSize = BitConverter.ToInt32(uasset, exportDefOffset + OffsetConstants.exportSerialSizeOffset);

            string targetContext = args.TakeArg();

            customRunDara.newValue = args.TakeArg();

            while (args.Count > 0)
            {
                replaceModeAdditionalKeys[args.TakeArg()](args);
            }

            ExportParsingMachine.ResetSLIString();

            if (customRunDara.reportSearchSteps)
            {
                ExportParsingMachine.ReportExportContents(
                    $"Searching for {targetContext} in export at {exportOffset} to set new value {customRunDara.newValue}");
            }

            ExportParsingMachine.machineState = new Stack <ReadingContext>();
            ExportParsingMachine.machineState.Push(new ReadingContext()
            {
                currentUexpOffset       = exportOffset,
                declaredSize            = exportSize,
                declaredSizeStartOffset = exportOffset,
                collectionElementCount  = -1,

                pattern = new List <string>()
                {
                    "NTPL"
                },
                patternAlphabet = contextSearchProcessers,

                targetContext = new List <string>(targetContext.Split('/')),

                structCategory = ReadingContext.StructCategory.export,

                contextReturnProcesser = ContextReturnProcesser
            });

            ExportParsingMachine.StepsTilEndOfStruct(Program.runData.uasset, Program.runData.uexp);

            return($" -e {customRunDara.sizeChange} {customRunDara.changedExportSerialOffset}");
        }
Example #2
0
        public override string ExecuteAndGetOffSetterAgrs(List <string> args, out bool doneSomething, out bool useStandardBackup)
        {
            useStandardBackup = false;
            doneSomething     = false;

            Int32 exportIndex = GetExportIndex(Program.runData.uasset, args).Value;

            Int32 fisrtExportOffset   = BitConverter.ToInt32(Program.runData.uasset, OffsetConstants.exportOffsetOffset);
            Int32 uexpStructureOffset = BitConverter.ToInt32(Program.runData.uasset, fisrtExportOffset + (exportIndex - 1)
                                                             * OffsetConstants.exportDefSize + OffsetConstants.exportSerialOffsetOffset)
                                        - BitConverter.ToInt32(Program.runData.uasset, headerSizeOffset);

            Int32 uexpStructureSize = BitConverter.ToInt32(Program.runData.uasset, fisrtExportOffset + (exportIndex - 1) *
                                                           OffsetConstants.exportDefSize + OffsetConstants.exportSerialSizeOffset);

            string exportObjectName = ExportParsingMachine.FullNameString(Program.runData.uasset, fisrtExportOffset + (exportIndex - 1) *
                                                                          OffsetConstants.exportDefSize + OffsetConstants.exportNameOffset);

            Console.WriteLine("--------------------");
            Console.WriteLine($"Export Index: {exportIndex}");
            Console.WriteLine($"Export Object Name {exportObjectName}");
            Console.WriteLine("--------------------");

            ExportParsingMachine.ResetSLIString();
            ExportParsingMachine.machineState = new Stack <ReadingContext>();
            ExportParsingMachine.machineState.Push(new ReadingContext()
            {
                currentUexpOffset       = uexpStructureOffset,
                declaredSize            = uexpStructureSize,
                declaredSizeStartOffset = uexpStructureOffset,
                collectionElementCount  = -1,

                pattern = new List <string>()
                {
                    ExportParsingMachine.NTPLPatternElementName
                },
                patternAlphabet = patternElementProcessers,

                structCategory = ReadingContext.StructCategory.export
            });

            ExportParsingMachine.StepsTilEndOfStruct(Program.runData.uasset, Program.runData.uexp);

            return("");
        }