1
0
Fork 0
forked from aly/qstbak

muffin v7.5.6

This commit is contained in:
alydev 2026-08-17 20:27:25 +10:00
parent 6266f9e6b7
commit addf2d530f
619 changed files with 264792 additions and 446022 deletions

View file

@ -1,148 +1,78 @@
#define RELEASE
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Runtime.CompilerServices;
using Dalamud.Plugin;
using Microsoft.Extensions.Logging;
using Questionable.FatePaths;
using Questionable.Model.Questing;
using Questionable.Windows.QuestComponents;
using Questionable.Validation;
using Questionable.Validation.Validators;
namespace Questionable.Controller;
internal sealed class FateDefinitionRegistry
internal sealed class FateDefinitionRegistry : DefinitionRegistry<FateDefinition>
{
private readonly IDalamudPluginInterface _pluginInterface;
private readonly ILogger<FateDefinitionRegistry> _logger;
private readonly Dictionary<ushort, FateDefinition> _definitions = new Dictionary<ushort, FateDefinition>();
public IReadOnlyDictionary<ushort, FateDefinition> Definitions => _definitions;
public FateDefinitionRegistry(IDalamudPluginInterface pluginInterface, ILogger<FateDefinitionRegistry> logger)
protected override string TypeLabel
{
_pluginInterface = pluginInterface;
_logger = logger;
Reload();
}
public void Reload()
{
_definitions.Clear();
LoadFromAssembly();
try
[MethodImpl(MethodImplOptions.NoInlining)]
get
{
LoadFromDirectory(new DirectoryInfo(Path.Combine(_pluginInterface.ConfigDirectory.FullName, "FateDefinitions")));
}
catch (Exception exception)
{
_logger.LogError(exception, "Failed to load FATE definitions from user directory (some may have been successfully loaded)");
}
RemoveExpiredDefinitions();
_logger.LogInformation("Loaded {Count} FATE definitions in total", _definitions.Count);
}
[Conditional("RELEASE")]
private void LoadFromAssembly()
{
_logger.LogInformation("Loading FATE definitions from assembly");
IReadOnlyDictionary<ushort, FateDefinition> definitions = AssemblyFateDefinitionLoader.GetDefinitions();
_logger.LogInformation("AssemblyFateDefinitionLoader returned {Count} definitions", definitions.Count);
foreach (var (key, value) in definitions)
{
_definitions[key] = value;
}
_logger.LogInformation("Loaded {Count} FATE definitions from assembly", _definitions.Count);
}
[Conditional("DEBUG")]
private void LoadFromProjectDirectory()
{
DirectoryInfo directoryInfo = _pluginInterface.AssemblyLocation.Directory?.Parent?.Parent;
if (directoryInfo == null)
{
return;
}
DirectoryInfo directoryInfo2 = new DirectoryInfo(Path.Combine(directoryInfo.FullName, "FatePaths"));
if (directoryInfo2.Exists)
{
try
{
LoadFromDirectory(directoryInfo2);
}
catch (Exception exception)
{
_definitions.Clear();
_logger.LogError(exception, "Failed to load FATE definitions from project directory");
}
return global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E<string>(70009244);
}
}
private void LoadFromDirectory(DirectoryInfo directory)
protected override string ConfigDirectoryName
{
if (!directory.Exists)
[MethodImpl(MethodImplOptions.NoInlining)]
get
{
_logger.LogInformation("Not loading FATE definitions from {DirectoryName} (doesn't exist)", directory);
return;
}
FileInfo[] files = directory.GetFiles("*.json");
foreach (FileInfo fileInfo in files)
{
try
{
ushort? num = ExtractIdFromName(fileInfo.Name);
if (!num.HasValue)
{
continue;
}
using FileStream utf8Json = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read);
FateDefinition fateDefinition = JsonSerializer.Deserialize<FateDefinition>(utf8Json);
if (fateDefinition != null)
{
_definitions[num.Value] = fateDefinition;
}
}
catch (Exception exception)
{
_logger.LogError(exception, "Unable to load FATE definition file {FileName}", fileInfo.FullName);
}
return global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E<string>(223633553);
}
}
private void RemoveExpiredDefinitions()
protected override string ProjectDirectoryName
{
foreach (ushort item in (from kvp in _definitions.Where<KeyValuePair<ushort, FateDefinition>>(delegate(KeyValuePair<ushort, FateDefinition> kvp)
{
DateTime? eventExpiry = kvp.Value.EventExpiry;
if (eventExpiry.HasValue)
{
DateTime valueOrDefault = eventExpiry.GetValueOrDefault();
return EventInfoComponent.NormalizeExpiry(valueOrDefault) < DateTime.UtcNow;
}
return false;
})
select kvp.Key).ToList())
[MethodImpl(MethodImplOptions.NoInlining)]
get
{
_logger.LogInformation("Removing expired FATE definition {Id} '{Name}'", item, _definitions[item].Name);
_definitions.Remove(item);
return global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(1573744777);
}
}
private static ushort? ExtractIdFromName(string fileName)
protected override EPathType PathType => EPathType.Fate;
public FateDefinitionRegistry(IDalamudPluginInterface pluginInterface, FateSchemaValidator fateSchemaValidator, QuestValidator questValidator, ILogger<FateDefinitionRegistry> logger)
: base(pluginInterface, (IDefinitionSchemaValidator)fateSchemaValidator, questValidator, (ILogger)logger)
{
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
if (!fileNameWithoutExtension.Contains('_', StringComparison.Ordinal))
{
return null;
}
if (ushort.TryParse(fileNameWithoutExtension.Split('_', 2)[0], out var result))
{
return result;
}
return null;
}
protected override IReadOnlyDictionary<ushort, FateDefinition> GetAssemblyDefinitions()
{
return _206E_200D_202D_200F_206F_202C_202C_202E_200E_202B_202C_200F_206C_206F_206F_206A_206F_206D_206F_206D_200B_202C_206B_206F_206F_206C_202E_202C_200F_206B_202B_202C_206F_206B_200F_200D_206A_202D_202E_206D_202E();
}
protected override DateTime? GetExpiry(FateDefinition definition)
{
return _206A_202B_200B_202E_206A_206B_206F_206D_202D_202A_202E_202B_200B_206D_206D_206B_206C_200E_206B_202E_202A_206E_206A_200C_202D_200E_200C_202B_202D_202B_202C_202B_200C_202A_202E_200B_202D_202C_200D_202C_202E(definition);
}
protected override string? GetName(FateDefinition definition)
{
return _206D_200D_206C_202B_202C_206C_206B_202B_200D_206F_206E_202D_206E_200F_206A_206B_200D_200E_200D_200C_206F_206A_200F_200F_202C_206A_206F_200D_202D_206F_206A_200C_206E_202D_206E_200E_200D_200F_206E_202C_202E(definition);
}
static IReadOnlyDictionary<ushort, FateDefinition> _206E_200D_202D_200F_206F_202C_202C_202E_200E_202B_202C_200F_206C_206F_206F_206A_206F_206D_206F_206D_200B_202C_206B_206F_206F_206C_202E_202C_200F_206B_202B_202C_206F_206B_200F_200D_206A_202D_202E_206D_202E()
{
return AssemblyFateDefinitionLoader.GetDefinitions();
}
static DateTime? _206A_202B_200B_202E_206A_206B_206F_206D_202D_202A_202E_202B_200B_206D_206D_206B_206C_200E_206B_202E_202A_206E_206A_200C_202D_200E_200C_202B_202D_202B_202C_202B_200C_202A_202E_200B_202D_202C_200D_202C_202E(FateDefinition P_0)
{
return P_0.EventExpiry;
}
static string _206D_200D_206C_202B_202C_206C_206B_202B_200D_206F_206E_202D_206E_200F_206A_206B_200D_200E_200D_200C_206F_206A_200F_200F_202C_206A_206F_200D_202D_206F_206A_200C_206E_202D_206E_200E_200D_200F_206E_202C_202E(FateDefinition P_0)
{
return P_0.Name;
}
}