Compare commits

..

124 Commits

Author SHA1 Message Date
59793d19dc
Update 'At the End of our Hope' 2025-02-23 01:06:55 +01:00
2ada2fa9dc
Update for post-ARR quest battles 2025-02-23 00:54:28 +01:00
fe1d86bf5b
Add previously missing change in config class 2025-02-22 23:11:37 +01:00
71b40496fb
Fix interrupts in interactions 2025-02-22 23:11:08 +01:00
224825b071
Check for unexpected party members when entering instanced duties 2025-02-22 23:08:58 +01:00
ed797143b3
Update quest battle metadata 2025-02-22 22:28:04 +01:00
22aa81cf75
Fix Crystal Tower quests ignoring 'NextQuestId' 2025-02-22 19:52:10 +01:00
dcdc288b08
Add special handling for Lahabrea fight 2025-02-22 01:06:41 +01:00
a70e195a93
Configure a few early MSQ battles 2025-02-22 00:03:06 +01:00
71e0b01dbc
Add quest battle difficulty selection; UI tweaks 2025-02-21 12:21:01 +01:00
31eb121cf0
Add quest battle notes 2025-02-21 03:22:47 +01:00
a75286e927
Add UI to enable/disable quest battles 2025-02-21 02:19:01 +01:00
3820647827
Restructure config window 2025-02-20 21:16:48 +01:00
097c67ed5d
Second draft for auto-completing quest battles 2025-02-20 20:45:38 +01:00
92873554cc
Draft for auto-completing quest battles (HW MSQ) 2025-02-20 01:34:59 +01:00
b35ee13704
[GatheringPathRenderer] Replace ECommons/Splatoon with Pictomancy 2025-02-18 18:46:16 +01:00
11cde2a2d6
Minor ARR updates 2025-02-18 17:32:02 +01:00
04ab38cc59
Add extra waypoint for 'Big Trouble in Little Ala Mhigo' to prevent running into a table 2025-02-16 15:53:27 +01:00
c89b81f478 Merge pull request 'Updated preset for vbm v0.0.0.290' () from xanunderscore/Questionable:master into master
Reviewed-on: 
2025-02-11 23:47:23 +00:00
xanunderscore
1be6286efa RIP veynwar 2025-02-11 13:52:00 -05:00
xanunderscore
484d9e526d new ai stuff 2025-02-11 13:50:46 -05:00
2abf567e9f Merge pull request 'ipc: fix GetActiveEvents and add StartSingleQuest' () from croizat/Questionable:fixy into master
Reviewed-on: 
2025-02-07 23:22:39 +00:00
5c685b21b8
Version bump 2025-02-08 00:21:39 +01:00
48cc37dd05
Stop AD when questionable is currently running an AD dungeon/trial 2025-02-08 00:21:18 +01:00
21721e34b4
Ensure that AD duty mode is set to 'Support' 2025-02-08 00:21:00 +01:00
63e279376a
csproj clean up 2025-02-08 00:20:28 +01:00
f273d94b1d
UTF8 tweaks 2025-02-06 15:09:32 +01:00
Jackson
e24c28b4a4 add startsinglequest too
this is probably more useful for my usecases anyway after a bit of testing
2025-02-06 00:28:34 +01:00
Jackson
f72fafbf6a Update EventInfoComponent.cs 2025-02-05 23:35:13 +01:00
7a47992792 Merge pull request 'add StartQuest ipc' () from croizat/Questionable:ipc into master
Reviewed-on: 
2025-02-05 17:02:53 +00:00
Jackson
4e841929e0 oops 2025-02-05 17:14:33 +01:00
Jackson
2378bb693c add StartQuest 2025-02-05 16:57:33 +01:00
2b4159d3d6
Add IPC to get currently active seasonal event quests 2025-02-05 13:37:13 +01:00
3b80b3fe93
Version bump 2025-02-05 02:54:39 +01:00
303e2392ab
Add 'I Promise You a Rose Garden' 2025-02-05 02:52:14 +01:00
c43fbe4993
Add a few misc quests 2025-02-05 02:40:24 +01:00
6b31c0edc4
Add EW Physical Ranged role quests 2025-02-05 02:35:08 +01:00
cf61b9a0d3
Fix certain JSON issues 2025-02-05 02:30:20 +01:00
82abbfa535
WIP some IDE test 2025-02-05 01:21:28 +01:00
ceae3d5d21
Add 'A Tribal Reunion' (Vanu story quest) 2025-02-05 00:28:10 +01:00
96177aaa28
Add 'Tales of Newfound Adventure' quests 2025-02-05 00:25:45 +01:00
31d453bc3c
Move the Crystalline Mean quests to a different folder 2025-02-05 00:09:20 +01:00
d90cabdd13
Add Tales from the Shadows quest 2025-02-05 00:08:04 +01:00
385116576b
Add 'One Size Fits All' (Namazu story quest) 2025-02-05 00:02:50 +01:00
8442fb28f5
Minor code style changes 2025-02-02 22:00:36 +01:00
299754735b Merge pull request '[HW][Vath]/[ShB][Dwarves]' () from guffels/Questionable:AssortedQuestFixes into master
Reviewed-on: 
2025-02-02 20:42:01 +00:00
3fe4571099 Merge pull request '[SB][Namazu]' () from guffels/Questionable:Namazu-Dailies-v2 into master
Reviewed-on: 
2025-02-02 20:41:32 +00:00
98d1a0faef Merge pull request '[ShB][Dwarves] Substitute Tester' () from pot0to/Questionable:master into master
Reviewed-on: 
2025-02-02 20:40:54 +00:00
1f701cc979 Assorted Fixes
Small Pathing updates, Missing Vath Story Quests. One Dwarf Story
2025-01-30 20:54:07 -06:00
1ff3c9beb9 Namazu v2
Namazu down to 3 Quests remaining
2025-01-30 20:51:55 -06:00
295274143d
Make schema layout more explicit 2025-01-29 21:14:40 +01:00
pot0to
b63e8cc7cd added another dwarven quest 2025-01-28 17:16:53 -08:00
6c6149a47d Merge pull request 'master' () from master into Namazu-Dailies-v2
Reviewed-on: 
2025-01-27 13:10:35 +00:00
9d720bb387 Merge pull request 'master' () from liza/Questionable:master into master
Reviewed-on: 
2025-01-27 13:08:49 +00:00
pot0to
6fc0a6c4dd add tp to force dismount 2025-01-26 13:50:09 -08:00
pot0to
b179df076b Merge branch 'master' of https://git.carvel.li/liza/Questionable 2025-01-25 21:05:34 -08:00
pot0to
86dccab508 added all configurations for substitute tester dwarven quest 2025-01-25 21:05:20 -08:00
de90882ecb
Add Post-Endwalker role quests 2025-01-25 20:01:13 +01:00
e1b146ee1e
Code cleanup 2025-01-25 20:00:27 +01:00
b2c0934f07
GatheringPathRenderer: Adjust dev lookup path 2025-01-25 18:59:38 +01:00
a7706a11e7
Add 'Gyorin the Namazu', add some missing NextQuestIds 2025-01-25 18:40:47 +01:00
25f98b97e4 Merge pull request 'Namazu Dailies v1' () from guffels/Questionable:master into master
Reviewed-on: 
2025-01-25 17:00:40 +00:00
0a22db23f3
Move 'Forging the Spirit' into a separate quest file 2025-01-25 17:56:15 +01:00
b30c1b29d8
Remove Haukke Manor & Brayflox's Longstop from automatically supported duties 2025-01-25 02:38:35 +01:00
e305bbfea9
Fix Southern Thanalan pathing in 'Legacy of Allag' 2025-01-24 22:36:13 +01:00
004d9756d7
Add an optional teleport before interacting with Raubahn for Castrum Meridianum so lv50 job quests can run before the dungeon; open Lv49 weapon + Lv50 job gear coffer before queueing for Castrum 2025-01-24 22:26:24 +01:00
ffccd347bd
Add a delay to equipping recommended gear for specific instances where ilvl calculation would otherwise be off 2025-01-24 20:30:58 +01:00
2ebc4b5a0d
Fix 'Operation Archon' step order 2025-01-24 20:04:32 +01:00
d85b204c79
Automatically close job bar tutorials + Lv49 novice guide 2025-01-24 19:53:20 +01:00
7731dd0658
Use Vesper Bay aetheryte tickets for 'Operation Archon' if you left the Waking Sands 2025-01-24 19:40:36 +01:00
3d4aa7e75f Merge pull request 'master' () from master into Namazu-Dailies-v2
Reviewed-on: 
2025-01-23 13:55:45 +00:00
21031db45d Merge branch 'Namazu-Dailies-v2' into master 2025-01-23 13:55:31 +00:00
587c78ae49 Merge pull request 'master' () from liza/Questionable:master into master
Reviewed-on: 
2025-01-23 01:27:12 +00:00
4f61ea45ed
Update colors for some specific status/error messages 2025-01-23 01:43:20 +01:00
4e427e4309
Minor ARR updates 2025-01-23 01:42:46 +01:00
e0580239e4
Enable flight for turning in 'The Wind's Blessing' 2025-01-22 19:16:56 +01:00
5e45af38d1
Fix target switching logic in combat 2025-01-22 18:38:24 +01:00
05d6394264
Minor ARR MSQ updates 2025-01-22 18:38:08 +01:00
2cf059ec38
CodeGen update 2025-01-22 18:37:15 +01:00
b3d9ce382d
Version bump 2025-01-21 21:50:05 +01:00
3a3196d869
No longer accept the level 30 job quest if relevant aetherytes aren't unlocked 2025-01-21 21:45:01 +01:00
325d5368a5
Interrupts: Add a special case for certain movement tasks 2025-01-21 21:44:08 +01:00
3a763d625a
New experimental interrupt handler 2025-01-21 19:32:28 +01:00
f12b777d12
Update ARR Mor Dhona quests 2025-01-21 19:28:02 +01:00
4b9eae916a
Add logic for using items on the Spotted Mudpuppy in 'Factual Folklore' 2025-01-19 23:00:43 +01:00
e0f416a5cd Merge pull request '[Qitari] last qitari daily quest' () from pot0to/Questionable:master into master
Reviewed-on: 
2025-01-18 17:10:01 +00:00
pot0to
b2d57ae5a7 adding new qitari quest 2025-01-17 23:48:03 -08:00
pot0to
99b5ef42a6 Merge branch 'master' of https://git.carvel.li/liza/Questionable 2025-01-17 23:35:55 -08:00
7734692b0f
Throw an exception if using aethernet doesn't work and the destination is in another territory 2025-01-16 22:55:22 +01:00
16b62316c5
Leave TextAdvance active if waiting for a new quest sequence from the server 2025-01-13 18:38:53 +01:00
a2a36c5156
Version bump 2025-01-12 17:59:10 +01:00
10b8c1ddc2
Set minimum StopDistance to navmesh step size (0.25) 2025-01-12 11:35:46 +01:00
76e8ac4995
Set minimum StopDistance to navmesh step size (0.25) 2025-01-12 02:40:09 +01:00
2ffedfa72c
Specify loop count for AD 2025-01-12 02:36:17 +01:00
a111a4f75b
Optimize combat for overworld enemies 2025-01-12 02:28:31 +01:00
97cbeada2a
Minor Azys Lla adjustments 2025-01-12 02:13:23 +01:00
a1d02cceea Merge pull request '[HW][Side Quests][Azys Lla] 14/14 remaining Azys Lla side quests' () from goatzone/Questionable:azys-lla into master
Reviewed-on: 
2025-01-11 16:09:44 +00:00
ad76ccf057
Make 'CompleteQuest' work with ItemId → UseItem 2025-01-11 17:00:04 +01:00
108d103fd8
Add some extra flight steps to avoid vnav issues; fix bad NextQuestId 2025-01-11 16:54:55 +01:00
eeebebb28c Merge pull request 'New set of sidequests for Triple Triad NPCs' () from Thaksin/Questionable:master into master
Reviewed-on: 
2025-01-11 14:29:34 +00:00
93e6b6ec02
+1992 2025-01-10 15:42:38 +00:00
ec813ce9f4
+1991 2025-01-10 15:20:27 +00:00
7fe5acbaca
+1990 2025-01-10 15:07:11 +00:00
250cb44f48
+1989 2025-01-10 14:30:20 +00:00
8d4b2320fb
+1988 2025-01-10 13:58:21 +00:00
880082da0e
+1987 2025-01-10 13:35:19 +00:00
9c5fd2d3fe
+1986 2025-01-09 20:50:18 +00:00
8d18b24352
+1985 2025-01-09 16:52:15 +00:00
4576cec1ab Merge branch 'master' into master 2025-01-09 14:10:53 +00:00
143cb90506 Merge pull request 'Update 543_Sea of Blades_MIN.json' () from master into Namazu-Dailies-v2
Reviewed-on: 
2025-01-09 14:02:36 +00:00
a0a719fa1c Update 543_Sea of Blades_MIN.json 2025-01-09 08:01:54 -06:00
49ade84737 Merge pull request 'Fixed Stop Distance 0' () from master into Namazu-Dailies-v2
Reviewed-on: 
2025-01-09 13:59:37 +00:00
8b9e7e5557 Fixed Stop Distance 0 2025-01-09 07:56:40 -06:00
6e19630e60
+1984 2025-01-09 11:39:45 +00:00
8d64475f0a
+1983 2025-01-09 06:34:20 +00:00
ba5975e6ff
+1982 2025-01-09 06:15:46 +00:00
b917cd4e90
+1981 2025-01-09 06:03:06 +00:00
3889fbfb69
+1980, de-rust 1979 2025-01-09 05:51:09 +00:00
b2e268700b Revert "Test Commit to Fix Schema actions"
This reverts commit aa2ba3ca9a706159a453b12997c5233697676561.
2025-01-08 17:51:50 -06:00
aa2ba3ca9a Test Commit to Fix Schema actions
Test Commit
2025-01-08 17:46:16 -06:00
65df686329
+1979 2025-01-08 14:02:05 +00:00
7ae2bdcc45 Namazu Dailies Friendly v1
First Namazu push.
Contains:
Most of the unlock quests (Aside from 'Something Fishy This Way Comes' and 'One Size Fits All' because the alt doesn't have non-combat)
6 of 6 Friendly Rep Quests (DoH/Min/Bot)
First Story Quest
6 of 6 Trusted Rep Quests (DoH/Min/Bot)
Small Change to Aether Current quest since Same Territory isn't a valid skip condition in Azim Steppe if you don't have flying.
2025-01-04 15:18:22 -06:00
Gwen
2503d1897f
New set of sidequests for Triple Triad NPCs 2025-01-04 17:22:24 +01:00
pot0to
3c9e14e891 Merge branch 'master' of https://git.carvel.li/liza/Questionable 2024-12-19 21:29:03 -08:00
316 changed files with 18434 additions and 1455 deletions
.gitignore.gitmodulesDirectory.Build.targets
GatheringPathRenderer
GatheringPaths
LLib
QuestPathGenerator
QuestPaths
.editorconfig
2.x - A Realm Reborn
Alliance Raid Quests
Class Quests
MSQ-1
MSQ-2
Side Quests
Black Shroud/Gridania
Thanalan/Eastern Thanalan
Unlocks/Misc
3.x - Heavensward

1
.gitignore vendored

@ -2,4 +2,5 @@
bin/ bin/
/.idea /.idea
/.vs /.vs
/.vscode
*.user *.user

6
.gitmodules vendored

@ -1,9 +1,9 @@
[submodule "LLib"] [submodule "LLib"]
path = LLib path = LLib
url = https://git.carvel.li/liza/LLib.git url = https://git.carvel.li/liza/LLib.git
[submodule "vendor/ECommons"]
path = vendor/ECommons
url = https://github.com/NightmareXIV/ECommons.git
[submodule "vendor/NotificationMasterAPI"] [submodule "vendor/NotificationMasterAPI"]
path = vendor/NotificationMasterAPI path = vendor/NotificationMasterAPI
url = https://github.com/NightmareXIV/NotificationMasterAPI.git url = https://github.com/NightmareXIV/NotificationMasterAPI.git
[submodule "vendor/pictomancy"]
path = vendor/pictomancy
url = https://github.com/sourpuh/ffxiv_pictomancy

@ -1,5 +1,5 @@
<Project> <Project>
<PropertyGroup Condition="$(MSBuildProjectName) != 'GatheringPathRenderer'"> <PropertyGroup Condition="$(MSBuildProjectName) != 'GatheringPathRenderer'">
<Version>4.13</Version> <Version>4.20</Version>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

@ -9,7 +9,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\LLib\LLib.csproj" /> <ProjectReference Include="..\LLib\LLib.csproj" />
<ProjectReference Include="..\Questionable.Model\Questionable.Model.csproj" /> <ProjectReference Include="..\Questionable.Model\Questionable.Model.csproj" />
<ProjectReference Include="..\vendor\ECommons\ECommons\ECommons.csproj" /> <ProjectReference Include="..\vendor\pictomancy\Pictomancy\Pictomancy.csproj" />
</ItemGroup> </ItemGroup>
<Import Project="..\LLib\LLib.targets"/> <Import Project="..\LLib\LLib.targets"/>

@ -2,6 +2,6 @@
"Name": "GatheringPathRenderer", "Name": "GatheringPathRenderer",
"Author": "Liza Carvelli", "Author": "Liza Carvelli",
"Punchline": "[Questionable dev plugin]: Renders gathering location.", "Punchline": "[Questionable dev plugin]: Renders gathering location.",
"Description": "[Questionable dev plugin]: Renders gathering location using Splatoon.", "Description": "[Questionable dev plugin]: Renders gathering location using Pictomancy.",
"RepoUrl": "https://git.carvel.li/liza/Questionable/src/branch/master/GatheringPathRenderer" "RepoUrl": "https://git.carvel.li/liza/Questionable/src/branch/master/GatheringPathRenderer"
} }

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Numerics;
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Nodes; using System.Text.Json.Nodes;
@ -13,11 +14,9 @@ using Dalamud.Game.ClientState.Objects;
using Dalamud.Interface.Windowing; using Dalamud.Interface.Windowing;
using Dalamud.Plugin; using Dalamud.Plugin;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using ECommons;
using ECommons.Schedulers;
using ECommons.SplatoonAPI;
using GatheringPathRenderer.Windows; using GatheringPathRenderer.Windows;
using LLib.GameData; using LLib.GameData;
using Pictomancy;
using Questionable.Model.Gathering; using Questionable.Model.Gathering;
namespace GatheringPathRenderer; namespace GatheringPathRenderer;
@ -25,10 +24,8 @@ namespace GatheringPathRenderer;
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")] [SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")]
public sealed class RendererPlugin : IDalamudPlugin public sealed class RendererPlugin : IDalamudPlugin
{ {
private const long OnTerritoryChange = -2;
private readonly WindowSystem _windowSystem = new(nameof(RendererPlugin)); private readonly WindowSystem _windowSystem = new(nameof(RendererPlugin));
private readonly List<uint> _colors = [0xFFFF2020, 0xFF20FF20, 0xFF2020FF, 0xFFFFFF20, 0xFFFF20FF, 0xFF20FFFF]; private readonly List<uint> _colors = [0x40FF2020, 0x4020FF20, 0x402020FF, 0x40FFFF20, 0x40FF20FF, 0x4020FFFF];
private readonly IDalamudPluginInterface _pluginInterface; private readonly IDalamudPluginInterface _pluginInterface;
private readonly IClientState _clientState; private readonly IClientState _clientState;
@ -58,7 +55,8 @@ public sealed class RendererPlugin : IDalamudPlugin
_editorCommands = new EditorCommands(this, dataManager, commandManager, targetManager, clientState, chatGui, _editorCommands = new EditorCommands(this, dataManager, commandManager, targetManager, clientState, chatGui,
configuration); configuration);
var configWindow = new ConfigWindow(pluginInterface, configuration); var configWindow = new ConfigWindow(pluginInterface, configuration);
_editorWindow = new EditorWindow(this, _editorCommands, dataManager, targetManager, clientState, objectTable, configWindow) _editorWindow = new EditorWindow(this, _editorCommands, dataManager, targetManager, clientState, objectTable,
configWindow)
{ IsOpen = true }; { IsOpen = true };
_windowSystem.AddWindow(configWindow); _windowSystem.AddWindow(configWindow);
_windowSystem.AddWindow(_editorWindow); _windowSystem.AddWindow(_editorWindow);
@ -67,14 +65,12 @@ public sealed class RendererPlugin : IDalamudPlugin
_pluginInterface.GetIpcSubscriber<object>("Questionable.ReloadData") _pluginInterface.GetIpcSubscriber<object>("Questionable.ReloadData")
.Subscribe(Reload); .Subscribe(Reload);
ECommonsMain.Init(pluginInterface, this, Module.SplatoonAPI); PictoService.Initialize(pluginInterface);
LoadGatheringLocationsFromDirectory(); LoadGatheringLocationsFromDirectory();
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw; _pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_clientState.TerritoryChanged += TerritoryChanged; _pluginInterface.UiBuilder.Draw += Draw;
_clientState.ClassJobChanged += ClassJobChanged; _clientState.ClassJobChanged += ClassJobChanged;
if (_clientState.IsLoggedIn)
TerritoryChanged(_clientState.TerritoryType);
} }
internal DirectoryInfo PathsDirectory internal DirectoryInfo PathsDirectory
@ -82,7 +78,7 @@ public sealed class RendererPlugin : IDalamudPlugin
get get
{ {
#if DEBUG #if DEBUG
DirectoryInfo? solutionDirectory = _pluginInterface.AssemblyLocation.Directory?.Parent?.Parent?.Parent; DirectoryInfo? solutionDirectory = _pluginInterface.AssemblyLocation.Directory?.Parent?.Parent;
if (solutionDirectory != null) if (solutionDirectory != null)
{ {
DirectoryInfo pathProjectDirectory = DirectoryInfo pathProjectDirectory =
@ -91,9 +87,10 @@ public sealed class RendererPlugin : IDalamudPlugin
return pathProjectDirectory; return pathProjectDirectory;
} }
throw new Exception("Unable to resolve project path"); throw new Exception($"Unable to resolve project path ({_pluginInterface.AssemblyLocation.Directory})");
#else #else
var allPluginsDirectory = _pluginInterface.ConfigFile.Directory ?? throw new Exception("Unknown directory for plugin configs"); var allPluginsDirectory =
_pluginInterface.ConfigFile.Directory ?? throw new Exception("Unknown directory for plugin configs");
return allPluginsDirectory return allPluginsDirectory
.CreateSubdirectory("Questionable") .CreateSubdirectory("Questionable")
.CreateSubdirectory("GatheringPaths"); .CreateSubdirectory("GatheringPaths");
@ -104,7 +101,6 @@ public sealed class RendererPlugin : IDalamudPlugin
internal void Reload() internal void Reload()
{ {
LoadGatheringLocationsFromDirectory(); LoadGatheringLocationsFromDirectory();
Redraw();
} }
private void LoadGatheringLocationsFromDirectory() private void LoadGatheringLocationsFromDirectory()
@ -124,7 +120,6 @@ public sealed class RendererPlugin : IDalamudPlugin
_pluginLog.Information( _pluginLog.Information(
$"Loaded {_gatheringLocations.Count} gathering root locations from {PathsDirectory.FullName} directory"); $"Loaded {_gatheringLocations.Count} gathering root locations from {PathsDirectory.FullName} directory");
#endif #endif
} }
catch (Exception e) catch (Exception e)
{ {
@ -209,32 +204,39 @@ public sealed class RendererPlugin : IDalamudPlugin
} }
} }
private void TerritoryChanged(ushort territoryId) => Redraw();
private void ClassJobChanged(uint classJobId) private void ClassJobChanged(uint classJobId)
{ {
_currentClassJob = (EClassJob)classJobId; _currentClassJob = (EClassJob)classJobId;
Redraw(_currentClassJob);
} }
internal void Redraw() => Redraw(_currentClassJob); private void Draw()
private void Redraw(EClassJob classJob)
{ {
Splatoon.RemoveDynamicElements("GatheringPathRenderer"); if (!_currentClassJob.IsGatherer())
if (!classJob.IsGatherer())
return; return;
var elements = GetLocationsInTerritory(_clientState.TerritoryType) using var drawList = PictoService.Draw();
.SelectMany(location => if (drawList == null)
location.Root.Groups.SelectMany(group => return;
group.Nodes.SelectMany(node => node.Locations
.SelectMany(x => Vector3 position = _clientState.LocalPlayer?.Position ?? Vector3.Zero;
foreach (var location in GetLocationsInTerritory(_clientState.TerritoryType))
{
if (!location.Root.Groups.Any(gr =>
gr.Nodes.Any(
no => no.Locations.Any(
loc => Vector3.Distance(loc.Position, position) < 200f))))
continue;
foreach (var group in location.Root.Groups)
{
foreach (GatheringNode node in group.Nodes)
{
foreach (var x in node.Locations)
{ {
bool isUnsaved = false; bool isUnsaved = false;
bool isCone = false; bool isCone = false;
int minimumAngle = 0; float minimumAngle = 0;
int maximumAngle = 0; float maximumAngle = 0;
if (_editorWindow.TryGetOverride(x.InternalId, out LocationOverride? locationOverride) && if (_editorWindow.TryGetOverride(x.InternalId, out LocationOverride? locationOverride) &&
locationOverride != null) locationOverride != null)
{ {
@ -254,42 +256,28 @@ public sealed class RendererPlugin : IDalamudPlugin
maximumAngle = x.MaximumAngle.GetValueOrDefault(); maximumAngle = x.MaximumAngle.GetValueOrDefault();
} }
minimumAngle *= (float)Math.PI / 180;
maximumAngle *= (float)Math.PI / 180;
if (!isCone || maximumAngle - minimumAngle >= 2 * Math.PI)
{
minimumAngle = 0;
maximumAngle = (float)Math.PI * 2;
}
uint color = _colors[location.Root.Groups.IndexOf(group) % _colors.Count];
drawList.AddFanFilled(x.Position,
locationOverride?.MinimumDistance ?? x.CalculateMinimumDistance(),
locationOverride?.MaximumDistance ?? x.CalculateMaximumDistance(),
minimumAngle, maximumAngle, color);
drawList.AddFan(x.Position,
locationOverride?.MinimumDistance ?? x.CalculateMinimumDistance(),
locationOverride?.MaximumDistance ?? x.CalculateMaximumDistance(),
minimumAngle, maximumAngle, color | 0xFF000000);
drawList.AddText(x.Position, isUnsaved ? 0xFFFF0000 : 0xFFFFFFFF, $"{location.Root.Groups.IndexOf(group)} // {node.DataId} / {node.Locations.IndexOf(x)} || {minimumAngle}, {maximumAngle}", 1f);
#if false #if false
var a = GatheringMath.CalculateLandingLocation(x, 0, 0); var a = GatheringMath.CalculateLandingLocation(x, 0, 0);
var b = GatheringMath.CalculateLandingLocation(x, 1, 1); var b = GatheringMath.CalculateLandingLocation(x, 1, 1);
#endif
return new List<Element>
{
new Element(isCone
? ElementType.ConeAtFixedCoordinates
: ElementType.CircleAtFixedCoordinates)
{
refX = x.Position.X,
refY = x.Position.Z,
refZ = x.Position.Y,
Filled = true,
radius = locationOverride?.MinimumDistance ?? x.CalculateMinimumDistance(),
Donut = (locationOverride?.MaximumDistance ?? x.CalculateMaximumDistance()) -
(locationOverride?.MinimumDistance ?? x.CalculateMinimumDistance()),
color = _colors[location.Root.Groups.IndexOf(group) % _colors.Count],
Enabled = true,
coneAngleMin = minimumAngle,
coneAngleMax = maximumAngle,
tether = false,
},
new Element(ElementType.CircleAtFixedCoordinates)
{
refX = x.Position.X,
refY = x.Position.Z,
refZ = x.Position.Y,
color = 0xFFFFFFFF,
radius = 0.1f,
Enabled = true,
overlayText =
$"{location.Root.Groups.IndexOf(group)} // {node.DataId} / {node.Locations.IndexOf(x)}",
overlayBGColor = isUnsaved ? 0xFF2020FF : 0xFF000000,
},
#if false
new Element(ElementType.CircleAtFixedCoordinates) new Element(ElementType.CircleAtFixedCoordinates)
{ {
refX = a.X, refX = a.X,
@ -311,40 +299,19 @@ public sealed class RendererPlugin : IDalamudPlugin
overlayText = "Max Angle" overlayText = "Max Angle"
} }
#endif #endif
};
}))))
.ToList();
if (elements.Count == 0)
{
_pluginLog.Information("No new elements to render.");
return;
} }
_ = new TickScheduler(delegate
{
try
{
Splatoon.AddDynamicElements("GatheringPathRenderer",
elements.ToArray(),
new[] { OnTerritoryChange });
_pluginLog.Information($"Created {elements.Count} splatoon elements.");
} }
catch (Exception e)
{
_pluginLog.Error(e, "Unable to create splatoon layer");
} }
}); }
} }
public void Dispose() public void Dispose()
{ {
_clientState.ClassJobChanged -= ClassJobChanged; _clientState.ClassJobChanged -= ClassJobChanged;
_clientState.TerritoryChanged -= TerritoryChanged; _pluginInterface.UiBuilder.Draw -= Draw;
_pluginInterface.UiBuilder.Draw -= _windowSystem.Draw; _pluginInterface.UiBuilder.Draw -= _windowSystem.Draw;
Splatoon.RemoveDynamicElements("GatheringPathRenderer"); PictoService.Dispose();
ECommonsMain.Dispose();
_pluginInterface.GetIpcSubscriber<object>("Questionable.ReloadData") _pluginInterface.GetIpcSubscriber<object>("Questionable.ReloadData")
.Unsubscribe(Reload); .Unsubscribe(Reload);

@ -154,7 +154,6 @@ internal sealed class EditorWindow : Window
{ {
locationOverride.MinimumAngle = minAngle; locationOverride.MinimumAngle = minAngle;
locationOverride.MaximumAngle = maxAngle; locationOverride.MaximumAngle = maxAngle;
_plugin.Redraw();
} }
float minDistance = locationOverride.MinimumDistance ?? location.CalculateMinimumDistance(); float minDistance = locationOverride.MinimumDistance ?? location.CalculateMinimumDistance();
@ -163,7 +162,6 @@ internal sealed class EditorWindow : Window
{ {
locationOverride.MinimumDistance = minDistance; locationOverride.MinimumDistance = minDistance;
locationOverride.MaximumDistance = maxDistance; locationOverride.MaximumDistance = maxDistance;
_plugin.Redraw();
} }
bool unsaved = locationOverride.NeedsSave(); bool unsaved = locationOverride.NeedsSave();
@ -194,7 +192,6 @@ internal sealed class EditorWindow : Window
if (ImGui.Button("Reset")) if (ImGui.Button("Reset"))
{ {
_changes[location.InternalId] = new LocationOverride(); _changes[location.InternalId] = new LocationOverride();
_plugin.Redraw();
} }
ImGui.EndDisabled(); ImGui.EndDisabled();

@ -35,6 +35,16 @@
"resolved": "8.0.0", "resolved": "8.0.0",
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
}, },
"Microsoft.NETCore.Platforms": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
},
"Microsoft.NETCore.Targets": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
},
"Microsoft.SourceLink.AzureRepos.Git": { "Microsoft.SourceLink.AzureRepos.Git": {
"type": "Transitive", "type": "Transitive",
"resolved": "1.1.1", "resolved": "1.1.1",
@ -76,13 +86,944 @@
"Microsoft.SourceLink.Common": "1.1.1" "Microsoft.SourceLink.Common": "1.1.1"
} }
}, },
"Microsoft.Win32.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"NETStandard.Library": {
"type": "Transitive",
"resolved": "1.6.1",
"contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.Win32.Primitives": "4.3.0",
"System.AppContext": "4.3.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Console": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tools": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Calendars": "4.3.0",
"System.IO": "4.3.0",
"System.IO.Compression": "4.3.0",
"System.IO.Compression.ZipFile": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Linq": "4.3.0",
"System.Linq.Expressions": "4.3.0",
"System.Net.Http": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Net.Sockets": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Security.Cryptography.X509Certificates": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Timer": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0",
"System.Xml.XDocument": "4.3.0"
}
},
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q=="
},
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA=="
},
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw=="
},
"runtime.native.System": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.IO.Compression": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.Net.Http": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.Security.Cryptography.Apple": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
"dependencies": {
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
}
},
"runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
"dependencies": {
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A=="
},
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ=="
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ=="
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g=="
},
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg=="
},
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ=="
},
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A=="
},
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg=="
},
"SharpDX": {
"type": "Transitive",
"resolved": "4.2.0",
"contentHash": "3pv0LFMvfK/dv1qISJnn8xBeeT6R/FRvr0EV4KI2DGsL84Qlv6P7isWqxGyU0LCwlSVCJN3jgHJ4Bl0KI2PJww==",
"dependencies": {
"NETStandard.Library": "1.6.1"
}
},
"SharpDX.D3DCompiler": {
"type": "Transitive",
"resolved": "4.2.0",
"contentHash": "Rnsd6Ilp127xbXqhTit8WKFQUrXwWxqVGpglyWDNkIBCk0tWXNQEjrJpsl0KAObzyZaa33+EXAikLVt5fnd3GA==",
"dependencies": {
"NETStandard.Library": "1.6.1",
"SharpDX": "4.2.0"
}
},
"SharpDX.Direct2D1": {
"type": "Transitive",
"resolved": "4.2.0",
"contentHash": "Qs8LzDMaQf1u3KB8ArHu9pDv6itZ++QXs99a/bVAG+nKr0Hx5NG4mcN5vsfE0mVR2TkeHfeUm4PksRah6VUPtA==",
"dependencies": {
"NETStandard.Library": "1.6.1",
"SharpDX": "4.2.0",
"SharpDX.DXGI": "4.2.0"
}
},
"SharpDX.Direct3D11": {
"type": "Transitive",
"resolved": "4.2.0",
"contentHash": "oTm/iT5X/IIuJ8kNYP+DTC/MhBhqtRF5dbgPPFgLBdQv0BKzNTzXQQXd7SveBFjQg6hXEAJ2jGCAzNYvGFc9LA==",
"dependencies": {
"NETStandard.Library": "1.6.1",
"SharpDX": "4.2.0",
"SharpDX.DXGI": "4.2.0"
}
},
"SharpDX.DXGI": {
"type": "Transitive",
"resolved": "4.2.0",
"contentHash": "UjKqkgWc8U+SP+j3LBzFP6OB6Ntapjih7Xo+g1rLcsGbIb5KwewBrBChaUu7sil8rWoeVU/k0EJd3SMN4VqNZw==",
"dependencies": {
"NETStandard.Library": "1.6.1",
"SharpDX": "4.2.0"
}
},
"System.AppContext": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Buffers": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Collections": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Collections.Concurrent": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Console": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Diagnostics.Debug": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Diagnostics.DiagnosticSource": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Diagnostics.Tools": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Diagnostics.Tracing": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization.Calendars": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Globalization": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0"
}
},
"System.IO": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.Compression": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Buffers": "4.3.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.IO.Compression": "4.3.0"
}
},
"System.IO.Compression.ZipFile": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
"dependencies": {
"System.Buffers": "4.3.0",
"System.IO": "4.3.0",
"System.IO.Compression": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.IO.FileSystem": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Linq": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
}
},
"System.Linq.Expressions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Linq": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Emit.Lightweight": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Net.Http": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.DiagnosticSource": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Extensions": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.OpenSsl": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Security.Cryptography.X509Certificates": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.Net.Http": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Net.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Net.Sockets": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.ObjectModel": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Reflection": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit.ILGeneration": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit.Lightweight": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.TypeExtensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Resources.ResourceManager": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Globalization": "4.3.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.Handles": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.InteropServices": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Runtime.InteropServices.RuntimeInformation": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Threading": "4.3.0",
"runtime.native.System": "4.3.0"
}
},
"System.Runtime.Numerics": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
"dependencies": {
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
}
},
"System.Security.Cryptography.Algorithms": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.Apple": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Cng": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Security.Cryptography.Csp": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Security.Cryptography.Encoding": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Linq": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
"dependencies": {
"System.Collections": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Security.Cryptography.X509Certificates": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Calendars": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Cng": "4.3.0",
"System.Security.Cryptography.Csp": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.OpenSsl": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.Net.Http": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Text.Encoding": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Text.Encoding.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Text.Json": { "System.Text.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "8.0.5", "resolved": "8.0.5",
"contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==" "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg=="
}, },
"ecommons": { "System.Text.RegularExpressions": {
"type": "Project" "type": "Transitive",
"resolved": "4.3.0",
"contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Threading": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
"dependencies": {
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Threading.Tasks": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Threading.Timer": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Xml.ReaderWriter": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Tasks.Extensions": "4.3.0"
}
},
"System.Xml.XDocument": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tools": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0"
}
}, },
"llib": { "llib": {
"type": "Project", "type": "Project",
@ -90,6 +1031,14 @@
"DalamudPackager": "[11.0.0, )" "DalamudPackager": "[11.0.0, )"
} }
}, },
"pictomancy": {
"type": "Project",
"dependencies": {
"SharpDX.D3DCompiler": "[4.2.0, )",
"SharpDX.Direct2D1": "[4.2.0, )",
"SharpDX.Direct3D11": "[4.2.0, )"
}
},
"questionable.model": { "questionable.model": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {

@ -0,0 +1,8 @@
root = true
[*.json]
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8

@ -0,0 +1,64 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32314,
"Locations": [
{
"Position": {
"X": -506.7959,
"Y": 67.50204,
"Z": -406.9001
},
"MinimumAngle": 5,
"MaximumAngle": 170,
"MinimumDistance": 1,
"MaximumDistance": 2.3
}
]
},
{
"DataId": 32315,
"Locations": [
{
"Position": {
"X": -505.4885,
"Y": 67.502,
"Z": -397.644
},
"MinimumAngle": -20,
"MaximumAngle": 105,
"MinimumDistance": 1,
"MaximumDistance": 2.1
}
]
},
{
"DataId": 32316,
"Locations": [
{
"Position": {
"X": -501.4457,
"Y": 67.48835,
"Z": -391.6048
},
"MinimumAngle": -50,
"MaximumAngle": 105,
"MinimumDistance": 1,
"MaximumDistance": 2.2
}
]
}
]
}
]
}

