Fix mount selection, make chat-messages multilingual, various path updates v0.2
authorLiza Carvelli <liza@carvel.li>
Mon, 3 Jun 2024 12:20:02 +0000 (14:20 +0200)
committerLiza Carvelli <liza@carvel.li>
Mon, 3 Jun 2024 12:20:02 +0000 (14:20 +0200)
62 files changed:
QuestPaths/AssemblyQuestLoader.cs
QuestPaths/Endwalker/AetherCurrents/Elpis/4507_Touring Anagnorisis Part 1.json
QuestPaths/Endwalker/AetherCurrents/Elpis/4511_An Expected Guest.json
QuestPaths/Endwalker/AetherCurrents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json
QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4367_Estate Visitor.json
QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4368_For Thavnair Bound.json
QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4370_A Fishermans Friend.json
QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4376_The Satrap of Radz at Han.json
QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json
QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json
QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json
QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json
QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json
QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4440_Outside Help.json
QuestPaths/Endwalker/MSQ/H-6.1/4526_Newfound Adventure.json
QuestPaths/Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
QuestPaths/Endwalker/MSQ/H-6.1/4533_Restricted Reading.json
QuestPaths/Endwalker/MSQ/I-6.2/4593_Shadowed Remnants.json
QuestPaths/Endwalker/MSQ/I-6.2/4594_Where Everything Begins.json
QuestPaths/Endwalker/MSQ/I-6.2/4595_Groping in the Dark.json
QuestPaths/Endwalker/MSQ/I-6.2/4599_A World with Light and Life.json
QuestPaths/Endwalker/MSQ/J-6.3/4672_Kindled Spirit.json
QuestPaths/Endwalker/MSQ/J-6.3/4675_A Dragons Resolve.json
QuestPaths/Endwalker/MSQ/J-6.3/4676_Paths Barred.json
QuestPaths/Endwalker/MSQ/J-6.3/4677_Desires Untold.json
QuestPaths/Endwalker/MSQ/J-6.3/4678_Gods Revel Lands Tremble.json
QuestPaths/Endwalker/MSQ/K-6.4/4735_Currying Flavor.json
QuestPaths/Endwalker/MSQ/K-6.4/4736_Going Haam.json
QuestPaths/Endwalker/MSQ/K-6.4/4737_Like Fear to Flame.json
QuestPaths/Endwalker/MSQ/K-6.4/4738_The Fallen Empire.json
QuestPaths/Endwalker/MSQ/K-6.4/4739_Bonds of Trust.json
QuestPaths/Endwalker/MSQ/K-6.4/4740_Lunar Rendezvous.json
QuestPaths/Endwalker/MSQ/K-6.4/4741_The Red Side of the Moon.json
QuestPaths/Endwalker/MSQ/K-6.4/4742_Abyssal Dark.json
QuestPaths/Endwalker/MSQ/K-6.4/4743_The Dark Throne.json
QuestPaths/Endwalker/MSQ/L-6.5/4744_Seeking the Light.json
QuestPaths/Endwalker/MSQ/L-6.5/4745_Appealing the Masses.json
QuestPaths/Endwalker/MSQ/L-6.5/4746_In Defiance of Fate.json
QuestPaths/Endwalker/MSQ/L-6.5/4747_Back to Action.json
QuestPaths/Endwalker/MSQ/L-6.5/4748_Down in the Dark.json
QuestPaths/Endwalker/MSQ/M-6.55/4753_The Coming Dawn.json
QuestPaths/QuestPaths.csproj
QuestPaths/Shadowbringers/MSQ/F-Tempest/3654_Shadowbringers.json
QuestPaths/Shadowbringers/MSQ/G-5.1/3673_Shaken Resolve.json
QuestPaths/Shadowbringers/MSQ/G-5.1/3682_Vows of Virtue, Deeds of Cruelty.json
QuestPaths/Shadowbringers/MSQ/I-5.3/3773_Fraying Threads.json
QuestPaths/Shadowbringers/MSQ/I-5.3/3774_Food for the Soul.json
QuestPaths/Shadowbringers/MSQ/J-5.4/4009_Reviving the Legacy.json
QuestPaths/Shadowbringers/MSQ/J-5.4/4016_Futures Rewritten.json
QuestPaths/Shadowbringers/MSQ/K-5.5/4063_When the Dust Settles.json
QuestPaths/quest-v1.json
Questionable/Controller/MovementController.cs
Questionable/Controller/QuestController.cs
Questionable/GameFunctions.cs
Questionable/Model/V1/ChatMessage.cs [new file with mode: 0644]
Questionable/Model/V1/Converter/SkipConditionConverter.cs
Questionable/Model/V1/DialogueChoice.cs
Questionable/Model/V1/ESkipCondition.cs
Questionable/Model/V1/QuestStep.cs
Questionable/Questionable.csproj

index 14264cf81f91a724ec7b2e267394748d6f527bf8..460e1971485370c074d208129f64408427034cd4 100644 (file)
@@ -1,4 +1,5 @@
-using System;
+#if RELEASE
+using System;
 using System.IO;
 using System.IO.Compression;
 
@@ -23,3 +24,4 @@ public static class AssemblyQuestLoader
         }
     }
 }
+#endif
index 63573553f376cae7e6e34c6e10bcbe629ea3581d..96ea596d5b15632cf481ea9b19018cf5c5840635 100644 (file)
           },
           "TerritoryId": 961,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 17 0 0 0 0 64"
         },
           },
           "TerritoryId": 961,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[2]",
           "$.2": "QuestVariables if done after [1]: 33 16 0 0 0 96",
           "$.3": "QuestVariables if done after [3]: 32 17 0 0 0 160"
           },
           "TerritoryId": 961,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
           "$.0": 3,
           "$.1": "QuestVariables if done first: 16 1 0 0 0 128"
         }
