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}"); }
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(""); }