Extend combat step to enable triggering by using an item on the ground
authorLiza Carvelli <liza@carvel.li>
Thu, 19 Jun 2025 17:27:17 +0000 (19:27 +0200)
committerLiza Carvelli <liza@carvel.li>
Thu, 19 Jun 2025 17:27:17 +0000 (19:27 +0200)
Questionable/Controller/Steps/Interactions/Combat.cs
Questionable/Controller/Steps/Interactions/UseItem.cs

index e63058a..bb700f6 100644 (file)
@@ -42,15 +42,31 @@ internal static class Combat
                     break;
 
                 case EEnemySpawnType.AfterItemUse:
-                    ArgumentNullException.ThrowIfNull(step.DataId);
                     ArgumentNullException.ThrowIfNull(step.ItemId);
 
                     if (step.GroundTarget == true)
-                        yield return new UseItem.UseOnGround(quest.Id, step.DataId.Value, step.ItemId.Value,
+                    {
+                        if (step.DataId != null)
+                            yield return new UseItem.UseOnGround(quest.Id, step.DataId.Value, step.ItemId.Value,
+                                step.CompletionQuestVariablesFlags, true);
+                        else
+                        {
+                            ArgumentNullException.ThrowIfNull(step.Position);
+                            yield return new UseItem.UseOnPosition(quest.Id, step.Position.Value, step.ItemId.Value,
+                                step.CompletionQuestVariablesFlags, true);
+                        }
+                    }
+                    else if (step.DataId != null)
+                    {
+                        yield return new UseItem.UseOnObject(quest.Id, step.DataId.Value, step.ItemId.Value,
                             step.CompletionQuestVariablesFlags, true);
+                    }
                     else
-                        yield return new UseItem.UseOnObject(quest.Id, step.DataId.Value, step.ItemId.Value,
+                    {
+                        yield return new UseItem.UseOnSelf(quest.Id, step.ItemId.Value,
                             step.CompletionQuestVariablesFlags, true);
+                    }
+
                     yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));
                     yield return CreateTask(quest, sequence, step);
                     break;
index 25799a7..ce9cfd4 100644 (file)
@@ -234,11 +234,9 @@ internal static class UseItem
         ElementId? QuestId,
         Vector3 Position,
         uint ItemId,
-        IList<QuestWorkValue?> CompletionQuestVariablesFlags)
-        : IUseItemBase
+        IList<QuestWorkValue?> CompletionQuestVariablesFlags,
+        bool StartingCombat = false) : IUseItemBase
     {
-        public bool StartingCombat => false;
-
         public override string ToString() =>
             $"UseItem({ItemId} on ground at {Position.ToString("G", CultureInfo.InvariantCulture)})";
     }
@@ -276,9 +274,9 @@ internal static class UseItem
     internal sealed record UseOnSelf(
         ElementId? QuestId,
         uint ItemId,
-        IList<QuestWorkValue?> CompletionQuestVariablesFlags) : IUseItemBase
+        IList<QuestWorkValue?> CompletionQuestVariablesFlags,
+        bool StartingCombat = false) : IUseItemBase
     {
-        public bool StartingCombat => false;
         public override string ToString() => $"UseItem({ItemId})";
     }