示例#1
0
        public static async Task Main(string[] args)
        {
            ServiceLocator.Default.RegisterType <ILoggerService, LoggerService>();
            ServiceLocator.Default.RegisterType <IMainController, MainController>();

            var _maincontroller = ServiceLocator.Default.ResolveType <IMainController>();

            // get csv data
            Console.WriteLine("Loading Hashes...");
            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources/archivehashes.csv");

            using (var fr = new FileStream(path, FileMode.Open, FileAccess.Read))
                using (var sr = new StreamReader(fr))
                    using (var csv = new CsvReader(sr, CultureInfo.InvariantCulture))
                    {
                        var records = csv.GetRecords <HashObject>();
                        foreach (var record in records)
                        {
                            //var hash = Path.GetFileName(record.String);
                            ulong hash = ulong.Parse(record.Hash);
                            if (!_maincontroller.Hashdict.ContainsKey(hash))
                            {
                                _maincontroller.Hashdict.Add(hash, record.String);
                            }
                        }
                    }


            #region commands

            var rootCommand = new RootCommand();

            //archiveTask(string path, bool extract, bool dump)
            var archive = new Command("archive")
            {
                new Option <string>(new [] { "--path", "-p" }),
                new Option <string>(new [] { "--outpath", "-o" }),
                new Option <bool>(new [] { "--extract", "-e" }),
                new Option <bool>(new [] { "--dump", "-d" }),
            };
            rootCommand.Add(archive);


            //DumpTask(string path, bool all, bool strings, bool imports, bool buffers, bool chunks)
            var dump = new Command("dump")
            {
                new Option <string>(new [] { "--path", "-p" }),
                //new Option<bool>(new []{ "--all", "-a"}),
                //new Option<bool>(new []{ "--strings", "-s"}),
                new Option <bool>(new [] { "--imports", "-i" }),
                //new Option<bool>(new []{ "--buffers", "-b"}),
                //new Option<bool>(new []{ "--chunks", "-c"}),
            };
            rootCommand.Add(dump);


            //Cr2wTask(string path, bool all, bool strings, bool imports, bool buffers, bool chunks)
            var cr2w = new Command("cr2w")
            {
                new Option <string>(new [] { "--path", "-p" }),
                new Option <bool>(new [] { "--all", "-a" }),
                new Option <bool>(new [] { "--strings", "-s" }),
                new Option <bool>(new [] { "--imports", "-i" }),
                new Option <bool>(new [] { "--buffers", "-b" }),
                new Option <bool>(new [] { "--chunks", "-c" }),
            };
            rootCommand.Add(cr2w);

            dump.Handler    = CommandHandler.Create <string, bool /*, bool, bool, bool, bool*/>(ConsoleFunctions.DumpTask);
            archive.Handler = CommandHandler.Create <string, string, bool, bool>(ConsoleFunctions.ArchiveTask);
            cr2w.Handler    = CommandHandler.Create <string, bool, bool, bool, bool, bool>(ConsoleFunctions.Cr2wTask);

            #endregion


            // Run
            if (args == null || args.Length == 0)
            {
                // write welcome message
                rootCommand.InvokeAsync("-h").Wait();

                while (true)
                {
                    string line   = System.Console.ReadLine();
                    var    parsed = CommandLineExtensions.ParseText(line, ' ', '"');
                    rootCommand.InvokeAsync(parsed.ToArray()).Wait();
                }
            }
            else
            {
                rootCommand.InvokeAsync(args).Wait();
            }
        }