@ -0,0 +1,64 @@
{
"schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32317,
"Locations": [
{
"Position": {
"X": 147.9038,
"Y": 17.89183,
"Z": -63.83757
},
"MinimumAngle": 20,
"MaximumAngle": 340
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32318,
"Locations": [
{
"Position": {
"X": 178.1422,
"Y": 13.02608,
"Z": -45.63166
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32319,
"Locations": [
{
"Position": {
"X": 141.474,
"Y": 18.02604,
"Z": -61.94627
},
"MinimumAngle": 20,
"MaximumAngle": 340
}
]
}
]
}
]
}

@ -0,0 +1,69 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32320,
"Locations": [
{
"Position": {
"X": 609.3118,
"Y": -21.51083,
"Z": 558.524
},
"MinimumAngle": 90,
"MaximumAngle": 270,
"MaximumDistance": 3
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32321,
"Locations": [
{
"Position": {
"X": 609.9794,
"Y": -21.53052,
"Z": 579.6443
},
"MinimumAngle": 90,
"MaximumAngle": 135,
"MaximumDistance": 3
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32322,
"Locations": [
{
"Position": {
"X": 588.3865,
"Y": -20.42655,
"Z": 561.5663
},
"MinimumAngle": 45,
"MaximumAngle": 315,
"MaximumDistance": 3
}
]
}
]
}
]
}

