コード例 #1
0
ファイル: ModCrates.cs プロジェクト: TheBetaM/CrateModLoader
        public static Dictionary <string, string> SaveSettingsToCrate(Modder mod, string path, bool fullSettings)
        {
            Dictionary <string, string> Assets = new Dictionary <string, string>();
            string tempPath   = ModLoaderGlobals.BaseDirectory + @"\" + ModLoaderGlobals.TempName;
            string assetsPath = tempPath + @"\" + ModLoaderGlobals.ModAssetsFolderName + @"\";

            List <string> LineList = new List <string>();

            LineList.Add(string.Format("{0} {1} {2}", CommentSymbol, ModLoaderGlobals.ProgramVersion, "Auto-Generated Settings File"));

            foreach (ModPropertyBase prop in mod.Props)
            {
                if (fullSettings || (!fullSettings && prop.HasChanged))
                {
                    string text = "";

                    if (prop is ModPropExternalResourceBase ext)
                    {
                        Assets.Add(assetsPath + ext.CodeName + ext.AssetExtension, ext.CodeName + ext.AssetExtension);
                        ext.ResourceToFile(assetsPath + ext.CodeName + ext.AssetExtension);
                        ext.ResourcePath = ModLoaderGlobals.ModAssetsFolderName + @"\" + ext.CodeName + ext.AssetExtension;
                    }

                    prop.Serialize(ref text);
                    LineList.Add(text);
                }
            }

            File.WriteAllLines(path, LineList);
            return(Assets);
        }
コード例 #2
0
        public ModCrateMakerForm(Modder inmod, Game ingame, string outpath)
        {
            InitializeComponent();

            mod  = inmod;
            Game = ingame;
            path = outpath;

            button_save.Text       = ModLoaderText.ModCrateMaker_Button_Save;
            button_browse.Text     = ModLoaderText.ModCrateMaker_Button_Browse;
            button_cancel.Text     = ModLoaderText.ModCrateMaker_Button_Cancel;
            label_name.Text        = ModLoaderText.ModCrateMaker_Label_Name;
            label_author.Text      = ModLoaderText.ModCrateMaker_Label_Author;
            label_description.Text = ModLoaderText.ModCrateMaker_Label_Description;
            label_version.Text     = ModLoaderText.ModCrateMaker_Label_Version;
            label_icon.Text        = ModLoaderText.ModCrateMaker_Label_Icon;
            Text = ModLoaderText.ModCrateMakerTitle;

            crate = new ModCrate();

            textBox_author.Text      = crate.Author;
            textBox_description.Text = crate.Desc;
            textBox_name.Text        = crate.Name;
            textBox_version.Text     = crate.Version;

            crate.HasIcon     = false;
            crate.TargetGame  = Game.ShortName;
            crate.HasSettings = true;
            crate.IsFolder    = false;
        }
コード例 #3
0
        public void ResetGameSpecific(bool ClearGameText = false)
        {
            Modder   = null;
            Pipeline = null;

            SupportedMods = new List <ModCrate>();

            ResetGameEvent.Invoke(this, new EventValueArgs <bool>(ClearGameText));
        }