index 6713a6f2fd84035c0806acc1676d451f7b9cbe09..aed15bc84d42d9c72436279e2474a7602734e616 100644 (file)
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "Position": {
+            "X": -588.7367,
+            "Y": 158.76302,
+            "Z": -195.30913
+          },
+          "TerritoryId": 961,
+          "InteractionType": "WalkTo"
+        },
         {
           "Position": {
             "X": -318.20203,
index cb226cfeb3d506f7b30db28a228484d1bf04724e..a5096100ab9b6081a068f014905d3a0a4e89268e 100644 (file)
@@ -35,7 +35,9 @@
           "StopDistance": 3,
           "TerritoryId": 959,
           "InteractionType": "Say",
-          "ChatMessage": "carrot of happiness"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+          }
         },
         {
           "DataId": 1041790,
@@ -47,7 +49,9 @@
           "StopDistance": 3,
           "TerritoryId": 959,
           "InteractionType": "Say",
-          "ChatMessage": "carrot of happiness",
+          "ChatMessage": {
+            "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+          },
           "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
         },
         {
@@ -65,7 +69,9 @@
           "StopDistance": 3,
           "TerritoryId": 959,
           "InteractionType": "Say",
-          "ChatMessage": "carrot of happiness"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+          }
         }
       ]
     },
index 41b4c872cde76592ba6e907ec932c67e18c2bafe..fa29ba68f4f5fd116de34c1cf7bf669075dc55ec 100644 (file)
             "Z": 4.5318604
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1038586,
index e634e7dbaeeaf807338c3fc306369ed7591b2718..641b2ced4b8bec73208913f91a2431d6462d7c57 100644 (file)
@@ -28,7 +28,8 @@
             "Z": 14.81335
           },
           "TerritoryId": 987,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 962
         },
         {
           "DataId": 185,
index 8718794bee3200b3272ce67ef29c3ff05bb5429a..58fd3a905a13d7f8c279c89567f175166eb6d66b 100644 (file)
@@ -99,7 +99,8 @@
           "AethernetShortcut": [
             "[Old Sharlayan] The Leveilleur Estate",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1040291,
index 43983bf3467c02c43204a1e092242fb752d73c26..190c4e3fa1bde443d619ee81e4caec39fde28c37 100644 (file)
@@ -28,7 +28,8 @@
             "Z": 14.785889
           },
           "TerritoryId": 987,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 962
         },
         {
           "DataId": 1038592,
index b8c611112be2c1e6138d5b50c34203038648252c..357f41b7d2c8666b890fd3546da4a98abf0ecf46 100644 (file)
           "InteractionType": "CutsceneSelectString",
           "DialogueChoices": [
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A2_000_088"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A3_000_098"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A5_000_107"
             }
           ]
           "InteractionType": "CutsceneSelectString",
           "DialogueChoices": [
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A6_000_149"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A7_000_158"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A8_000_164"
             }
           ]
           "InteractionType": "CutsceneSelectString",
           "DialogueChoices": [
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A9_000_200"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A10_000_209"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A11_000_218"
             }
           ]
index e928ce09d29cd5a65ddc5b16f2170ea2f5ba0635..460f35a7aced47182d7b8a242c8a1012fec915b0 100644 (file)
           "AethernetShortcut": [
             "[Old Sharlayan] Aetheryte Plaza",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1038589,
index a889d07549b56e5f283d88146308a738597cf84e..fa6d6a21d5d267bf3c0fcd575607861d9c6a7ddd 100644 (file)
@@ -32,7 +32,8 @@
           "AethernetShortcut": [
             "[Old Sharlayan] The Studium",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1038784,
index 52a8df5314d9ca5f7ddbdc0fe5f53c75c99ef789..b0e712a6655a9f1fe9451cf9f69e75ff11a2b70d 100644 (file)
             "Z": 4.5318604
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 2012188,
index dcc7ef9ca4e40fd1b06aab31ec76689ae90d9476..069e95df9d1b2441b4d1980b9b82c232cf2df423 100644 (file)
@@ -29,7 +29,8 @@
             "Z": 4.55803
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         }
       ]
     },
       "Sequence": 2,
       "Steps": [
         {
+          "Position": {
+            "X": 0,
+            "Y": 0,
+            "Z": 0
+          },
           "TerritoryId": 957,
           "AetheryteShortcut": "Thavnair - Yedlihmad",
           "InteractionType": "WalkTo",
index 125576d485216940c985bc1510156cd3b1d5c13e..39be27cde60a0c24f0c53f3451c3fc08460aab28 100644 (file)
           },
           "TerritoryId": 961,
           "InteractionType": "Say",
-          "ChatMessage": "I have a favor to ask"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKME107_04425_SAYTODO_000_190"
+          }
         }
       ]
     },
           },
           "TerritoryId": 961,
           "InteractionType": "Say",
-          "ChatMessage": "Please, Emet-Selch"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKME107_04425_SAYTODO_000_210"
+          }
         }
       ]
     },
index d6764c77111ad484aa35a6734fc4643ee8990737..d21a65b01dde2e2f8358508959e8becdb9acafaa 100644 (file)
@@ -65,7 +65,8 @@
           "AethernetShortcut": [
             "[Old Sharlayan] Aetheryte Plaza",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1040161,
index b42a583172d3e5690c3df16bb71f35b3cc3392b4..7e488b395e2224eb0d980cf80a86c8c866e2c269 100644 (file)
@@ -49,7 +49,8 @@
           "AethernetShortcut": [
             "[Old Sharlayan] Aetheryte Plaza",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         }
       ]
     },
@@ -64,7 +65,8 @@
             "Z": 14.785889
           },
           "TerritoryId": 987,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 962
         },
         {
           "DataId": 1039683,
index 80a609d42240366796447ae518e3afc5089204b0..9a49966127a3c8c6bd042e416c785ba8abbf4d8a 100644 (file)
@@ -14,7 +14,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "DisableNavmesh": true
+          "DisableNavmesh": true,
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1041232,
@@ -39,7 +40,8 @@
             "Z": 27.5
           },
           "TerritoryId": 351,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 156
         },
         {
           "DataId": 1039570,
index d6156e09b0d3c4500527e40b154dee0807858fdb..e7efd53a29d684fe80053d2c5e9d5171505990b9 100644 (file)
           },
           "StopDistance": 5,
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
           "DataId": 1039606,
index bf47298a5f87c493c4b5c01e44fd484ebbcd7f1f..da7d334f1bd411ed93d08d0db53d8579c2c050d1 100644 (file)
             "Y": 1.2090492,
             "Z": 118.133255
           },
+          "StopDistance": 4,
           "TerritoryId": 957,
           "InteractionType": "WalkTo",
           "AetheryteShortcut": "Thavnair - Palaka's Stand",