@ -0,0 +1,60 @@
{
"schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32326,
"Locations": [
{
"Position": {
"X": -515.5125,
"Y": 65.79073,
"Z": -386.0356
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32327,
"Locations": [
{
"Position": {
"X": -527.5466,
"Y": 64.7018,
"Z": -379.2951
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32328,
"Locations": [
{
"Position": {
"X": -505.5859,
"Y": 64.95732,
"Z": -367.5692
}
}
]
}
]
}
]
}

@ -0,0 +1,60 @@
{
"schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32329,
"Locations": [
{
"Position": {
"X": 152.6547,
"Y": 18.44606,
"Z": -48.11443
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32330,
"Locations": [
{
"Position": {
"X": 153.6145,
"Y": 17.2952,
"Z": -64.51379
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32331,
"Locations": [
{
"Position": {
"X": 170.0975,
"Y": 14.96311,
"Z": -52.22673
}
}
]
}
]
}
]
}

@ -0,0 +1,60 @@
{
"schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32332,
"Locations": [
{
"Position": {
"X": 573.6873,
"Y": -20.41718,
"Z": 582.5559
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32333,
"Locations": [
{
"Position": {
"X": 579.1252,
"Y": -20.40873,
"Z": 565.84
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32334,
"Locations": [
{
"Position": {
"X": 608.5944,
"Y": -21.23272,
"Z": 571.2001
}
}
]
}
]
}
]
}

@ -0,0 +1,60 @@
{
"schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32338,
"Locations": [
{
"Position": {
"X": 727.463,
"Y": 14.92286,
"Z": -477.1528
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32339,
"Locations": [
{
"Position": {
"X": 721.5626,
"Y": 24.81664,
"Z": -499.1444
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32340,
"Locations": [
{
"Position": {
"X": 702.1278,
"Y": 27.92893,
"Z": -505.186
}
}
]
}
]
}
]
}

@ -0,0 +1,60 @@
{
"schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"Author": "Theo",
"Steps": [
{
"TerritoryId": 622,
"InteractionType": "None"
}
],
"Groups": [
{
"Nodes": [
{
"DataId": 32341,
"Locations": [
{
"Position": {
"X": 615.4055,
"Y": 31.42307,
"Z": -475.3718
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32342,
"Locations": [
{
"Position": {
"X": 612.0082,
"Y": 25.45944,
"Z": -442.0886
}
}
]
}
]
},
{
"Nodes": [
{
"DataId": 32343,
"Locations": [
{
"Position": {
"X": 634.1258,
"Y": 21.76424,
"Z": -436.3917
}
}
]
}
]
}
]
}

@ -23,7 +23,11 @@
<LogicalName>Questionable.GatheringPaths.GatheringLocationSchema</LogicalName> <LogicalName>Questionable.GatheringPaths.GatheringLocationSchema</LogicalName>
</EmbeddedResource> </EmbeddedResource>
<AdditionalFiles Include="gatheringlocation-v1.json" /> <AdditionalFiles Include="gatheringlocation-v1.json" />
<AdditionalFiles Include="..\Questionable.Model\common-schema.json" /> <AdditionalFiles Include="..\Questionable.Model\common-aethernetshard.json" />
<AdditionalFiles Include="..\Questionable.Model\common-aetheryte.json" />
<AdditionalFiles Include="..\Questionable.Model\common-classjob.json" />
<AdditionalFiles Include="..\Questionable.Model\common-completionflags.json" />
<AdditionalFiles Include="..\Questionable.Model\common-vector3.json" />
<AdditionalFiles Include="..\QuestPaths\quest-v1.json" /> <AdditionalFiles Include="..\QuestPaths\quest-v1.json" />
</ItemGroup> </ItemGroup>

@ -1,4 +1,4 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "$id": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
"title": "Gathering Location V1", "title": "Gathering Location V1",
@ -55,7 +55,7 @@
"type": "object", "type": "object",
"properties": { "properties": {
"Position": { "Position": {
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-vector3.json"
}, },
"MinimumAngle": { "MinimumAngle": {
"type": "number", "type": "number",

2
LLib

@ -1 +1 @@
Subproject commit b1059871154b84401020c0072fd089fcc022fb77 Subproject commit edab3c7ecc6bd66ac07e3c3938eb9c8a835a1c42

@ -0,0 +1,29 @@
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Questionable.Model.Questing;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
using static Questionable.QuestPathGenerator.RoslynShortcuts;
namespace Questionable.QuestPathGenerator.RoslynElements;
internal static class CombatItemUseExtensions
{
public static ExpressionSyntax ToExpressionSyntax(this CombatItemUse combatItemuse)
{
var emptyItemuse = new CombatItemUse();
return ObjectCreationExpression(
IdentifierName(nameof(CombatItemUse)))
.WithInitializer(
InitializerExpression(
SyntaxKind.ObjectInitializerExpression,
SeparatedList<ExpressionSyntax>(
SyntaxNodeList(
Assignment(nameof(CombatItemUse.ItemId), combatItemuse.ItemId,
emptyItemuse.ItemId)
.AsSyntaxNodeOrToken(),
Assignment(nameof(CombatItemUse.Condition), combatItemuse.Condition, emptyItemuse.Condition)
.AsSyntaxNodeOrToken(),
Assignment(nameof(combatItemuse.Value), combatItemuse.Value, emptyItemuse.Value)
.AsSyntaxNodeOrToken()))));
}
}

@ -107,6 +107,9 @@ internal static class QuestStepExtensions
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),
AssignmentList(nameof(QuestStep.ComplexCombatData), step.ComplexCombatData) AssignmentList(nameof(QuestStep.ComplexCombatData), step.ComplexCombatData)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.CombatItemUse), step.CombatItemUse,
emptyStep.CombatItemUse)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.CombatDelaySecondsAtStart), Assignment(nameof(QuestStep.CombatDelaySecondsAtStart),
step.CombatDelaySecondsAtStart, step.CombatDelaySecondsAtStart,
emptyStep.CombatDelaySecondsAtStart) emptyStep.CombatDelaySecondsAtStart)
@ -120,6 +123,9 @@ internal static class QuestStepExtensions
Assignment(nameof(QuestStep.AutoDutyEnabled), Assignment(nameof(QuestStep.AutoDutyEnabled),
step.AutoDutyEnabled, emptyStep.AutoDutyEnabled) step.AutoDutyEnabled, emptyStep.AutoDutyEnabled)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.SinglePlayerDutyOptions), step.SinglePlayerDutyOptions,
emptyStep.SinglePlayerDutyOptions)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.SkipConditions), step.SkipConditions, Assignment(nameof(QuestStep.SkipConditions), step.SkipConditions,
emptyStep.SkipConditions) emptyStep.SkipConditions)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),

@ -0,0 +1,30 @@
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Questionable.Model.Questing;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
using static Questionable.QuestPathGenerator.RoslynShortcuts;
namespace Questionable.QuestPathGenerator.RoslynElements;
internal static class SinglePlayerDutyOptionsExtensions
{
public static ExpressionSyntax ToExpressionSyntax(this SinglePlayerDutyOptions dutyOptions)
{
var emptyOptions = new SinglePlayerDutyOptions();
return ObjectCreationExpression(
IdentifierName(nameof(SinglePlayerDutyOptions)))
.WithInitializer(
InitializerExpression(
SyntaxKind.ObjectInitializerExpression,
SeparatedList<ExpressionSyntax>(
SyntaxNodeList(
Assignment(nameof(SinglePlayerDutyOptions.Enabled),
dutyOptions.Enabled, emptyOptions.Enabled)
.AsSyntaxNodeOrToken(),
AssignmentList(nameof(SinglePlayerDutyOptions.Notes), dutyOptions.Notes)
.AsSyntaxNodeOrToken(),
Assignment(nameof(SinglePlayerDutyOptions.Index),
dutyOptions.Index, emptyOptions.Index)
.AsSyntaxNodeOrToken()))));
}
}

@ -62,6 +62,7 @@ public static class RoslynShortcuts
ComplexCombatData complexCombatData => complexCombatData.ToExpressionSyntax(), ComplexCombatData complexCombatData => complexCombatData.ToExpressionSyntax(),
QuestWorkValue questWorkValue => questWorkValue.ToExpressionSyntax(), QuestWorkValue questWorkValue => questWorkValue.ToExpressionSyntax(),
List<QuestWorkValue> list => list.ToExpressionSyntax(), // TODO fix in AssignmentList List<QuestWorkValue> list => list.ToExpressionSyntax(), // TODO fix in AssignmentList
SinglePlayerDutyOptions dutyOptions => dutyOptions.ToExpressionSyntax(),
SkipConditions skipConditions => skipConditions.ToExpressionSyntax(), SkipConditions skipConditions => skipConditions.ToExpressionSyntax(),
SkipStepConditions skipStepConditions => skipStepConditions.ToExpressionSyntax(), SkipStepConditions skipStepConditions => skipStepConditions.ToExpressionSyntax(),
SkipItemConditions skipItemCondition => skipItemCondition.ToExpressionSyntax(), SkipItemConditions skipItemCondition => skipItemCondition.ToExpressionSyntax(),
@ -71,6 +72,7 @@ public static class RoslynShortcuts
GatheringNodeGroup nodeGroup => nodeGroup.ToExpressionSyntax(), GatheringNodeGroup nodeGroup => nodeGroup.ToExpressionSyntax(),
GatheringNode nodeLocation => nodeLocation.ToExpressionSyntax(), GatheringNode nodeLocation => nodeLocation.ToExpressionSyntax(),
GatheringLocation location => location.ToExpressionSyntax(), GatheringLocation location => location.ToExpressionSyntax(),
CombatItemUse combatItemUse => combatItemUse.ToExpressionSyntax(),
not null when value.GetType().IsEnum => MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, not null when value.GetType().IsEnum => MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
IdentifierName(value.GetType().Name), IdentifierName(value.GetType().GetEnumName(value)!)), IdentifierName(value.GetType().Name), IdentifierName(value.GetType().GetEnumName(value)!)),
_ => throw new Exception($"Unsupported data type {value.GetType()} = {value}") _ => throw new Exception($"Unsupported data type {value.GetType()} = {value}")

@ -16,14 +16,38 @@ public static class Utils
{ {
public static List<AdditionalText> RegisterSchemas(GeneratorExecutionContext context) public static List<AdditionalText> RegisterSchemas(GeneratorExecutionContext context)
{ {
var commonSchemaFile = context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-schema.json"); var commonAethernetShardFile =
context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-aethernetshard.json");
var commonAetheryteFile =
context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-aetheryte.json");
var commonClassJobFile =
context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-classjob.json");
var commonCompletionFlagsFile =
context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-completionflags.json");
var commonVector3File = context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-vector3.json");
var gatheringSchemaFile = var gatheringSchemaFile =
context.AdditionalFiles.SingleOrDefault(x => Path.GetFileName(x.Path) == "gatheringlocation-v1.json"); context.AdditionalFiles.SingleOrDefault(x => Path.GetFileName(x.Path) == "gatheringlocation-v1.json");
var questSchemaFile = context.AdditionalFiles.SingleOrDefault(x => Path.GetFileName(x.Path) == "quest-v1.json"); var questSchemaFile = context.AdditionalFiles.SingleOrDefault(x => Path.GetFileName(x.Path) == "quest-v1.json");
SchemaRegistry.Global.Register( SchemaRegistry.Global.Register(
new Uri("https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json"), new Uri(
JsonSchema.FromText(commonSchemaFile.GetText()!.ToString())); "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-aethernetshard.json"),
JsonSchema.FromText(commonAethernetShardFile.GetText()!.ToString()));
SchemaRegistry.Global.Register(
new Uri(
"https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-aetheryte.json"),
JsonSchema.FromText(commonAetheryteFile.GetText()!.ToString()));
SchemaRegistry.Global.Register(
new Uri(
"https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-classjob.json"),
JsonSchema.FromText(commonClassJobFile.GetText()!.ToString()));
SchemaRegistry.Global.Register(
new Uri(
"https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-completionflags.json"),
JsonSchema.FromText(commonCompletionFlagsFile.GetText()!.ToString()));
SchemaRegistry.Global.Register(
new Uri("https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-vector3.json"),
JsonSchema.FromText(commonVector3File.GetText()!.ToString()));
if (gatheringSchemaFile != null) if (gatheringSchemaFile != null)
{ {
@ -40,7 +64,16 @@ public static class Utils
JsonSchema.FromText(questSchemaFile.GetText()!.ToString())); JsonSchema.FromText(questSchemaFile.GetText()!.ToString()));
} }
List<AdditionalText?> jsonSchemaFiles = [commonSchemaFile, gatheringSchemaFile, questSchemaFile]; List<AdditionalText?> jsonSchemaFiles =
[
commonAethernetShardFile,
commonAetheryteFile,
commonClassJobFile,
commonCompletionFlagsFile,
commonVector3File,
gatheringSchemaFile,
questSchemaFile
];
return jsonSchemaFiles.Where(x => x != null).Cast<AdditionalText>().ToList(); return jsonSchemaFiles.Where(x => x != null).Cast<AdditionalText>().ToList();
} }

@ -4,3 +4,5 @@
indent_size = 2 indent_size = 2
indent_style = space indent_style = space
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8

@ -329,9 +329,9 @@
}, },
{ {
"Position": { "Position": {
"X": -0.75614685, "X": 3.8795898,
"Y": 38.80212, "Y": 38.80212,
"Z": -11.007636 "Z": 0.40251642
}, },
"TerritoryId": 146, "TerritoryId": 146,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
@ -359,7 +359,8 @@
null, null,
128 128
], ],
"Fly": true "Fly": true,
"DisableNavmesh": true
}, },
{ {
"DataId": 2000078, "DataId": 2000078,

@ -57,6 +57,9 @@
}, },
"TerritoryId": 153, "TerritoryId": 153,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Index": 1
},
"Fly": true "Fly": true
} }
] ]

