public Module Load(string dllUnpackDir, string mapUnpackDir, string assetUnpackDir, bool overwriteExisting = false) { if (IsLoaded) { return(null); } var mod = ModDatabase.Get(ModName, ModMajor); if (mod == null) { return(null); } string errors; return(ModLoader.LoadCompressedModFile(mod.File, dllUnpackDir, mapUnpackDir, assetUnpackDir, out errors, mod.UsesWhitelist, overwriteExisting)); }
public static Module LoadCompressedModFile(string modFile, string dllUnpackDir, string mapUnpackDir, string assetUnpackDir, out string errors, bool verifySafe = true, bool overwriteExisting = false) { errors = ""; if (loadedModFiles.ContainsKey(modFile)) { return(loadedModFiles[modFile]); } Module output = null; string err = ""; #if !DISABLE_ERROR_HANDLING_FOR_MODLOADER try { #endif //Get the header to resolve dependencies var header = ModUnpacker.GetHeader(modFile); var deps = new List <string>(); //Resolve the dependencies and get all of their dlls foreach (var dep in header.Dependencies) { deps.AddRange(DependencyResolver.LoadDependency(dep.ModName, dep.Major, dep.Minor, dllUnpackDir, mapUnpackDir, assetUnpackDir, header.Name, overwriteExisting)); } //Remove duplicates deps = deps.Distinct().ToList(); //Then, unpack (our) assemblies to the correct directory var dllPaths = ModUnpacker.UnpackDlls(modFile, dllUnpackDir, overwriteExisting); //If it has source code, compile that if (header.CodeFiles.Length > 0) { string mErr = ""; output = LoadFromSourceCode( ModUnpacker.GetSourceCode(modFile), verifySafe, out mErr, dllPaths, deps.ToArray() ); err += mErr; } else { //Otherwise, just do a simple load string mErr = ""; output = LoadPrecompiled( dllPaths, verifySafe, out mErr); err += mErr; } //Check if the mod failed at loading errors = err; if (output == null) { return(null); } //If it didn't, write the header output.Header = ModUnpacker.GetHeader(modFile); //And finally, unpack assets MapAssetFileNames(output.Header.ImageFiles, ModUnpacker.UnpackImages(modFile, assetUnpackDir, overwriteExisting), output); MapAssetFileNames(output.Header.SoundFiles, ModUnpacker.UnpackSounds(modFile, assetUnpackDir, overwriteExisting), output); MapAssetFileNames(output.Header.MapFiles, ModUnpacker.UnpackMaps(modFile, mapUnpackDir, overwriteExisting), output); MapAssetFileNames(output.Header.ComponentFiles, ModUnpacker.UnpackComponents(modFile, assetUnpackDir, overwriteExisting), output); #if !DISABLE_ERROR_HANDLING_FOR_MODLOADER } catch (Exception ex) { err += ex.ToString() + "\n\n"; } #endif errors = err; loadedModFiles.Add(modFile, output); output.PackedFile = modFile; //Mark the mod as loaded ModDatabase.AddLoaded(output); return(output); }