-          "Fly": true
+          "Fly": true,
+          "SkipIf": [
+            "FlyingLocked"
+          ],
+          "Comment": "TODO Verify; there's some weird shenanigans happening with navmesh not moving to coords 'below' it"
         },
         {
           "DataId": 2012847,
             "Z": 119.43237
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Mount": false
         }
       ]
     },
index 276af52c230f6a8711e02f1622676b76c651ed5f..80552cbdf4938309a72244eb5241fc7da610243c 100644 (file)
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 1 0 0 0 0 128"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[2]",
           "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[3]",
           "$.1": "QuestVariables if done after [1, 2]: 3 0 0 0 0 224"
         },
             "Z": -49.45453
           },
           "TerritoryId": 1089,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         }
       ]
     },
             "Z": 206.78001
           },
           "TerritoryId": 1089,
-          "InteractionType": "Interact"
+          "InteractionType": "WalkTo"
         }
       ]
     },
             "Y": -718.4441,
             "Z": 206.77502
           },
+          "StopDistance": 5,
           "TerritoryId": 1089,
           "InteractionType": "Interact"
         }
index ffcd8b4850c3a62a2c4836c84836400035ef3d0c..fd2435b95799e75334e422e55b430c9c4b5cbd8a 100644 (file)
@@ -12,7 +12,7 @@
             "Y": -718.33905,
             "Z": 207.87354
           },
-          "StopDistance": 5,
+          "StopDistance": 7,
           "TerritoryId": 1089,
           "InteractionType": "Interact"
         }
index f4c4b44a87dff5bf3712054d45d2273b09d9f0db..f60e2a87b0945fb385df519d78bd3966b724a392 100644 (file)
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 1 0 0 0 0 32"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[2]",
           "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 96"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
           "$.0": "[3]"
         }
       ]
index d43ea26d5bd3902b77f5c83d03d2e0882e15a295..68e8801b4a63ce5cec265119f23f75696d2b5729 100644 (file)
@@ -39,6 +39,7 @@
             "Y": 1.7999947,
             "Z": -180.07172
           },
+          "StopDistance": 5,
           "TerritoryId": 963,
           "InteractionType": "Interact",
           "AethernetShortcut": [
index 56c68240bb00ac89bbb907c0941219c6deaf8370..aa7203ab7f9490ad6400ba64ec7ede470642410c 100644 (file)
             16028,
             16029
           ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 16 5(enemy kill count) 0 0 0 64"
         },
           },
           "TerritoryId": 958,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[2]",
           "$.1": "QuestVariables if done after [1]: 33 5 0 0 0 96"
         },
           },
           "TerritoryId": 958,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ],
           "$.0": "[3]",
           "$.1": "QuestVariables if done after [1, 2]: 49 21 0 0 0 112"
         },
           "EnemySpawnType": "AfterInteraction",
           "KillEnemyDataIds": [
             16030
-          ]
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
+          "$.2": "QuestVariables if done first: 16 0 16 0 0 128"
         }
       ]
     },
index dba2d1f32162995e054eaf6da941281a59147446..97ce377956b0e72a50f2e112c9ebee379330cda4 100644 (file)
@@ -12,6 +12,7 @@
             "Y": -173,
             "Z": 126.35986
           },
+          "StopDistance": 7,
           "TerritoryId": 1119,
           "InteractionType": "Interact"
         }
             "Y": -17.202883,
             "Z": 705.0431
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
index 4fbfeeeaca7bbc82c51be94af156591154b0468b..a730dfa45ca2ba3e8673c3b900b2fd4ab2d1fba8 100644 (file)
@@ -12,6 +12,7 @@
             "Y": -17.44166,
             "Z": 707.3014
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
@@ -29,6 +30,7 @@
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
             "Z": -585.1987
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true,
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1037647,
index c86a52a2d1c1cff7aee89ff6208fef3ac3962614..4d7218e36a5baf760531acf6f18b356e75b2479e 100644 (file)
@@ -28,7 +28,8 @@
             "Z": -616.14404
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Z": -715.44977
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
     {
-      "Sequence": 3,
+      "Sequence": 4,
       "Steps": [
         {
           "TerritoryId": 1125,
@@ -67,9 +69,9 @@
             "Y": 89.42017,
             "Z": -636.86584
           },
+          "StopDistance": 5,
           "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "Comment": "Unsure if this is the right data id"
+          "InteractionType": "Interact"
         }
       ]
     }
index f28d03f56bcad2e1ef912d065697ea9bbb751adb..2af3b071efc7041c223648d44b8b179f95f65ff9 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 89.42017,
             "Z": -636.86584
           },
+          "StopDistance": 5,
           "TerritoryId": 957,
           "InteractionType": "Interact"
         }
@@ -29,6 +30,7 @@
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
index 43c8e26ea2ee78ec90d659a5812231e9f1e0f510..2c9dc168978f9f5530a61044f3974b7098e901e0 100644 (file)
@@ -46,6 +46,7 @@
             "Y": 0.59503174,
             "Z": -141.71057
           },
+          "StopDistance": 5,
           "TerritoryId": 963,
           "InteractionType": "Interact"
         }
@@ -61,7 +62,8 @@
             "Z": -140.01839
           },
           "TerritoryId": 963,
-          "InteractionType": "UseItem"
+          "InteractionType": "UseItem",
+          "ItemId": 2003461
         }
       ]
     },
index 0d12835a5f6d21aa2d9e38f0373540dee48beddd..a4a44a7ed5654a22462c5b945edece440824b336 100644 (file)
             "Y": 1.2359009,
             "Z": 5.9662476
           },
+          "StopDistance": 4,
           "TerritoryId": 1161,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 963
         },
         {
           "DataId": 1039602,
@@ -78,6 +80,7 @@
             "Y": 4.357494,
             "Z": 0.7476196
           },
+          "StopDistance": 5,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
     {
       "Sequence": 4,
       "Steps": [
+        {
+          "Position": {
+            "X": 6.0711417,
+            "Y": -28.723347,
+            "Z": -43.467506
+          },
+          "TerritoryId": 956,
+          "InteractionType": "WalkTo",
+          "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
+          "SkipIf": [
+            "FlyingUnlocked"
+          ]
+        },
         {
           "DataId": 1045407,
           "Position": {
             "Z": -125.96332
           },
           "TerritoryId": 956,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Z": 54.276245
           },
           "TerritoryId": 956,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Y": -16.146997,
             "Z": 236.22485
           },
+          "StopDistance": 5,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
             "Y": -16.147,
             "Z": 235.70605
           },