@ -62,6 +62,9 @@
}, },
"TerritoryId": 154, "TerritoryId": 154,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Index": 1
},
"AetheryteShortcut": "North Shroud - Fallgourd Float", "AetheryteShortcut": "North Shroud - Fallgourd Float",
"Fly": true "Fly": true
} }

@ -119,7 +119,10 @@
"Z": 29.06836 "Z": 29.06836
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Index": 1
}
} }
] ]
}, },

@ -140,6 +140,10 @@
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"Fly": true "Fly": true
} }
] ]

@ -92,6 +92,9 @@
}, },
"TerritoryId": 130, "TerritoryId": 130,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Index": 1
},
"AetheryteShortcut": "Ul'dah" "AetheryteShortcut": "Ul'dah"
} }
] ]

@ -112,9 +112,18 @@
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true "InSameTerritory": true
}
}, },
"Comment": "TODO Verify enemy id" "StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
}
}, },
{ {
"DataId": 2002309, "DataId": 2002309,

@ -35,6 +35,10 @@
}, },
"TerritoryId": 137, "TerritoryId": 137,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"AetheryteShortcut": "Eastern La Noscea - Wineport", "AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true "Fly": true
} }

@ -116,6 +116,10 @@
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"Fly": true "Fly": true
} }
] ]

