Пример #1
0
        /// <summary>
        /// Applies Profile Settings to ModList
        /// </summary>
        #region Appply Mod Settings
        /// <summary>
        /// Change Load Order and enables mods depending on active profile
        /// </summary>
        public void ApplyModSettings(Dos2ModsSettings activeSettings)
        {
            //Dos2ModsSettings activeSettings = ParentViewModel.Profiles.FirstOrDefault(x => x.IsActive);
            foreach (var mod in ModsList)
            {
                mod.IsEnabled = activeSettings.ActiveMods.Contains(mod.UUID);
                //find index of mod by UUID
                mod.LoadOrder = activeSettings.ModLoadOrder.FindIndex(x => x == mod.UUID);
            }
            var uncategorized = ModsList.Where(x => x.LoadOrder < 0).ToList();

            foreach (var item in uncategorized)
            {
                // give highest load order index
                int maxLoadOrder = ModsList.Max(x => x.LoadOrder);
                item.LoadOrder = maxLoadOrder + 1;
            }

            SortCollectionByProperty("LoadOrder");
        }
Пример #2
0
        void IDropTarget.Drop(IDropInfo dropInfo)
        {
            Dos2Mod sourceItem = dropInfo.Data as Dos2Mod;
            Dos2Mod targetItem = dropInfo.TargetItem as Dos2Mod;

            var insertIndex = dropInfo.InsertIndex;
            var sourceIndex = dropInfo.DragInfo.SourceIndex;

            insertIndex = Math.Min(insertIndex, ModsList.Count - 1);

            if (!ParentViewModel.IsInitialized)
            {
                return;
            }

            if (insertIndex < sourceIndex) //move up
            {
                List <Dos2Mod> higher = ModsList.Where(x => x.LoadOrder >= insertIndex && x.LoadOrder < sourceIndex).ToList();
                foreach (var item in higher)
                {
                    item.LoadOrder += 1;
                }
                sourceItem.LoadOrder = insertIndex;
            }
            else //move down
            {
                List <Dos2Mod> lower = ModsList.Where(x => x.LoadOrder <= insertIndex && x.LoadOrder > sourceIndex).ToList();
                foreach (var item in lower)
                {
                    item.LoadOrder -= 1;
                }
                sourceItem.LoadOrder = insertIndex;
            }


            SortCollectionByProperty("LoadOrder");
        }
Пример #3
0
        /// <summary>
        /// Gets Moddata from paks if not already in ModList
        /// </summary>
        #region GetModData
        /// <summary>
        /// Gets Moddata from paks if not already in ModList
        /// </summary>
        public async void GetModDataAsync()
        {
            string modDir = Path.Combine(Path.GetDirectoryName(Dos2.ModManager.Properties.Settings.Default.Mods), @"Mods");

            // checks
            #region checks
            if (!Directory.Exists(Dos2.ModManager.Properties.Settings.Default.WorkingDir) ||
                !Directory.Exists(modDir))
            {
                MessageBoxResult result = MessageBox.Show(
                    "No mod directory found. Please check your paths.",
                    "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
                ParentViewModel.Logger.Status = "Finished With Errors.";
                return;
            }
            if (!Directory.GetFiles(modDir).ToList().Any())
            {
                return;
            }
            #endregion

            try
            {
                List <string> modFiles = Directory.GetFiles(modDir).ToList();

                //Logging Start
                ParentViewModel.Logger.ProgressValue   = 0;
                ParentViewModel.Logger.IsIndeterminate = false;
                ParentViewModel.Logger.LogString("Fetching Mod Data...");
                ParentViewModel.Logger.Status = "Fetching mod data...";

                for (int i = 0; i < modFiles.Count; i++)
                {
                    string modPath = modFiles[i];

                    //get UUID
                    string uuid = Path.GetFileNameWithoutExtension(modPath).Split('_').Last();
                    string meta = "";

                    //check if mod is already in ModList
                    // FIXME check for updates
                    if (!ModsList.Where(x => x.UUID.Equals(uuid)).Any())
                    {
                        meta = await Task.Run(() => ParentViewModel.pt.ExtractModMeta(modPath));

                        if (String.IsNullOrEmpty(meta))
                        {
                            continue;
                        }

                        //interpret meta.lsx
                        Dos2Mod mod = InterpretModMeta(meta);
                        mod.PakPath = modPath;

                        //add to modslist
                        ModsList.Add(mod);
                    }
                    else
                    {
                        //is updated
                        Dos2Mod oldmod = ModsList.FirstOrDefault(x => x.UUID.Equals(uuid));
                        if (oldmod.IsUpdated)
                        {
                            //extract meta.lsx and interpret

                            //replace existing mod
                            throw new NotImplementedException();
                        }
                        else
                        {
                            //do nothing.
                        }
                    }

                    //Logging Progress
                    int prg = Convert.ToInt32(100 / (modFiles.Count - 1) * i);
                    ParentViewModel.Logger.ProgressValue = prg;
                }

                //Logging End
                ParentViewModel.Logger.IsIndeterminate = false;
                ParentViewModel.Logger.Status          = "Finished.";
                ParentViewModel.Logger.LogString("Finished fetching mod data...");
                ParentViewModel.Logger.NotifyStatusChanged();

                // populate files list for mods
                GetModFilesAsync();
                ApplyModSettings(ParentViewModel.ActiveProfile);
            }
            catch (Exception e)
            {
                MessageBoxResult result = MessageBox.Show(
                    "Something went wrong when trying to load mod data. Please check your paths.",
                    "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                ParentViewModel.Logger.Status = "Finished With Errors.";
                ParentViewModel.Logger.LogString("Something went wrong when trying to load mod data. Please check your paths.");
                ParentViewModel.Logger.LogString(e.ToString());
                return;
            }
        }