コード例 #4
0
ファイル: ModCrates.cs プロジェクト: TheBetaM/CrateModLoader
        /// <summary>
        /// Saves the given Mod Crate using the given Modder to given path.
        /// </summary>
        public static void SaveSimpleCrateToFile(Modder mod, string path, ModCrate crate)
        {
            string tempPath   = ModLoaderGlobals.BaseDirectory + @"\" + ModLoaderGlobals.TempName;
            string assetsPath = tempPath + @"\" + ModLoaderGlobals.ModAssetsFolderName + @"\";

            Directory.CreateDirectory(tempPath);
            Directory.CreateDirectory(assetsPath);

            List <string> LineList_Info = new List <string>();

            LineList_Info.Add(string.Format("{0}{1}{2}", Prop_Name, Separator, crate.Name));
            LineList_Info.Add(string.Format("{0}{1}{2}", Prop_Desc, Separator, crate.Desc));
            LineList_Info.Add(string.Format("{0}{1}{2}", Prop_Author, Separator, crate.Author));
            LineList_Info.Add(string.Format("{0}{1}{2}", Prop_Version, Separator, crate.Version));
            LineList_Info.Add(string.Format("{0}{1}{2}", Prop_CML_Version, Separator, crate.CML_Version));
            LineList_Info.Add(string.Format("{0}{1}{2}", Prop_Game, Separator, crate.TargetGame));

            File.WriteAllLines(Path.Combine(tempPath, InfoFileName), LineList_Info);

            Dictionary <string, string> Assets = SaveSettingsToCrate(mod, Path.Combine(tempPath, SettingsFileName), false);

            if (crate.HasIcon)
            {
                File.Copy(crate.IconPath, Path.Combine(tempPath, IconFileName));
                //crate.Icon.Save(Path.Combine(ModLoaderGlobals.BaseDirectory, IconFileName));
            }

            string zipFolderName = ModLoaderGlobals.ModAssetsFolderName + @"\";

            using (FileStream fileStream = new FileStream(path, FileMode.Create))
            {
                using (ZipArchive zip = new ZipArchive(fileStream, ZipArchiveMode.Create))
                {
                    zip.CreateEntryFromFile(Path.Combine(tempPath, InfoFileName), InfoFileName);
                    zip.CreateEntryFromFile(Path.Combine(tempPath, SettingsFileName), SettingsFileName);
                    if (crate.HasIcon)
                    {
                        zip.CreateEntryFromFile(Path.Combine(tempPath, IconFileName), IconFileName);
                    }
                    if (Assets.Count > 0)
                    {
                        zip.CreateEntry(zipFolderName);
                        foreach (KeyValuePair <string, string> pair in Assets)
                        {
                            zip.CreateEntryFromFile(pair.Key, zipFolderName + pair.Value);
                        }
                    }
                }
            }

            //cleanup
            Directory.Delete(tempPath, true);
        }