+          "StopDistance": 7,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
index 5969b787ffb46739d15eab70a5540c76d02c8413..0360fbc7d6666b934e46ad3da350ca9816b1c76f 100644 (file)
@@ -12,6 +12,7 @@
             "Y": -16.147,
             "Z": 235.70605
           },
+          "StopDistance": 7,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
             "Y": 23.803606,
             "Z": 404.9286
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Camp Broken Glass"
         }
       ]
     },
@@ -43,7 +46,8 @@
             "Z": -191.48547
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Tertium"
         }
       ]
     },
             "Z": -156.02356
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1045491,
             "Z": -178.27118
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         },
         {
           "DataId": 1037774,
             "Z": -212.14618
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         },
         {
           "DataId": 1045489,
             "Z": -213.18384
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
           "DataId": 1037766,
             "Z": -265.00348
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Comment": "TODO Check flags",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            8
+          ]
         }
       ]
     },
             "Z": -637.56775
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     }
index be4e80c05929ea9141601c5d026ced88328fd98a..81e38a8a63890fa76e658364312e82aa18330cbb 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 15.5581665,
             "Z": -638.3002
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
@@ -28,7 +29,8 @@
             "Z": -620.08093
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Z": 67.063354
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Comment": "TODO Check Flags",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1045493,
             "Z": 42.435303
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         },
         {
           "DataId": 2013350,
             "Z": 26.382812
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
           "DataId": 1045492,
             "Z": -9.353821
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         }
       ]
     },
             "Y": 23.803606,
             "Z": 406.05774
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Camp Broken Glass"
         }
       ]
     },
             "Z": -202.99078
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Tertium"
         }
       ]
     }
index 38097802e1879dbaeaad4f3c99da8c77d1f1ffef..bb8fb52f3e8eccd959f0000b866235bacd90c7b1 100644 (file)
@@ -12,6 +12,7 @@
             "Y": -36.65,
             "Z": -206.74457
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
             "Y": 10.8,
             "Z": -663.8825
           },
+          "StopDistance": 1,
           "TerritoryId": 958,
           "InteractionType": "Combat",
+          "EnemySpawnType": "AutoOnEnterArea",
           "KillEnemyDataIds": [
             16332
-          ]
+          ],
+          "Fly": true
         }
       ]
     },
@@ -44,6 +48,7 @@
             "Y": 10.8,
             "Z": -659.75433
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
index d11cf33bea14668cf2aa6197b2d47b3513dd425d..35d89bc3c80e3c0a8070d7f792ebc76273cf6502 100644 (file)
@@ -12,6 +12,7 @@
             "Y": -36.65,
             "Z": -204.97449
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
@@ -28,7 +29,9 @@
             "Z": 585.1072
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+          "Fly": true
         }
       ]
     },
             "Z": 407.27856
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
     {
       "Sequence": 3,
       "Steps": [
+        {
+          "DataId": 2012664,
+          "Position": {
+            "X": -26.901672,
+            "Y": -130.47992,
+            "Z": -580.4685
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
+          "SkipIf": ["FlyingUnlocked"],
+          "Comment": "Check if the flying unlocked check is good enough"
+        },
         {
           "DataId": 1039686,
           "Position": {
@@ -58,7 +75,8 @@
             "Z": -494.31604
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Y": -49.589592,
             "Z": -626.42865
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1045470,
             "Y": -49.589596,
             "Z": -622.3087
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
-          "DataId": 1045473,
+          "DataId": 1045472,
           "Position": {
-            "X": 152.42236,
-            "Y": -49.589592,
-            "Z": -614.8623
+            "X": 148.91272,
+            "Y": -49.589596,
+            "Z": -621.48474
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
+          "Comment": "TODO Check Flags"
         },
         {
-          "DataId": 1045472,
+          "DataId": 1045473,
           "Position": {
-            "X": 148.91272,
-            "Y": -49.589596,
-            "Z": -621.48474
+            "X": 152.42236,
+            "Y": -49.589592,
+            "Z": -614.8623
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         }
       ]
     },
             "Y": -49.589592,
             "Z": -619.9894
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Interact"
         }
index 0c0096959d0d85b31881ea24578fefcdf9c60c9a..f9feb9c3986743ba0f727c75857df8c69b3f385a 100644 (file)
@@ -4,15 +4,18 @@
   "QuestSequence": [
     {
       "Sequence": 0,
-      "DataId": 1045611,
-      "Position": {
-        "X": 160.87585,
-        "Y": -49.589592,
-        "Z": -618.46344
-      },
-      "TerritoryId": 959,
-      "InteractionType": "Interact",
-      "Comment": "Unsure if correct id"
+      "Steps": [
+        {
+          "DataId": 1045611,
+          "Position": {
+            "X": 160.87585,
+            "Y": -49.589592,
+            "Z": -618.46344
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact"
+        }
+      ]
     },
     {
       "Sequence": 1,
@@ -25,7 +28,9 @@
             "Z": 418.69226
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+          "Fly": true
         }
       ]
     },
             "Z": 638.0254
           },
           "TerritoryId": 1162,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
+          "Comment": "TODO Check Flags"
         },
         {
           "DataId": 2013355,
             "Z": 547.6615
           },
           "TerritoryId": 1162,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 2013356,
             "Z": 472.19043
           },
           "TerritoryId": 1162,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         }
       ]
     },
index b43e4031fe48a92a14db1b8ab508ae750fca1f70..524a09c230eb8d025c7c55e596185e301601013e 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 56.573345,
             "Z": 436.0265
           },
+          "StopDistance": 5,
           "TerritoryId": 1162,
           "InteractionType": "Interact"
         }
index c07ccc871c9dc02e7d2dca5651a576c72bd931db..4817a88921d0d6a4ecf277386c5b96a07a09644d 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 54.977272,
             "Z": 432.02856
           },
