public static List <DotHackPatch> GetObjectsFromPatchSheet(string patchSheet = "Patches") { List <DotHackPatch> objects = new(); var values = ExcelReader.GetValuesFromSheet(patchSheet); if (values != null && values.Count > 0) { foreach (var row in values) { DotHackPatch o = new DotHackPatch() { Name = (string)row[0], DataSheetName = (string)row[1], TextSheetName = (string)row[2], OfflineFile = DotHackFiles.GetFileByName((string)row[3]), OnlineFile = DotHackFiles.GetFileByName((string)row[4]), OfflineBaseAddress = int.Parse((string)row[5], NumberStyles.HexNumber), OnlineBaseAddress = int.Parse((string)row[6], NumberStyles.HexNumber), OfflineStringBaseAddress = int.Parse((string)row[7], NumberStyles.HexNumber), OnlineStringBaseAddress = int.Parse((string)row[8], NumberStyles.HexNumber), ObjectReadLength = int.Parse((string)row[9], NumberStyles.HexNumber), ObjectCount = int.Parse((string)row[10]), StringByteLimit = int.Parse((string)row[11], NumberStyles.HexNumber), PointerOffsets = new int[row.Count - 12] }; for (int i = 0; i < o.PointerOffsets.Length; i++) { o.PointerOffsets[i] = int.Parse((string)row[12 + i], NumberStyles.HexNumber); } objects.Add(o); } } return(objects); }
public static List <DotHackObject> GetObjectsFromPatchSheet(string patchSheet = "Patches") { List <DotHackObject> objects = new(); var assembly = Assembly.GetExecutingAssembly(); using (Stream stream = assembly.GetManifestResourceStream(ConnectionJson)) { credential = GoogleCredential.FromStream(stream).CreateScoped(Scopes); } using (service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, })) { var stringsByOffset = new Dictionary <int, string>(); var range = $"{patchSheet}!A2:V"; var request = service.Spreadsheets.Values.Get(SpreadsheetId, range); var response = request.Execute(); var values = response.Values; if (values != null && values.Count > 0) { foreach (var row in values) { DotHackObject o = new DotHackObject() { Name = (string)row[0], DataSheetName = (string)row[1], TextSheetName = (string)row[2], OfflineFile = DotHackFiles.GetFileByName((string)row[3]), OnlineFile = DotHackFiles.GetFileByName((string)row[4]), OfflineBaseAddress = int.Parse((string)row[5], NumberStyles.HexNumber), OnlineBaseAddress = int.Parse((string)row[6], NumberStyles.HexNumber), OfflineStringBaseAddress = int.Parse((string)row[7], NumberStyles.HexNumber), OnlineStringBaseAddress = int.Parse((string)row[8], NumberStyles.HexNumber), ObjectReadLength = int.Parse((string)row[9], NumberStyles.HexNumber), ObjectCount = int.Parse((string)row[10]), StringByteLimit = int.Parse((string)row[11], NumberStyles.HexNumber), PointerOffsets = new int[row.Count - 12] }; for (int i = 0; i < o.PointerOffsets.Length; i++) { o.PointerOffsets[i] = int.Parse((string)row[12 + i], NumberStyles.HexNumber); } objects.Add(o); } } } return(objects); }
static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); enc = Encoding.GetEncoding(932); Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File(Path.Combine(AppContext.BaseDirectory, "ViPatchLog.txt"), outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message}{NewLine}{Exception}") .MinimumLevel.Information() .CreateLogger(); Log.Logger.Information("Beginning Vi's Fragment Updater"); #if DEBUG string inputISO = @"P:\DotHack\Fragment\Tellipatch\fragment.iso", outputISO = @"P:\DotHack\Fragment\Tellipatch\fragmentCopy.iso"; #else string inputISO, outputISO, loc = System.AppContext.BaseDirectory; if (loc == "") { loc = @".\"; } if (args.Length == 0) { inputISO = Path.Combine(Path.GetDirectoryName(loc), "fragment.iso"); outputISO = Path.Combine(Path.GetDirectoryName(loc), "fragmentVi.iso"); } else if (args.Length == 1) { inputISO = CheckFilePath(args[0]); outputISO = inputISO; } else { inputISO = CheckFilePath(args[0]); outputISO = CheckFilePath(args[1]); } #endif textPointerDictionaries = new Dictionary <string, Dictionary <int, int> >(); if (inputISO != outputISO) { if (File.Exists(inputISO)) { CopyFile(inputISO, outputISO); } else { Log.Logger.Error($"Could not find input file \"{inputISO}\" in the current directory."); } } if (File.Exists(outputISO)) { Log.Logger.Information($"Writing patches to: {outputISO}"); Log.Logger.Information($"Downloading patches from Google.."); try { foreach (DotHackFile file in DotHackFiles.GetFiles()) { file.ISOLocation = GetFileLocation(outputISO, file.FileName); } foreach (DotHackPatch obj in PatchHandler.GetObjectsFromPatchSheet()) { UpdateISO(outputISO, obj); } #if Full_Version //Console.WriteLine("Reading WIP patches from google.."); foreach (DotHackPatch obj in PatchHandler.GetObjectsFromPatchSheet("WIP Patches")) { UpdateISO(outputISO, obj); } //Console.WriteLine("Reading image patches from google.."); foreach (DotHackPatch obj in PatchHandler.GetObjectsFromPatchSheet("IMG Patches")) { UpdateISO(outputISO, obj); } #endif #if DEBUG //Console.WriteLine("Reading WIP patches from google.."); foreach (DotHackPatch obj in PatchHandler.GetObjectsFromPatchSheet("WIP Patches")) { UpdateISO(outputISO, obj); } //Console.WriteLine("Reading image patches from google.."); foreach (DotHackPatch obj in PatchHandler.GetObjectsFromPatchSheet("IMG Patches")) { UpdateISO(outputISO, obj); } #endif } catch (Exception e) { Log.Logger.Error(e, "An error occured while reading patches:"); } finally { Log.Logger.Information("Cleaning up patch files.."); PatchHandler.CleanUp(); } Log.Logger.Information("Vi Patch process complete!"); } else { Log.Logger.Error($"Could not find output file \"{outputISO}\" in the current directory."); } }