From f62908f336cb19bae0bd43e94b6cefbc5567fb8d Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 13 Oct 2023 22:01:58 +0200 Subject: [PATCH] Add DataManagerExtensions --- DataManagerExtensions.cs | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 DataManagerExtensions.cs diff --git a/DataManagerExtensions.cs b/DataManagerExtensions.cs new file mode 100644 index 0000000..dd80f29 --- /dev/null +++ b/DataManagerExtensions.cs @@ -0,0 +1,61 @@ +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 +{ + public static string GetDialogue(IDataManager dataManager, string key, IPluginLog? pluginLog) + where T : QuestDialogueText + { + string result = dataManager.GetExcelSheet()! + .Single(x => x.Key == key) + .Value + .ToString(); + pluginLog?.Verbose($"{typeof(T).Name}.{key} => {result}"); + return result; + } + + public static SeString? GetSeString(this IDataManager dataManager, uint rowId, Func mapper) + where T : ExcelRow + { + var row = dataManager.GetExcelSheet()?.GetRow(rowId); + if (row == null) + return null; + + return mapper(row); + } + + public static string? GetString(this IDataManager dataManager, uint rowId, Func 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(this IDataManager dataManager, uint rowId, Func 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); + } +}