@ -65,7 +65,8 @@
"AetheryteShortcut": "East Shroud - Hawthorne Hut", "AetheryteShortcut": "East Shroud - Hawthorne Hut",
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true "InSameTerritory": true,
"AetheryteLocked": "East Shroud - Hawthorne Hut"
} }
} }
} }
@ -116,7 +117,11 @@
"Z": 35.568726 "Z": 35.568726
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -33,6 +33,39 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 1001263,
"Position": {
"X": 181.41443,
"Y": -2.3519497,
"Z": -240.40594
},
"TerritoryId": 133,
"InteractionType": "Interact",
"TargetTerritoryId": 152,
"AethernetShortcut": [
"[Gridania] Conjurers' Guild",
"[Gridania] Lancers' Guild"
],
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "East Shroud - Hawthorne Hut",
"InTerritory": [
152
]
}
}
},
{
"TerritoryId": 152,
"InteractionType": "AttuneAetheryte",
"Aetheryte": "East Shroud - Hawthorne Hut",
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "East Shroud - Hawthorne Hut"
}
}
},
{ {
"Position": { "Position": {
"X": -276.804, "X": -276.804,
@ -42,7 +75,12 @@
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AetheryteShortcut": "East Shroud - Hawthorne Hut", "AetheryteShortcut": "East Shroud - Hawthorne Hut",
"Fly": true "Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": {
"AetheryteLocked": "East Shroud - Hawthorne Hut"
}
}
}, },
{ {
"DataId": 2000889, "DataId": 2000889,
@ -212,6 +250,10 @@
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"Fly": true "Fly": true
} }
] ]

