private static void LoadSingleMod(string ModFolderPath) { string path1 = Path.Combine(ModFolderPath, "Modinfo.dat"); string str = ""; if (File.Exists(path1)) { str = File.ReadAllText(path1); } else { //Debug.Log(@"(DataLoader.LoadSingleMod)오류/" + path1 + " 모드인포 파일을 찾을수 없습니다."); return; } object obj2 = ObjectSaver.ObjectSaver.Load(path1); ModInfo info = ObjectSaver.ObjectSaver.Load(path1) as ModInfo; string scriptpath = Path.Combine(ModFolderPath, info.ScriptPath); //CSharpCodeProvider provider = new CSharpCodeProvider(); CodeDomProvider provider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; parameters.GenerateExecutable = false; //parameters.CoreAssemblyFileName = "CataclysmRemasterd"; parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location); //parameters.ReferencedAssemblies.Add("System.dll"); CompilerResults results = provider.CompileAssemblyFromFile(parameters, scriptpath); if (results.Errors.HasErrors) { StringBuilder sb = new StringBuilder(); foreach (CompilerError error in results.Errors) { sb.AppendLine(String.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText)); } throw new InvalidOperationException(sb.ToString()); } Assembly assembly = results.CompiledAssembly; Type[] ts = assembly.GetTypes(); Type program = assembly.GetType(info.FullName); object obj = assembly.CreateInstance(info.FullName); program.GetField("data").SetValue(obj, StaticUse.mainstorage); program.GetMethod("Initialize").Invoke(obj, null); DataLoadScript loader = program.GetField("load").GetValue(obj) as DataLoadScript; StaticUse.mainstorage.LoadedModAssembly.Add(assembly); StaticUse.mainstorage.LoadedModObject.Add(obj); DataLoadScriptLoader.Load(loader, info); }
public static void Load(DataLoadScript loader, ModInfo modinfo) { foreach (Func <DataStructure.Map.Tile> tileload in loader.TileList) { Map.Tile tile = tileload(); tile.modInfo = modinfo; StaticUse.mainstorage.TileStorage.Add(tile); _ = tile.sprite; } foreach (Func <DataStructure.Map.Material> materialload in loader.MaterialList) { Map.Material material = materialload(); material.modInfo = modinfo; StaticUse.mainstorage.MaterialStorage.Add(material); } foreach (Func <DataStructure.Map.BaseChunk> basechunkload in loader.BaseChunkList) { Map.BaseChunk basechunk = basechunkload(); basechunk.modInfo = modinfo; StaticUse.mainstorage.BaseChunkStorage.Add(basechunk); } }