示例#2
0
        public static async Task Main(string[] args)
        {
            ServiceLocator.Default.RegisterType <ILoggerService, LoggerService>();
            ServiceLocator.Default.RegisterType <IMainController, MainController>();

            // get csv data
            Console.WriteLine("Loading Hashes...");
            Loadhashes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources/archivehashes.csv"));
            Console.WriteLine("Loaded Hashes.");

            #region commands



            var rootCommand = new RootCommand();

            var archive = new Command("archive", "Target an archive to extract files or dump information.")
            {
                new Option <string>(new [] { "--path", "-p" }, "Input path to .archive."),
                new Option <string>(new [] { "--outpath", "-o" }, "Output directory to extract files to."),
                new Option <bool>(new [] { "--extract", "-e" }, "Extract files from archive."),
                new Option <bool>(new [] { "--dump", "-d" }, "Dump archive information."),
                new Option <bool>(new [] { "--list", "-l" }, "List contents of archive."),
                new Option <bool>(new [] { "--uncook", "-u" }, "Uncooks textures from archive."),
                new Option <EUncookExtension>(new [] { "--uext" }, "Uncook extension (tga, bmp, jpg, png, dds). Default is tga."),
                new Option <ulong>(new [] { "--hash" }, "Extract single file with given hash."),
            };
            rootCommand.Add(archive);
            archive.Handler = CommandHandler.Create <string, string, bool, bool, bool, bool, EUncookExtension, ulong>(ConsoleFunctions.ArchiveTask);

            var dump = new Command("dump", "Target an archive or a directory to dump archive information.")
            {
                new Option <string>(new [] { "--path", "-p" }, "Input path to .archive or to a directory (runs over all archives in directory)."),
                new Option <bool>(new [] { "--imports", "-i" }, "Dump all imports (all filenames that are referenced by all files in the archive)."),
                new Option <bool>(new [] { "--missinghashes", "-m" }, "List all missing hashes of all input archives."),
                new Option <bool>(new [] { "--info" }, "Dump all xbm info."),
            };
            rootCommand.Add(dump);
            dump.Handler = CommandHandler.Create <string, bool, bool, bool>(ConsoleFunctions.DumpTask);

            var cr2w = new Command("cr2w", "Target a specific cr2w (extracted) file and dumps file information.")
            {
                new Option <string>(new [] { "--path", "-p" }, "Input path to a cr2w file."),
                new Option <bool>(new [] { "--all", "-a" }, "Dump all information."),
                new Option <bool>(new [] { "--chunks", "-c" }, "Dump all class information of file."),
            };
            rootCommand.Add(cr2w);
            cr2w.Handler = CommandHandler.Create <string, bool, bool>(ConsoleFunctions.Cr2wTask);

            var hashTask = new Command("hash", "Some helper functions related to hashes.")
            {
                new Option <string>(new [] { "--input", "-i" }, "Create FNV1A hash of given string"),
                new Option <bool>(new [] { "--missing", "-m" }, ""),
            };
            rootCommand.Add(hashTask);
            hashTask.Handler = CommandHandler.Create <string, bool>(ConsoleFunctions.HashTask);

            var oodleTask = new Command("oodle", "Some helper functions related to oodle compression.")
            {
                new Option <string>(new [] { "--path", "-p" }, ""),
                new Option <bool>(new [] { "--decompress", "-d" }, ""),
            };
            rootCommand.Add(oodleTask);
            oodleTask.Handler = CommandHandler.Create <string, bool>(ConsoleFunctions.OodleTask);

            #endregion

            var logger = ServiceLocator.Default.ResolveType <ILoggerService>();

            // Run
            if (args == null || args.Length == 0)
            {
                // write welcome message
                rootCommand.InvokeAsync("-h").Wait();

                while (true)
                {
                    string line   = System.Console.ReadLine();
                    var    parsed = CommandLineExtensions.ParseText(line, ' ', '"');
                    rootCommand.InvokeAsync(parsed.ToArray()).Wait();

                    await WriteLog();
                }
            }
            else
            {
                rootCommand.InvokeAsync(args).Wait();

                await WriteLog();
            }


            async Task WriteLog()
            {
                if (string.IsNullOrEmpty(logger.ErrorLogStr))
                {
                    return;
                }

                var t  = DateTime.Now.ToString("yyyyMMddHHmmss");
                var fi = new FileInfo(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
                                                   $"errorlogs/log_{t}.txt"));

                if (fi.Directory != null)
                {
                    Directory.CreateDirectory(fi.Directory.FullName);
                    var log = logger.ErrorLogStr;
                    await File.WriteAllTextAsync(fi.FullName, log);
                }
                else
                {
                }
            }
        }