コード例 #5
0
        /// <summary>
        /// Detects console and game from the given full path using cached ModPipeline and Game lists.
        /// </summary>
        public void DetectGame(string inputPath)
        {
            bool directoryMode = IO_Common.PathIsFolder(inputPath);

            Modder        = null;
            Pipeline      = null;
            GamePreloaded = false;
            SupportedMods = new List <ModCrate>();
            bool   ConsoleDetected = false;
            string regionID;
            uint   regionNumber;

            DeleteTempFiles(TempPath);

            try
            {
                foreach (KeyValuePair <ModPipelineInfo, Type> pair in SupportedConsoles)
                {
                    Pipeline = (ModPipeline)Activator.CreateInstance(pair.Value);
                    bool DetectResult = Pipeline.Detect(directoryMode, inputPath, out regionID, out regionNumber);
                    if (DetectResult)
                    {
                        ConsoleDetected = true;
                        SetGameType(regionID, pair.Key.Console, regionNumber);
                        break;
                    }
                    DeleteTempFiles(TempPath);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Detect Error: " + ex.Message);

                UpdateProcessMessage(ModLoaderText.Error_UnableToOpenGame);
                ResetGameSpecific(false);
                return;
            }

            DeleteTempFiles(TempPath);

            SetProcessStartAllow.Invoke(this, new EventValueArgs <bool>(ConsoleDetected));

            if (!ConsoleDetected)
            {
                ResetGameSpecific(false);
                UpdateProcessMessage(ModLoaderText.Error_UnknownGameROM);
            }
        }
コード例 #6
0
ファイル: ModCrates.cs プロジェクト: TheBetaM/CrateModLoader
 /// <summary>
 /// De-serializes mod properties in activated Mod Crates into the given Modder
 /// </summary>
 public static void InstallCrateSettings(List <ModCrate> SupportedMods, Modder modder)
 {
     for (int mod = 0; mod < SupportedMods.Count; mod++)
     {
         if (SupportedMods[mod].IsActivated && SupportedMods[mod].HasSettings)
         {
             foreach (ModPropertyBase prop in modder.Props)
             {
                 if (SupportedMods[mod].Settings.ContainsKey(prop.CodeName) && !prop.HasChanged) // Manual mod menu changes override mod crates
                 {
                     prop.DeSerialize(SupportedMods[mod].Settings[prop.CodeName], SupportedMods[mod]);
                     prop.HasChanged = true;
                 }
             }
         }
     }
 }
コード例 #7
0
ファイル: ModCrates.cs プロジェクト: TheBetaM/CrateModLoader
        /// <summary>
        /// Takes the given Modder's mod properties and saves them into a valid settings text file at the given path. (if fullSettings is false - only saves altered properties)
        /// </summary>
        public static void SaveSettingsToFile(Modder mod, string path, bool fullSettings)
        {
            List <string> LineList = new List <string>();

            LineList.Add(string.Format("{0} {1} {2}", CommentSymbol, ModLoaderGlobals.ProgramVersion, "Auto-Generated Settings File"));

            foreach (ModPropertyBase prop in mod.Props)
            {
                if (fullSettings || (!fullSettings && prop.HasChanged))
                {
                    string text = "";
                    prop.Serialize(ref text);
                    LineList.Add(text);
                }
            }

            File.WriteAllLines(path, LineList);
        }
コード例 #8
0
        public ModMenuForm(ModLoaderForm parent, Modder modder, Game g)
        {
            InitializeComponent();

            button1.Text       = ModLoaderText.ModMenu_Button_Confirm;
            button2.Text       = ModLoaderText.ModMenu_Button_SaveAs;
            button3.Text       = ModLoaderText.ModMenu_Button_Load;
            button4.Text       = ModLoaderText.ModMenu_Button_ResetToDefault;
            button5.Text       = ModLoaderText.ModMenu_Button_Publish;
            button_modbit.Text = ModLoaderText.ModMenu_Label_ModBit;
            Text = ModLoaderText.ModMenuTitle;

            mod        = modder;
            Game       = g;
            parentForm = parent;

            //todo: generate Mod Bit

            GenerateUI();
        }
コード例 #9
0
        void CacheSupportedGames(Assembly[] assemblies)
        {
            SupportedGames = new Dictionary <Game, Assembly>();

            foreach (Assembly assembly in assemblies)
            {
                foreach (Type type in assembly.GetTypes())
                {
                    if (type.IsAbstract || !typeof(Modder).IsAssignableFrom(type)) // only get non-abstract modders
                    {
                        continue;
                    }
                    Modder modder = (Modder)Activator.CreateInstance(type);
                    Game   game   = modder.Game;
                    game.ModderClass = type;

                    SupportedGames.Add(game, assembly);
                }
            }
        }
コード例 #10
0
ファイル: ModCrates.cs プロジェクト: TheBetaM/CrateModLoader
        /// <summary>
        /// Loads mod properties from given Settings file or Mod Crate at given path into the given Modder
        /// </summary>
        public static void LoadSettingsFromFile(Modder mod, string path)
        {
            FileInfo file = new FileInfo(path);

            bool isModCrate = file.Extension.ToLower() == ".zip";

            Dictionary <string, string> Settings = new Dictionary <string, string>();

            //zip handling
            if (isModCrate)
            {
                using (ZipArchive archive = ZipFile.OpenRead(file.FullName))
                {
                    foreach (ZipArchiveEntry entry in archive.Entries)
                    {
                        if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                        {
                            if (entry.Name.ToLower() == SettingsFileName)
                            {
                                using (StreamReader fileStream = new StreamReader(entry.Open(), true))
                                {
                                    string line;
                                    while ((line = fileStream.ReadLine()) != null)
                                    {
                                        if (line[0] != CommentSymbol)
                                        {
                                            string[] setting = line.Split(Separator);
                                            Settings[setting[0]] = setting[1];
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                using (StreamReader fileStream = new StreamReader(path, true))
                {
                    string line;
                    while ((line = fileStream.ReadLine()) != null)
                    {
                        if (line[0] != CommentSymbol)
                        {
                            string[] setting = line.Split(Separator);
                            if (setting.Length > 1)
                            {
                                Settings[setting[0]] = setting[1];
                            }
                        }
                    }
                }
            }

            if (Settings.Count == 0)
            {
                //MessageBox.Show(ModLoaderText.ModMenuLoad_Error);
                return;
            }

            ModCrate crate = null;

            if (isModCrate)
            {
                crate = LoadMetadata(file);
            }

            foreach (ModPropertyBase prop in mod.Props)
            {
                if (Settings.ContainsKey(prop.CodeName))
                {
                    prop.DeSerialize(Settings[prop.CodeName], crate);
                    prop.HasChanged = true;
                }
            }
        }
コード例 #11
0
        void SetGameType(string serial, ConsoleMode console, uint RegionID)
        {
            bool       RegionNotSupported = true;
            RegionCode TargetRegion       = new RegionCode();

            Modder = null;

            SupportedMods = new List <ModCrate>();

            if (SupportedGames.Count <= 0)
            {
                Console.WriteLine("ERROR: No games supported!");
                return;
            }

            foreach (KeyValuePair <Game, Assembly> pair in SupportedGames)
            {
                Game game = pair.Key;

                if (!game.Consoles.Contains(console))
                {
                    continue;
                }

                RegionCode[] codelist;

                if (game.RegionID.ContainsKey(console))
                {
                    codelist = game.RegionID[console];
                }
                else
                {
                    codelist = null;
                    Console.WriteLine("ERROR: Missing RegionID for game " + game.Name);
                }

                foreach (var r in codelist)
                {
                    if (serial.Contains(r.Name))
                    {
                        if (console == ConsoleMode.XBOX && RegionID != r.RegionNumber)
                        {
                            RegionNotSupported = true;
                        }
                        else
                        {
                            RegionNotSupported = false;
                            Modder             = (Modder)Activator.CreateInstance(game.ModderClass);
                            Game         = game;
                            TargetRegion = r;
                            break;
                        }
                    }
                }

                if (RegionNotSupported)
                {
                    foreach (var r in codelist)
                    {
                        if (serial.Contains(r.Name))
                        {
                            Modder       = (Modder)Activator.CreateInstance(game.ModderClass);
                            Game         = game;
                            TargetRegion = r;
                            break;
                        }
                    }
                }

                if (Modder != null)
                {
                    Modder.assembly        = pair.Value;
                    Modder.ConsolePipeline = Pipeline;
                    Modder.GameRegion      = TargetRegion;
                    break;
                }
            }

            string cons_mod = "";

            switch (console)
            {
            default: cons_mod = console.ToString(); break;

            case ConsoleMode.Undefined: cons_mod = "(" + ModLoaderText.UnknownConsole + ")"; break;
            }

            string region_mod = "(" + ModLoaderText.UnknownRegion + ")";

            if (!RegionNotSupported)
            {
                switch (TargetRegion.Region)
                {
                case RegionType.NTSC_J: region_mod = "NTSC-J"; break;

                case RegionType.NTSC_U: region_mod = "NTSC-U"; break;

                case RegionType.PAL: region_mod = "PAL"; break;

                case RegionType.Global: region_mod = ""; break;

                default: region_mod = "(" + ModLoaderText.UnknownRegion + ")"; break;
                }
            }

            // UI stuff
            if (Modder == null)
            {
                LayoutChangeUnsupported.Invoke(this, new EventValueArgs <string>(cons_mod));
            }
            else
            {
                Modder.PopulateProperties();
                LayoutChangeSupported.Invoke(this, new EventGameDetails(Game, cons_mod, region_mod));
            }
        }