Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 67 additions & 16 deletions Knossos.NET/Classes/Knossos.cs
Original file line number Diff line number Diff line change
Expand Up @@ -868,36 +868,87 @@ public static async void PlayMod(Mod mod, FsoExecType fsoExecType, bool standalo
}
else
{
foreach (var depMod in modList)
var depMod = modList.FirstOrDefault(d => d.id == modid);
//Found the modflag id in mod dependencies list
if (depMod != null)
{
if (depMod.id == modid)
/* Dev Mode ON */
if (depMod.devMode)
{
/* Dev Mode ON */
if (depMod.devMode)
foreach (var pkg in depMod.packages)
{
foreach (var pkg in depMod.packages)
if (modFlag.Length > 0)
{
modFlag += "," + Path.GetRelativePath(rootPath, depMod.fullPath + Path.DirectorySeparatorChar + pkg.folder).TrimEnd('/').TrimEnd('\\');
}
else
{
if (modFlag.Length > 0)
modFlag += Path.GetRelativePath(rootPath, depMod.fullPath + Path.DirectorySeparatorChar + pkg.folder).TrimEnd('/').TrimEnd('\\');
}
}
}
else
{
if (modFlag.Length > 0)
{
modFlag += "," + Path.GetRelativePath(rootPath, depMod.fullPath).TrimEnd('/').TrimEnd('\\');
}
else
{
modFlag += Path.GetRelativePath(rootPath, depMod.fullPath).TrimEnd('/').TrimEnd('\\');
}
}
}
else
{
//Unofficial feature
//https://github.com/KnossosNET/Knossos.NET/issues/195
//Try to load a mod thats not on the dependencies list, but it is on the modflag list, if found installed
try
{
var optionalDep = Knossos.GetInstalledModList(modid);
if (optionalDep != null && optionalDep.Count() > 0)
{
var newerOpt = optionalDep.MaxBy(o => new SemanticVersion(o.version));
if(newerOpt != null)
{
Log.Add(Log.LogSeverity.Information, "Knossos.PlayMod()", "Loading optional dependency: " + newerOpt);
/* Dev Mode ON */
if (newerOpt.devMode)
{
modFlag += "," + Path.GetRelativePath(rootPath, depMod.fullPath + Path.DirectorySeparatorChar + pkg.folder).TrimEnd('/').TrimEnd('\\');
foreach (var pkg in newerOpt.packages)
{
if (modFlag.Length > 0)
{
modFlag += "," + Path.GetRelativePath(rootPath, newerOpt.fullPath + Path.DirectorySeparatorChar + pkg.folder).TrimEnd('/').TrimEnd('\\');
}
else
{
modFlag += Path.GetRelativePath(rootPath, newerOpt.fullPath + Path.DirectorySeparatorChar + pkg.folder).TrimEnd('/').TrimEnd('\\');
}
}
}
else
{
modFlag += Path.GetRelativePath(rootPath, depMod.fullPath + Path.DirectorySeparatorChar + pkg.folder).TrimEnd('/').TrimEnd('\\');
if (modFlag.Length > 0)
{
modFlag += "," + Path.GetRelativePath(rootPath, newerOpt.fullPath).TrimEnd('/').TrimEnd('\\');
}
else
{
modFlag += Path.GetRelativePath(rootPath, newerOpt.fullPath).TrimEnd('/').TrimEnd('\\');
}
}
}
}
else
{
if (modFlag.Length > 0)
{
modFlag += "," + Path.GetRelativePath(rootPath, depMod.fullPath).TrimEnd('/').TrimEnd('\\');
}
else
{
modFlag += Path.GetRelativePath(rootPath, depMod.fullPath).TrimEnd('/').TrimEnd('\\');
}
//Mod has a optional dependency but it is not found installed
Log.Add(Log.LogSeverity.Information, "Knossos.PlayMod()", "Mod requested a optional dependency that is not found: " + modid + ". This is not critical.");
}
}catch(Exception ex)
{
Log.Add(Log.LogSeverity.Error, "Knossos.PlayMod(optional dependency)", ex);
}
}
}
Expand Down