+          "StopDistance": 7,
           "TerritoryId": 959,
           "InteractionType": "Interact"
         }
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "DataId": 2012664,
+          "Position": {
+            "X": -26.901672,
+            "Y": -130.47992,
+            "Z": -580.4685
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
+          "SkipIf": ["FlyingUnlocked"]
+        },
         {
           "DataId": 1045466,
           "Position": {
@@ -28,7 +41,8 @@
             "Z": -491.99664
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
@@ -44,6 +58,7 @@
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
index 1a6c04a220213cca4ea7dd3d79c35dbe07a3c69f..87f9eda5b095352e847f7b3a1d6a1ddff3f6e9d0 100644 (file)
@@ -27,6 +27,7 @@
             "Y": 55,
             "Z": -68.61987
           },
+          "StopDistance": 5,
           "TerritoryId": 963,
           "InteractionType": "Interact"
         }
@@ -44,6 +45,7 @@
           },
           "TerritoryId": 819,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Crystarium",
           "AethernetShortcut": [
             "[Crystarium] Aetheryte Plaza",
             "[Crystarium] The Cabinet of Curiosity"
index a307df3460e070d2f337365fde5965b7249d9b24..d45f6f2f8467256f369e9dd63b74c19c124b6ce0 100644 (file)
@@ -28,7 +28,8 @@
             "Z": -8.255188
           },
           "TerritoryId": 820,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Eulmore"
         }
       ]
     },
             "Z": -61.387024
           },
           "TerritoryId": 820,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         },
         {
           "DataId": 1045633,
           "AethernetShortcut": [
             "[Eulmore] Aetheryte Plaza",
             "[Eulmore] The Mainstay"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
           ]
         },
         {
           "AethernetShortcut": [
             "[Eulmore] The Mainstay",
             "[Eulmore] Nightsoil Pots"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
           ]
         }
       ]
index 884141691b2063902e15fad198a51937c321a397..2d0f4d99c793f581e0da2b2cc65c65fb05f3e142 100644 (file)
@@ -28,7 +28,8 @@
             "Z": 298.20703
           },
           "TerritoryId": 817,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Rak'tika - Slitherbough"
         }
       ]
     },
@@ -44,7 +45,9 @@
           },
           "TerritoryId": 817,
           "InteractionType": "Say",
-          "ChatMessage": "allin tuta"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKML103_04746_SAYTODO_000_140"
+          }
         }
       ]
     },
@@ -89,7 +92,8 @@
             "Z": -224.5976
           },
           "TerritoryId": 815,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Amh Araeng - Twine"
         }
       ]
     },
index 720f488ca3b6eeb8862f7f66b31f54adcd1e4da3..39df81daa4e5a3d95d4e315f1d2797f843cafa3b 100644 (file)
             "[Crystarium] Aetheryte Plaza",
             "[Crystarium] The Dossal Gate"
           ]
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
+        },
         {
           "DataId": 1033888,
           "Position": {
           },
           "TerritoryId": 844,
           "InteractionType": "Interact"
-        },
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
         {
           "DataId": 1039645,
           "Position": {
@@ -58,6 +58,7 @@
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
@@ -76,7 +77,9 @@
             "Z": 401.26636
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+          "Fly": true
         }
       ]
     },
index 6fd4500adc54fa794141a8f8f26ad1d03901868b..206d1297863a04d498d436082e1e07371f0fd252 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 56.682667,
             "Z": 468.162
           },
+          "StopDistance": 6,
           "TerritoryId": 1162,
           "InteractionType": "Interact"
         }
index 9c8d733ca452ffd020669b73d72bc92344061cea..3747b3b367e8eb9ead2ce84a08d51207286f9449 100644 (file)
             "Z": 4.55803
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 2013420,
index 0520512d9304172a5438ef5d93d8b38a03d60a4a..631070ba1789016f0ae51086b5b8d5df0aa0f12d 100644 (file)
         <PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
     </PropertyGroup>
 
-    <Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen">
+    <Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
         <ZipDirectory SourceDirectory="$(ProjectDir)\Shadowbringers"
                       DestinationFile="$(TargetDir)\Shadowbringers.zip"
                       Overwrite="true"/>
     </Target>
 
-    <Target Name="ZipEndwalker" BeforeTargets="BeforeResGen">
+    <Target Name="ZipEndwalker" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
         <ZipDirectory SourceDirectory="$(ProjectDir)\Endwalker"
                       DestinationFile="$(TargetDir)\Endwalker.zip"
                       Overwrite="true"/>
     </Target>
 
-    <ItemGroup>
+    <ItemGroup Condition="'$(Configuration)' == 'Release'">
         <EmbeddedResource Include="$(TargetDir)\Shadowbringers.zip"/>
         <EmbeddedResource Include="$(TargetDir)\Endwalker.zip"/>
     </ItemGroup>
index 9deff6a9a2616ddac01cbd0a15363c3f5faba9f4..23b3f745ac7998ae27f11d3e33b2a1291b4955f8 100644 (file)
@@ -50,7 +50,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1031257,
index 3181b209f010c62f894d3475bf4dd32a4ec0b019..de3cd85459930d61255432c53614357a1a111f4c 100644 (file)
@@ -28,7 +28,8 @@
             "Z": 27.5
           },
           "TerritoryId": 351,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 156
         },
         {
           "Position": {
@@ -73,7 +74,8 @@
             "Z": -631.281
           },
           "TerritoryId": 156,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032081,
index a04c528b6a1b99de5973bec462018ee33b07523c..d2c46e2240bff213ae4a383a44ca53f7d3423ebe 100644 (file)
@@ -59,7 +59,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032081,
index 0551275f088738c2be812721cb9f1f896d80ce25..5f437641d3130a2c6d6f4cf93a91a6d6b1809764 100644 (file)
@@ -45,7 +45,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032081,
index be1bcded24633295656cae5aed32577d508b695f..17d48f9c6b606fdf57164d9ebca2f71975357413 100644 (file)
@@ -28,7 +28,8 @@
             "Z": 27.5
           },
           "TerritoryId": 351,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 156
         },
         {
           "Position": {
index d8a1ea8b5f72cbe69a3932a25bb3f8cd02234fcc..c4448357392e46b3bc981c168b8070690ceb4f81 100644 (file)
@@ -29,7 +29,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1035355,
index 570bf1a42bfa344d2fbfefbdbe3a39e242dce203..bfd69d991256126b858323fccc8eb2a4e0530642 100644 (file)
@@ -62,7 +62,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032694,
index 43ac6e176811cf16f1db2f88c4b2c3c99eeccd10..c2b02fcbf77a59a9c4e39ec142e40fcdc1edef8b 100644 (file)
@@ -79,7 +79,8 @@
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         }
       ]
     },
