示例#1
0
        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);
        }
示例#2
0
 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);
     }
 }