示例#3
0
        public static async Task Main(string[] args)
        {
            ServiceLocator.Default.RegisterType <ILoggerService, LoggerService>();
            ServiceLocator.Default.RegisterType <IHashService, HashService>();
            ServiceLocator.Default.RegisterType <IAppSettingsService, AppSettingsService>();

            var logger      = ServiceLocator.Default.ResolveType <ILoggerService>();
            var hashService = ServiceLocator.Default.ResolveType <IHashService>();

            logger.OnStringLogged += delegate(object?sender, LogStringEventArgs args)
            {
                switch (args.Logtype)
                {
                case Logtype.Error:
                    Console.ForegroundColor = ConsoleColor.Red;
                    break;

                case Logtype.Important:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    break;

                case Logtype.Success:
                    Console.ForegroundColor = ConsoleColor.Green;
                    break;

                case Logtype.Normal:
                case Logtype.Wcc:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                Console.WriteLine("[" + args.Logtype + "]" + args.Message);
                Console.ResetColor();
            };

            var rootCommand = new RootCommand
            {
                new PackCommand(),
                new ArchiveCommand(),
                new DumpCommand(),
                new CR2WCommand(),
                new HashCommand(),
                new OodleCommand()
            };

            //await ConsoleFunctions.UpdateHashesAsync();
            /*await*/ hashService.ReloadLocally();

            // Run
            if (args == null || args.Length == 0)
            {
                // write welcome message
                rootCommand.InvokeAsync("-h").Wait();

                while (true)
                {
                    string line = System.Console.ReadLine();


                    if (line == "q()")
                    {
                        return;
                    }

                    var pb = new ConsoleProgressBar()
                    {
                        DisplayBars            = false,
                        DisplayPercentComplete = false,
                        DisplayAnimation       = false
                    };
                    var parsed = CommandLineExtensions.ParseText(line, ' ', '"');

                    logger.PropertyChanged += OnLoggerOnPropertyChanged;
                    void OnLoggerOnPropertyChanged(object?sender, PropertyChangedEventArgs args)
                    {
                        switch (args.PropertyName)
                        {
                        case "Progress":
                        {
                            if (logger.Progress.Item1 == 0)
                            {
                                pb = new ConsoleProgressBar()
                                {
                                    DisplayBars = true, DisplayAnimation = false
                                };
                            }

                            pb?.Report(logger.Progress.Item1);
                            if (logger.Progress.Item1 == 1)
                            {
                                System.Threading.Thread.Sleep(1000);

                                Console.WriteLine();
                                pb?.Dispose();
                                pb = null;
                            }

                            break;
                        }

                        default:
                            break;
                        }
                    }

                    rootCommand.InvokeAsync(parsed.ToArray()).Wait();

                    await WriteLog();

                    logger.PropertyChanged -= OnLoggerOnPropertyChanged;
                }
            }
            else
            {
                rootCommand.InvokeAsync(args).Wait();

                await WriteLog();
            }


            async Task WriteLog()
            {
                if (string.IsNullOrEmpty(logger.ErrorLogStr))
                {
                    return;
                }

                var t  = DateTime.Now.ToString("yyyyMMddHHmmss");
                var fi = new FileInfo(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
                                                   $"errorlogs/log_{t}.txt"));

                if (fi.Directory != null)
                {
                    Directory.CreateDirectory(fi.Directory.FullName);
                    var log = logger.ErrorLogStr;
                    await File.WriteAllTextAsync(fi.FullName, log);
                }
                else
                {
                }
            }
        }
