--- /dev/null
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+ "Author": "liza",
+ "TerritoryId": 613,
+ "AetheryteShortcut": "Ruby Sea - Onokoro",
+ "Groups": [
+ {
+ "Nodes": [
+ {
+ "DataId": 32140,
+ "Locations": [
+ {
+ "Position": {
+ "X": 210.5032,
+ "Y": 28.51213,
+ "Z": 718.0732
+ },
+ "MinimumAngle": 210,
+ "MaximumAngle": 325
+ },
+ {
+ "Position": {
+ "X": 202.0474,
+ "Y": 30.18633,
+ "Z": 700.0951
+ },
+ "MinimumAngle": 160,
+ "MaximumAngle": 295
+ },
+ {
+ "Position": {
+ "X": 195.6331,
+ "Y": 33.43727,
+ "Z": 695.2228
+ },
+ "MinimumAngle": 150,
+ "MaximumAngle": 235
+ }
+ ]
+ },
+ {
+ "DataId": 32139,
+ "Locations": [
+ {
+ "Position": {
+ "X": 208.3533,
+ "Y": 28.65312,
+ "Z": 706.8864
+ },
+ "MinimumAngle": 180,
+ "MaximumAngle": 250
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Nodes": [
+ {
+ "DataId": 32135,
+ "Locations": [
+ {
+ "Position": {
+ "X": 67.65472,
+ "Y": 25.89518,
+ "Z": 652.348
+ },
+ "MinimumAngle": -105,
+ "MaximumAngle": 15
+ }
+ ]
+ },
+ {
+ "DataId": 32136,
+ "Locations": [
+ {
+ "Position": {
+ "X": 41.55281,
+ "Y": 27.65364,
+ "Z": 654.9735
+ },
+ "MinimumAngle": -115,
+ "MaximumAngle": 35
+ },
+ {
+ "Position": {
+ "X": 52.98101,
+ "Y": 27.03981,
+ "Z": 652.5334
+ },
+ "MinimumAngle": -45,
+ "MaximumAngle": 55
+ },
+ {
+ "Position": {
+ "X": 71.80375,
+ "Y": 26.55341,
+ "Z": 644.8627
+ },
+ "MinimumAngle": 205,
+ "MaximumAngle": 335
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+ "Author": "liza",
+ "TerritoryId": 961,
+ "AetheryteShortcut": "Elpis - Poieten Oikos",
+ "Groups": [
+ {
+ "Nodes": [
+ {
+ "DataId": 33938,
+ "Locations": [
+ {
+ "Position": {
+ "X": 44.65063,
+ "Y": 100.2818,
+ "Z": -531.6971
+ },
+ "MinimumAngle": 150,
+ "MaximumAngle": 310
+ }
+ ]
+ },
+ {
+ "DataId": 33939,
+ "Locations": [
+ {
+ "Position": {
+ "X": 33.19277,
+ "Y": 104.5029,
+ "Z": -555.932
+ },
+ "MinimumAngle": 190,
+ "MaximumAngle": 350
+ },
+ {
+ "Position": {
+ "X": 65.9342,
+ "Y": 97.38677,
+ "Z": -524.9155
+ },
+ "MinimumAngle": 125,
+ "MaximumAngle": 295
+ },
+ {
+ "Position": {
+ "X": 74.52164,
+ "Y": 98.45871,
+ "Z": -489.864
+ },
+ "MinimumAngle": 165,
+ "MaximumAngle": 300
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Nodes": [
+ {
+ "DataId": 33941,
+ "Locations": [
+ {
+ "Position": {
+ "X": 279.4078,
+ "Y": 101.9103,
+ "Z": -511.9555
+ },
+ "MinimumAngle": 80,
+ "MaximumAngle": 215
+ },
+ {
+ "Position": {
+ "X": 265.2476,
+ "Y": 100.4918,
+ "Z": -491.8746
+ },
+ "MinimumAngle": 110,
+ "MaximumAngle": 180
+ },
+ {
+ "Position": {
+ "X": 290.6152,
+ "Y": 102.41,
+ "Z": -549.2336
+ },
+ "MinimumAngle": 40,
+ "MaximumAngle": 185
+ }
+ ]
+ },
+ {
+ "DataId": 33940,
+ "Locations": [
+ {
+ "Position": {
+ "X": 288.9601,
+ "Y": 101.2474,
+ "Z": -520.9278
+ },
+ "MinimumAngle": 35,
+ "MaximumAngle": 145
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Nodes": [
+ {
+ "DataId": 33937,
+ "Locations": [
+ {
+ "Position": {
+ "X": 124.7882,
+ "Y": 105.6518,
+ "Z": -712.3575
+ },
+ "MinimumAngle": -45,
+ "MaximumAngle": 70
+ },
+ {
+ "Position": {
+ "X": 94.71277,
+ "Y": 105.52,
+ "Z": -696.7798
+ },
+ "MinimumAngle": -60,
+ "MaximumAngle": 80
+ },
+ {
+ "Position": {
+ "X": 172.8746,
+ "Y": 102.9022,
+ "Z": -700.0879
+ },
+ "MinimumAngle": -50,
+ "MaximumAngle": 125
+ }
+ ]
+ },
+ {
+ "DataId": 33936,
+ "Locations": [
+ {
+ "Position": {
+ "X": 156.3894,
+ "Y": 103.6386,
+ "Z": -707.1092
+ },
+ "MinimumAngle": -85,
+ "MaximumAngle": 60
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
- "Author": [],
+ "Author": "liza",
"TerritoryId": 958,
"AetheryteShortcut": "Garlemald - Camp Broken Glass",
"Groups": [
--- /dev/null
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+ "Author": "liza",
+ "TerritoryId": 956,
+ "AetheryteShortcut": "Labyrinthos - Archeion",
+ "Groups": [
+ {
+ "Nodes": [
+ {
+ "DataId": 33902,
+ "Locations": [
+ {
+ "Position": {
+ "X": 88.60914,
+ "Y": 73.62239,
+ "Z": -402.4773
+ },
+ "MinimumAngle": 80,
+ "MaximumAngle": 235
+ }
+ ]
+ },
+ {
+ "DataId": 33903,
+ "Locations": [
+ {
+ "Position": {
+ "X": 85.61829,
+ "Y": 73.2991,
+ "Z": -400.5821
+ },
+ "MinimumAngle": 35,
+ "MaximumAngle": 225
+ },
+ {
+ "Position": {
+ "X": 93.23958,
+ "Y": 73.67628,
+ "Z": -393.219
+ },
+ "MinimumAngle": -80,
+ "MaximumAngle": 80
+ },
+ {
+ "Position": {
+ "X": 98.62136,
+ "Y": 74.0167,
+ "Z": -394.248
+ },
+ "MinimumAngle": -140,
+ "MaximumAngle": 15
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Nodes": [
+ {
+ "DataId": 33905,
+ "Locations": [
+ {
+ "Position": {
+ "X": 120.6405,
+ "Y": 84.99234,
+ "Z": -556.7947
+ },
+ "MinimumAngle": -10,
+ "MaximumAngle": 155
+ },
+ {
+ "Position": {
+ "X": 90.8064,
+ "Y": 80.4303,
+ "Z": -549.3706
+ },
+ "MinimumAngle": -45,
+ "MaximumAngle": 90
+ },
+ {
+ "Position": {
+ "X": 108.5405,
+ "Y": 82.52325,
+ "Z": -552.4589
+ },
+ "MinimumAngle": -115,
+ "MaximumAngle": 65
+ }
+ ]
+ },
+ {
+ "DataId": 33904,
+ "Locations": [
+ {
+ "Position": {
+ "X": 102.0981,
+ "Y": 81.4679,
+ "Z": -550.4082
+ },
+ "MinimumAngle": -90,
+ "MaximumAngle": 75
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Nodes": [
+ {
+ "DataId": 33901,
+ "Locations": [
+ {
+ "Position": {
+ "X": 2.243042,
+ "Y": 70.71661,
+ "Z": -453.1277
+ },
+ "MinimumAngle": 85,
+ "MaximumAngle": 215
+ },
+ {
+ "Position": {
+ "X": -18.2041,
+ "Y": 69.83583,
+ "Z": -464.331
+ },
+ "MinimumAngle": -120,
+ "MaximumAngle": 50
+ },
+ {
+ "Position": {
+ "X": 1.110765,
+ "Y": 71.56169,
+ "Z": -477.9129
+ },
+ "MinimumAngle": -135,
+ "MaximumAngle": 55
+ }
+ ]
+ },
+ {
+ "DataId": 33900,
+ "Locations": [
+ {
+ "Position": {
+ "X": -8.431995,
+ "Y": 70.52238,
+ "Z": -470.8453
+ },
+ "MinimumAngle": -125,
+ "MaximumAngle": 55
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
- "Author": [],
+ "Author": "liza",
"TerritoryId": 959,
+ "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
"Groups": [
{
"Nodes": [
]
}
]
-}
\ No newline at end of file
+}
]
}
]
-}
\ No newline at end of file
+}
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
- "Author": [],
+ "Author": "liza",
"TerritoryId": 1187,
"AetheryteShortcut": "Urqopacha - Wachunpelo",
"Groups": [
]
}
]
-}
\ No newline at end of file
+}
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
- "Author": [],
+ "Author": "liza",
"TerritoryId": 1187,
"AetheryteShortcut": "Urqopacha - Wachunpelo",
"Groups": [
]
}
]
-}
\ No newline at end of file
+}
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
- "Author": [],
+ "Author": "liza",
"TerritoryId": 1187,
"AetheryteShortcut": "Urqopacha - Wachunpelo",
"Groups": [
]
}
]
-}
\ No newline at end of file
+}
"InteractionType": "AcceptQuest"
}
]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2011719,
+ "Position": {
+ "X": -102.1897,
+ "Y": -7.0039062,
+ "Z": -59.92218
+ },
+ "TerritoryId": 628,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kugane",
+ "AethernetShortcut": [
+ "[Kugane] Aetheryte Plaza",
+ "[Kugane] Shiokaze Hostelry"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1038506,
+ "Position": {
+ "X": -142.2904,
+ "Y": -4.7500057,
+ "Z": 199.6643
+ },
+ "TerritoryId": 628,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Kugane] Kogane Dori Markets",
+ "[Kugane] Pier #1"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1038507,
+ "Position": {
+ "X": 52.750366,
+ "Y": 8.02,
+ "Z": 152.81909
+ },
+ "TerritoryId": 628,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Kugane] Pier #1",
+ "[Kugane] Thavnairian Consulate"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 2011720,
+ "Position": {
+ "X": 129.5033,
+ "Y": 24.979004,
+ "Z": 15.701477
+ },
+ "TerritoryId": 628,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Kugane] Thavnairian Consulate",
+ "[Kugane] The Ruby Bazaar"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "DataId": 1038508,
+ "Position": {
+ "X": 114.70203,
+ "Y": 12,
+ "Z": 35.965454
+ },
+ "TerritoryId": 628,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Kugane",
+ "AethernetShortcut": [
+ "[Kugane] Aetheryte Plaza",
+ "[Kugane] The Ruby Bazaar"
+ ],
+ "RequiredGatheredItems": [
+ {
+ "ItemId": 35847,
+ "ItemCount": 1
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 6,
+ "Steps": [
+ {
+ "DataId": 1038510,
+ "Position": {
+ "X": -92.24078,
+ "Y": 11.799999,
+ "Z": -156.05408
+ },
+ "TerritoryId": 628,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Kugane] The Ruby Bazaar",
+ "[Kugane] Bokairo Inn"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1038501,
+ "Position": {
+ "X": -367.3305,
+ "Y": 21.846018,
+ "Z": -102.983154
+ },
+ "TerritoryId": 962,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Old Sharlayan",
+ "AethernetShortcut": [
+ "[Old Sharlayan] Aetheryte Plaza",
+ "[Old Sharlayan] The Studium"
+ ],
+ "NextQuestId": 4158
+ }
+ ]
}
]
}
--- /dev/null
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1038501,
+ "Position": {
+ "X": -367.3305,
+ "Y": 21.846018,
+ "Z": -102.983154
+ },
+ "TerritoryId": 962,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1038501,
+ "Position": {
+ "X": -367.3305,
+ "Y": 21.846018,
+ "Z": -102.983154
+ },
+ "TerritoryId": 962,
+ "InteractionType": "CompleteQuest",
+ "AetheryteShortcut": "Old Sharlayan",
+ "AethernetShortcut": [
+ "[Old Sharlayan] Aetheryte Plaza",
+ "[Old Sharlayan] The Studium"
+ ],
+ "RequiredGatheredItems": [
+ {
+ "ItemId": 35603,
+ "ItemCount": 6,
+ "Collectability": 600
+ }
+ ],
+ "NextQuestId": 4159
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1038501,
+ "Position": {
+ "X": -367.3305,
+ "Y": 21.846018,
+ "Z": -102.983154
+ },
+ "TerritoryId": 962,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1038503,
+ "Position": {
+ "X": -367.0863,
+ "Y": 21.84602,
+ "Z": -101.701416
+ },
+ "TerritoryId": 962,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Old Sharlayan",
+ "AethernetShortcut": [
+ "[Old Sharlayan] Aetheryte Plaza",
+ "[Old Sharlayan] The Studium"
+ ],
+ "RequiredGatheredItems": [
+ {
+ "ItemId": 35848,
+ "ItemCount": 1
+ }
+ ],
+ "NextQuestId": 4159
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1038512,
+ "Position": {
+ "X": -73.47223,
+ "Y": -16.147001,
+ "Z": 191.27173
+ },
+ "TerritoryId": 962,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Old Sharlayan] The Studium",
+ "[Old Sharlayan] Scholar's Harbor"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1038503,
+ "Position": {
+ "X": -367.0863,
+ "Y": 21.84602,
+ "Z": -101.701416
+ },
+ "TerritoryId": 962,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Old Sharlayan] Scholar's Harbor",
+ "[Old Sharlayan] The Studium"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1038501,
+ "Position": {
+ "X": -367.3305,
+ "Y": 21.846018,
+ "Z": -102.983154
+ },
+ "StopDistance": 7,
+ "TerritoryId": 962,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
}
}
- private bool HasRequestedItems()
+ public bool HasRequestedItems()
{
if (_currentRequest == null)
return true;
if (gameGui.TryGetAddonByName("Gathering", out AtkUnitBase* atkUnitBase))
{
- _slots ??= ReadSlots(atkUnitBase);
- var slot = _slots.Single(x => x.ItemId == _currentRequest.ItemId);
- atkUnitBase->FireCallbackInt(slot.Index);
+ if (gatheringController.HasRequestedItems())
+ {
+ atkUnitBase->FireCallbackInt(-1);
+ }
+ else
+ {
+ _slots ??= ReadSlots(atkUnitBase);
+ var slot = _slots.Single(x => x.ItemId == _currentRequest.ItemId);
+ atkUnitBase->FireCallbackInt(slot.Index);
+ }
}
}
public bool Start() => true;
- public ETaskResult Update()
+ public unsafe ETaskResult Update()
{
if (gatheringController.HasNodeDisappeared(_currentNode))
return ETaskResult.TaskComplete;
+ if (gatheringController.HasRequestedItems())
+ {
+ if (gameGui.TryGetAddonByName("GatheringMasterpiece", out AtkUnitBase* atkUnitBase))
+ {
+ atkUnitBase->FireCallbackInt(1);
+ return ETaskResult.StillRunning;
+ }
+
+ if (gameGui.TryGetAddonByName("Gathering", out atkUnitBase))
+ {
+ atkUnitBase->FireCallbackInt(-1);
+ return ETaskResult.TaskComplete;
+ }
+ }
+
NodeCondition? nodeCondition = GetNodeCondition();
if (nodeCondition == null)
return ETaskResult.TaskComplete;
return null;
}
- private Queue<EAction>? GetNextActions(NodeCondition nodeCondition)
+ private Queue<EAction> GetNextActions(NodeCondition nodeCondition)
{
uint gp = clientState.LocalPlayer!.CurrentGp;
Queue<EAction> actions = new();
using System.Collections.Generic;
using Dalamud.Game.Text;
using Dalamud.Plugin.Services;
+using FFXIVClientStructs.FFXIV.Client.Game;
using Microsoft.Extensions.DependencyInjection;
using Questionable.Data;
using Questionable.GatheringPaths;
.TryGetValue(gatheringPointId, out GatheringRoot? gatheringRoot))
throw new TaskException("No path found for gathering point");
+ if (HasRequiredItems(requiredGatheredItems))
+ continue;
+
if (gatheringRoot.AetheryteShortcut != null && clientState.TerritoryType != gatheringRoot.TerritoryId)
{
yield return serviceProvider.GetRequiredService<AetheryteShortcut.UseAetheryteShortcut>()
}
}
+ private unsafe bool HasRequiredItems(GatheredItem requiredGatheredItems)
+ {
+ InventoryManager* inventoryManager = InventoryManager.Instance();
+ return inventoryManager != null &&
+ inventoryManager->GetInventoryItemCount(requiredGatheredItems.ItemId,
+ minCollectability: (short)requiredGatheredItems.Collectability) >= requiredGatheredItems.ItemCount;
+ }
+
public ITask CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
=> throw new NotImplementedException();
}
if (_gatheredItem.Collectability == 0)
return $"Gather({_gatheredItem.ItemCount}x {_gatheredItem.ItemId})";
else
- return $"Gather({_gatheredItem.ItemCount}x {_gatheredItem.ItemId} {SeIconChar.Collectible.ToIconString()} {_gatheredItem.Collectability})";
+ return
+ $"Gather({_gatheredItem.ItemCount}x {_gatheredItem.ItemId} {SeIconChar.Collectible.ToIconString()} {_gatheredItem.Collectability})";
}
}
}