예제 #1
0
        /// <summary>
        /// Entry point for Modnix 3 actions.
        /// Action syntax is the same as traditional PPDefModifier mods.
        /// </summary>
        public static bool ActionMod(string modid, ModnixAction action)
        {
            if (action == null || (!action.ContainsKey("cls") && !action.ContainsKey("guid")))
            {
                return(false);
            }
            if (!action.ContainsKey("value") && !action.ContainsKey("modletlist"))
            {
                return(false);
            }

            ModFile modfile = GetModFile(modid);

            if (modid != lastactionmod)
            {
                logger.Log("Applying mod actions in {0}", modfile);
                lastactionmod = modid;
            }

            ModDefinition def = new ModDefinition();

            try
            {
                ConvertActionToMod(action, def);
                modfile.ApplyMod(def);
                return(true);
            }
            catch (Exception e)
            {
                logger.Error("Error applying mod action {0}: {1}", def.GetModName(), e.ToString());
                return(false);
            }
        }
예제 #2
0
        /// <summary>
        /// Entry point for Modnix.
        /// </summary>
        public static void MainMod(ModnixCallback api = null)
        {
            PPDefModifier.api = api;
            PPDefLogger.SetLogger(api);

            bool foundMod = false;

            // First search the original config file.
            if (File.Exists(fileName))
            {
                foundMod = true;
                ModFile f = new ModFile(fileName);
                f.ApplyMods();
            }

            // If there is a config directory, process all json files within it.
            if (Directory.Exists(directoryName))
            {
                var files = Directory.GetFiles(directoryName, "*.json", SearchOption.AllDirectories);
                if (files != null)
                {
                    foundMod = true;
                    foreach (var f in files)
                    {
                        ModFile m = new ModFile(f);
                        m.ApplyMods();
                    }
                }
            }

            if (!foundMod)
            {
                logger.Log("PPDefModifier: No config files found.");
            }
        }
예제 #3
0
        /// <summary>
        /// Create or fetch a ModFile by modid.
        /// The ModFile will have its filename set to the acting mod's path.
        /// </summary>
        internal static ModFile GetModFile(string modid)
        {
            if (actionfiles.TryGetValue(modid, out ModFile modfile))
            {
                return(modfile);
            }
            string path = api?.Invoke("path", modid)?.ToString() ?? modid;

            return(actionfiles[modid] = new ModFile(path));
        }