index 4af20ea037dd6ba27aa38643cd65e86504c6e9e0..6162ef64a8f2c01da7fb3c01634d4e0549ae870b 100644 (file)
                     "type": "string",
                     "enum": [
                       "Never",
-                      "FlyingUnlocked"
+                      "FlyingLocked",
+                      "FlyingUnlocked",
+                      "DifferentTerritory"
                     ]
                   }
                 },
                   "then": {
                     "properties": {
                       "ChatMessage": {
-                        "type": "string",
-                        "description": "The text to use with /say"
+                        "type": "object",
+                        "description": "The text to use with /say",
+                        "properties": {
+                          "ExcelSheet": {
+                            "type": "string"
+                          },
+                          "Key": {
+                            "type": "string"
+                          }
+                        },
+                        "required": [
+                          "Key"
+                        ]
                       }
                     },
                     "required": [
-                      "Position",
                       "ChatMessage"
                     ]
                   }
                             }
                           },
                           "required": [
-                            "ExcelSheet",
                             "Answer"
                           ]
                         }
index f4fa2e04d120af13a88c9423e5bdac7626ad5b85..7b7bbee993e15078141efca6df2af1475e5eb03d 100644 (file)
@@ -167,6 +167,8 @@ internal sealed class MovementController : IDisposable
     public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null)
     {
         PrepareNavigation(type, dataId, to, fly, sprint, stopDistance);
+        _pluginLog.Information($"Pathfinding to {Destination}");
+
         _cancellationTokenSource = new();
         _cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(10));
         _pathfindTask =
@@ -176,6 +178,8 @@ internal sealed class MovementController : IDisposable
     public void NavigateTo(EMovementType type, uint? dataId, List<Vector3> to, bool fly, bool sprint, float? stopDistance)
     {
         PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance);
+
+        _pluginLog.Information($"Moving to {Destination}");
         _navmeshIpc.MoveTo(to);
     }
 
index 54572dff7ef6583ec7210c8859b8fe5a198d3ee3..ad9d91ec70dfcc7737a3e4170dc75466cf90366b 100644 (file)
@@ -1,9 +1,7 @@
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Numerics;
 using System.Text.Json;
 using Dalamud.Game.ClientState.Conditions;
@@ -14,7 +12,6 @@ using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
 using FFXIVClientStructs.FFXIV.Client.Game;
 using FFXIVClientStructs.FFXIV.Client.UI;
 using LLib.GameUI;
-using Lumina.Excel.CustomSheets;
 using Questionable.Data;
 using Questionable.External;
 using Questionable.Model;
