private void newParticles_Click(object sender, EventArgs e) { if (Properties.Settings.Default.UGCPath == "") { MessageBox.Show("You need to select your dota_ugc path before you can use this.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); return; } if (!Directory.Exists(Path.Combine(Environment.CurrentDirectory, "decompiled_particles"))) { DialogResult result = MessageBox.Show( "No decompiled_particles folder detected in the D2ModKit folder. Would you like to download the decompiled particles now?", "D2ModKit", MessageBoxButtons.YesNo, MessageBoxIcon.Hand); if (result == DialogResult.Yes) { Process.Start("http://moddota.com/resources/decompiled_particles.zip"); } return; } OpenFileDialog fileDialog = new OpenFileDialog(); Debug.WriteLine("Current directory: " + Environment.CurrentDirectory); fileDialog.InitialDirectory = Path.Combine(Environment.CurrentDirectory, "decompiled_particles"); fileDialog.Multiselect = true; fileDialog.Title = "Select Particles To Copy"; DialogResult res = fileDialog.ShowDialog(); // check if we actually have filenames, or the user closed the box. if (res != DialogResult.OK) { return; } string[] particlePaths = fileDialog.FileNames; FolderBrowserDialog browser = new FolderBrowserDialog(); // RootFolder needs to be defined for auto-scrolling to work apparently. browser.RootFolder = getRootFolder(); // let the user see the particles directory first. string initialPath = Path.Combine(currAddon.ContentPath, "particles"); browser.SelectedPath = initialPath; browser.ShowNewFolderButton = true; browser.Description = "Browse to where the particles will be copied to. They must be placed in the particles directory."; DialogResult browserResult = browser.ShowDialog(); if (browserResult == DialogResult.Cancel) { return; } string newFolder = browser.SelectedPath; string folderName = newFolder.Substring(newFolder.LastIndexOf('\\') + 1); List<Particle> particles = new List<Particle>(); foreach (string path in particlePaths) { bool overwriteAllowed = true; string particleName = path.Substring(path.LastIndexOf('\\') + 1); string targetPath = Path.Combine(newFolder, particleName); try { File.Copy(path, targetPath); } catch (IOException) { } if (overwriteAllowed) { particles.Add(new Particle(targetPath)); } } ParticleSystem ps = new ParticleSystem(particles); ParticleDesignForm PDF = new ParticleDesignForm(ps); DialogResult r = PDF.ShowDialog(); if (!PDF.SubmitClicked) { // User doesn't want to fork particles, so undo what we already did. // Delete the particles that were just copied. for (int i = 0; i < particles.Count(); i++) { File.Delete(particles.ElementAt(i).Path); } return; } // if particle wasn't renamed, fix the child references. if (!PDF.Renamed) { ps.fixChildRefs(newFolder); } for (int i = 0; i < ps.Particles.Count(); i++) { Particle p = ps.Particles.ElementAt(i); File.WriteAllText(p.Path, p.ToString()); } //text_notification("Particles successfully forked.", Color.Green, 2000); }