private void Inject(WpdArchiveListing listing, WpdEntry[] fontEntries, WflContent[] fontContent) { UiInjectionManager manager = new UiInjectionManager(); using (MemoryInjectionSource source = new MemoryInjectionSource()) { String injectionRoot = Path.Combine(source.ProvideRootDirectory(), listing.ExtractionSubpath); for (int i = 0; i < fontEntries.Length; i++) { WpdEntry entry = fontEntries[i]; WflContent content = fontContent[i]; String injectionPath = Path.Combine(injectionRoot, entry.Name); MemoryStream stream = new MemoryStream(1024); source.RegisterStream(injectionPath, stream); WflFileWriter writer = new WflFileWriter(stream); writer.Write(content); stream.SetPosition(0); } UiWpdInjector injector = new UiWpdInjector(listing, fontEntries, false, source); injector.Inject(manager); } manager.WriteListings(); }
public void Execute(object parameter) { try { UiArchives archives = _archivesProvider(); if (archives == null) return; UiGameFileCommanderSettingsWindow settingsDlg = new UiGameFileCommanderSettingsWindow(false); if (settingsDlg.ShowDialog() != true) return; Stopwatch sw = new Stopwatch(); sw.Start(); Wildcard wildcard = new Wildcard(settingsDlg.Wildcard, false); bool? compression = settingsDlg.Compression; bool? conversion = settingsDlg.Convert; UiInjectionManager manager = new UiInjectionManager(); FileSystemInjectionSource source = new FileSystemInjectionSource(); foreach (IUiLeafsAccessor accessor in archives.AccessToCheckedLeafs(wildcard, conversion, compression)) accessor.Inject(source, manager); manager.WriteListings(); if (sw.ElapsedMilliseconds / 1000 > 2) MessageBox.Show(String.Format("Упаковка завершена за {0}.", sw.Elapsed.ToString(@"d\.hh\:mm\:ss")), "Готово!", MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); } }
public static void InjectSingle(WpdArchiveListing listing, WpdEntry entry, MemoryStream output) { using (MemoryInjectionSource source = new MemoryInjectionSource()) { source.RegisterStream(String.Empty, output); UiWpdInjector injector = new UiWpdInjector(listing, new[] {entry}, false, source); UiInjectionManager manager = new UiInjectionManager(); injector.Inject(manager); manager.WriteListings(); } }
public static void InjectSingle(WpdArchiveListing listing, WpdEntry entry, MemoryStream output) { using (MemoryInjectionSource source = new MemoryInjectionSource()) { source.RegisterStream(String.Empty, output); UiWpdInjector injector = new UiWpdInjector(listing, new[] { entry }, false, source); UiInjectionManager manager = new UiInjectionManager(); injector.Inject(manager); manager.WriteListings(); } }
public void Execute(object parameter) { try { UiArchives archives = _archivesProvider(); if (archives == null) { return; } UiGameFileCommanderSettingsWindow settingsDlg = new UiGameFileCommanderSettingsWindow(false); if (settingsDlg.ShowDialog() != true) { return; } Stopwatch sw = new Stopwatch(); sw.Start(); Wildcard wildcard = new Wildcard(settingsDlg.Wildcard, false); bool? compression = settingsDlg.Compression; bool? conversion = settingsDlg.Convert; UiInjectionManager manager = new UiInjectionManager(); FileSystemInjectionSource source = new FileSystemInjectionSource(); foreach (IUiLeafsAccessor accessor in archives.AccessToCheckedLeafs(wildcard, conversion, compression)) { accessor.Inject(source, manager); } manager.WriteListings(); if (sw.ElapsedMilliseconds / 1000 > 2) { MessageBox.Show(String.Format(Lang.Message.Done.InjectionCompleteFormat, sw.Elapsed), Lang.Message.Done.Title, MessageBoxButton.OK, MessageBoxImage.Information); } } catch (Exception ex) { MessageBox.Show(ex.ToString(), Lang.Message.Error.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }
private void Patch(DirectoryInfo translationDir, GameLocationInfo gameLocation) { if (CancelEvent.IsSet()) return; Dictionary<string, string> dic = ReadStrings(translationDir); if (CancelEvent.IsSet()) return; FileSystemInjectionSource source = new FileSystemInjectionSource(); source.RegisterStrings(dic); UiArchiveTreeBuilder builder = new UiArchiveTreeBuilder(gameLocation); UiArchives archives = builder.Build(); Position = 0; Maximum = archives.Count; foreach (UiContainerNode archive in archives) { Check(archive); OnProgress(1); } if (CancelEvent.IsSet()) return; IUiLeafsAccessor[] accessors = archives.AccessToCheckedLeafs(new Wildcard("*"), null, false).ToArray(); Position = 0; Maximum = accessors.Length; UiInjectionManager manager = new UiInjectionManager(); foreach (IUiLeafsAccessor accessor in accessors) { accessor.Inject(source, manager); OnProgress(1); } manager.WriteListings(); }
private void Patch(BinaryReader br, GameLocationInfo gameLocation) { if (CancelEvent.IsSet()) return; FFXIIITextEncoding encoding = ReadEncoding(br); TextEncodingInfo encodingInfo = new TextEncodingInfo(encoding); InteractionService.TextEncoding.SetValue(encodingInfo); if (CancelEvent.IsSet()) return; Dictionary<string, string> dic = ReadStrings(br); dic["$title_newgame"] = _userName; if (CancelEvent.IsSet()) return; using (DisposableStack disposables = new DisposableStack()) { MemoryInjectionSource source = disposables.Add(new MemoryInjectionSource()); source.RegisterStrings(dic); if (CancelEvent.IsSet()) return; int count = br.ReadInt32(); OnProgress(4); for (int i = 0; i < count; i++) { long position = br.BaseStream.Position; ImgbPatchData imgb = disposables.Add(ImgbPatchData.ReadFrom(br)); foreach (KeyValuePair<string, SafeUnmanagedArray> data in imgb) source.RegisterStream(Path.Combine(imgb.XgrArchiveUnpackName, data.Key), data.Value.OpenStream(FileAccess.Read)); OnProgress(br.BaseStream.Position - position); if (CancelEvent.IsSet()) return; } UiArchiveTreeBuilder builder = new UiArchiveTreeBuilder(gameLocation); UiArchives archives = builder.Build(); Position = 0; Maximum = archives.Count; foreach (UiContainerNode archive in archives) { Check(archive); OnProgress(1); } if (CancelEvent.IsSet()) return; IUiLeafsAccessor[] accessors = archives.AccessToCheckedLeafs(new Wildcard("*"), null, false).ToArray(); Position = 0; Maximum = accessors.Length; UiInjectionManager manager = new UiInjectionManager(); foreach (IUiLeafsAccessor accessor in accessors) { accessor.Inject(source, manager); OnProgress(1); } manager.WriteListings(); } }