@ -138,7 +138,11 @@
"Z": 192.2179 "Z": 192.2179
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -111,7 +111,14 @@
"Z": 295.52136 "Z": 295.52136
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"Healer NPC is only killed after the boss dies; all NPCs need to be killed for the duty to complete"
]
}
} }
] ]
}, },

@ -28,7 +28,14 @@
"Z": -309.55975 "Z": -309.55975
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": false,
"TestedBossModVersion": 292,
"Notes": [
"AI doesn't automatically target newly spawning adds until after the boss died, and dies (tested on CNJ)"
]
}
} }
] ]
}, },

@ -77,6 +77,13 @@
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"(Phase 1) Healer NPCs are only killed after the boss dies - allied NPCs will kill them eventually; all NPCs need to be killed for the duty to complete"
]
},
"AetheryteShortcut": "Central Shroud - Bentbranch Meadows" "AetheryteShortcut": "Central Shroud - Bentbranch Meadows"
} }
] ]

@ -69,6 +69,13 @@
}, },
"TerritoryId": 135, "TerritoryId": 135,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": false,
"TestedBossModVersion": 292,
"Notes": [
"(Phase 1, second enemy group) Stuck with enemy being out of sight -- but still able to attack you (tested on ACN)"
]
},
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks" "AetheryteShortcut": "Lower La Noscea - Moraby Drydocks"
} }
] ]

@ -45,8 +45,11 @@
"TerritoryId": 134, "TerritoryId": 134,
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea", "EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [ "ComplexCombatData": [
52 {
"DataId": 52,
"IgnoreQuestMarker": true
}
] ]
}, },
{ {

@ -73,7 +73,11 @@
"Z": -432.15082 "Z": -432.15082
}, },
"TerritoryId": 134, "TerritoryId": 134,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -28,7 +28,14 @@
"Z": -141.7716 "Z": -141.7716
}, },
"TerritoryId": 134, "TerritoryId": 134,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": false,
"TestedBossModVersion": 292,
"Notes": [
"AI doesn't automatically target newly spawning adds until after the boss died (requires healing luck on ACN)"
]
}
} }
] ]
}, },

@ -58,6 +58,13 @@
}, },
"TerritoryId": 138, "TerritoryId": 138,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"(Phase 1) Kills PGL NPCs and then the boss - allied NPCs will kill most other NPCs eventually; all NPCs need to be killed for the duty to complete"
]
},
"AetheryteShortcut": "Western La Noscea - Swiftperch" "AetheryteShortcut": "Western La Noscea - Swiftperch"
} }
] ]

@ -21,16 +21,30 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 1001426, "Position": {
"X": 2.7922537,
"Y": 8.206551,
"Z": -274.32318
},
"TerritoryId": 141,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Central Thanalan - Black Brush Station",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"NearPosition": {
"Position": { "Position": {
"X": 123.33862, "X": 123.33862,
"Y": 30.999996, "Y": 30.999996,
"Z": -384.9394 "Z": -384.9394
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact", "MaximumDistance": 30
"Comment": "'Forging the Spirit'", }
"AetheryteShortcut": "Central Thanalan - Black Brush Station" }
}
}, },
{ {
"DataId": 1001426, "DataId": 1001426,
@ -40,8 +54,8 @@
"Z": -384.9394 "Z": -384.9394
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact", "InteractionType": "AcceptQuest",
"Comment": "Quest Turn-In 'Forging the Spirit'" "PickUpQuestId": 638
}, },
{ {
"DataId": 1001425, "DataId": 1001425,

@ -44,7 +44,11 @@
"Z": -242.51166 "Z": -242.51166
}, },
"TerritoryId": 145, "TerritoryId": 145,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -79,6 +79,10 @@
}, },
"TerritoryId": 130, "TerritoryId": 130,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
@ -87,6 +91,9 @@
} }
] ]
}, },
{
"Sequence": 5
},
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [

@ -63,12 +63,22 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Gridania] Aetheryte Plaza", "[Gridania] Aetheryte Plaza",
"[Gridania] Lancers' Guild" "[Gridania] Lancers' Guild"
] ],
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "East Shroud - Hawthorne Hut"
}
}
}, },
{ {
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "AttuneAetheryte", "InteractionType": "AttuneAetheryte",
"Aetheryte": "East Shroud - Hawthorne Hut" "Aetheryte": "East Shroud - Hawthorne Hut",
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "East Shroud - Hawthorne Hut"
}
}
}, },
{ {
"DataId": 1004886, "DataId": 1004886,
@ -78,7 +88,17 @@
"Z": 475.30322 "Z": 475.30322
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"AetheryteShortcut": "East Shroud - Hawthorne Hut",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
} }
] ]
}, },

@ -64,6 +64,10 @@
}, },
"TerritoryId": 135, "TerritoryId": 135,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle", "[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Tempest Gate (Lower La Noscea)" "[Limsa Lominsa] Tempest Gate (Lower La Noscea)"

@ -59,6 +59,10 @@
}, },
"TerritoryId": 140, "TerritoryId": 140,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"AetheryteShortcut": "Western Thanalan - Horizon" "AetheryteShortcut": "Western Thanalan - Horizon"
} }
] ]

@ -46,7 +46,8 @@
}, },
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact" "InteractionType": "Interact",
"DelaySecondsAtStart": 2
} }
] ]
}, },

@ -158,7 +158,11 @@
"Z": 117.29602 "Z": 117.29602
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -21,6 +21,15 @@
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"Position": {
"X": -174.73444,
"Y": 15.450659,
"Z": -266.76144
},
"TerritoryId": 140,
"InteractionType": "WalkTo"
},
{ {
"Position": { "Position": {
"X": -289.1099, "X": -289.1099,

@ -37,7 +37,11 @@
"Z": -293.1411 "Z": -293.1411
}, },
"TerritoryId": 140, "TerritoryId": 140,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -29,7 +29,7 @@
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies", "EnemySpawnType": "FinishCombatIfAny",
"KillEnemyDataIds": [ "KillEnemyDataIds": [
352, 352,
353 353
@ -53,6 +53,25 @@
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"Position": {
"X": 131.78122,
"Y": 20.119337,
"Z": -115.27284
},
"TerritoryId": 141,
"InteractionType": "WalkTo"
},
{
"Position": {
"X": 127.7017,
"Y": -0.15994573,
"Z": -161.89238
},
"TerritoryId": 141,
"InteractionType": "WalkTo",
"DisableNavmesh": true
},
{ {
"DataId": 1001605, "DataId": 1001605,
"Position": { "Position": {

@ -28,7 +28,11 @@
"Z": 536.88855 "Z": 536.88855
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -64,7 +64,14 @@
"Z": -131.48706 "Z": -131.48706
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"(Phase 1) Healer NPCs are only killed after the boss dies - allied NPCs will kill them eventually; all NPCs need to be killed for the duty to complete"
]
},
"AetheryteShortcut": "Central Thanalan - Black Brush Station" "AetheryteShortcut": "Central Thanalan - Black Brush Station"
} }
] ]

@ -73,13 +73,23 @@
}, },
"TerritoryId": 133, "TerritoryId": 133,
"InteractionType": "Interact", "InteractionType": "Interact",
"TargetTerritoryId": 152 "TargetTerritoryId": 152,
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "East Shroud - Hawthorne Hut"
}
}
}, },
{ {
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "AttuneAetheryte", "InteractionType": "AttuneAetheryte",
"Aetheryte": "East Shroud - Hawthorne Hut", "Aetheryte": "East Shroud - Hawthorne Hut",
"StopDistance": 5 "StopDistance": 5,
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "East Shroud - Hawthorne Hut"
}
}
}, },
{ {
"DataId": 1006188, "DataId": 1006188,
@ -89,7 +99,13 @@
"Z": 283.4973 "Z": 283.4973
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "CompleteQuest" "InteractionType": "CompleteQuest",
"AetheryteShortcut": "East Shroud - Hawthorne Hut",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
} }
] ]
} }

@ -64,7 +64,11 @@
"Z": -39.383606 "Z": -39.383606
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -83,7 +83,14 @@
"Z": -12.985474 "Z": -12.985474
}, },
"TerritoryId": 153, "TerritoryId": 153,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"AI will kill initial adds before the boss, but not switch target whenever new enemies spawn; all NPCs need to be killed for the duty to complete"
]
}
} }
] ]
}, },

@ -36,6 +36,16 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"TargetTerritoryId": 146 "TargetTerritoryId": 146
}, },
{
"Position": {
"X": -47.50145,
"Y": 16.362688,
"Z": -439.62503
},
"TerritoryId": 146,
"InteractionType": "WalkTo",
"$": "vnav sometimes attempts to walk to the aetheryte using exactly one waypoint between zone boundary and aetheryte, which means walking into walls"
},
{ {
"TerritoryId": 146, "TerritoryId": 146,
"InteractionType": "AttuneAetheryte", "InteractionType": "AttuneAetheryte",

@ -26,6 +26,28 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"Position": {
"X": -225.94685,
"Y": 26.139933,
"Z": -340.8984
},
"TerritoryId": 146,
"InteractionType": "WalkTo",
"Mount": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
}
}
},
{ {
"DataId": 2001980, "DataId": 2001980,
"Position": { "Position": {

@ -67,7 +67,7 @@
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "Duty", "InteractionType": "Duty",
"ContentFinderConditionId": 6, "ContentFinderConditionId": 6,
"AutoDutyEnabled": true "AutoDutyEnabled": false
} }
] ]
}, },

@ -86,7 +86,7 @@
"TerritoryId": 137, "TerritoryId": 137,
"InteractionType": "Duty", "InteractionType": "Duty",
"ContentFinderConditionId": 8, "ContentFinderConditionId": 8,
"AutoDutyEnabled": true "AutoDutyEnabled": false
} }
] ]
}, },