示例#4
0
        public static async Task Main(string[] args)
        {
            ServiceLocator.Default.RegisterType <ILoggerService, LoggerService>();
            ServiceLocator.Default.RegisterType <IHashService, HashService>();
            ServiceLocator.Default.RegisterType <IWolvenkitFileService, Cp77FileService>();

            var logger = ServiceLocator.Default.ResolveType <ILoggerService>();

            logger.OnStringLogged += delegate(object sender, LogStringEventArgs args)
            {
                switch (args.Logtype)
                {
                case Logtype.Error:
                    Console.ForegroundColor = ConsoleColor.Red;
                    break;

                case Logtype.Important:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    break;

                case Logtype.Success:
                    Console.ForegroundColor = ConsoleColor.Green;
                    break;

                case Logtype.Normal:
                case Logtype.Wcc:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                Console.WriteLine("[" + args.Logtype + "]" + args.Message);
                Console.ResetColor();
            };

            var rootCommand = new RootCommand
            {
                new UnbundleCommand(),
                new UncookCommand(),
                new RebuildCommand(),
                new PackCommand(),
                new ExportCommand(),

                new DumpCommand(),
                new VerifyCommand(),
                new CR2WCommand(),

                new HashCommand(),
                new OodleCommand(),
            };

            //await ConsoleFunctions.UpdateHashesAsync();
            _ = ServiceLocator.Default.ResolveType <IHashService>();

            // try get oodle dll from game
            if ((RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) && !TryCopyOodleLib())
            {
                logger.LogString("Could not automatically find oo2ext_7_win64.dll. " +
                                 "Please manually copy and paste the DLL found in <gamedir>\\Cyberpunk 2077\\bin\\x64\\oo2ext_7_win64.dll into this folder: " +
                                 $"{AppDomain.CurrentDomain.BaseDirectory}.");
            }

            // Run
            if (args == null || args.Length == 0)
            {
                // write welcome message
                rootCommand.InvokeAsync("-h").Wait();

                while (true)
                {
                    string line = System.Console.ReadLine();

                    if (line == "q()")
                    {
                        return;
                    }

                    var pb = new ConsoleProgressBar()
                    {
                        DisplayBars            = false,
                        DisplayPercentComplete = false,
                        DisplayAnimation       = false
                    };
                    var parsed = CommandLineExtensions.ParseText(line, ' ', '"');

                    logger.PropertyChanged += OnLoggerOnPropertyChanged;
                    void OnLoggerOnPropertyChanged(object sender, PropertyChangedEventArgs args)
                    {
                        switch (args.PropertyName)
                        {
                        case "Progress":
                        {
                            if (logger.Progress.Item1 == 0)
                            {
                                pb = new ConsoleProgressBar()
                                {
                                    DisplayBars = true, DisplayAnimation = false
                                };
                            }

                            pb?.Report(logger.Progress.Item1);
                            if (logger.Progress.Item1 == 1)
                            {
                                System.Threading.Thread.Sleep(1000);

                                Console.WriteLine();
                                pb?.Dispose();
                                pb = null;
                            }

                            break;
                        }

                        default:
                            break;
                        }
                    }

                    rootCommand.InvokeAsync(parsed.ToArray()).Wait();

                    await WriteLog();

                    logger.PropertyChanged -= OnLoggerOnPropertyChanged;
                }
            }
            else
            {
                rootCommand.InvokeAsync(args).Wait();

                await WriteLog();
            }

            async Task WriteLog()
            {
                if (string.IsNullOrEmpty(logger.ErrorLogStr))
                {
                    return;
                }

                var t = DateTime.Now.ToString("yyyyMMddHHmmss");

                var baseDirectory = AppContext.BaseDirectory;

                if (string.IsNullOrEmpty(baseDirectory))
                {
                    return;
                }

                var fi = new FileInfo(Path.Combine(baseDirectory, $"errorlogs/log_{t}.txt"));

                if (fi.Directory != null)
                {
                    Directory.CreateDirectory(fi.Directory.FullName);
                    var log = logger.ErrorLogStr;
                    await File.WriteAllTextAsync(fi.FullName, log);
                }
                else
                {
                }
            }
        }
示例#5
0
        public static async Task Main(string[] args)
        {
            ServiceLocator.Default.RegisterType <ILoggerService, LoggerService>();
            ServiceLocator.Default.RegisterType <IMainController, MainController>();

            // get csv data
            Console.WriteLine("Loading Hashes...");
            Loadhashes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources/archivehashes.csv"));
            Console.WriteLine("Loaded Hashes 1...");
            //Loadhashes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources/archivehashes2.csv"));
            //Console.WriteLine("Loaded Hashes 2...");

            #region commands

            var rootCommand = new RootCommand();

            //archiveTask(string path, bool extract, bool dump)
            var archive = new Command("archive", "Target an archive to extract files or dump information.")
            {
                new Option <string>(new [] { "--path", "-p" }, "Input path to .archive."),
                new Option <string>(new [] { "--outpath", "-o" }, "Output directory to extract files to."),
                new Option <bool>(new [] { "--extract", "-e" }, "Extract files from archive."),
                new Option <bool>(new [] { "--dump", "-d" }, "Dump archive information."),
                new Option <bool>(new [] { "--list", "-l" }, "List contents of archive."),
                new Option <bool>(new [] { "--uncook", "-u" }, "Uncooks textures from archive."),
                new Option <EUncookExtension>(new [] { "--uext" }, "Uncook extension (tga, bmp, jpg, png, dds). Default is tga."),
            };
            rootCommand.Add(archive);
            archive.Handler = CommandHandler.Create <string, string, bool, bool, bool, bool, EUncookExtension>(ConsoleFunctions.ArchiveTask);

            //DumpTask(string path, bool all, bool strings, bool imports, bool buffers, bool chunks)
            var dump = new Command("dump", "Target an archive or a directory to dump archive information.")
            {
                new Option <string>(new [] { "--path", "-p" }, "Input path to .archive or to a directory (runs over all archives in directory)."),
                new Option <bool>(new [] { "--imports", "-i" }, "Dump all imports (all filenames that are referenced by all files in the archive)."),
                new Option <bool>(new [] { "--missinghashes", "-m" }, "List all missing hashes of all input archives."),
            };
            rootCommand.Add(dump);
            dump.Handler = CommandHandler.Create <string, bool, bool>(ConsoleFunctions.DumpTask);

            //Cr2wTask(string path, bool all, bool strings, bool imports, bool buffers, bool chunks)
            var cr2w = new Command("cr2w", "Target a specific cr2w (extracted) file and dumps file information.")
            {
                new Option <string>(new [] { "--path", "-p" }, "Input path to a cr2w file."),
                new Option <bool>(new [] { "--all", "-a" }, "Dump all information."),
                new Option <bool>(new [] { "--chunks", "-c" }, "Dump all class information of file."),
            };
            rootCommand.Add(cr2w);



            cr2w.Handler = CommandHandler.Create <string, bool, bool>(ConsoleFunctions.Cr2wTask);

            #endregion


            // Run
            if (args == null || args.Length == 0)
            {
                // write welcome message
                rootCommand.InvokeAsync("-h").Wait();

                while (true)
                {
                    string line   = System.Console.ReadLine();
                    var    parsed = CommandLineExtensions.ParseText(line, ' ', '"');
                    rootCommand.InvokeAsync(parsed.ToArray()).Wait();
                }
            }
            else
            {
                rootCommand.InvokeAsync(args).Wait();
            }
        }