Add (disabled) Cosmic Exploration quests
authorLiza Carvelli <liza@carvel.li>
Sun, 29 Jun 2025 21:32:49 +0000 (23:32 +0200)
committerLiza Carvelli <liza@carvel.li>
Sun, 29 Jun 2025 21:32:49 +0000 (23:32 +0200)
They don't work cause vnav doesn't work :(

QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5253_A Cosmic Homecoming.json
QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5254_Passion, Thy Name Is Ardorum.json [new file with mode: 0644]
QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5323_A Manager's Patience.json [new file with mode: 0644]
QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5324_A Manager's Persistence.json [new file with mode: 0644]
QuestPaths/quest-v1.json
Questionable.Model/Questing/Converter/ActionConverter.cs
Questionable.Model/Questing/EAction.cs
Questionable/Functions/GameFunctions.cs

index 309e146..0546b2a 100644 (file)
@@ -1,78 +1,79 @@
 {
-    "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
-    "Author": "Censored",
-    "QuestSequence": [
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "Censored",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
         {
-            "Sequence": 0,
-            "Steps": [
-                {
-                    "DataId": 1052591,
-                    "Position": {
-                        "X": 71.854614,
-                        "Y": -16.247,
-                        "Z": 118.242065
-                    },
-                    "TerritoryId": 962,
-                    "InteractionType": "AcceptQuest",
-                    "AetheryteShortcut": "Old Sharlayan",
-                    "AethernetShortcut": [
-                        "[Old Sharlayan] Aetheryte Plaza",
-                        "[Old Sharlayan] Scholar's Harbor"
-                    ],
-                    "SkipConditions": {
-                        "AetheryteShortcutIf": {
-                            "InSameTerritory": true
-                        }
-                    }
-                }
-            ]
-        },
+          "DataId": 1052591,
+          "Position": {
+            "X": 71.854614,
+            "Y": -16.247,
+            "Z": 118.242065
+          },
+          "TerritoryId": 962,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Old Sharlayan",
+          "AethernetShortcut": [
+            "[Old Sharlayan] Aetheryte Plaza",
+            "[Old Sharlayan] Scholar's Harbor"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
         {
-            "Sequence": 1,
-            "Steps": [
-                {
-                    "DataId": 2014652,
-                    "Position": {
-                        "X": -648.73737,
-                        "Y": 130.0221,
-                        "Z": 717.3723
-                    },
-                    "TerritoryId": 959,
-                    "InteractionType": "Interact",
-                    "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum"
-                }
-            ]
-        },
+          "DataId": 2014652,
+          "Position": {
+            "X": -648.73737,
+            "Y": 130.0221,
+            "Z": 717.3723
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
         {
-            "Sequence": 2,
-            "Steps": [
-                {
-                    "DataId": 1052592,
-                    "Position": {
-                        "X": 25.680908,
-                        "Y": -137.41669,
-                        "Z": -411.30695
-                    },
-                    "TerritoryId": 959,
-                    "InteractionType": "Interact",
-                    "Fly": true
-                }
-            ]
-        },
+          "DataId": 1052592,
+          "Position": {
+            "X": 25.680908,
+            "Y": -137.41669,
+            "Z": -411.30695
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
         {
-            "Sequence": 255,
-            "Steps": [
-                {
-                    "DataId": 1052595,
-                    "Position": {
-                        "X": -53.177734,
-                        "Y": -3.33786E-06,
-                        "Z": -72.129456
-                    },
-                    "TerritoryId": 1237,
-                    "InteractionType": "CompleteQuest"
-                }
-            ]
+          "DataId": 1052595,
+          "Position": {
+            "X": -53.177734,
+            "Y": -3.33786E-06,
+            "Z": -72.129456
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 5254
         }
-    ]
+      ]
+    }
+  ]
 }
diff --git a/QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5254_Passion, Thy Name Is Ardorum.json b/QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5254_Passion, Thy Name Is Ardorum.json
new file mode 100644 (file)
index 0000000..7ef25f7
--- /dev/null
@@ -0,0 +1,146 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "Disabled": true,
+  "Comment": "probably won't work until vnav supports the moon",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1052595,
+          "Position": {
+            "X": -53.177734,
+            "Y": -3.33786E-06,
+            "Z": -72.129456
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1052618,
+          "Position": {
+            "X": -51.255127,
+            "Y": -3.3378603E-06,
+            "Z": -72.64819
+          },
+          "StopDistance": 7,
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1052618,
+          "Position": {
+            "X": -40.065205,
+            "Y": 11.930657,
+            "Z": -95.35249
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1052618,
+          "Position": {
+            "X": -425.39127,
+            "Y": 47.861256,
+            "Z": 212.72206
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1052618,
+          "Position": {
+            "X": 533.5678,
+            "Y": 39.006783,
+            "Z": 167.32143
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "TerritoryId": 1237,
+          "InteractionType": "Action",
+          "Action": "Duty Action I"
+        },
+        {
+          "DataId": 2014657,
+          "Position": {
+            "X": 533.53174,
+            "Y": 38.986816,
+            "Z": 167.25415
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact",
+          "DialogueChoices": [
+            {
+              "Type": "YesNo",
+              "Prompt": "TEXT_KINGWK102_05254_Q2_000_000",
+              "Yes": true
+            },
+            {
+              "Type": "List",
+              "Prompt": "TEXT_KINGWK102_05254_Q3_000_000",
+              "Answer": "TEXT_KINGWK102_05254_A3_000_001"
+            }
+          ],
+          "PointMenuChoices": [
+            0,
+            1,
+            2,
+            3,
+            4
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "TerritoryId": 1237,
+          "InteractionType": "Action",
+          "Action": "Duty Action I"
+        },
+        {
+          "DataId": 1052617,
+          "Position": {
+            "X": -53.177734,
+            "Y": -3.33786E-06,
+            "Z": -72.129456
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "CompleteQuest"
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5323_A Manager's Patience.json b/QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5323_A Manager's Patience.json
new file mode 100644 (file)
index 0000000..20ac13f
--- /dev/null
@@ -0,0 +1,102 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "Disabled": true,
+  "Comment": "probably won't work until vnav supports the moon",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1052631,
+          "Position": {
+            "X": 10.116699,
+            "Y": 1.6122663,
+            "Z": -17.135986
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "AcceptQuest",
+          "DialogueChoices": [
+            {
+              "Type": "List",
+              "Prompt": "TEXT_KINGWZ001_05323_Q1_000_000",
+              "Answer": "TEXT_KINGWZ001_05323_A1_000_001"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1052633,
+          "Position": {
+            "X": -87.26642,
+            "Y": 0.3205882,
+            "Z": 82.26135
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1052632,
+          "Position": {
+            "X": 79.81995,
+            "Y": 0.30599445,
+            "Z": 98.89368
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 2013711,
+          "Position": {
+            "X": -85.98462,
+            "Y": 4.2266846,
+            "Z": -63.767517
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1052631,
+          "Position": {
+            "X": 10.116699,
+            "Y": 1.6122663,
+            "Z": -17.135986
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 5324
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5324_A Manager's Persistence.json b/QuestPaths/6.x - Endwalker/Side Stories/Cosmic Exploration/5324_A Manager's Persistence.json
new file mode 100644 (file)
index 0000000..646bd2a
--- /dev/null
@@ -0,0 +1,91 @@
+
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "Disabled": true,
+  "Comment": "probably won't work until vnav supports the moon",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1052631,
+          "Position": {
+            "X": 10.116699,
+            "Y": 1.6122663,
+            "Z": -17.135986
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "AcceptQuest",
+          "DialogueChoices": [
+            {
+              "Type": "List",
+              "Prompt": "TEXT_KINGWZ002_05324_Q1_000_000",
+              "Answer": "TEXT_KINGWZ002_05324_A1_000_002"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1052634,
+          "Position": {
+            "X": -32.39496,
+            "Y": 1.5,
+            "Z": 31.631958
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1052635,
+          "Position": {
+            "X": 46.61621,
+            "Y": 0.8794936,
+            "Z": 51.377075
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1052636,
+          "Position": {
+            "X": 29.95337,
+            "Y": 1,
+            "Z": -70.45099
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1052631,
+          "Position": {
+            "X": 10.116699,
+            "Y": 1.6122663,
+            "Z": -17.135986
+          },
+          "TerritoryId": 1237,
+          "InteractionType": "CompleteQuest"
+        }
+      ]
+    }
+  ]
+}
index 0d33cca..77ae29b 100644 (file)
                   "Water Cannon",
                   "Wasshoi",
                   "Shrouded Luminescence",
-                  "Big Sneeze"
+                  "Big Sneeze",
+                  "Duty Action I",
+                  "Duty Action II"
                 ]
               }
             },
index 24278b6..1a96f0a 100644 (file)
@@ -7,6 +7,8 @@ public sealed class ActionConverter() : EnumConverter<EAction>(Values)
 {
     private static readonly Dictionary<EAction, string> Values = new()
     {
+        { EAction.DutyAction1, "Duty Action I" },
+        { EAction.DutyAction2, "Duty Action II" },
         { EAction.HeavySwing, "Heavy Swing" },
         { EAction.Bootshine, "Bootshine" },
         { EAction.TwinSnakes, "Twin Snakes" },
index 06c5e31..0671803 100644 (file)
@@ -6,6 +6,9 @@ namespace Questionable.Model.Questing;
 [JsonConverter(typeof(ActionConverter))]
 public enum EAction
 {
+    DutyAction1 = 26 | 0x10000,
+    DutyAction2 = 27 | 0x10000,
+
     HeavySwing = 31,
     Bootshine = 53,
     TwinSnakes = 61,
index c502321..f203099 100644 (file)
@@ -214,10 +214,14 @@ internal sealed unsafe class GameFunctions
 
     public bool UseAction(EAction action)
     {
-        uint actionId = ActionManager.Instance()->GetAdjustedActionId((uint)action);
-        if (ActionManager.Instance()->GetActionStatus(ActionType.Action, actionId) == 0)
+        uint actionId = (uint)action & 0xFFFF;
+        ActionType actionType = ((uint)action & 0x10000) == 0x10000 ? ActionType.GeneralAction : ActionType.Action;
+        if (actionType == ActionType.Action)
+            actionId = ActionManager.Instance()->GetAdjustedActionId(actionId);
+
+        if (ActionManager.Instance()->GetActionStatus(actionType, actionId) == 0)
         {
-            bool result = ActionManager.Instance()->UseAction(ActionType.Action, actionId);
+            bool result = ActionManager.Instance()->UseAction(actionType, actionId);
             _logger.LogInformation("UseAction {Action} (adjusted: {AdjustedActionId}) result: {Result}", action,
                 actionId, result);
 
@@ -229,8 +233,15 @@ internal sealed unsafe class GameFunctions
 
     public bool UseAction(IGameObject gameObject, EAction action, bool checkCanUse = true)
     {
-        uint actionId = ActionManager.Instance()->GetAdjustedActionId((uint)action);
-        var actionRow = _dataManager.GetExcelSheet<Action>().GetRow(actionId);
+        uint actionId = (uint)action & 0xFFFF;
+        ActionType actionType = ((uint)action & 0x10000) == 0x10000 ? ActionType.GeneralAction : ActionType.Action;
+        if (actionType == ActionType.GeneralAction)
+        {
+            _logger.LogWarning("Can not use general action {Action} on target {Target}", action, gameObject);
+            return false;
+        }
+
+        actionId = ActionManager.Instance()->GetAdjustedActionId(actionId);
         if (checkCanUse && !ActionManager.CanUseActionOnTarget(actionId, (GameObject*)gameObject.Address))
         {
             _logger.LogWarning("Can not use action {Action} (adjusted: {AdjustedActionId}) on target {Target}", action,
@@ -238,14 +249,15 @@ internal sealed unsafe class GameFunctions
             return false;
         }
 
+        Action actionRow = _dataManager.GetExcelSheet<Action>().GetRow(actionId);
         _targetManager.Target = gameObject;
-        if (ActionManager.Instance()->GetActionStatus(ActionType.Action, actionId, gameObject.GameObjectId) == 0)
+        if (ActionManager.Instance()->GetActionStatus(actionType, actionId, gameObject.GameObjectId) == 0)
         {
             bool result;
             if (actionRow.TargetArea)
             {
                 Vector3 position = gameObject.Position;
-                result = ActionManager.Instance()->UseActionLocation(ActionType.Action, actionId,
+                result = ActionManager.Instance()->UseActionLocation(actionType, actionId,
                     location: &position);
                 _logger.LogInformation(
                     "UseAction {Action} (adjusted: {AdjustedActionId}) on target area {Target} result: {Result}",
@@ -253,7 +265,7 @@ internal sealed unsafe class GameFunctions
             }
             else
             {
-                result = ActionManager.Instance()->UseAction(ActionType.Action, actionId, gameObject.GameObjectId);
+                result = ActionManager.Instance()->UseAction(actionType, actionId, gameObject.GameObjectId);
                 _logger.LogInformation(
                     "UseAction {Action} (adjusted: {AdjustedActionId}) on target {Target} result: {Result}", action,
                     actionId, gameObject, result);