@ -103,7 +103,8 @@
}, },
"TerritoryId": 155, "TerritoryId": 155,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"$": "NW Skyfire Locks door (inside)" "$": "NW Skyfire Locks door (inside)",
"Mount": true
}, },
{ {
"Position": { "Position": {

@ -49,7 +49,8 @@
}, },
"TerritoryId": 155, "TerritoryId": 155,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Comment": "North Whitebrim, Stairs (bottom)" "Comment": "North Whitebrim, Stairs (bottom)",
"Mount": true
}, },
{ {
"Position": { "Position": {

@ -35,10 +35,13 @@
"Z": 89.58569 "Z": 89.58569
}, },
"TerritoryId": 155, "TerritoryId": 155,
"InteractionType": "Instruction", "InteractionType": "Combat",
"Comment": "Use Quest item on enemy to weaken it first",
"$": "Status Effects: 22 (HP Penalty) + 62 (Damage Down)",
"EnemySpawnType": "AfterInteraction", "EnemySpawnType": "AfterInteraction",
"CombatItemUse": {
"ItemId": 2000961,
"Condition": "MissingStatus",
"Value": 22
},
"ComplexCombatData": [ "ComplexCombatData": [
{ {
"DataId": 2196 "DataId": 2196

@ -76,6 +76,15 @@
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{
"Position": {
"X": 303.96317,
"Y": -36.40591,
"Z": 316.74185
},
"TerritoryId": 138,
"InteractionType": "WalkTo"
},
{ {
"DataId": 1006501, "DataId": 1006501,
"Position": { "Position": {

@ -26,6 +26,15 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"Position": {
"X": 303.96317,
"Y": -36.40591,
"Z": 316.74185
},
"TerritoryId": 138,
"InteractionType": "WalkTo"
},
{ {
"DataId": 1007640, "DataId": 1007640,
"Position": { "Position": {

@ -19,6 +19,7 @@
}, },
{ {
"Sequence": 1, "Sequence": 1,
"Comment": "'Invalid target' messages can just be bad positioning?",
"Steps": [ "Steps": [
{ {
"Position": { "Position": {
@ -50,9 +51,9 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Combat", "InteractionType": "Combat",
"DelaySecondsAtStart": 2,
"EnemySpawnType": "AfterItemUse", "EnemySpawnType": "AfterItemUse",
"ItemId": 2000766, "ItemId": 2000766,
"GroundTarget": true,
"KillEnemyDataIds": [ "KillEnemyDataIds": [
46 46
], ],
@ -86,6 +87,27 @@
64 64
] ]
}, },
{
"Position": {
"X": -219.34567,
"Y": 4.551038,
"Z": -637.8296
},
"TerritoryId": 156,
"InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
8
]
}
}
},
{ {
"DataId": 2002234, "DataId": 2002234,
"Position": { "Position": {
@ -159,9 +181,9 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Combat", "InteractionType": "Combat",
"DelaySecondsAtStart": 2,
"EnemySpawnType": "AfterItemUse", "EnemySpawnType": "AfterItemUse",
"ItemId": 2000766, "ItemId": 2000766,
"GroundTarget": true,
"KillEnemyDataIds": [ "KillEnemyDataIds": [
46 46
], ],
@ -218,7 +240,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "UseItem", "InteractionType": "UseItem",
"ItemId": 2000766 "ItemId": 2000766,
"DelaySecondsAtStart": 2
} }
] ]
}, },

@ -72,7 +72,7 @@
"Z": -609.4606 "Z": -609.4606
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "UseItem", "InteractionType": "SinglePlayerDuty",
"ItemId": 2000771 "ItemId": 2000771
} }
] ]

@ -35,13 +35,163 @@
"Z": -225.17743 "Z": -225.17743
}, },
"TerritoryId": 147, "TerritoryId": 147,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Northern Thanalan - Ceruleum Processing Plant",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
} }
] ]
}, },
{ {
"Sequence": 2, "Sequence": 2,
"$": "This doesn't include the DRK/MCH/AST coffers that exist at level 50, but you cannot obtain them until HW",
"Steps": [ "Steps": [
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 31337,
"$": "Lv49 Weapon Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20642,
"$": "Lv50 PLD Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20643,
"$": "Lv50 MNK Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20644,
"$": "Lv50 WAR Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20645,
"$": "Lv50 DRG Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20646,
"$": "Lv50 BRD Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20647,
"$": "Lv50 NIN Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20648,
"$": "Lv50 WHM Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20649,
"$": "Lv50 BLM Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20650,
"$": "Lv50 SMN Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{
"TerritoryId": 147,
"InteractionType": "UseItem",
"ItemId": 20651,
"$": "Lv50 SCH Coffer",
"SkipConditions": {
"StepIf": {
"Item": {
"NotInInventory": true
}
}
}
},
{ {
"TerritoryId": 147, "TerritoryId": 147,
"InteractionType": "Duty", "InteractionType": "Duty",

@ -5,6 +5,71 @@
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{
"TerritoryId": 132,
"InteractionType": "UseItem",
"ItemId": 30362,
"TargetTerritoryId": 140,
"SkipConditions": {
"StepIf": {
"InTerritory": [
140,
212
]
}
}
},
{
"Position": {
"X": -492.96475,
"Y": 20.999884,
"Z": -380.82272
},
"TerritoryId": 140,
"InteractionType": "WalkTo",
"$": "Avoid walking around Waking Sands table",
"SkipConditions": {
"StepIf": {
"InTerritory": [
212
]
}
}
},
{
"DataId": 2001711,
"Position": {
"X": -480.9181,
"Y": 18.00103,
"Z": -386.862
},
"TerritoryId": 140,
"InteractionType": "Interact",
"TargetTerritoryId": 212,
"SkipConditions": {
"StepIf": {
"InTerritory": [
212
]
}
}
},
{
"DataId": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact",
"TargetTerritoryId": 212,
"SkipConditions": {
"StepIf": {
"ExtraCondition": "WakingSandsSolar"
}
}
},
{ {
"DataId": 1006690, "DataId": 1006690,
"Position": { "Position": {
@ -29,7 +94,14 @@
}, },
"TerritoryId": 212, "TerritoryId": 212,
"InteractionType": "Interact", "InteractionType": "Interact",
"TargetTerritoryId": 212 "TargetTerritoryId": 212,
"SkipConditions": {
"StepIf": {
"InTerritory": [
140
]
}
}
}, },
{ {
"DataId": 2001716, "DataId": 2001716,
@ -40,7 +112,14 @@
}, },
"TerritoryId": 212, "TerritoryId": 212,
"InteractionType": "Interact", "InteractionType": "Interact",
"TargetTerritoryId": 140 "TargetTerritoryId": 140,
"SkipConditions": {
"StepIf": {
"InTerritory": [
140
]
}
}
}, },
{ {
"DataId": 1006578, "DataId": 1006578,
@ -80,7 +159,11 @@
"Z": -805.478 "Z": -805.478
}, },
"TerritoryId": 140, "TerritoryId": 140,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -103,7 +103,11 @@
"Z": 479.9724 "Z": 479.9724
}, },
"TerritoryId": 1053, "TerritoryId": 1053,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -68,6 +68,15 @@
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{
"Position": {
"X": -561.9863,
"Y": 9.919454,
"Z": 66.29564
},
"TerritoryId": 152,
"InteractionType": "WalkTo"
},
{ {
"DataId": 1008276, "DataId": 1008276,
"Position": { "Position": {

@ -102,7 +102,7 @@
}, },
"TerritoryId": 137, "TerritoryId": 137,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true "Mount": true
}, },
{ {
"Position": { "Position": {

@ -78,6 +78,10 @@
"StopDistance": 1, "StopDistance": 1,
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"Fly": true "Fly": true
} }
] ]

@ -120,6 +120,15 @@
8 8
] ]
}, },
{
"Position": {
"X": -140.77458,
"Y": 39.99999,
"Z": 155.4174
},
"TerritoryId": 128,
"InteractionType": "WalkTo"
},
{ {
"DataId": 1009133, "DataId": 1009133,
"Position": { "Position": {

@ -100,6 +100,28 @@
2 2
] ]
}, },
{
"Position": {
"X": 86.662384,
"Y": 28.34813,
"Z": -627.5218
},
"TerritoryId": 156,
"InteractionType": "WalkTo",
"Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
}
},
{ {
"DataId": 1009143, "DataId": 1009143,
"Position": { "Position": {
@ -109,7 +131,6 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"Fly": true,
"$": "1 112 0 0 0 2 -> 2 96 0 0 0 34", "$": "1 112 0 0 0 2 -> 2 96 0 0 0 34",
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,

@ -71,6 +71,14 @@
}, },
"TerritoryId": 147, "TerritoryId": 147,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"Will target Eline first (other NPCs later), and move to some -other- group of NPCs; only re-targets once they're at 1 HP (for Eline) or die",
"If the target isn't in melee range but other NPCs are, whether any AOEs are used for nearby enemies seems random"
]
},
"Fly": true, "Fly": true,
"AetheryteShortcut": "Northern Thanalan - Ceruleum Processing Plant" "AetheryteShortcut": "Northern Thanalan - Ceruleum Processing Plant"
} }

@ -28,7 +28,16 @@
"Z": -328.66406 "Z": -328.66406
}, },
"TerritoryId": 155, "TerritoryId": 155,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": false,
"TestedBossModVersion": 292,
"Notes": [
"WIP: Needs to be re-tested",
"AI doesn't move after starting the instance, so enemies won't be triggered",
"(First Barrier) If the player is too far south, after being stunned by Vishap's roar, AI doesn't move out of the AOE and dies to the Cauterize"
]
}
} }
] ]
}, },

@ -57,7 +57,7 @@
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "Interact", "InteractionType": "Interact",
"StopDistance": 0.1, "StopDistance": 0.25,
"AetheryteShortcut": "East Shroud - Hawthorne Hut", "AetheryteShortcut": "East Shroud - Hawthorne Hut",
"Fly": true, "Fly": true,
"SkipConditions": { "SkipConditions": {
@ -83,7 +83,7 @@
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "Interact", "InteractionType": "Interact",
"StopDistance": 0.1, "StopDistance": 0.25,
"AetheryteShortcut": "East Shroud - Hawthorne Hut", "AetheryteShortcut": "East Shroud - Hawthorne Hut",
"Fly": true, "Fly": true,
"SkipConditions": { "SkipConditions": {
@ -109,7 +109,7 @@
}, },
"TerritoryId": 152, "TerritoryId": 152,
"InteractionType": "Interact", "InteractionType": "Interact",
"StopDistance": 0.1, "StopDistance": 0.25,
"AetheryteShortcut": "East Shroud - Hawthorne Hut", "AetheryteShortcut": "East Shroud - Hawthorne Hut",
"Fly": true, "Fly": true,
"SkipConditions": { "SkipConditions": {

@ -0,0 +1,36 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001426,
"Position": {
"X": 123.33862,
"Y": 30.999996,
"Z": -384.9394
},
"TerritoryId": 141,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001426,
"Position": {
"X": 123.33862,
"Y": 30.999996,
"Z": -384.9394
},
"TerritoryId": 141,
"InteractionType": "CompleteQuest"
}
]
}
]
}