@@ -251,10 +248,12 @@ internal sealed class QuestController
     public void IncreaseStepCount()
     {
         (QuestSequence? seq, QuestStep? step) = GetNextStep();
-        if (seq == null || step == null)
+        if (CurrentQuest == null || seq == null || step == null)
+        {
+            _pluginLog.Warning("Unable to retrieve next quest step, not increasing step count");
             return;
+        }
 
-        Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
         if (CurrentQuest.Step + 1 < seq.Steps.Count)
         {
             CurrentQuest = CurrentQuest with
@@ -276,10 +275,12 @@ internal sealed class QuestController
     public unsafe void ExecuteNextStep()
     {
         (QuestSequence? seq, QuestStep? step) = GetNextStep();
-        if (seq == null || step == null)
+        if (CurrentQuest == null || seq == null || step == null)
+        {
+            _pluginLog.Warning("Could not retrieve next quest step, not doing anything");
             return;
+        }
 
-        Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
         if (step.Disabled)
         {
             _pluginLog.Information("Skipping step, as it is disabled");
@@ -299,12 +300,14 @@ internal sealed class QuestController
                      (_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.From) < 20 ||
                       _aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.To) < 20)))
                 {
+                    _pluginLog.Information("Skipping aetheryte teleport");
                     skipTeleport = true;
                 }
             }
 
             if (skipTeleport)
             {
+                _pluginLog.Information("Marking aetheryte shortcut as used");
                 CurrentQuest = CurrentQuest with
                 {
                     StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
@@ -312,20 +315,24 @@ internal sealed class QuestController
             }
             else
             {
-                if (step.AetheryteShortcut != null)
+                if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
                 {
-                    if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
-                        _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
-                    else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
-                        CurrentQuest = CurrentQuest with
-                        {
-                            StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
-                        };
-                    else
-                        _chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
+                    _pluginLog.Error($"Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
+                    _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
+                }
+                else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
+                {
+                    _pluginLog.Information("Travelling via aetheryte...");
+                    CurrentQuest = CurrentQuest with
+                    {
+                        StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
+                    };
                 }
                 else
-                    _chatGui.Print("[Questionable] No aetheryte for teleport set.");
+                {
+                    _pluginLog.Warning("Unable to teleport to aetheryte");
+                    _chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
+                }
 
                 return;
             }
@@ -343,6 +350,14 @@ internal sealed class QuestController
                 return;
             }
 
+            if (step.SkipIf.Contains(ESkipCondition.FlyingLocked) &&
+                !_gameFunctions.IsFlyingUnlocked(step.TerritoryId))
+            {
+                _pluginLog.Information("Skipping step, as flying is locked");
+                IncreaseStepCount();
+                return;
+            }
+
             if (step is
                 {
                     DataId: not null,
@@ -372,10 +387,9 @@ internal sealed class QuestController
             }
         }
 
-        if (!CurrentQuest.StepProgress.AethernetShortcutUsed)
+        if (!CurrentQuest.StepProgress.AethernetShortcutUsed && step.AethernetShortcut != null)
         {
-            if (step.AethernetShortcut != null &&
-                _gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
+            if (_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
                 _gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.To))
             {
                 EAetheryteLocation from = step.AethernetShortcut.From;
@@ -389,6 +403,7 @@ internal sealed class QuestController
                 {
                     if (_aetheryteData.CalculateDistance(playerPosition, territoryType, from) < 11)
                     {
+                        _pluginLog.Information($"Using lifestream to teleport to {to}");
                         _lifestreamIpc.Teleport(to);
                         CurrentQuest = CurrentQuest with
                         {
@@ -396,22 +411,31 @@ internal sealed class QuestController
                         };
                     }
                     else
+                    {
+                        _pluginLog.Information("Moving to aethernet shortcut");
                         _movementController.NavigateTo(EMovementType.Quest, (uint)from, _aetheryteData.Locations[from],
                             false, true,
                             AetheryteConverter.IsLargeAetheryte(from) ? 10.9f : 6.9f);
+                    }
 
                     return;
                 }
             }
+            else
+                _pluginLog.Warning($"Aethernet shortcut not unlocked (from: {step.AethernetShortcut.From}, to: {step.AethernetShortcut.To}), walking manually");
         }
 
-        if (step.TargetTerritoryId == _clientState.TerritoryType)
+        if (step.TargetTerritoryId == _clientState.TerritoryType && !step.SkipIf.Contains(ESkipCondition.Never))
         {
-            _pluginLog.Information("Zone transition, skipping movement");
+            // we assume whatever e.g. interaction, walkto etc. we have will trigger the zone transition
+            _pluginLog.Information("Zone transition, skipping rest of step");
+            IncreaseStepCount();
+            return;
         }
-        else if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
-                 (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
-                 (step.JumpDestination.StopDistance ?? 1f))
+
+        if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
+            (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
+            (step.JumpDestination.StopDistance ?? 1f))
         {
             _pluginLog.Information("We're at the jump destination, skipping movement");
         }
@@ -433,16 +457,17 @@ internal sealed class QuestController
 
             if (step.Mount == true && !_gameFunctions.HasStatusPreventingSprintOrMount())
             {
+                _pluginLog.Information("Step explicitly wants a mount, trying to mount...");
                 if (!_condition[ConditionFlag.Mounted] && !_condition[ConditionFlag.InCombat] &&
                     _territoryData.CanUseMount(_clientState.TerritoryType))
                 {
-                    if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
-                        ActionManager.Instance()->UseAction(ActionType.Mount, 71);
+                    _gameFunctions.Mount();
                     return;
                 }
             }
             else if (step.Mount == false)
             {
+                _pluginLog.Information("Step explicitly wants no mount, trying to unmount...");
                 if (_condition[ConditionFlag.Mounted])
                 {
                     _gameFunctions.Unmount();
@@ -456,9 +481,7 @@ internal sealed class QuestController
                     !_condition[ConditionFlag.InCombat] && _territoryData.CanUseMount(_clientState.TerritoryType) &&
                     !_gameFunctions.HasStatusPreventingSprintOrMount())
                 {
-                    if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
-                        ActionManager.Instance()->UseAction(ActionType.Mount, 71);
-
+                    _gameFunctions.Mount();
                     return;
                 }
 
@@ -495,10 +518,12 @@ internal sealed class QuestController
             if (gameObject == null ||
                 (gameObject.Position - _clientState.LocalPlayer!.Position).Length() > step.StopDistance)
             {
+                _pluginLog.Warning("Object not found or too far away, no position so we can't move");
                 return;
             }
         }
 
+        _pluginLog.Information($"Running logic for {step.InteractionType}");
         switch (step.InteractionType)
         {
             case EInteractionType.Interact:
@@ -506,7 +531,10 @@ internal sealed class QuestController
                 {
                     GameObject? gameObject = _gameFunctions.FindObjectByDataId(step.DataId.Value);
                     if (gameObject == null)
+                    {
+                        _pluginLog.Warning($"No game object with dataId {step.DataId}");
                         return;
+                    }
 
                     if (!gameObject.IsTargetable && _condition[ConditionFlag.Mounted])
                     {
@@ -623,9 +651,14 @@ internal sealed class QuestController
                     return;
                 }
 
-                if (!string.IsNullOrEmpty(step.ChatMessage))
+                if (step.ChatMessage != null)
                 {
-                    _gameFunctions.ExecuteCommand($"/say {step.ChatMessage}");
+                    string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest, step.ChatMessage.ExcelSheet,
+                        step.ChatMessage.Key);
+                    if (excelString == null)
+                        return;
+
+                    _gameFunctions.ExecuteCommand($"/say {excelString}");
                     IncreaseStepCount();
                 }
 
@@ -686,23 +719,10 @@ internal sealed class QuestController
                 {
                     foreach (DialogueChoice dialogueChoice in step.DialogueChoices)
                     {
-                        var excelSheet = _dataManager.Excel.GetSheet<QuestDialogueText>(dialogueChoice.ExcelSheet);
-                        if (excelSheet == null)
-                        {
-                            _pluginLog.Error($"Unknown excel sheet '{dialogueChoice.ExcelSheet}'");
-                            continue;
-                        }
-
-                        string? excelString = excelSheet
-                            .FirstOrDefault(x => x.Key == dialogueChoice.Answer)
-                            ?.Value
-                            ?.ToString();
+                        string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest,
+                            dialogueChoice.ExcelSheet, dialogueChoice.Answer);
                         if (excelString == null)
-                        {
-                            _pluginLog.Error(
-                                $"Could not extract '{dialogueChoice.Answer}' from sheet '{dialogueChoice.ExcelSheet}'");
                             return;
-                        }
 
                         _pluginLog.Verbose($"Looking for option '{excelString}'");
                         for (int i = 5; i < addon->AtkUnitBase.AtkValuesCount; ++i)
index c6c540eb5e714e239273151b8969a8574f32462b..79d728cd6b1f7742612a455ed519712c7b5ee25e 100644 (file)
@@ -9,7 +9,6 @@ using System.Text;
 using Dalamud.Game;
 using Dalamud.Game.ClientState.Conditions;
 using Dalamud.Game.ClientState.Objects;
-using Dalamud.Game.ClientState.Objects.Types;
 using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
 using FFXIVClientStructs.FFXIV.Client.Game;
@@ -20,11 +19,13 @@ using FFXIVClientStructs.FFXIV.Client.System.Framework;
 using FFXIVClientStructs.FFXIV.Client.System.Memory;
 using FFXIVClientStructs.FFXIV.Client.System.String;
 using FFXIVClientStructs.FFXIV.Client.UI.Agent;
+using Lumina.Excel.CustomSheets;
 using Lumina.Excel.GeneratedSheets;
 using Questionable.Controller;
 using Questionable.Model.V1;
 using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
 using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject;
+using Quest = Questionable.Model.Quest;
 
 namespace Questionable;
 
@@ -44,6 +45,7 @@ internal sealed unsafe class GameFunctions
     private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands;
     private readonly ReadOnlyDictionary<uint, ushort> _contentFinderConditionToContentId;
 
+    private readonly IDataManager _dataManager;
     private readonly IObjectTable _objectTable;
     private readonly ITargetManager _targetManager;
     private readonly ICondition _condition;
@@ -53,6 +55,7 @@ internal sealed unsafe class GameFunctions
     public GameFunctions(IDataManager dataManager, IObjectTable objectTable, ISigScanner sigScanner,
         ITargetManager targetManager, ICondition condition, IClientState clientState, IPluginLog pluginLog)
     {
+        _dataManager = dataManager;
         _objectTable = objectTable;
         _targetManager = targetManager;
         _condition = condition;
@@ -399,6 +402,11 @@ internal sealed unsafe class GameFunctions
         if (_condition[ConditionFlag.Swimming] && !IsFlyingUnlocked(_clientState.TerritoryType))
             return true;
 
+        // company chocobo is locked
+        var playerState = PlayerState.Instance();
+        if (playerState != null && !playerState->IsMountUnlocked(1))
+            return true;
+
         var gameObject = GameObjectManager.GetGameObjectByIndex(0);
         if (gameObject != null && gameObject->ObjectKind == 1)
         {
@@ -410,12 +418,41 @@ internal sealed unsafe class GameFunctions
         return false;
     }
 
+    public void Mount()
+    {
+        if (!_condition[ConditionFlag.Mounted])
+        {
+            var playerState = PlayerState.Instance();
+            if (playerState != null && playerState->IsMountUnlocked(71))
+            {
+                if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
+                {
+                    _pluginLog.Information("Using SDS Fenrir as mount");
+                    ActionManager.Instance()->UseAction(ActionType.Mount, 71);
+                }
+            }
+            else
+            {
+                if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 9) == 0)
+                {
+                    _pluginLog.Information("Using mount roulette");
+                    ActionManager.Instance()->UseAction(ActionType.GeneralAction, 9);
+                }
+            }
+        }
+    }
+
     public bool Unmount()
     {
         if (_condition[ConditionFlag.Mounted])
         {
             if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23) == 0)
+            {
+                _pluginLog.Information("Unmounting...");
                 ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23);
+            }
+            else
+                _pluginLog.Warning("Can't unmount right now?");
 
             return true;
         }
