/// <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); } }
/// <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."); } }
/// <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)); }