static void DoBinaryChanges(string filePath, bool xtreme, Percentage perc) { fails.Clear(); SectionEditor.Reset(); // only take binary changes var changes = Version.Changes.Where(c => c.IsChecked && c is Change && !(c is ResourceChange) && !(c is StartTroopChange)); List <Change> todoList = new List <Change>(changes); int todoIndex = 0; double todoCount = 9 + todoList.Count; // +2 for AIprops +3 for read, +1 for version edit, +3 for writing data // read original data & section preparation byte[] oriData = File.ReadAllBytes(filePath); byte[] data = (byte[])oriData.Clone(); SectionEditor.Init(data); todoIndex += 3; perc.Set(todoIndex / todoCount); ChangeArgs args = new ChangeArgs(data, oriData); // change version display in main menu try { (xtreme ? Version.MenuChange_XT : Version.MenuChange).Activate(args); } catch (Exception e) { Debug.Error(e); } perc.Set(++todoIndex / todoCount); // change stuff foreach (Change change in todoList) { change.Activate(args); perc.Set(++todoIndex / todoCount); } AICChange.DoChange(args); StartTroopChange.DoChange(args); ResourceChange.DoChange(args); todoIndex += 2; perc.Set(todoIndex / todoCount); // Write everything to file data = SectionEditor.AttachSection(data); if (filePath.EndsWith(BackupFileEnding)) { filePath = filePath.Remove(filePath.Length - BackupFileEnding.Length); } else { File.WriteAllBytes(filePath + BackupFileEnding, oriData); // create backup } File.WriteAllBytes(filePath, data); perc.Set(1); ShowFailures(filePath); }
static void DoBinaryChanges(string filePath, bool xtreme, Percentage perc) { fails.Clear(); SectionEditor.Reset(); string gameSeedsFolder = Path.Combine(Configuration.Path, GAME_SEEDS_FOLDER); if (!Directory.Exists(gameSeedsFolder)) { Directory.CreateDirectory(gameSeedsFolder); } // Retrieve set of selected binary changes var changes = Version.Changes.Where(c => c.IsChecked && c is Change && !(c is ResourceChange) && !(c is StartTroopChange)); List <Change> todoList = new List <Change>(changes); int todoIndex = 0; double todoCount = 9 + todoList.Count; // +2 for AIprops +3 for read, +1 for version edit, +3 for writing data // Read original data & perform section preparation adding .ucp section to binary byte[] oriData = File.ReadAllBytes(filePath); byte[] data = (byte[])oriData.Clone(); SectionEditor.Init(data); todoIndex += 3; perc.Set(todoIndex / todoCount); ChangeArgs args = new ChangeArgs(data, oriData); // Change version display in main menu try { (xtreme ? Version.MenuChange_XT : Version.MenuChange).Activate(args); } catch (Exception e) { Debug.Error(e); } perc.Set(++todoIndex / todoCount); // Apply each selected binary change foreach (Change change in todoList) { change.Activate(args); perc.Set(++todoIndex / todoCount); } // Apply changes handled in their respective submodules AICChange.DoChange(args); StartTroopChange.DoChange(args); ResourceChange.DoChange(args); todoIndex += 2; perc.Set(todoIndex / todoCount); // Write everything to file data = SectionEditor.AttachSection(data); if (filePath.EndsWith(BackupFileEnding)) { filePath = filePath.Remove(filePath.Length - BackupFileEnding.Length); } else { File.WriteAllBytes(filePath + BackupFileEnding, oriData); // create backup } File.WriteAllBytes(filePath, data); perc.Set(1); ShowFailures(filePath); }