diff --git a/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs b/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs index 3f458c2..7828b87 100644 --- a/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs +++ b/QuestPaths/Questionable.QuestPaths/AssemblyQuestLoader.cs @@ -82042,12 +82042,30 @@ public static class AssemblyQuestLoader { Sequence = 3 }; - num3 = 1; + num3 = 2; List list39 = new List(num3); CollectionsMarshal.SetCount(list39, num3); span3 = CollectionsMarshal.AsSpan(list39); num2 = 0; span3[num2] = new QuestStep(EInteractionType.Interact, 1000471u, new Vector3(-60.471558f, 0.19999865f, 6.301941f), 148); + num2++; + span3[num2] = new QuestStep(EInteractionType.PurchaseItem, 1000220u, new Vector3(16.189758f, -8.010209f, -15.640564f), 148) + { + ItemId = 4868u, + ItemCount = 1, + SkipConditions = new SkipConditions + { + StepIf = new SkipStepConditions + { + Item = new SkipItemConditions() + } + }, + PurchaseMenu = new PurchaseMenu + { + ExcelSheet = "GilShop", + Key = new ExcelRef(262773u) + } + }; obj24.Steps = list39; reference29 = obj24; num++; @@ -464646,7 +464664,7 @@ public static class AssemblyQuestLoader CollectionsMarshal.SetCount(list48, index2); span3 = CollectionsMarshal.AsSpan(list48); num2 = 0; - span3[num2] = new QuestStep(EInteractionType.AcceptQuest, 1054636u, new Vector3(506.70618f, 142.24991f, 800.2289f), 1187) + span3[num2] = new QuestStep(EInteractionType.AcceptQuest, 1054635u, new Vector3(493.2173f, 142.24991f, 783.0471f), 1187) { Fly = true, AetheryteShortcut = EAetheryteLocation.UrqopachaWorlarsEcho, @@ -464709,7 +464727,7 @@ public static class AssemblyQuestLoader } }; num2++; - span3[num2] = new QuestStep(EInteractionType.CompleteQuest, 1054636u, new Vector3(506.70618f, 142.24991f, 800.2289f), 1187) + span3[num2] = new QuestStep(EInteractionType.CompleteQuest, 1054635u, new Vector3(493.2173f, 142.24991f, 783.0471f), 1187) { Fly = true, AetheryteShortcut = EAetheryteLocation.UrqopachaWorlarsEcho, @@ -465462,7 +465480,8 @@ public static class AssemblyQuestLoader ref QuestStep reference59 = ref span3[num2]; QuestStep obj59 = new QuestStep(EInteractionType.Interact, 1054640u, new Vector3(496.11658f, 142.24991f, 801.6022f), 1187) { - TargetTerritoryId = (ushort)1297 + TargetTerritoryId = (ushort)1297, + Fly = true }; SkipConditions skipConditions8 = new SkipConditions(); SkipStepConditions skipStepConditions8 = new SkipStepConditions(); diff --git a/Questionable/Questionable.Controller/CombatController.cs b/Questionable/Questionable.Controller/CombatController.cs index 3b79beb..76e7f35 100644 --- a/Questionable/Questionable.Controller/CombatController.cs +++ b/Questionable/Questionable.Controller/CombatController.cs @@ -281,27 +281,43 @@ internal sealed class CombatController : IDisposable continue; } ComplexCombatData complexCombatData = complexCombatDatas[i]; - if (complexCombatData.MinimumKillCount.HasValue) + bool hasValue = complexCombatData.MinimumKillCount.HasValue; + bool flag = complexCombatData.RewardItemId.HasValue && complexCombatData.RewardItemCount.HasValue; + bool flag2 = QuestWorkUtils.HasCompletionFlags(complexCombatData.CompletionQuestVariablesFlags); + if (hasValue || flag) { - int valueOrDefault = _currentFight.KillCountsByComplexDataIndex.GetValueOrDefault(i, 0); - if (valueOrDefault >= complexCombatData.MinimumKillCount.Value) + bool flag3 = true; + bool flag4 = true; + if (hasValue) { - _logger.LogInformation("Complex combat condition fulfilled: killCount({DataId}) = {Count}/{Required}", complexCombatData.DataId, valueOrDefault, complexCombatData.MinimumKillCount.Value); + int valueOrDefault = _currentFight.KillCountsByComplexDataIndex.GetValueOrDefault(i, 0); + flag3 = valueOrDefault >= complexCombatData.MinimumKillCount.Value; + if (flag3) + { + _logger.LogDebug("Kill count condition met for ComplexCombatData[{Index}]: {Count}/{Required}", i, valueOrDefault, complexCombatData.MinimumKillCount.Value); + } + } + if (flag) + { + int inventoryItemCount = InventoryManager.Instance()->GetInventoryItemCount(complexCombatData.RewardItemId.Value, isHq: false, checkEquipped: true, checkArmory: true, 0); + flag4 = inventoryItemCount >= complexCombatData.RewardItemCount.Value; + if (flag4) + { + _logger.LogDebug("Item count condition met for ComplexCombatData[{Index}]: {ItemId} = {Count}/{Required}", i, complexCombatData.RewardItemId.Value, inventoryItemCount, complexCombatData.RewardItemCount.Value); + } + } + if (flag3 && flag4) + { + _logger.LogInformation("Complex combat condition fulfilled for ComplexCombatData[{Index}] ({DataId}): KillCount={KillCountMet}, Items={ItemMet}", i, complexCombatData.DataId, flag3, flag4); _currentFight.Data.CompletedComplexDatas.Add(i); - continue; } } - if (complexCombatData.RewardItemId.HasValue && complexCombatData.RewardItemCount.HasValue && InventoryManager.Instance()->GetInventoryItemCount(complexCombatData.RewardItemId.Value, isHq: false, checkEquipped: true, checkArmory: true, 0) >= complexCombatData.RewardItemCount.Value) - { - _logger.LogInformation("Complex combat condition fulfilled: itemCount({ItemId}) >= {ItemCount}", complexCombatData.RewardItemId, complexCombatData.RewardItemCount); - _currentFight.Data.CompletedComplexDatas.Add(i); - } - else if (QuestWorkUtils.HasCompletionFlags(complexCombatData.CompletionQuestVariablesFlags) && _currentFight.Data.ElementId is QuestId elementId) + else if (flag2 && _currentFight.Data.ElementId is QuestId elementId) { QuestProgressInfo questProgressInfo = _questFunctions.GetQuestProgressInfo(elementId); if (questProgressInfo != null && QuestWorkUtils.MatchesQuestWork(complexCombatData.CompletionQuestVariablesFlags, questProgressInfo)) { - _logger.LogInformation("Complex combat condition fulfilled: QuestWork matches"); + _logger.LogInformation("Complex combat condition fulfilled for ComplexCombatData[{Index}] ({DataId}): QuestWork (fallback)", i, complexCombatData.DataId); _currentFight.Data.CompletedComplexDatas.Add(i); } } diff --git a/Questionable/Questionable.External/PandorasBoxIpc.cs b/Questionable/Questionable.External/PandorasBoxIpc.cs index 96082ac..bd17117 100644 --- a/Questionable/Questionable.External/PandorasBoxIpc.cs +++ b/Questionable/Questionable.External/PandorasBoxIpc.cs @@ -13,7 +13,12 @@ namespace Questionable.External; internal sealed class PandorasBoxIpc : IDisposable { - private static readonly ImmutableHashSet ConflictingFeatures = new HashSet { "Auto-Meditation", "Auto-Motif (Out of Combat)", "Auto-Mount after Combat", "Auto-Mount after Gathering", "Auto-Peleton", "Auto-Sprint in Sanctuaries", "Auto-interact with Gathering Nodes", "Auto-select Turn-ins", "Auto-Sync FATEs", "Pandora Quick Gather" }.ToImmutableHashSet(); + private static readonly ImmutableHashSet ConflictingFeatures = new HashSet + { + "Auto-Collect", "Auto-Cordial", "Auto-Meditation", "Auto-Motif (Out of Combat)", "Auto-Mount After Combat", "Auto-Mount after Gathering", "Auto-Mount on Zone Change", "Auto-Peleton", "Auto-Prospect/Triangulate", "Auto-Sprint in Sanctuaries", + "Auto-Summon Chocobo", "Auto-Summon Fairy/Carbuncle", "Auto-Tank Stance", "Action Combat Targeting", "Auto-interact with Gathering Nodes", "FATE Targeting Mode", "Auto-Teleport to Map Coords", "Auto-select Turn-ins", "Auto-Equip Recommended Gear", "Auto-Sync FATEs", + "Pandora Quick Gather", "Switch Gatherers Automatically" + }.ToImmutableHashSet(); private readonly IFramework _framework;