Add logic for using items on the Spotted Mudpuppy in 'Factual Folklore'
authorLiza Carvelli <liza@carvel.li>
Sun, 19 Jan 2025 21:58:14 +0000 (22:58 +0100)
committerLiza Carvelli <liza@carvel.li>
Sun, 19 Jan 2025 22:00:43 +0000 (23:00 +0100)
QuestPaths/2.x - A Realm Reborn/MSQ-2/B9-Coerthas Central Highlands, Whitebrim Front/927_Factual Folklore.json
QuestPaths/quest-v1.json
Questionable.Model/Questing/Converter/CombatItemUseConditionConverter.cs
Questionable.Model/Questing/ECombatItemUseCondition.cs
Questionable/Controller/CombatModules/ItemUseModule.cs

index b9550d58501f3a36050d62db3cadf21c2434d025..924c6a9d04f0f16e0caeef50b91bd045474e9e29 100644 (file)
             "Z": 89.58569
           },
           "TerritoryId": 155,
-          "InteractionType": "Instruction",
-          "Comment": "Use Quest item on enemy to weaken it first",
-          "$": "Status Effects: 22 (HP Penalty) + 62 (Damage Down)",
+          "InteractionType": "Combat",
           "EnemySpawnType": "AfterInteraction",
+          "CombatItemUse": {
+            "ItemId": 2000961,
+            "Condition": "MissingStatus",
+            "Value": 22
+          },
           "ComplexCombatData": [
             {
               "DataId": 2196
index 99105c93c7ff6c2eef9dab193dfd89b94f542b48..f0f826370839c75da38f8fd31f0f3ca5f7fec7e7 100644 (file)
             "null"
           ],
           "description": "The Item to use",
-          "exclusiveMinimum": 0
+          "exclusiveMinimum": 0,
+          "maximum": 2010000
         },
         "SkipConditions": {
           "type": "object",
                 "type": "object",
                 "properties": {
                   "ItemId": {
-                    "type": "integer"
+                    "type": "integer",
+                    "maximum": 2010000
                   },
                   "Condition": {
                     "type": "string",
                     "enum": [
                       "Incapacitated",
-                      "Health%"
+                      "Health%",
+                      "MissingStatus"
                     ]
                   },
                   "Value": {
index 1b4086ffd07b3545bb3d634af9be229a7ddeacb0..deadc4f6b3c9668a394eade64e0da90d0b32bd6e 100644 (file)
@@ -9,5 +9,6 @@ public sealed class CombatItemUseConditionConverter() : EnumConverter<ECombatIte
     {
         { ECombatItemUseCondition.Incapacitated, "Incapacitated" },
         { ECombatItemUseCondition.HealthPercent, "Health%" },
+        { ECombatItemUseCondition.MissingStatus, "MissingStatus" },
     };
 }
index 7bb4e2b2092daf9a730a989ff5a5f3a55f7edc01..fbbea236656d86c8e63ecbf8b8934e9b02d22221 100644 (file)
@@ -5,4 +5,5 @@ public enum ECombatItemUseCondition
     None,
     Incapacitated,
     HealthPercent,
+    MissingStatus,
 }
index 26a92ff32c4f6c7b31551f5b7f517572cd5b6289..95dbea568e52abcb5b0e44ac79aa9fd551a80d5d 100644 (file)
@@ -108,6 +108,7 @@ internal sealed class ItemUseModule : ICombatModule
                     _delegate.Stop();
                     unsafe
                     {
+                        _logger.LogInformation("Using item {ItemId}", _combatData.CombatItemUse.ItemId);
                         AgentInventoryContext.Instance()->UseItem(_combatData.CombatItemUse.ItemId);
                     }
                     _continueAt = DateTime.Now.AddSeconds(2);
@@ -147,6 +148,9 @@ internal sealed class ItemUseModule : ICombatModule
 
             if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.HealthPercent)
                 return (100f * battleChara->Health / battleChara->MaxHealth) < _combatData.CombatItemUse.Value;
+
+            if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.MissingStatus)
+                return !battleChara->StatusManager.HasStatus((uint)_combatData.CombatItemUse.Value);
         }
 
         return false;