From 784033babcfc73c6fa1df7afb0226d922fca2dbf Mon Sep 17 00:00:00 2001 From: ditzy Date: Mon, 12 Feb 2024 02:45:36 -0600 Subject: [PATCH] support hard coded instances for siren --- ScoutHelper/Data/Siren.json | 8 ++++++-- ScoutHelper/Managers/SirenManager.cs | 5 +++-- ScoutHelper/Models/SirenPatchData.cs | 4 ++-- ScoutHelper/Utils/XivExtensions.cs | 17 ++++++++++++----- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/ScoutHelper/Data/Siren.json b/ScoutHelper/Data/Siren.json index 33831d2..f221f12 100644 --- a/ScoutHelper/Data/Siren.json +++ b/ScoutHelper/Data/Siren.json @@ -405,8 +405,12 @@ "mob order": [ "storsie", "hulder", - "yilan", - "sugriva", + "yilan 1", + "sugriva 1", + "yilan 2", + "sugriva 2", + "yilan 3", + "sugriva 3", "minerva", "aegeiros", "mousse princess", diff --git a/ScoutHelper/Managers/SirenManager.cs b/ScoutHelper/Managers/SirenManager.cs index 47623be..e731196 100644 --- a/ScoutHelper/Managers/SirenManager.cs +++ b/ScoutHelper/Managers/SirenManager.cs @@ -63,7 +63,7 @@ MobManager mobManager patchData.MobOrder .Select( - mobId => mobList.FindMob(mobId) + mobOrderInfo => mobList.FindMob(mobOrderInfo.mobId, mobOrderInfo.instance) .SelectMany( mob => patchData .Maps @@ -110,7 +110,7 @@ MobManager mobManager var mobToPatch = patchesData .Value - .SelectMany(entry => entry.Value.MobOrder.Select(mobId => (mobId, entry.Key))) + .SelectMany(entry => entry.Value.MobOrder.Select(mob => (mob.mobId, entry.Key))) .ToDict(); _log.Debug("Siren data loaded."); @@ -134,6 +134,7 @@ KeyValuePair patchData mobName => mobManager .GetMobId(mobName.UnInstanced()) .ToResult($"No mobId found for mobName: {mobName.UnInstanced()}") + .Map(mobId => (mobId, mobName.Instance())) ); var mapResults = patchDataElements["maps"] diff --git a/ScoutHelper/Models/SirenPatchData.cs b/ScoutHelper/Models/SirenPatchData.cs index 28a4c65..79393e8 100644 --- a/ScoutHelper/Models/SirenPatchData.cs +++ b/ScoutHelper/Models/SirenPatchData.cs @@ -4,9 +4,9 @@ namespace ScoutHelper.Models; public record SirenPatchData( - IList MobOrder, + IList<(uint mobId, uint? instance)> MobOrder, IDictionary> Maps ) { - public static SirenPatchData From(IEnumerable mobOrder, IDictionary> maps) => + public static SirenPatchData From(IEnumerable<(uint, uint?)> mobOrder, IDictionary> maps) => new(mobOrder.ToImmutableList(), maps); } diff --git a/ScoutHelper/Utils/XivExtensions.cs b/ScoutHelper/Utils/XivExtensions.cs index 8c1f2cc..5f117d6 100644 --- a/ScoutHelper/Utils/XivExtensions.cs +++ b/ScoutHelper/Utils/XivExtensions.cs @@ -10,7 +10,7 @@ namespace ScoutHelper.Utils; public static partial class XivExtensions { - [GeneratedRegex(@" \d{1,2}$")] private static partial Regex UnInstanceRegex(); + [GeneratedRegex(@" \d{1,2}$")] private static partial Regex InstanceRegex(); public static string WorldName(this IClientState clientState) => clientState.LocalPlayer?.CurrentWorld.GameData?.Name.ToString() ?? "Not Found"; @@ -28,8 +28,15 @@ public static void TaggedPrintError(this IChatGui chatGui, string message) { chatGui.PrintError(message, Plugin.Name); } - public static Maybe FindMob(this IEnumerable mobList, uint mobId) => - Maybe.From(mobList.FirstOrDefault(mob => mob.MobId == mobId)); - - public static string UnInstanced(this string mobName) => UnInstanceRegex().Replace(mobName, ""); + public static Maybe FindMob(this IEnumerable mobList, uint mobId, uint? instance = null) => + Maybe.From(mobList.FirstOrDefault(mob => mob.MobId == mobId && mob.Instance == instance)); + + public static string UnInstanced(this string mobName) => InstanceRegex().Replace(mobName, ""); + + public static uint? Instance(this string mobName) => InstanceRegex() + .Match(mobName) + .AsMaybe() + .Where(match => match.Success) + .Map(match => uint.Parse(match.Value)) + .GetValueOrDefault(); }