"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
11443
- ]
+ ],
+ "Fly": true
}
]
},
{
"Sequence": 1,
"Steps": [
+ {
+ "Position": {
+ "X": -466.72015,
+ "Y": 44.63006,
+ "Z": -310.0618
+ },
+ "TerritoryId": 816,
+ "InteractionType": "WalkTo",
+ "Fly": true
+ },
{
"DataId": 1032140,
"Position": {
"ChatMessage": {
"Key": "TEXT_BANPIX103_03691_SAYTODO_000_030"
},
- "Fly": true
+ "SkipIf": [
+ "NotTargetable"
+ ]
+ },
+ {
+ "DataId": 1032142,
+ "Position": {
+ "X": -472.7398,
+ "Y": 50.10258,
+ "Z": -328.26733
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Say",
+ "ChatMessage": {
+ "Key": "TEXT_BANPIX103_03691_SAYTODO_000_030"
+ },
+ "SkipIf": [
+ "NotTargetable"
+ ]
}
]
},
--- /dev/null
+## Sharing is Caring
+
+QuestWork:
+```
+0 0 0 x 0 0
+ 2 → 1032142
+
+unknown
+ ? → 1032140
+```
},
"TerritoryId": 816,
"InteractionType": "WalkTo",
- "Fly": true,
- "CompletionQuestVariablesFlags": [
- null,
- null,
- null,
- null,
- null,
- -128
- ]
+ "Fly": true
},
{
"DataId": 2010860,
},
"TerritoryId": 816,
"InteractionType": "Interact",
- "CompletionQuestVariablesFlags": [
- null,
- null,
- null,
- null,
- null,
- 128
+ "SkipIf": [
+ "NotTargetable"
]
},
{
"NotTargetable"
],
"IgnoreDistanceToObject": true
+ },
+ {
+ "DataId": 2010862,
+ "Position": {
+ "X": -276.96655,
+ "Y": 42.893066,
+ "Z": 453.6659
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Interact",
+ "SkipIf": [
+ "NotTargetable"
+ ],
+ "IgnoreDistanceToObject": true
}
]
},
--- /dev/null
+## The Aesthetician of Il Mheg
+
+QuestWork:
+```
+0 x 0 0 0 0
+ 5 → 2010861, 2010862
+```
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1031809,
+ "Position": {
+ "X": -454.3069,
+ "Y": 71.43217,
+ "Z": 575.1278
+ },
+ "TerritoryId": 816,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2010894,
+ "Position": {
+ "X": 268.51294,
+ "Y": 33.707153,
+ "Z": -78.14148
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AfterInteraction",
+ "KillEnemyDataIds": [
+ 11448
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1031809,
+ "Position": {
+ "X": -454.3069,
+ "Y": 71.43217,
+ "Z": 575.1278
+ },
+ "TerritoryId": 816,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Il Mheg - Lydha Lran",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1031809,
+ "Position": {
+ "X": -454.3069,
+ "Y": 71.43217,
+ "Z": 575.1278
+ },
+ "TerritoryId": 816,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1032261,
+ "Position": {
+ "X": -258.38104,
+ "Y": 50.977943,
+ "Z": 601.2206
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2010895,
+ "Position": {
+ "X": 718.28796,
+ "Y": 188.06738,
+ "Z": 296.77258
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 2010897,
+ "Position": {
+ "X": 769.0698,
+ "Y": 191.60742,
+ "Z": 251.88062
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1032261,
+ "Position": {
+ "X": -258.38104,
+ "Y": 50.977943,
+ "Z": 601.2206
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Il Mheg - Lydha Lran",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1031809,
+ "Position": {
+ "X": -454.3069,
+ "Y": 71.43217,
+ "Z": 575.1278
+ },
+ "TerritoryId": 816,
+ "InteractionType": "CompleteQuest",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1031809,
+ "Position": {
+ "X": -454.3069,
+ "Y": 71.43217,
+ "Z": 575.1278
+ },
+ "TerritoryId": 816,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2010900,
+ "Position": {
+ "X": 787.92993,
+ "Y": 187.33496,
+ "Z": 174.33423
+ },
+ "TerritoryId": 816,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "Position": {
+ "X": 743.3476,
+ "Y": 186.89098,
+ "Z": 193.8602
+ },
+ "TerritoryId": 816,
+ "InteractionType": "WalkTo",
+ "Comment": "TODO it probably isn't necessary to walk that far"
+ },
+ {
+ "DataId": 1031809,
+ "Position": {
+ "X": -454.3069,
+ "Y": 71.43217,
+ "Z": 575.1278
+ },
+ "TerritoryId": 816,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Il Mheg - Lydha Lran",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
"KillEnemyDataIds": [
14674,
14675
- ]
+ ],
+ "Fly": true
}
]
},
},
"TerritoryId": 957,
"InteractionType": "Interact",
+ "Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1042301,
+ "Position": {
+ "X": -66.02582,
+ "Y": 39.994705,
+ "Z": 321.06494
+ },
+ "TerritoryId": 957,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1042390,
+ "Position": {
+ "X": 376.089,
+ "Y": 3.1168795,
+ "Z": -241.77924
+ },
+ "TerritoryId": 957,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Thavnair - Palaka's Stand",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 1042389,
+ "Position": {
+ "X": -416.31195,
+ "Y": 10.9610405,
+ "Z": 11.48999
+ },
+ "TerritoryId": 957,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "AetheryteShortcut": "Thavnair - Great Work",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1042301,
+ "Position": {
+ "X": -66.02582,
+ "Y": 39.994705,
+ "Z": 321.06494
+ },
+ "TerritoryId": 957,
+ "InteractionType": "CompleteQuest",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1042301,
+ "Position": {
+ "X": -66.02582,
+ "Y": 39.994705,
+ "Z": 321.06494
+ },
+ "TerritoryId": 957,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2012884,
+ "Position": {
+ "X": 111.46704,
+ "Y": 5.935669,
+ "Z": -294.36182
+ },
+ "TerritoryId": 957,
+ "InteractionType": "UseItem",
+ "ItemId": 2003420,
+ "Fly": true,
+ "AetheryteShortcut": "Thavnair - Palaka's Stand"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2012884,
+ "Position": {
+ "X": 111.46704,
+ "Y": 5.935669,
+ "Z": -294.36182
+ },
+ "TerritoryId": 957,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1042301,
+ "Position": {
+ "X": -66.02582,
+ "Y": 39.994705,
+ "Z": 321.06494
+ },
+ "TerritoryId": 957,
+ "InteractionType": "CompleteQuest",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
null,
null,
null,
- 32
+ -32
]
},
{
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048779,
+ "Position": {
+ "X": -231.15894,
+ "Y": 3.221878,
+ "Z": -453.17773
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": -93.41179,
+ "Y": 15.238003,
+ "Z": -677.9412
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Fly": true
+ },
+ {
+ "DataId": 2014160,
+ "Position": {
+ "X": -95.23157,
+ "Y": 16.464417,
+ "Z": -677.8821
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": 183.02583,
+ "Y": -0.40592146,
+ "Z": -568.2219
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Fly": true
+ },
+ {
+ "DataId": 2014163,
+ "Position": {
+ "X": 181.8722,
+ "Y": 0.99176025,
+ "Z": -568.5359
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "UseItem",
+ "ItemId": 2003626,
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 2014161,
+ "Position": {
+ "X": 221.57617,
+ "Y": 0.99176025,
+ "Z": -610.7423
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "UseItem",
+ "ItemId": 2003626,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 2014162,
+ "Position": {
+ "X": 244.953,
+ "Y": 1.1138916,
+ "Z": -569.2684
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "UseItem",
+ "ItemId": 2003626,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048779,
+ "Position": {
+ "X": -231.15894,
+ "Y": 3.221878,
+ "Z": -453.17773
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048780,
+ "Position": {
+ "X": -103.868225,
+ "Y": 25.199324,
+ "Z": -525.41394
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": -95.05529,
+ "Y": 25.199324,
+ "Z": -523.8404
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Mount": true,
+ "SkipIf": [
+ "FlyingLocked"
+ ]
+ },
+ {
+ "DataId": 2014195,
+ "Position": {
+ "X": -314.2901,
+ "Y": 0.38146973,
+ "Z": -211.26117
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AfterInteraction",
+ "KillEnemyDataIds": [
+ 17656
+ ],
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048780,
+ "Position": {
+ "X": -103.868225,
+ "Y": 25.199324,
+ "Z": -525.41394
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048781,
+ "Position": {
+ "X": -213.09229,
+ "Y": 6.2771482,
+ "Z": -510.70422
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014196,
+ "Position": {
+ "X": 728.7556,
+ "Y": 8.010925,
+ "Z": -287.95306
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AfterInteraction",
+ "KillEnemyDataIds": [
+ 17657,
+ 17658
+ ],
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048781,
+ "Position": {
+ "X": -213.09229,
+ "Y": 6.2771482,
+ "Z": -510.70422
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048815,
+ "Position": {
+ "X": 127.03125,
+ "Y": 3.8414035,
+ "Z": -279.92682
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014165,
+ "Position": {
+ "X": 255.57336,
+ "Y": -0.015319824,
+ "Z": -350.57605
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 2014166,
+ "Position": {
+ "X": 198.74878,
+ "Y": -0.015319824,
+ "Z": -385.39716
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 2014164,
+ "Position": {
+ "X": 92.69849,
+ "Y": -0.015319824,
+ "Z": -409.26227
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048821,
+ "Position": {
+ "X": -39.35309,
+ "Y": 21.48717,
+ "Z": -69.44385
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048831,
+ "Position": {
+ "X": 252.76562,
+ "Y": 13.481276,
+ "Z": -579.30884
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1048786,
+ "Position": {
+ "X": -193.3471,
+ "Y": 6.277148,
+ "Z": -443.50348
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 1048787,
+ "Position": {
+ "X": -143.51111,
+ "Y": 9.842161,
+ "Z": -425.7115
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1048785,
+ "Position": {
+ "X": -121.26343,
+ "Y": 9.773314,
+ "Z": -551.1406
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048831,
+ "Position": {
+ "X": 252.76562,
+ "Y": 13.481276,
+ "Z": -579.30884
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048836,
+ "Position": {
+ "X": -578.91205,
+ "Y": 6.1739964,
+ "Z": -472.80084
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1048837,
+ "Position": {
+ "X": -613.2754,
+ "Y": 93.595924,
+ "Z": -476.95123
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": -607.3569,
+ "Y": 93.57029,
+ "Z": -472.15475
+ },
+ "StopDistance": 0.5,
+ "TerritoryId": 1188,
+ "InteractionType": "Emote",
+ "Emote": "pray"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "Position": {
+ "X": -585.36694,
+ "Y": 6.317712,
+ "Z": -463.53406
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "DisableNavmesh": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048836,
+ "Position": {
+ "X": -578.91205,
+ "Y": 6.1739964,
+ "Z": -472.80084
+ },
+ "StopDistance": 7,
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048783,
+ "Position": {
+ "X": -269.91687,
+ "Y": 5.9870257,
+ "Z": -431.47937
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1050705,
+ "Position": {
+ "X": -218.24988,
+ "Y": 0.4,
+ "Z": -41.519836
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AfterInteraction",
+ "KillEnemyDataIds": [
+ 17659
+ ],
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1050705,
+ "Position": {
+ "X": -218.24988,
+ "Y": 0.4,
+ "Z": -41.519836
+ },
+ "StopDistance": 7,
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048783,
+ "Position": {
+ "X": -269.91687,
+ "Y": 5.9870257,
+ "Z": -431.47937
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1050707,
+ "Position": {
+ "X": -183.73395,
+ "Y": 10.893587,
+ "Z": -584.2832
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014172,
+ "Position": {
+ "X": -70.96979,
+ "Y": 6.515503,
+ "Z": -496.2692
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": 623.9169,
+ "Y": 46.050114,
+ "Z": -526.32715
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Fly": true,
+ "SkipIf": [
+ "FlyingLocked"
+ ]
+ },
+ {
+ "DataId": 2014173,
+ "Position": {
+ "X": 670.5576,
+ "Y": 42.923584,
+ "Z": -515.55664
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1050707,
+ "Position": {
+ "X": -183.73395,
+ "Y": 10.893587,
+ "Z": -584.2832
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048784,
+ "Position": {
+ "X": -115.617676,
+ "Y": 25.086319,
+ "Z": -551.5984
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1048898,
+ "Position": {
+ "X": 524.1931,
+ "Y": 15.639493,
+ "Z": 5.4473877
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Many Fires",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1048897,
+ "Position": {
+ "X": 551.6593,
+ "Y": 12.326415,
+ "Z": -32.852783
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 1048896,
+ "Position": {
+ "X": 513.0541,
+ "Y": 15.9776535,
+ "Z": -54.36792
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048784,
+ "Position": {
+ "X": -115.617676,
+ "Y": 25.086319,
+ "Z": -551.5984
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051372,
+ "Position": {
+ "X": -183.79492,
+ "Y": 6.5185943,
+ "Z": -498.0392
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051373,
+ "Position": {
+ "X": -232.07446,
+ "Y": 10.1700535,
+ "Z": -395.68176
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051374,
+ "Position": {
+ "X": -229.02264,
+ "Y": 10.041226,
+ "Z": -396.2005
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048853,
+ "Position": {
+ "X": -431.99817,
+ "Y": 121.63345,
+ "Z": 304.3412
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014174,
+ "Position": {
+ "X": -756.89325,
+ "Y": 135.66797,
+ "Z": 83.78723
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 2014175,
+ "Position": {
+ "X": -786.3432,
+ "Y": 135.66797,
+ "Z": 121.9043
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048853,
+ "Position": {
+ "X": -431.99817,
+ "Y": 121.63345,
+ "Z": 304.3412
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048867,
+ "Position": {
+ "X": -489.0364,
+ "Y": 121.63345,
+ "Z": 368.00183
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": -298.1575,
+ "Y": 112.88461,
+ "Z": 684.6612
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Fly": true
+ },
+ {
+ "DataId": 1050708,
+ "Position": {
+ "X": -296.52863,
+ "Y": 112.804924,
+ "Z": 686.2439
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2014176,
+ "Position": {
+ "X": -127.15344,
+ "Y": 109.57495,
+ "Z": 523.7964
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "Position": {
+ "X": -298.1575,
+ "Y": 112.88461,
+ "Z": 684.6612
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Fly": true
+ },
+ {
+ "DataId": 1050708,
+ "Position": {
+ "X": -296.52863,
+ "Y": 112.804924,
+ "Z": 686.2439
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048867,
+ "Position": {
+ "X": -489.0364,
+ "Y": 121.63345,
+ "Z": 368.00183
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048854,
+ "Position": {
+ "X": -514.1833,
+ "Y": 121.63345,
+ "Z": 293.38513
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014177,
+ "Position": {
+ "X": -351.40002,
+ "Y": 109.57495,
+ "Z": 62.210938
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 2014178,
+ "Position": {
+ "X": -172.32019,
+ "Y": 109.54443,
+ "Z": 128.67932
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 2014179,
+ "Position": {
+ "X": 142.96167,
+ "Y": 109.57495,
+ "Z": 169.604
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 2014180,
+ "Position": {
+ "X": 214.86218,
+ "Y": 109.54443,
+ "Z": 138.68921
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048854,
+ "Position": {
+ "X": -514.1833,
+ "Y": 121.63345,
+ "Z": 293.38513
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048856,
+ "Position": {
+ "X": -499.6262,
+ "Y": 121.63344,
+ "Z": 347.70728
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": -74.84617,
+ "Y": 116.64437,
+ "Z": 590.74945
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo",
+ "Fly": true,
+ "SkipIf": [
+ "FlyingLocked"
+ ],
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ -32
+ ]
+ },
+ {
+ "DataId": 2014184,
+ "Position": {
+ "X": -5.1728516,
+ "Y": -6.729248,
+ "Z": 619.98914
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "DisableNavmesh": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 2014182,
+ "Position": {
+ "X": 112.93201,
+ "Y": -2.7314453,
+ "Z": 542.9617
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 2014183,
+ "Position": {
+ "X": 266.3462,
+ "Y": -1.9684448,
+ "Z": 498.58838
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048856,
+ "Position": {
+ "X": -499.6262,
+ "Y": 121.63344,
+ "Z": 347.70728
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Many Fires"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048857,
+ "Position": {
+ "X": -515.7092,
+ "Y": 122.40314,
+ "Z": 342.9159
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1048843,
+ "Position": {
+ "X": 588.7998,
+ "Y": 121.14124,
+ "Z": 176.98938
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Many Fires"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048857,
+ "Position": {
+ "X": -515.7092,
+ "Y": 122.40314,
+ "Z": 342.9159
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048858,
+ "Position": {
+ "X": -426.87115,
+ "Y": 121.63345,
+ "Z": 320.88184
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014185,
+ "Position": {
+ "X": -427.38995,
+ "Y": 122.91138,
+ "Z": 319.38647
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2014187,
+ "Position": {
+ "X": -548.2719,
+ "Y": 133.83679,
+ "Z": 698.1765
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1048880,
+ "Position": {
+ "X": -552.3613,
+ "Y": 133.86514,
+ "Z": 696.16235
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048858,
+ "Position": {
+ "X": -426.87115,
+ "Y": 121.63345,
+ "Z": 320.88184
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048843,
+ "Position": {
+ "X": 588.7998,
+ "Y": 121.14124,
+ "Z": 176.98938
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1048847,
+ "Position": {
+ "X": 615.2589,
+ "Y": 119.49003,
+ "Z": 197.58899
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
+ },
+ {
+ "DataId": 1048845,
+ "Position": {
+ "X": 568.7495,
+ "Y": 119.49004,
+ "Z": 159.53308
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 1048846,
+ "Position": {
+ "X": 512.2606,
+ "Y": 114.99095,
+ "Z": 183.85596
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1048844,
+ "Position": {
+ "X": 476.40186,
+ "Y": 119.9383,
+ "Z": 101.79285
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048843,
+ "Position": {
+ "X": 588.7998,
+ "Y": 121.14124,
+ "Z": 176.98938
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1048848,
+ "Position": {
+ "X": 621.51514,
+ "Y": 119.49004,
+ "Z": 175.00574
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": 444.93774,
+ "Y": 112.59213,
+ "Z": 206.74438
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "OverworldEnemies",
+ "ComplexCombatData": [
+ {
+ "DataId": 17241,
+ "RewardItemId": 2003643,
+ "RewardItemCount": 1,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ 16,
+ null,
+ null,
+ null
+ ]
+ }
+ ],
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ 16,
+ null,
+ null,
+ null
+ ],
+ "$": "16 0 16 0 0 0"
+ },
+ {
+ "Position": {
+ "X": -21.622044,
+ "Y": 109.937355,
+ "Z": 217.64447
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "OverworldEnemies",
+ "ComplexCombatData": [
+ {
+ "DataId": 17242,
+ "RewardItemId": 2003642,
+ "RewardItemCount": 1,
+ "CompletionQuestVariablesFlags": [
+ null,
+ 1,
+ null,
+ null,
+ null,
+ null
+ ]
+ }
+ ],
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ 1,
+ null,
+ null,
+ null,
+ null
+ ],
+ "$": "16 1 0 0 0 0"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1048848,
+ "Position": {
+ "X": 621.51514,
+ "Y": 119.49004,
+ "Z": 175.00574
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Many Fires",
+ "Fly": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1050714,
+ "Position": {
+ "X": 495.6587,
+ "Y": 113.678986,
+ "Z": 181.23132
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014189,
+ "Position": {
+ "X": 194.93396,
+ "Y": 109.4834,
+ "Z": 145.25061
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 2014191,
+ "Position": {
+ "X": 53.3302,
+ "Y": 109.17822,
+ "Z": 246.3263
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 2014190,
+ "Position": {
+ "X": -19.119629,
+ "Y": 109.57495,
+ "Z": 182.02478
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1050714,
+ "Position": {
+ "X": 495.6587,
+ "Y": 113.678986,
+ "Z": 181.23132
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Many Fires"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051243,
+ "Position": {
+ "X": -128.893,
+ "Y": 9.842161,
+ "Z": -416.95276
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051244,
+ "Position": {
+ "X": 224.01758,
+ "Y": 10.257621,
+ "Z": -570.64166
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2014281,
+ "Position": {
+ "X": 222.58337,
+ "Y": 10.72699,
+ "Z": -568.44434
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "Position": {
+ "X": 37.763844,
+ "Y": 1.8493831,
+ "Z": -555.61774
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "DataId": 2014284,
+ "Position": {
+ "X": -123.30823,
+ "Y": 9.84198,
+ "Z": -419.11957
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051243,
+ "Position": {
+ "X": -128.893,
+ "Y": 9.842161,
+ "Z": -416.95276
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051246,
+ "Position": {
+ "X": -127.45862,
+ "Y": 9.842161,
+ "Z": -419.6994
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "NextQuestId": 5083
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051243,
+ "Position": {
+ "X": -128.893,
+ "Y": 9.842161,
+ "Z": -416.95276
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051247,
+ "Position": {
+ "X": 341.66467,
+ "Y": 9.178029,
+ "Z": -213.15332
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2014198,
+ "Position": {
+ "X": 438.04077,
+ "Y": -0.015319824,
+ "Z": -395.43762
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AfterInteraction",
+ "KillEnemyDataIds": [
+ 17661
+ ],
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 2014286,
+ "Position": {
+ "X": 440.78735,
+ "Y": 1.1749268,
+ "Z": -397.1161
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051247,
+ "Position": {
+ "X": 341.66467,
+ "Y": 9.178029,
+ "Z": -213.15332
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051251,
+ "Position": {
+ "X": 654.7798,
+ "Y": 26.32866,
+ "Z": -490.95905
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "NextQuestId": 5084
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051252,
+ "Position": {
+ "X": 654.6272,
+ "Y": 26.32866,
+ "Z": -491.02008
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest",
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "Prompt": "TEXT_KINGZC204_05084_Q1_000_100",
+ "Answer": "TEXT_KINGZC204_05084_A2_000_100"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051253,
+ "Position": {
+ "X": -122.972534,
+ "Y": 9.842161,
+ "Z": -421.1643
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1048786,
+ "Position": {
+ "X": -193.3471,
+ "Y": 6.277148,
+ "Z": -443.50348
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1048783,
+ "Position": {
+ "X": -269.91687,
+ "Y": 5.9870257,
+ "Z": -431.47937
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 1048785,
+ "Position": {
+ "X": -121.26343,
+ "Y": 9.773314,
+ "Z": -551.1406
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1051255,
+ "Position": {
+ "X": -128.98456,
+ "Y": 9.84216,
+ "Z": -420.58447
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051258,
+ "Position": {
+ "X": 658.7167,
+ "Y": 5.2940493,
+ "Z": -335.07288
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051261,
+ "Position": {
+ "X": -130.9682,
+ "Y": 9.842161,
+ "Z": -416.58655
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051265,
+ "Position": {
+ "X": -444.78522,
+ "Y": 122.89024,
+ "Z": 342.8855
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1048850,
+ "Position": {
+ "X": -472.5567,
+ "Y": 121.77377,
+ "Z": 271.229
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1051263,
+ "Position": {
+ "X": -521.0193,
+ "Y": 121.63345,
+ "Z": 319.38647
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1051265,
+ "Position": {
+ "X": -444.78522,
+ "Y": 122.89024,
+ "Z": 342.8855
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051263,
+ "Position": {
+ "X": -521.0193,
+ "Y": 121.63345,
+ "Z": 319.38647
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "NextQuestId": 5087
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051263,
+ "Position": {
+ "X": -521.0193,
+ "Y": 121.63345,
+ "Z": 319.38647
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051266,
+ "Position": {
+ "X": 565.8197,
+ "Y": 115.49999,
+ "Z": 195.30017
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Many Fires"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": 627.93854,
+ "Y": 110.09355,
+ "Z": 334.26776
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "OverworldEnemies",
+ "KillEnemyDataIds": [
+ 17244
+ ],
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1051266,
+ "Position": {
+ "X": 565.8197,
+ "Y": 115.49999,
+ "Z": 195.30017
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Many Fires"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051267,
+ "Position": {
+ "X": -447.5014,
+ "Y": 122.95055,
+ "Z": 343.099
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire",
+ "NextQuestId": 5088
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051267,
+ "Position": {
+ "X": -447.5014,
+ "Y": 122.95055,
+ "Z": 343.099
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest",
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "Prompt": "TEXT_KINGZC304_05088_Q1_000_100",
+ "Answer": "TEXT_KINGZC304_05088_A2_000_100"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2014289,
+ "Position": {
+ "X": -422.50708,
+ "Y": 122.88086,
+ "Z": 338.88757
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Mount": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2014290,
+ "Position": {
+ "X": -519.4629,
+ "Y": 123.88794,
+ "Z": 252.61304
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "Position": {
+ "X": -759,
+ "Y": 129.30363,
+ "Z": 237.35704
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AutoOnEnterArea",
+ "KillEnemyDataIds": [
+ 17662
+ ],
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051268,
+ "Position": {
+ "X": -756.80176,
+ "Y": 129.29285,
+ "Z": 240.7721
+ },
+ "StopDistance": 7,
+ "TerritoryId": 1188,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "DataId": 1051269,
+ "Position": {
+ "X": -566.73535,
+ "Y": 133.78297,
+ "Z": 721.3396
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051267,
+ "Position": {
+ "X": -447.5014,
+ "Y": 122.95055,
+ "Z": 343.099
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest",
+ "NextQuestId": 5089,
+ "AetheryteShortcut": "Kozama'uka - Earthenshire"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1051271,
+ "Position": {
+ "X": -447.04358,
+ "Y": 122.95054,
+ "Z": 343.4348
+ },
+ "StopDistance": 5,
+ "TerritoryId": 1188,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1051273,
+ "Position": {
+ "X": 565.54517,
+ "Y": 115.5,
+ "Z": 193.22498
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Many Fires"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1051275,
+ "Position": {
+ "X": -645.7771,
+ "Y": 127.95559,
+ "Z": 661.76843
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Earthenshire",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1051270,
+ "Position": {
+ "X": -565.2705,
+ "Y": 133.77481,
+ "Z": 720.7294
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true,
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "Prompt": "TEXT_KINGZC401_05089_Q1_000_100",
+ "Answer": "TEXT_KINGZC401_05089_A1_000_100"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1051277,
+ "Position": {
+ "X": -647.0283,
+ "Y": 127.88751,
+ "Z": 660.57825
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "DataId": 1051278,
+ "Position": {
+ "X": -130.69354,
+ "Y": 9.84216,
+ "Z": -415.21326
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kozama'uka - Ok'hanu",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_KINGZC401_05089_Q100_000_100",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1051280,
+ "Position": {
+ "X": -125.20032,
+ "Y": 9.842161,
+ "Z": -418.08197
+ },
+ "TerritoryId": 1188,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
}
},
"CompletionQuestVariablesFlags": {
- "type": "array",
- "description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset",
- "items": {
- "type": [
- "integer",
- "null"
- ],
- "enum": [
- null,
- 1,
- 2,
- 4,
- 8,
- 16,
- 32,
- 64,
- 128,
- -1,
- -2,
- -4,
- -8,
- -16,
- -32,
- -64,
- -128
- ]
- },
- "minItems": 6,
- "maxItems": 6
+ "$ref": "#/$defs/CompletionFlags"
},
"DelaySecondsAtStart": {
"description": "Time to wait before starting",
"items": {
"type": "integer"
}
+ },
+ "ComplexCombatData": {
+ "description": "If multiple different enemies are supposed to be killed in a single quest step, this typically is handled via items",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "DataId": {
+ "description": "The enemy data id which is supposed to be killed",
+ "type": "integer"
+ },
+ "RewardItemId": {
+ "type": "integer"
+ },
+ "RewardItemCount": {
+ "type": "integer"
+ },
+ "CompletionQuestVariablesFlags": {
+ "$ref": "#/$defs/CompletionFlags"
+ }
+ },
+ "required": [
+ "DataId"
+ ]
+ }
}
},
"required": [
"Position",
- "EnemySpawnType",
- "KillEnemyDataIds"
+ "EnemySpawnType"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "KillEnemyDataIds"
+ ]
+ },
+ {
+ "required": [
+ "ComplexCombatData"
+ ]
+ }
]
}
},
"QuestSequence",
"Author"
],
- "additionalProperties": false
+ "additionalProperties": false,
+ "$defs": {
+ "CompletionFlags": {
+ "type": "array",
+ "description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset",
+ "items": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "enum": [
+ null,
+ 1,
+ 2,
+ 4,
+ 8,
+ 16,
+ 32,
+ 64,
+ 128,
+ -1,
+ -2,
+ -4,
+ -8,
+ -16,
+ -32,
+ -64,
+ -128
+ ]
+ },
+ "minItems": 6,
+ "maxItems": 6
+ }
+ }
}
--- /dev/null
+using System.Collections.Generic;
+
+namespace Questionable.Model.V1;
+
+public sealed class ComplexCombatData
+{
+ public uint DataId { get; set; }
+ public uint? RewardItemId { get; set; }
+ public int? RewardItemCount { get; set; }
+ public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>();
+}
public EEnemySpawnType? EnemySpawnType { get; set; }
public IList<uint> KillEnemyDataIds { get; set; } = new List<uint>();
+ public IList<ComplexCombatData> ComplexCombatData { get; set; } = new List<ComplexCombatData>();
public JumpDestination? JumpDestination { get; set; }
public uint? ContentFinderConditionId { get; set; }
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin.Services;
+using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.Game.Object;
using Microsoft.Extensions.Logging;
using Questionable.Controller.CombatModules;
+using Questionable.Controller.Utils;
+using Questionable.Model.V1;
namespace Questionable.Controller;
private readonly IObjectTable _objectTable;
private readonly ICondition _condition;
private readonly IClientState _clientState;
+ private readonly GameFunctions _gameFunctions;
private readonly ILogger<CombatController> _logger;
private CurrentFight? _currentFight;
public CombatController(IEnumerable<ICombatModule> combatModules, ITargetManager targetManager,
- IObjectTable objectTable, ICondition condition, IClientState clientState, ILogger<CombatController> logger)
+ IObjectTable objectTable, ICondition condition, IClientState clientState, GameFunctions gameFunctions,
+ ILogger<CombatController> logger)
{
_combatModules = combatModules.ToList();
_targetManager = targetManager;
_objectTable = objectTable;
_condition = condition;
_clientState = clientState;
+ _gameFunctions = gameFunctions;
_logger = logger;
}
private IGameObject? FindNextTarget()
{
+ if (_currentFight == null)
+ return null;
+
+ // check if any complex combat conditions are fulfilled
+ var complexCombatData = _currentFight.Data.ComplexCombatDatas;
+ if (complexCombatData.Count > 0)
+ {
+ for (int i = 0; i < complexCombatData.Count; ++i)
+ {
+ if (_currentFight.Data.CompletedComplexDatas.Contains(i))
+ continue;
+
+ var condition = complexCombatData[i];
+ if (condition.RewardItemId != null && condition.RewardItemCount != null)
+ {
+ unsafe
+ {
+ var inventoryManager = InventoryManager.Instance();
+ if (inventoryManager->GetInventoryItemCount(condition.RewardItemId.Value) >=
+ condition.RewardItemCount.Value)
+ {
+ _logger.LogInformation(
+ "Complex combat condition fulfilled: itemCount({ItemId}) >= {ItemCount}",
+ condition.RewardItemId, condition.RewardItemCount);
+ _currentFight.Data.CompletedComplexDatas.Add(i);
+ continue;
+ }
+ }
+ }
+
+ if (QuestWorkUtils.HasCompletionFlags(condition.CompletionQuestVariablesFlags))
+ {
+ var questWork = _gameFunctions.GetQuestEx(_currentFight.Data.QuestId);
+ if (questWork != null && QuestWorkUtils.MatchesQuestWork(condition.CompletionQuestVariablesFlags,
+ questWork.Value, false))
+ {
+ _logger.LogInformation("Complex combat condition fulfilled: QuestWork matches");
+ _currentFight.Data.CompletedComplexDatas.Add(i);
+ continue;
+ }
+ }
+ }
+ }
+
return _objectTable.Where(IsEnemyToKill).MinBy(x => (x.Position - _clientState.LocalPlayer!.Position).Length());
}
{
if (gameObject is IBattleChara battleChara)
{
- if (battleChara.IsDead)
- return false;
+ // TODO this works as somewhat of a delay between killing enemies if certain items/flags are checked
+ // but also delays killing the next enemy a little
+ if (_currentFight == null || _currentFight.Data.SpawnType != EEnemySpawnType.OverworldEnemies ||
+ _currentFight.Data.ComplexCombatDatas.Count == 0)
+ {
+ if (battleChara.IsDead)
+ return false;
+ }
if (!battleChara.IsTargetable)
return false;
if (battleChara.TargetObjectId == _clientState.LocalPlayer?.GameObjectId)
return true;
- if (_currentFight != null && _currentFight.Data.KillEnemyDataIds.Contains(battleChara.DataId))
- return true;
+ if (_currentFight != null)
+ {
+ var complexCombatData = _currentFight.Data.ComplexCombatDatas;
+ if (complexCombatData.Count >= 0)
+ {
+ for (int i = 0; i < complexCombatData.Count; ++i)
+ {
+ if (_currentFight.Data.CompletedComplexDatas.Contains(i))
+ continue;
+
+ if (complexCombatData[i].DataId == battleChara.DataId)
+ return true;
+ }
+ }
+ else
+ {
+ if (_currentFight.Data.KillEnemyDataIds.Contains(battleChara.DataId))
+ return true;
+ }
+ }
if (battleChara.StatusFlags.HasFlag(StatusFlags.Hostile))
{
public sealed class CombatData
{
- public required ReadOnlyCollection<uint> KillEnemyDataIds { get; init; }
+ public required ushort QuestId { get; init; }
+ public required EEnemySpawnType SpawnType { get; init; }
+ public required List<uint> KillEnemyDataIds { get; init; }
+ public required List<ComplexCombatData> ComplexCombatDatas { get; init; }
+
+ public HashSet<int> CompletedComplexDatas { get; } = new();
}
}
private readonly QuestController _questController;
private readonly MovementController _movementController;
private readonly QuestRegistry _questRegistry;
- private readonly QuestData _questData;
private readonly ConfigWindow _configWindow;
private readonly DebugOverlay _debugOverlay;
private readonly QuestWindow _questWindow;
+ private readonly QuestSelectionWindow _questSelectionWindow;
+ private readonly ITargetManager _targetManager;
public CommandHandler(ICommandManager commandManager, IChatGui chatGui, QuestController questController,
- MovementController movementController, QuestRegistry questRegistry, QuestData questData,
- ConfigWindow configWindow, DebugOverlay debugOverlay, QuestWindow questWindow)
+ MovementController movementController, QuestRegistry questRegistry,
+ ConfigWindow configWindow, DebugOverlay debugOverlay, QuestWindow questWindow,
+ QuestSelectionWindow questSelectionWindow, ITargetManager targetManager)
{
_commandManager = commandManager;
_chatGui = chatGui;
_questController = questController;
_movementController = movementController;
_questRegistry = questRegistry;
- _questData = questData;
_configWindow = configWindow;
_debugOverlay = debugOverlay;
_questWindow = questWindow;
+ _questSelectionWindow = questSelectionWindow;
+ _targetManager = targetManager;
_commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand)
{
break;
case "which":
- _questData.ShowQuestsIssuedByTarget();
+ _questSelectionWindow.Open(_targetManager.Target);
break;
default:
return;
}
+ // this is 'Daily Quests' for tribal quests, but not set for normal selections
+ string? title = addonSelectIconString->AtkValues[0].ReadAtkString();
+
var currentQuest = _questController.StartedQuest;
- if (currentQuest != null && actualPrompt == null)
+ if (currentQuest != null && (actualPrompt == null || title != null))
+ {
+ _logger.LogInformation("Checking if current quest {Name} is on the list", currentQuest.Quest.Info.Name);
+ if (CheckQuestSelection(addonSelectIconString, currentQuest.Quest, answers))
+ return;
+ }
+
+ var nextQuest = _questController.NextQuest;
+ if (nextQuest != null && (actualPrompt == null || title != null))
+ {
+ _logger.LogInformation("Checking if next quest {Name} is on the list", nextQuest.Quest.Info.Name);
+ if (CheckQuestSelection(addonSelectIconString, nextQuest.Quest, answers))
+ return;
+ }
+ }
+
+ private unsafe bool CheckQuestSelection(AddonSelectIconString* addonSelectIconString, Quest quest, List<string?> answers)
+ {
+ // it is possible for this to be a quest selection
+ string questName = quest.Info.Name;
+ int questSelection = answers.FindIndex(x => GameStringEquals(questName, x));
+ if (questSelection >= 0)
{
- // it is possible for this to be a quest selection
- string questName = currentQuest.Quest.Info.Name;
- int questSelection = answers.FindIndex(x => GameStringEquals(questName, x));
- if (questSelection >= 0)
- addonSelectIconString->AtkUnitBase.FireCallbackInt(questSelection);
+ addonSelectIconString->AtkUnitBase.FireCallbackInt(questSelection);
+ return true;
}
+
+ return false;
}
public static unsafe List<string?> GetChoices(AddonSelectIconString* addonSelectIconString)
else if (_nextQuest != null)
{
// if the quest is accepted, we no longer track it
- if (_gameFunctions.IsQuestAcceptedOrComplete(_nextQuest.Quest.QuestId))
+ bool canUseNextQuest;
+ if (_nextQuest.Quest.Info.IsRepeatable)
+ canUseNextQuest = !_gameFunctions.IsQuestAccepted(_nextQuest.Quest.QuestId);
+ else
+ canUseNextQuest = !_gameFunctions.IsQuestAcceptedOrComplete(_nextQuest.Quest.QuestId);
+
+ if (!canUseNextQuest)
{
_logger.LogInformation("Next quest {QuestId} accepted or completed", _nextQuest.Quest.QuestId);
return [unmount, CreateTask(quest, sequence, step)];
case EEnemySpawnType.OverworldEnemies:
- // TODO currently not handled
- return [unmount];
+ return [unmount, CreateTask(quest, sequence, step)];
default:
throw new ArgumentOutOfRangeException(nameof(step), $"Unknown spawn type {step.EnemySpawnType}");
public ITask CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
{
+ ArgumentNullException.ThrowIfNull(step.EnemySpawnType);
+
bool isLastStep = sequence.Steps.Last() == step;
return serviceProvider.GetRequiredService<HandleCombat>()
- .With(quest.QuestId, isLastStep, step.KillEnemyDataIds, step.CompletionQuestVariablesFlags);
+ .With(quest.QuestId, isLastStep, step.EnemySpawnType.Value, step.KillEnemyDataIds,
+ step.CompletionQuestVariablesFlags, step.ComplexCombatData);
}
}
internal sealed class HandleCombat(CombatController combatController, GameFunctions gameFunctions) : ITask
{
- private ushort _questId;
private bool _isLastStep;
private CombatController.CombatData _combatData = null!;
private IList<short?> _completionQuestVariableFlags = null!;
- public ITask With(ushort questId, bool isLastStep, IList<uint> killEnemyDataIds,
- IList<short?> completionQuestVariablesFlags)
+ public ITask With(ushort questId, bool isLastStep, EEnemySpawnType enemySpawnType, IList<uint> killEnemyDataIds,
+ IList<short?> completionQuestVariablesFlags, IList<ComplexCombatData> complexCombatData)
{
- _questId = questId;
_isLastStep = isLastStep;
_combatData = new CombatController.CombatData
{
- KillEnemyDataIds = killEnemyDataIds.AsReadOnly(),
+ QuestId = questId,
+ SpawnType = enemySpawnType,
+ KillEnemyDataIds = killEnemyDataIds.ToList(),
+ ComplexCombatDatas = complexCombatData.ToList(),
};
_completionQuestVariableFlags = completionQuestVariablesFlags;
return this;
// if our quest step has any completion flags, we need to check if they are set
if (QuestWorkUtils.HasCompletionFlags(_completionQuestVariableFlags))
{
- var questWork = gameFunctions.GetQuestEx(_questId);
+ var questWork = gameFunctions.GetQuestEx(_combatData.QuestId);
if (questWork == null)
return ETaskResult.StillRunning;
var character = (Character*)(clientState.LocalPlayer?.Address ?? 0);
if (character != null)
{
- logger.LogInformation("Attempting to land");
- return ActionManager.Instance()->UseAction(ActionType.Mount, character->Mount.MountId);
+ if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23) == 0)
+ {
+ logger.LogInformation("Attempting to land");
+ return ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23);
+ }
}
return false;
WindowSystem windowSystem,
QuestWindow questWindow,
DebugOverlay debugOverlay,
- ConfigWindow configWindow)
+ ConfigWindow configWindow,
+ QuestSelectionWindow questSelectionWindow)
{
_pluginInterface = pluginInterface;
_framework = framework;
_windowSystem.AddWindow(questWindow);
_windowSystem.AddWindow(configWindow);
_windowSystem.AddWindow(debugOverlay);
+ _windowSystem.AddWindow(questSelectionWindow);
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_pluginInterface.UiBuilder.OpenMainUi += _questWindow.Toggle;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
-using Dalamud.Game.ClientState.Objects;
-using Dalamud.Game.Text;
using Dalamud.Plugin.Services;
-using FFXIVClientStructs.FFXIV.Client.UI;
-using LLib.GameUI;
-using Questionable.Controller;
using Questionable.Model;
using Quest = Lumina.Excel.GeneratedSheets.Quest;
internal sealed class QuestData
{
- private readonly ITargetManager _targetManager;
- private readonly IChatGui _chatGui;
- private readonly IGameGui _gameGui;
-
private readonly ImmutableDictionary<ushort, QuestInfo> _quests;
- public QuestData(IDataManager dataManager, ITargetManager targetManager, IChatGui chatGui, IGameGui gameGui)
+ public QuestData(IDataManager dataManager)
{
- _targetManager = targetManager;
- _chatGui = chatGui;
- _gameGui = gameGui;
-
_quests = dataManager.GetExcelSheet<Quest>()!
.Where(x => x.RowId > 0)
.Where(x => x.IssuerLocation.Row > 0)
}
public bool IsIssuerOfAnyQuest(uint targetId) => _quests.Values.Any(x => x.IssuerDataId == targetId);
-
- public unsafe void ShowQuestsIssuedByTarget()
- {
- var targetId = _targetManager.Target?.DataId;
- if (targetId == null)
- {
- _chatGui.PrintError("[Questionable] No target selected.");
- return;
- }
-
- List<QuestInfo> quests = GetAllByIssuerDataId(targetId.Value);
-
- if (_gameGui.TryGetAddonByName<AddonSelectIconString>("SelectIconString", out var addonSelectIconString))
- {
- var answers = GameUiController.GetChoices(addonSelectIconString);
- quests = quests.Where(x => answers.Any(y => GameUiController.GameStringEquals(x.Name, y))).ToList();
-
- _chatGui.Print($"{quests.Count} quest(s) currently offered by target {_targetManager.Target?.Name}:");
- }
- else
- {
- _chatGui.Print($"{quests.Count} quest(s) issued by target {_targetManager.Target?.Name}:");
- }
-
- foreach (QuestInfo quest in quests)
- _chatGui.Print($" {quest.QuestId}_{quest.SimplifiedName}");
- }
}
public bool IsReadyToAcceptQuest(ushort questId)
{
- if (IsQuestAcceptedOrComplete(questId))
- return false;
+ _questRegistry.TryGetQuest(questId, out var quest);
+ if (quest is { Info.IsRepeatable: true })
+ {
+ if (IsQuestAccepted(questId))
+ return false;
+ }
+ else
+ {
+ if (IsQuestAcceptedOrComplete(questId))
+ return false;
+ }
// if we're not at a high enough level to continue, we also ignore it
var currentLevel = _clientState.LocalPlayer?.Level ?? 0;
- if (currentLevel != 0 &&
- _questRegistry.TryGetQuest(questId, out Quest? quest) &&
- quest.Info.Level > currentLevel)
+ if (currentLevel != 0 && quest != null && quest.Info.Level > currentLevel)
return false;
return true;
public bool IsQuestAcceptedOrComplete(ushort questId)
{
- if (QuestManager.IsQuestComplete(questId))
- return true;
+ return QuestManager.IsQuestComplete(questId) || IsQuestAccepted(questId);
+ }
+ public bool IsQuestAccepted(ushort questId)
+ {
QuestManager* questManager = QuestManager.Instance();
return questManager->IsQuestAccepted(questId);
}
Name = quest.Name.ToString();
Level = quest.ClassJobLevel0;
IssuerDataId = quest.IssuerStart;
+ IsRepeatable = quest.IsRepeatable;
}
public ushort QuestId { get; }
public string Name { get; }
public ushort Level { get; }
public uint IssuerDataId { get; }
+ public bool IsRepeatable { get; }
public string SimplifiedName => Name
.TrimStart(SeIconChar.QuestSync.ToIconChar(), SeIconChar.QuestRepeatable.ToIconChar(), ' ');
<Project Sdk="Dalamud.NET.Sdk/9.0.2">
<PropertyGroup>
- <Version>1.6</Version>
+ <Version>1.7</Version>
<OutputPath>dist</OutputPath>
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
</PropertyGroup>
serviceCollection.AddSingleton<QuestWindow>();
serviceCollection.AddSingleton<ConfigWindow>();
serviceCollection.AddSingleton<DebugOverlay>();
+ serviceCollection.AddSingleton<QuestSelectionWindow>();
+
serviceCollection.AddSingleton<CommandHandler>();
serviceCollection.AddSingleton<DalamudInitializer>();
--- /dev/null
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Numerics;
+using Dalamud.Game.ClientState.Objects.Types;
+using Dalamud.Interface;
+using Dalamud.Interface.Colors;
+using Dalamud.Interface.Components;
+using Dalamud.Interface.Utility.Raii;
+using Dalamud.Plugin;
+using Dalamud.Plugin.Services;
+using FFXIVClientStructs.FFXIV.Client.UI;
+using ImGuiNET;
+using LLib.GameUI;
+using LLib.ImGui;
+using Questionable.Controller;
+using Questionable.Data;
+using Questionable.Model;
+
+namespace Questionable.Windows;
+
+internal sealed class QuestSelectionWindow : LWindow
+{
+ private const string WindowId = "###QuestionableQuestSelection";
+ private readonly QuestData _questData;
+ private readonly IGameGui _gameGui;
+ private readonly IChatGui _chatGui;
+ private readonly GameFunctions _gameFunctions;
+ private readonly QuestController _questController;
+ private readonly QuestRegistry _questRegistry;
+ private readonly IDalamudPluginInterface _pluginInterface;
+
+ private List<QuestInfo> _quests = [];
+ private List<QuestInfo> _offeredQuests = [];
+ private bool _onlyAvailableQuests = true;
+
+ public QuestSelectionWindow(QuestData questData, IGameGui gameGui, IChatGui chatGui, GameFunctions gameFunctions,
+ QuestController questController, QuestRegistry questRegistry, IDalamudPluginInterface pluginInterface)
+ : base($"Quest Selection{WindowId}")
+ {
+ _questData = questData;
+ _gameGui = gameGui;
+ _chatGui = chatGui;
+ _gameFunctions = gameFunctions;
+ _questController = questController;
+ _questRegistry = questRegistry;
+ _pluginInterface = pluginInterface;
+
+ Size = new Vector2(500, 200);
+ SizeCondition = ImGuiCond.Once;
+ SizeConstraints = new WindowSizeConstraints
+ {
+ MinimumSize = new Vector2(500, 200),
+ };
+ }
+
+ public uint TargetId { get; private set; }
+ public string TargetName { get; private set; } = string.Empty;
+
+ public unsafe void Open(IGameObject? gameObject)
+ {
+ if (gameObject != null)
+ {
+ TargetId = gameObject.DataId;
+ TargetName = gameObject.Name.ToString();
+ WindowName = $"Quests starting with {TargetName} [{TargetId}]{WindowId}";
+
+ _quests = _questData.GetAllByIssuerDataId(TargetId);
+ if (_gameGui.TryGetAddonByName<AddonSelectIconString>("SelectIconString", out var addonSelectIconString))
+ {
+ var answers = GameUiController.GetChoices(addonSelectIconString);
+ _offeredQuests = _quests
+ .Where(x => answers.Any(y => GameUiController.GameStringEquals(x.Name, y)))
+ .ToList();
+ }
+ else
+ _offeredQuests = [];
+ }
+ else
+ {
+ _quests = [];
+ _offeredQuests = [];
+ }
+
+ IsOpen = _quests.Count > 0;
+ }
+
+ public override void Draw()
+ {
+ if (_offeredQuests.Count != 0)
+ ImGui.Checkbox("Only show quests currently offered", ref _onlyAvailableQuests);
+
+ using var table = ImRaii.Table("QuestSelection", 4, ImGuiTableFlags.Borders | ImGuiTableFlags.ScrollY);
+ if (!table)
+ {
+ ImGui.Text("Not table");
+ return;
+ }
+
+ ImGui.TableSetupColumn("Id", ImGuiTableColumnFlags.WidthFixed, 50);
+ ImGui.TableSetupColumn("", ImGuiTableColumnFlags.WidthFixed, 18);
+ ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.None, 200);
+ ImGui.TableSetupColumn("Actions", ImGuiTableColumnFlags.WidthFixed, 100);
+ ImGui.TableHeadersRow();
+
+ foreach (QuestInfo quest in (_offeredQuests.Count != 0 && _onlyAvailableQuests) ? _offeredQuests : _quests)
+ {
+ ImGui.TableNextRow();
+
+ string questId = quest.QuestId.ToString(CultureInfo.InvariantCulture);
+ bool isKnownQuest = _questRegistry.TryGetQuest(quest.QuestId, out var knownQuest);
+
+ if (ImGui.TableNextColumn())
+ {
+ ImGui.AlignTextToFramePadding();
+ ImGui.TextUnformatted(questId);
+ }
+
+ if (ImGui.TableNextColumn())
+ {
+ ImGui.AlignTextToFramePadding();
+ using var font = _pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push();
+
+ FontAwesomeIcon icon;
+ Vector4 color;
+ if (_gameFunctions.IsQuestAccepted(quest.QuestId))
+ {
+ color = ImGuiColors.DalamudYellow;
+ icon = FontAwesomeIcon.Running;
+ }
+ else if (_gameFunctions.IsQuestAcceptedOrComplete(quest.QuestId))
+ {
+ color = ImGuiColors.ParsedGreen;
+ icon = FontAwesomeIcon.Check;
+ }
+ else
+ {
+ color = ImGuiColors.DalamudRed;
+ icon = FontAwesomeIcon.Times;
+ }
+
+ if (isKnownQuest)
+ ImGui.TextColored(color, icon.ToIconString());
+ else
+ ImGui.TextColored(ImGuiColors.DalamudGrey, icon.ToIconString());
+ }
+
+ if (ImGui.TableNextColumn())
+ {
+ ImGui.AlignTextToFramePadding();
+ ImGui.TextUnformatted(quest.Name);
+ }
+
+ if (ImGui.TableNextColumn())
+ {
+ using var id = ImRaii.PushId(questId);
+
+ bool copy = ImGuiComponents.IconButton(FontAwesomeIcon.Copy);
+ if (ImGui.IsItemHovered())
+ ImGui.SetTooltip("Copy as file name");
+ if (copy)
+ CopyToClipboard(quest, true);
+ else if (ImGui.IsItemClicked(ImGuiMouseButton.Right))
+ CopyToClipboard(quest, false);
+
+ ImGui.SameLine();
+
+ if (knownQuest != null && !_gameFunctions.IsQuestAccepted(quest.QuestId) &&
+ (quest.IsRepeatable || !_gameFunctions.IsQuestAcceptedOrComplete(quest.QuestId)))
+ {
+ ImGui.BeginDisabled(_questController.NextQuest != null || _questController.SimulatedQuest != null);
+
+ bool startNextQuest = ImGuiComponents.IconButton(FontAwesomeIcon.Play);
+ if (ImGui.IsItemHovered())
+ ImGui.SetTooltip("Start as next quest");
+ if (startNextQuest)
+ {
+ _questController.SetNextQuest(knownQuest);
+ _questController.ExecuteNextStep(true);
+ }
+
+ ImGui.SameLine();
+
+ bool setNextQuest = ImGuiComponents.IconButton(FontAwesomeIcon.AngleDoubleRight);
+ if (ImGui.IsItemHovered())
+ ImGui.SetTooltip("Set as next quest");
+ if (setNextQuest)
+ _questController.SetNextQuest(knownQuest);
+
+ ImGui.EndDisabled();
+ }
+ }
+ }
+ }
+
+ private void CopyToClipboard(QuestInfo quest, bool suffix)
+ {
+ string fileName = $"{quest.QuestId}_{quest.SimplifiedName}{(suffix ? ".json" : "")}";
+ ImGui.SetClipboardText(fileName);
+ _chatGui.Print($"Copied '{fileName}' to clipboard");
+ }
+}
private readonly QuestData _questData;
private readonly TerritoryData _territoryData;
private readonly ICondition _condition;
+ private readonly IGameGui _gameGui;
+ private readonly QuestSelectionWindow _questSelectionWindow;
private readonly ILogger<QuestWindow> _logger;
public QuestWindow(IDalamudPluginInterface pluginInterface,
QuestData questData,
TerritoryData territoryData,
ICondition condition,
+ IGameGui gameGui,
+ QuestSelectionWindow questSelectionWindow,
ILogger<QuestWindow> logger)
: base("Questionable###Questionable", ImGuiWindowFlags.AlwaysAutoResize)
{
_questData = questData;
_territoryData = territoryData;
_condition = condition;
+ _gameGui = gameGui;
+ _questSelectionWindow = questSelectionWindow;
_logger = logger;
#if DEBUG
ImGui.SameLine();
ImGui.BeginDisabled(!_questData.IsIssuerOfAnyQuest(_targetManager.Target.DataId));
- bool showQuests = ImGuiComponents.IconButton(FontAwesomeIcon.Bars);
+ bool showQuests = ImGuiComponents.IconButton(FontAwesomeIcon.MapMarkerAlt);
if (ImGui.IsItemHovered())
ImGui.SetTooltip("Show all Quests starting with your current target.");
if (showQuests)
- _questData.ShowQuestsIssuedByTarget();
+ _questSelectionWindow.Open(_targetManager.Target);
+
ImGui.EndDisabled();
ImGui.SameLine();
ImGui.SameLine();
- ImGuiComponents.IconButton(FontAwesomeIcon.Copy);
+ bool copy = ImGuiComponents.IconButton(FontAwesomeIcon.Copy);
if (ImGui.IsItemHovered())
ImGui.SetTooltip("Left click: Copy target position as JSON.\nRight click: Copy target position as C# code.");
- if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
+ if (copy)
{
string interactionType = gameObject->NamePlateIconId switch
{
}
else
{
- ImGuiComponents.IconButton(FontAwesomeIcon.Copy);
+ bool copy = ImGuiComponents.IconButton(FontAwesomeIcon.Copy);
if (ImGui.IsItemHovered())
- ImGui.SetTooltip("Left click: Copy target position as JSON.\nRight click: Copy target position as C# code.");
- if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
+ ImGui.SetTooltip("Left click: Copy your position as JSON.\nRight click: Copy your position as C# code.");
+ if (copy)
{
ImGui.SetClipboardText($$"""
"Position": {
$"new({position.X}f, {position.Y}f, {position.Z}f)"));
}
}
+
+ ulong hoveredItemId = _gameGui.HoveredItem;
+ if (hoveredItemId != 0)
+ {
+ ImGui.Separator();
+ ImGui.Text($"Hovered Item: {hoveredItemId}");
+ }
}
private unsafe void DrawQuickAccessButtons()