2023-10-13 20:01:58 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using Dalamud.Plugin.Services;
|
|
|
|
|
using Lumina.Excel;
|
|
|
|
|
using Lumina.Excel.CustomSheets;
|
|
|
|
|
using Lumina.Text;
|
|
|
|
|
using Lumina.Text.Payloads;
|
|
|
|
|
|
|
|
|
|
namespace LLib;
|
|
|
|
|
|
|
|
|
|
public static class DataManagerExtensions
|
|
|
|
|
{
|
2023-10-19 18:45:14 +00:00
|
|
|
|
public static SeString? GetSeString<T>(this IDataManager dataManager, string key)
|
2023-10-13 20:01:58 +00:00
|
|
|
|
where T : QuestDialogueText
|
|
|
|
|
{
|
2023-10-19 18:45:14 +00:00
|
|
|
|
return dataManager.GetExcelSheet<T>()?
|
|
|
|
|
.SingleOrDefault(x => x.Key == key)
|
|
|
|
|
?.Value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string? GetString<T>(this IDataManager dataManager, string key, IPluginLog? pluginLog)
|
|
|
|
|
where T : QuestDialogueText
|
|
|
|
|
{
|
|
|
|
|
string? text = GetSeString<T>(dataManager, key)?.ToString();
|
|
|
|
|
|
|
|
|
|
pluginLog?.Verbose($"{typeof(T).Name}.{key} => {text}");
|
|
|
|
|
return text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Regex? GetRegex<T>(this IDataManager dataManager, string key, IPluginLog? pluginLog)
|
|
|
|
|
where T : QuestDialogueText
|
|
|
|
|
{
|
|
|
|
|
SeString? text = GetSeString<T>(dataManager, key);
|
|
|
|
|
if (text == null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
string regex = string.Join("", text.Payloads.Select(payload =>
|
|
|
|
|
{
|
|
|
|
|
if (payload is TextPayload)
|
|
|
|
|
return Regex.Escape(payload.RawString);
|
|
|
|
|
else
|
|
|
|
|
return ".*";
|
|
|
|
|
}));
|
|
|
|
|
pluginLog?.Verbose($"{typeof(T).Name}.{key} => /{regex}/");
|
|
|
|
|
return new Regex(regex);
|
2023-10-13 20:01:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static SeString? GetSeString<T>(this IDataManager dataManager, uint rowId, Func<T, SeString?> mapper)
|
|
|
|
|
where T : ExcelRow
|
|
|
|
|
{
|
|
|
|
|
var row = dataManager.GetExcelSheet<T>()?.GetRow(rowId);
|
|
|
|
|
if (row == null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
return mapper(row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string? GetString<T>(this IDataManager dataManager, uint rowId, Func<T, SeString?> mapper, IPluginLog? pluginLog = null)
|
|
|
|
|
where T : ExcelRow
|
|
|
|
|
{
|
|
|
|
|
string? text = GetSeString(dataManager, rowId, mapper)?.ToString();
|
|
|
|
|
|
|
|
|
|
pluginLog?.Verbose($"{typeof(T).Name}.{rowId} => {text}");
|
|
|
|
|
return text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Regex? GetRegex<T>(this IDataManager dataManager, uint rowId, Func<T, SeString?> mapper, IPluginLog? pluginLog = null)
|
|
|
|
|
where T : ExcelRow
|
|
|
|
|
{
|
|
|
|
|
SeString? text = GetSeString(dataManager, rowId, mapper);
|
|
|
|
|
if (text == null)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
string regex = string.Join("", text.Payloads.Select(payload =>
|
|
|
|
|
{
|
|
|
|
|
if (payload is TextPayload)
|
|
|
|
|
return Regex.Escape(payload.RawString);
|
|
|
|
|
else
|
|
|
|
|
return ".*";
|
|
|
|
|
}));
|
|
|
|
|
pluginLog?.Verbose($"{typeof(T).Name}.{rowId} => /{regex}/");
|
|
|
|
|
return new Regex(regex);
|
|
|
|
|
}
|
|
|
|
|
}
|