@@ -430,9 +467,38 @@ internal sealed unsafe class GameFunctions
             if (UIState.IsInstanceContentUnlocked(contentId))
                 AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId);
             else
-                _pluginLog.Error($"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
+                _pluginLog.Error(
+                    $"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
         }
         else
             _pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})");
     }
+
+    public string? GetExcelString(Quest currentQuestQuest, string? excelSheetName, string key)
+    {
+        if (excelSheetName == null)
+        {
+            string questPrefix = $"quest/{(currentQuestQuest.QuestId / 100):000}/";
+            string questSuffix = $"_{currentQuestQuest.QuestId:00000}";
+            excelSheetName = _dataManager.Excel
+                .GetSheetNames()
+                .SingleOrDefault(x =>
+                    x.StartsWith(questPrefix, StringComparison.Ordinal) &&
+                    x.EndsWith(questSuffix, StringComparison.Ordinal));
+            if (excelSheetName == null)
+            {
+                _pluginLog.Error($"Could not find sheet matching '{questPrefix}*{questSuffix}");
+                return null;
+            }
+        }
+
+        var excelSheet = _dataManager.Excel.GetSheet<QuestDialogueText>(excelSheetName);
+        if (excelSheet == null)
+        {
+            _pluginLog.Error($"Unknown excel sheet '{excelSheetName}'");
+            return null;
+        }
+
+        return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToString();
+    }
 }
diff --git a/Questionable/Model/V1/ChatMessage.cs b/Questionable/Model/V1/ChatMessage.cs
new file mode 100644 (file)
index 0000000..7172138
--- /dev/null
@@ -0,0 +1,7 @@
+namespace Questionable.Model.V1;
+
+public sealed class ChatMessage
+{
+    public string? ExcelSheet { get; set; }
+    public string Key { get; set; } = null!;
+}
index 644e0deaf611fd0ab25757fe8ad7c617777dd806..dd38ac4f1c0cbddcee774cf02bce377bec2700b9 100644 (file)
@@ -7,6 +7,7 @@ public sealed class SkipConditionConverter() : EnumConverter<ESkipCondition>(Val
     private static readonly Dictionary<ESkipCondition, string> Values = new()
     {
         { ESkipCondition.Never, "Never" },
+        { ESkipCondition.FlyingLocked, "FlyingLocked" },
         { ESkipCondition.FlyingUnlocked, "FlyingUnlocked" },
     };
 }
index 1c32f21864d825b6e412cef7ba76b246d312033c..d4c607e7191850a9a03f16842a4f9ed68c5871af 100644 (file)
@@ -2,6 +2,6 @@
 
 public sealed class DialogueChoice
 {
-    public string ExcelSheet { get; set; } = null!;
+    public string? ExcelSheet { get; set; }
     public string Answer { get; set; } = null!;
 }
index bced035a53458b1f3605011436bb32a37424a050..4f2639d42196a164e0547a7db179d9bc6903ec8d 100644 (file)
@@ -8,5 +8,6 @@ public enum ESkipCondition
 {
     None,
     Never,
+    FlyingLocked,
     FlyingUnlocked,
 }
index 6462f0ef39838efc70bb2b5da9b53622e02c3504..d16cccd5851f9561bb402bdb07bba5f8cd1ea74e 100644 (file)
@@ -35,7 +35,7 @@ public class QuestStep
     public bool? GroundTarget { get; set; }
 
     public EEmote? Emote { get; set; }
-    public string? ChatMessage { get; set; }
+    public ChatMessage? ChatMessage { get; set; }
 
     public EEnemySpawnType? EnemySpawnType { get; set; }
 
index 47bc84b0a16762fdfd70ae3955dc3bf96bcb620f..ac0f229bcdc96252a4128a235346d6d03f4b36a2 100644 (file)
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
         <TargetFramework>net8.0-windows</TargetFramework>
-        <Version>0.1</Version>
+        <Version>0.2</Version>
         <LangVersion>12</LangVersion>
         <Nullable>enable</Nullable>
         <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>