Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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.");
            }
        }