@ -80,7 +80,8 @@
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "UseItem", "InteractionType": "UseItem",
"ItemId": 4868 "ItemId": 4868,
"Fly": true
}, },
{ {
"Position": { "Position": {

@ -0,0 +1,152 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Redacted",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1016087,
"Position": {
"X": -796.7498,
"Y": -133.2695,
"Z": -410.6966
},
"TerritoryId": 401,
"InteractionType": "AcceptQuest",
"Fly": true,
"AetheryteShortcut": "The Sea of Clouds - Ok' Zundu",
"SkipConditions": {
"AetheryteShortcutIf": {
"NearPosition": {
"Position": {
"X": -796.7498,
"Y": -133.2695,
"Z": -410.6966
},
"TerritoryId": 622,
"MaximumDistance": 50
}
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1016159,
"Position": {
"X": 115.983765,
"Y": -93.22756,
"Z": 477.8667
},
"TerritoryId": 401,
"InteractionType": "Interact",
"Fly": true,
"AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1016161,
"Position": {
"X": 108.04907,
"Y": -147.83774,
"Z": 495.1704
},
"TerritoryId": 401,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1016159,
"Position": {
"X": 115.983765,
"Y": -93.22756,
"Z": 477.8667
},
"TerritoryId": 401,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 4,
"Steps": [
{
"Position": {
"X": 120.88076,
"Y": -93.90284,
"Z": 481.25824
},
"TerritoryId": 401,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
5232,
5233
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1016463,
"Position": {
"X": 115.983765,
"Y": -93.22756,
"Z": 477.8667
},
"TerritoryId": 401,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1012064,
"Position": {
"X": -542.7787,
"Y": -37.11544,
"Z": -386.7094
},
"TerritoryId": 401,
"InteractionType": "Interact",
"Fly": true,
"AetheryteShortcut": "The Sea of Clouds - Ok' Zundu"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1016087,
"Position": {
"X": -796.7498,
"Y": -133.2695,
"Z": -410.6966
},
"TerritoryId": 401,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

@ -0,0 +1,120 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Redacted",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1016087,
"Position": {
"X": -796.7498,
"Y": -133.2695,
"Z": -410.6966
},
"TerritoryId": 401,
"InteractionType": "AcceptQuest",
"Fly": true,
"AetheryteShortcut": "The Sea of Clouds - Ok' Zundu",
"SkipConditions": {
"AetheryteShortcutIf": {
"NearPosition": {
"Position": {
"X": -796.7498,
"Y": -133.2695,
"Z": -410.6966
},
"TerritoryId": 401,
"MaximumDistance": 100
}
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -298.6771,
"Y": 93.99152,
"Z": -222.3565
},
"TerritoryId": 401,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
5232,
5233
],
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1016168,
"Position": {
"X": -306.1723,
"Y": 93.99152,
"Z": -226.42871
},
"TerritoryId": 401,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1016172,
"Position": {
"X": -314.71735,
"Y": -7.6638403,
"Z": -230.60962
},
"TerritoryId": 401,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1012064,
"Position": {
"X": -542.7787,
"Y": -37.11544,
"Z": -386.7094
},
"TerritoryId": 401,
"InteractionType": "Interact",
"Fly": true,
"AetheryteShortcut": "The Sea of Clouds - Ok' Zundu"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1016087,
"Position": {
"X": -796.7498,
"Y": -133.2695,
"Z": -410.6966
},
"TerritoryId": 401,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

@ -26,7 +26,7 @@
"Y": -48.533592, "Y": -48.533592,
"Z": -171.12994 "Z": -171.12994
}, },
"StopDistance": 3, "StopDistance": 2.5,
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,

@ -100,7 +100,20 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine",
"SkipConditions": {
"AetheryteShortcutIf": {
"NearPosition": {
"Position": {
"X": 58.39701,
"Y": -48.000008,
"Z": -172.36507
},
"TerritoryId": 398,
"MaximumDistance": 50
}
}
}
}, },
{ {
"DataId": 1016803, "DataId": 1016803,
@ -125,7 +138,8 @@
"Z": -168.23071 "Z": -168.23071
}, },
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "CompleteQuest" "InteractionType": "CompleteQuest",
"Fly": true
} }
] ]
} }

@ -0,0 +1,248 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Theo",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1016802,
"Position": {
"X": 53.360718,
"Y": -48.000004,
"Z": -169.97028
},
"TerritoryId": 398,
"InteractionType": "AcceptQuest",
"Fly": true,
"AetheryteShortcut": "The Dravanian Forelands - Anyx Trine",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1016844,
"Position": {
"X": -743.0991,
"Y": -117.75057,
"Z": 574.85315
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true
},
{
"DataId": 5542,
"Position": {
"X": -731.547,
"Y": -116.99814,
"Z": 577.7823
},
"TerritoryId": 398,
"InteractionType": "Combat",
"CombatDelaySecondsAtStart": 3,
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
5542
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1016844,
"Position": {
"X": -743.0991,
"Y": -117.75057,
"Z": 574.85315
},
"TerritoryId": 398,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"Position": {
"X": -802.4346,
"Y": -122.50925,
"Z": 578.51434
},
"TerritoryId": 398,
"InteractionType": "WalkTo",
"Fly": true,
"SkipConditions": {
"StepIf": {
"InTerritory": [
399
]
}
}
},
{
"DataId": 1016845,
"Position": {
"X": 508.72046,
"Y": 77.65831,
"Z": 119.21863
},
"TerritoryId": 399,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1012097,
"Position": {
"X": 73.3501,
"Y": 205.88956,
"Z": 23.483582
},
"TerritoryId": 478,
"InteractionType": "Interact",
"AetheryteShortcut": "Idyllshire",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1012132,
"Position": {
"X": 43.015137,
"Y": 206.04718,
"Z": 56.50415
},
"TerritoryId": 478,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"Position": {
"X": 147.913,
"Y": 207,
"Z": 118.226494
},
"TerritoryId": 478,
"InteractionType": "WalkTo",
"Mount": true,
"SkipConditions": {
"StepIf": {
"InTerritory": [
399
]
}
}
},
{
"DataId": 1016996,
"Position": {
"X": -85.80151,
"Y": 100.87653,
"Z": -325.185
},
"TerritoryId": 399,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 1011928,
"Position": {
"X": 73.19751,
"Y": -49.19563,
"Z": -139.05548
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true,
"AetheryteShortcut": "The Dravanian Forelands - Anyx Trine",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 8,
"Steps": [
{
"DataId": 1016848,
"Position": {
"X": 286.7627,
"Y": -112.2676,
"Z": 424.55164
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 9,
"Steps": [
{
"DataId": 1016848,
"Position": {
"X": 286.7627,
"Y": -112.2676,
"Z": 424.55164
},
"TerritoryId": 398,
"InteractionType": "Say",
"ChatMessage": {
"Key": "TEXT_BANGNA003_02257_SYSTEM_100_096"
}
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1016802,
"Position": {
"X": 53.360718,
"Y": -48.000004,
"Z": -169.97028
},
"TerritoryId": 398,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

@ -0,0 +1,201 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Theo",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1016802,
"Position": {
"X": 53.360718,
"Y": -48.000004,
"Z": -169.97028
},
"TerritoryId": 398,
"InteractionType": "AcceptQuest",
"Fly": true,
"AetheryteShortcut": "The Dravanian Forelands - Anyx Trine",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1016849,
"Position": {
"X": -209.46063,
"Y": -46.08357,
"Z": 222.52222
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true,
"AetheryteShortcut": "The Dravanian Forelands - Anyx Trine",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1011935,
"Position": {
"X": -285.63367,
"Y": 39.04305,
"Z": 53.72693
},
"TerritoryId": 398,
"Fly": true,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1016850,
"Position": {
"X": -187.36554,
"Y": -34.771328,
"Z": -70.42041
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true,
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_BANGNA004_02258_Q1_000_051",
"Answer": "TEXT_BANGNA004_02258_A1_000_052"
}
]
}
]
},
{
"Sequence": 4,
"Steps": [
{
"Position": {
"X": -68.02277,
"Y": -33.766434,
"Z": -164.5872
},
"TerritoryId": 398,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
5543
],
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"Position": {
"X": -67.26527,
"Y": -34.505165,
"Z": 89.80089
},
"TerritoryId": 398,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
5543
],
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1016850,
"Position": {
"X": -187.36554,
"Y": -34.771328,
"Z": -70.42041
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1016850,
"Position": {
"X": -187.36554,
"Y": -34.771328,
"Z": -70.42041
},
"TerritoryId": 398,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 1011935,
"Position": {
"X": -285.63367,
"Y": 39.04305,
"Z": 53.72693
},
"TerritoryId": 398,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1011928,
"Position": {
"X": 73.19751,
"Y": -49.19563,
"Z": -139.05548
},
"TerritoryId": 398,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

@ -46,6 +46,10 @@
}, },
"TerritoryId": 155, "TerritoryId": 155,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
},
"Fly": true "Fly": true
} }
] ]

@ -95,7 +95,11 @@
}, },
"TerritoryId": 138, "TerritoryId": 138,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"Fly": true "Fly": true,
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -30,7 +30,11 @@
}, },
"TerritoryId": 397, "TerritoryId": 397,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"Comment": "Walk straight to Gorgagne Mills basement, ignore footprints" "Comment": "Walk straight to Gorgagne Mills basement, ignore footprints",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -58,7 +58,11 @@
"Z": 349.96558 "Z": 349.96558
}, },
"TerritoryId": 401, "TerritoryId": 401,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -78,7 +78,11 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Ishgard] The Forgotten Knight", "[Ishgard] The Forgotten Knight",
"[Ishgard] The Tribunal" "[Ishgard] The Tribunal"
] ],
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -28,7 +28,14 @@
"Z": 388.63196 "Z": 388.63196
}, },
"TerritoryId": 145, "TerritoryId": 145,
"InteractionType": "SinglePlayerDuty" "InteractionType": "SinglePlayerDuty",
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292,
"Notes": [
"Will not move into melee range to kill the gate; Alphinaud will kill it after a while"
]
}
} }
] ]
}, },

@ -21,6 +21,16 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"Position": {
"X": 474.62885,
"Y": 200.2377,
"Z": 657.9519
},
"TerritoryId": 397,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest"
},
{ {
"Position": { "Position": {
"X": 486.38373, "X": 486.38373,
@ -28,8 +38,7 @@
"Z": 239.54294 "Z": 239.54294
}, },
"TerritoryId": 397, "TerritoryId": 397,
"InteractionType": "WalkTo", "InteractionType": "WalkTo"
"AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest"
}, },
{ {
"Position": { "Position": {
@ -69,7 +78,11 @@
}, },
"TerritoryId": 397, "TerritoryId": 397,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"DisableNavmesh": true "DisableNavmesh": true,
"SinglePlayerDutyOptions": {
"Enabled": true,
"TestedBossModVersion": 292
}
} }
] ]
}, },

@ -59,7 +59,14 @@
"KillEnemyDataIds": [ "KillEnemyDataIds": [
4015 4015
], ],
"$": "0 0 0 0 0 0 -> " "CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"Position": { "Position": {
@ -72,6 +79,14 @@
"EnemySpawnType": "AutoOnEnterArea", "EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [ "KillEnemyDataIds": [
4015 4015
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
] ]
} }
] ]

Some files were not shown because too many files have changed in this diff Show More