示例#1
0
        public void LoadMods()
        {
            var knownMods = this.Config.KnownMods;

            GlobalLog.Default.PrintLine("Total known mods: " + knownMods.Count);

            foreach (var modInfo in knownMods)
            {
                var modIdentifier = ModUtils.GetReadableIdentifier(modInfo);

                if (modInfo.Active == false)
                {
                    GlobalLog.Debug.PrintLine("Skipping (not active): " + modIdentifier);
                    continue;
                }

                using (GlobalLog.Default.OpenScope("Loading: " + modIdentifier, "Finished loading: " + modIdentifier))
                {
                    var modContext = new ModContext(modInfo);
                    this.LoadedMods.Add(modContext);
                }
            }
        }
示例#2
0
        private void RemoveMod(object sender, RoutedEventArgs e)
        {
            var modInfos = this.SelectedMods.Select(guid => this.Config.KnownMods.Find(x => x.Guid == guid)).ToArray();

            if (modInfos.Length == 0)
            {
                return;
            }

            var nl      = Environment.NewLine;
            var message = "This operation will delete following mods:" + nl;

            message += string.Join(nl, modInfos.Select(x => $" - {x.DisplayName}"));
            message += nl + nl + "Are you sure?";
            var result = MessageBox.Show(message, "Delete mods", MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                foreach (var mod in modInfos)
                {
                    var modDirectory = ModUtils.GetModDirectory(mod);
                    if (Directory.Exists(modDirectory))
                    {
                        try
                        {
                            Directory.Delete(modDirectory, true);
                        }
                        catch
                        {
                            var caption = "Error while deleting mod";
                            var error   = "PatchZone could not delete all data of the following mod:" + nl;
                            error += $" - {ModUtils.GetReadableIdentifier(mod)}" + nl + nl;
                            error += "This usually happens when the game is still running or mod assets are open in dev tools." + nl;
                            error += "Please close the game and all dev tools before continuing.";
                            result = MessageBox.Show(error, caption, MessageBoxButton.OKCancel);

                            if (result == MessageBoxResult.Cancel)
                            {
                                return;
                            }

                            try
                            {
                                Directory.Delete(modDirectory, true);
                            }
                            catch (Exception ex)
                            {
                                error  = "Repeated attempt to delete data of the following mod failed:" + nl;
                                error += $" - {ModUtils.GetReadableIdentifier(mod)}" + nl + nl;
                                error += "Please delete following directory to finish the cleanup process:" + nl;
                                error += modDirectory + nl + nl;

                                result = MessageBox.Show(error, caption, MessageBoxButton.OKCancel);

                                if (result == MessageBoxResult.Cancel)
                                {
                                    return;
                                }
                            }
                        }
                    }

                    this.Config.KnownMods.Remove(mod);
                }

                NotifyConfigurationChanged();
            }
        }