/// <summary> /// On save button clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SaveButton_Click(object sender, EventArgs e) { if (versionBox.Value < 0) { Warning.Error(HaRepacker.Properties.Resources.SaveVersionError); return; } using (SaveFileDialog dialog = new SaveFileDialog() { Title = HaRepacker.Properties.Resources.SelectOutWz, FileName = wzNode.Text, Filter = string.Format("{0}|*.wz", HaRepacker.Properties.Resources.WzFilter) }) { if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } WzMapleVersion wzMapleVersionSelected = MainForm.GetWzMapleVersionByWzEncryptionBoxSelection(encryptionBox.SelectedIndex); // new encryption selected if (this.IsRegularWzFile) { if (wzf is WzFile file && wzf.MapleVersion != wzMapleVersionSelected) { PrepareAllImgs(file.WzDirectory); } wzf.MapleVersion = wzMapleVersionSelected; if (wzf is WzFile file1) { file1.Version = (short)versionBox.Value; } if (wzf.FilePath != null && wzf.FilePath.ToLower() == dialog.FileName.ToLower()) { wzf.SaveToDisk(dialog.FileName + "$tmp", wzMapleVersionSelected); wzNode.DeleteWzNode(); try { File.Delete(dialog.FileName); File.Move(dialog.FileName + "$tmp", dialog.FileName); }catch (IOException ex) { MessageBox.Show("Handle error overwriting WZ file", HaRepacker.Properties.Resources.Error); } } else { wzf.SaveToDisk(dialog.FileName, wzMapleVersionSelected); wzNode.DeleteWzNode(); } // Reload the new file WzFile loadedWzFile = Program.WzFileManager.LoadWzFile(dialog.FileName, wzMapleVersionSelected); if (loadedWzFile != null) { Program.WzFileManager.AddLoadedWzFileToMainPanel(loadedWzFile, panel); } } else { byte[] WzIv = WzTool.GetIvByMapleVersion(wzMapleVersionSelected); // Save file string tmpFilePath = dialog.FileName + ".tmp"; string targetFilePath = dialog.FileName; bool error_noAdminPriviledge = false; try { using (FileStream oldfs = File.Open(tmpFilePath, FileMode.OpenOrCreate)) { using (WzBinaryWriter wzWriter = new WzBinaryWriter(oldfs, WzIv)) { wzImg.SaveImage(wzWriter, true); // Write to temp folder } } try { File.Copy(tmpFilePath, targetFilePath, true); File.Delete(tmpFilePath); } catch (Exception exp) { Debug.WriteLine(exp); // nvm, dont show to user } wzNode.DeleteWzNode(); } catch (UnauthorizedAccessException) { error_noAdminPriviledge = true; } // Reload the new file WzImage img = Program.WzFileManager.LoadDataWzHotfixFile(dialog.FileName, wzMapleVersionSelected, panel); if (img == null || error_noAdminPriviledge) { MessageBox.Show(HaRepacker.Properties.Resources.MainFileOpenFail, HaRepacker.Properties.Resources.Error); } } } Close(); }