ME3Explorer.KFreonTPFTools3.LoadMOD C# (CSharp) Method

LoadMOD() private method

private LoadMOD ( string filename ) : void
filename string
return void
        private void LoadMOD(string filename)
        {
            ModMaker modmaker = new ModMaker();
            string basetemppath = Path.Combine(TemporaryPath, "MOD CONVERSION");

            // KFreon: Setup temp folder
            for (int i = 0; i < 3; i++)
                try
                {
                    if (Directory.Exists(basetemppath))
                        Directory.Delete(basetemppath);
                    else
                        break;
                }
                catch
                {
                    System.Threading.Thread.Sleep(100);
                }
            Directory.CreateDirectory(basetemppath);

            // KFreon: Load mods
            Overall.UpdateText("Loading Mod: " + filename);
            int nummods;
            modmaker.LoadMods(new string[] { filename }, out nummods, true);
            Overall.UpdateText("Formatting/Updating .mods...");
            bool conflict;
            var result = modmaker.FormatJobs(true, true, out conflict);
            // Heff: prompt user to chose version and re-run with version chosen
            if (conflict)
            {
                this.Invoke(new Action(() =>
                {
                    var gameVers = VersionPickDialog.AskForGameVersion(this, message: "Could not detect game version, the files in this .mod were present in more than one game. \n"
                        + "Please choose the correct version:");
                    result = modmaker.FormatJobs(true, true, out conflict, gameVers);
                }));
            }

            if (result.Count == 0)
            {
                Overall.UpdateText("ERROR! See debug output.");
                OverallProg.ChangeProgressBar(0, 1);
                return;
            }

            List<TreeTexInfo> TreeTexes = Tree.GetTreeAsList();
            int count = 1;
            OverallProg.ChangeProgressBar(0, nummods);
            foreach (KFreonLib.Scripting.ModMaker.ModJob job in KFreonLib.Scripting.ModMaker.JobList)
            {
                if (cts.IsCancellationRequested)
                    break;

                if (job.JobType != "TEXTURE")
                    DebugOutput.PrintLn("Job:" + job.Name + " isn't a texture job. Ignoring...");
                else
                {
                    Overall.UpdateText("Converting job: " + count++ + " of " + nummods);

                    // KFreon: Change Trees if necessary
                    if (WhichGame != job.WhichGame)
                        ChangeTrees(job.WhichGame);   // wait here?

                    uint inthash = KFreonLib.Textures.Methods.FindHashByName(job.Texname, job.PCCs, job.ExpIDs, TreeTexes);
                    string hash = KFreonLib.Textures.Methods.FormatTexmodHashAsString(inthash);

                    if (hash == "0")
                        DebugOutput.PrintLn("Unable to find hash for " + job.Texname + ". Continuing...");
                    else
                    {
                        string newname = "MASSEFFECT" + WhichGame + ".EXE_" + hash + ".dds";
                        string newpath = Path.Combine(basetemppath, newname);
                        File.WriteAllBytes(newpath, job.data);
                        LoadExternal(newpath, false);
                    }
                }
            }

            if (!cts.IsCancellationRequested)
                Overall.UpdateText("Loaded " + (count - 1) + " jobs out of " + KFreonLib.Scripting.ModMaker.JobList.Count + " from Modmaker.");
            else
                Overall.UpdateText("Mod loading cancelled!");
            OverallProg.ChangeProgressBar(1, 1);
            RedrawTreeView();
        }
KFreonTPFTools3