Schema update
This commit is contained in:
parent
dd7152024a
commit
ae87b4ccc5
3
GatheringPathRenderer/GatheringPathRenderer.csproj
Normal file
3
GatheringPathRenderer/GatheringPathRenderer.csproj
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<Project Sdk="Dalamud.NET.Sdk/10.0.0">
|
||||||
|
<Import Project="..\LLib\LLib.targets"/>
|
||||||
|
</Project>
|
11
GatheringPathRenderer/RendererPlugin.cs
Normal file
11
GatheringPathRenderer/RendererPlugin.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using Dalamud.Plugin;
|
||||||
|
|
||||||
|
namespace GatheringPathRenderer;
|
||||||
|
|
||||||
|
public sealed class RendererPlugin : IDalamudPlugin
|
||||||
|
{
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
81
GatheringPathRenderer/packages.lock.json
Normal file
81
GatheringPathRenderer/packages.lock.json
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"net8.0-windows7.0": {
|
||||||
|
"DalamudPackager": {
|
||||||
|
"type": "Direct",
|
||||||
|
"requested": "[2.1.13, )",
|
||||||
|
"resolved": "2.1.13",
|
||||||
|
"contentHash": "rMN1omGe8536f4xLMvx9NwfvpAc9YFFfeXJ1t4P4PE6Gu8WCIoFliR1sh07hM+bfODmesk/dvMbji7vNI+B/pQ=="
|
||||||
|
},
|
||||||
|
"DotNet.ReproducibleBuilds": {
|
||||||
|
"type": "Direct",
|
||||||
|
"requested": "[1.1.1, )",
|
||||||
|
"resolved": "1.1.1",
|
||||||
|
"contentHash": "+H2t/t34h6mhEoUvHi8yGXyuZ2GjSovcGYehJrS2MDm2XgmPfZL2Sdxg+uL2lKgZ4M6tTwKHIlxOob2bgh0NRQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.SourceLink.AzureRepos.Git": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.Bitbucket.Git": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.GitHub": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.GitLab": "1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.SourceLink.Gitea": {
|
||||||
|
"type": "Direct",
|
||||||
|
"requested": "[8.0.0, )",
|
||||||
|
"resolved": "8.0.0",
|
||||||
|
"contentHash": "KOBodmDnlWGIqZt2hT47Q69TIoGhIApDVLCyyj9TT5ct8ju16AbHYcB4XeknoHX562wO1pMS/1DfBIZK+V+sxg==",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Build.Tasks.Git": "8.0.0",
|
||||||
|
"Microsoft.SourceLink.Common": "8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Build.Tasks.Git": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "8.0.0",
|
||||||
|
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
|
||||||
|
},
|
||||||
|
"Microsoft.SourceLink.AzureRepos.Git": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "1.1.1",
|
||||||
|
"contentHash": "qB5urvw9LO2bG3eVAkuL+2ughxz2rR7aYgm2iyrB8Rlk9cp2ndvGRCvehk3rNIhRuNtQaeKwctOl1KvWiklv5w==",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Build.Tasks.Git": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.Common": "1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.SourceLink.Bitbucket.Git": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "1.1.1",
|
||||||
|
"contentHash": "cDzxXwlyWpLWaH0em4Idj0H3AmVo3L/6xRXKssYemx+7W52iNskj/SQ4FOmfCb8YQt39otTDNMveCZzYtMoucQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Build.Tasks.Git": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.Common": "1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.SourceLink.Common": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "8.0.0",
|
||||||
|
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
|
||||||
|
},
|
||||||
|
"Microsoft.SourceLink.GitHub": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "1.1.1",
|
||||||
|
"contentHash": "IaJGnOv/M7UQjRJks7B6p7pbPnOwisYGOIzqCz5ilGFTApZ3ktOR+6zJ12ZRPInulBmdAf1SrGdDG2MU8g6XTw==",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Build.Tasks.Git": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.Common": "1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.SourceLink.GitLab": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "1.1.1",
|
||||||
|
"contentHash": "tvsg47DDLqqedlPeYVE2lmiTpND8F0hkrealQ5hYltSmvruy/Gr5nHAKSsjyw5L3NeM/HLMI5ORv7on/M4qyZw==",
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Build.Tasks.Git": "1.1.1",
|
||||||
|
"Microsoft.SourceLink.Common": "1.1.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
GatheringPaths/2.x - A Realm Reborn/.gitkeep
Normal file
0
GatheringPaths/2.x - A Realm Reborn/.gitkeep
Normal file
0
GatheringPaths/3.x - Heavensward/.gitkeep
Normal file
0
GatheringPaths/3.x - Heavensward/.gitkeep
Normal file
0
GatheringPaths/4.x - Stormblood/.gitkeep
Normal file
0
GatheringPaths/4.x - Stormblood/.gitkeep
Normal file
0
GatheringPaths/5.x - Shadowbringers/.gitkeep
Normal file
0
GatheringPaths/5.x - Shadowbringers/.gitkeep
Normal file
56
GatheringPaths/6.x - Endwalker/Thavnair/820_Pewter Ore.json
Normal file
56
GatheringPaths/6.x - Endwalker/Thavnair/820_Pewter Ore.json
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
|
||||||
|
"Author": "liza",
|
||||||
|
"TerritoryId": 957,
|
||||||
|
"AetheryteShortcut": "Thavnair - Great Work",
|
||||||
|
"Nodes": [
|
||||||
|
{
|
||||||
|
"DataId": 33918,
|
||||||
|
"Position": {
|
||||||
|
"X": -582.5132,
|
||||||
|
"Y": 40.54578,
|
||||||
|
"Z": -426.0171
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DataId": 33919,
|
||||||
|
"Position": {
|
||||||
|
"X": -578.2101,
|
||||||
|
"Y": 41.27147,
|
||||||
|
"Z": -447.6376
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DataId": 33920,
|
||||||
|
"Position": {
|
||||||
|
"X": -488.2276,
|
||||||
|
"Y": 34.71221,
|
||||||
|
"Z": -359.6945
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DataId": 33921,
|
||||||
|
"Position": {
|
||||||
|
"X": -498.8687,
|
||||||
|
"Y": 31.08014,
|
||||||
|
"Z": -351.9397
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DataId": 33922,
|
||||||
|
"Position": {
|
||||||
|
"X": -304.0609,
|
||||||
|
"Y": 68.76999,
|
||||||
|
"Z": -479.1875
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DataId": 33923,
|
||||||
|
"Position": {
|
||||||
|
"X": -293.6989,
|
||||||
|
"Y": 68.77935,
|
||||||
|
"Z": -484.2256
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
0
GatheringPaths/7.x - Dawntrail/.gitkeep
Normal file
0
GatheringPaths/7.x - Dawntrail/.gitkeep
Normal file
32
GatheringPaths/AssemblyGatheringLocationLoader.cs
Normal file
32
GatheringPaths/AssemblyGatheringLocationLoader.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.IO;
|
||||||
|
using Questionable.Model.Gathering;
|
||||||
|
|
||||||
|
namespace Questionable.GatheringPaths;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "PartialTypeWithSinglePart", Justification = "Required for RELEASE")]
|
||||||
|
public static partial class AssemblyGatheringLocationLoader
|
||||||
|
{
|
||||||
|
private static Dictionary<ushort, GatheringRoot>? _locations;
|
||||||
|
|
||||||
|
public static IReadOnlyDictionary<ushort, GatheringRoot> GetLocations()
|
||||||
|
{
|
||||||
|
if (_locations == null)
|
||||||
|
{
|
||||||
|
_locations = [];
|
||||||
|
#if RELEASE
|
||||||
|
LoadLocations();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return _locations ?? throw new InvalidOperationException("quest data is not initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stream QuestSchema =>
|
||||||
|
typeof(AssemblyGatheringLocationLoader).Assembly.GetManifestResourceStream("Questionable.GatheringPaths.GatheringLocationSchema")!;
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "UnusedMember.Local")]
|
||||||
|
private static void AddLocation(ushort questId, GatheringRoot root) => _locations![questId] = root;
|
||||||
|
}
|
43
GatheringPaths/GatheringPaths.csproj
Normal file
43
GatheringPaths/GatheringPaths.csproj
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
|
<LangVersion>12</LangVersion>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<RootNamespace>Questionable.GatheringPaths</RootNamespace>
|
||||||
|
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||||
|
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
|
||||||
|
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Questionable.Model\Questionable.Model.csproj" />
|
||||||
|
<ProjectReference Include="..\QuestPathGenerator\QuestPathGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="gatheringlocation-v1.json" />
|
||||||
|
<EmbeddedResource Include="gatheringlocation-v1.json">
|
||||||
|
<LogicalName>Questionable.GatheringPaths.GatheringLocationSchema</LogicalName>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<AdditionalFiles Include="gatheringlocation-v1.json" />
|
||||||
|
<AdditionalFiles Include="..\Questionable.Model\common-schema.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(Configuration)' == 'Release'">
|
||||||
|
<None Remove="2.x - A Realm Reborn" />
|
||||||
|
<None Remove="3.x - Heavensward" />
|
||||||
|
<None Remove="4.x - Stormblood" />
|
||||||
|
<None Remove="5.x - Shadowbringers" />
|
||||||
|
<None Remove="6.x - Endwalker" />
|
||||||
|
<None Remove="7.x - Dawntrail" />
|
||||||
|
<AdditionalFiles Include="2.x - A Realm Reborn\**\*.json" />
|
||||||
|
<AdditionalFiles Include="3.x - Heavensward\**\*.json" />
|
||||||
|
<AdditionalFiles Include="4.x - Stormblood\**\*.json" />
|
||||||
|
<AdditionalFiles Include="5.x - Shadowbringers\**\*.json" />
|
||||||
|
<AdditionalFiles Include="6.x - Endwalker\**\*.json" />
|
||||||
|
<AdditionalFiles Include="7.x - Dawntrail\**\*.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
98
GatheringPaths/gatheringlocation-v1.json
Normal file
98
GatheringPaths/gatheringlocation-v1.json
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
|
||||||
|
"title": "Gathering Location V1",
|
||||||
|
"description": "A series of gathering locationsk",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"$schema": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json"
|
||||||
|
},
|
||||||
|
"Author": {
|
||||||
|
"description": "Author of the gathering location data",
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"array"
|
||||||
|
],
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"TerritoryId": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"AetheryteShortcut": {
|
||||||
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte"
|
||||||
|
},
|
||||||
|
"Nodes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"DataId": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 30000,
|
||||||
|
"maximum": 50000
|
||||||
|
},
|
||||||
|
"Position": {
|
||||||
|
"$ref": "#/$defs/Vector3"
|
||||||
|
},
|
||||||
|
"MinimumAngle": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": -360,
|
||||||
|
"maximum": 360
|
||||||
|
},
|
||||||
|
"MaximumAngle": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": -360,
|
||||||
|
"maximum": 360
|
||||||
|
},
|
||||||
|
"MinimumDistance": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"MaximumDistance": {
|
||||||
|
"type": "number",
|
||||||
|
"exclusiveMinimum": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"DataId",
|
||||||
|
"Position"
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"$schema",
|
||||||
|
"Author",
|
||||||
|
"TerritoryId",
|
||||||
|
"AetheryteShortcut",
|
||||||
|
"Nodes"
|
||||||
|
],
|
||||||
|
"additionalProperties": false,
|
||||||
|
"$defs": {
|
||||||
|
"Vector3": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Position to (typically) walk to",
|
||||||
|
"properties": {
|
||||||
|
"X": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"Y": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"Z": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"X",
|
||||||
|
"Y",
|
||||||
|
"Z"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
GatheringPaths/packages.lock.json
Normal file
26
GatheringPaths/packages.lock.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"net8.0-windows7.0": {
|
||||||
|
"System.Text.Encodings.Web": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "8.0.0",
|
||||||
|
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
|
||||||
|
},
|
||||||
|
"System.Text.Json": {
|
||||||
|
"type": "Transitive",
|
||||||
|
"resolved": "8.0.4",
|
||||||
|
"contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Text.Encodings.Web": "8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"questionable.model": {
|
||||||
|
"type": "Project",
|
||||||
|
"dependencies": {
|
||||||
|
"System.Text.Json": "[8.0.4, )"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
using Questionable.QuestPathGenerator;
|
using Questionable.QuestPathGenerator;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
163
QuestPathGenerator/GatheringSourceGenerator.cs
Normal file
163
QuestPathGenerator/GatheringSourceGenerator.cs
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.Json;
|
||||||
|
using Json.Schema;
|
||||||
|
using Microsoft.CodeAnalysis;
|
||||||
|
using Microsoft.CodeAnalysis.CSharp;
|
||||||
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
|
using Questionable.Model.Gathering;
|
||||||
|
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
||||||
|
using static Questionable.QuestPathGenerator.RoslynShortcuts;
|
||||||
|
|
||||||
|
namespace Questionable.QuestPathGenerator;
|
||||||
|
|
||||||
|
[Generator]
|
||||||
|
[SuppressMessage("MicrosoftCodeAnalysisReleaseTracking", "RS2008")]
|
||||||
|
public class GatheringSourceGenerator : ISourceGenerator
|
||||||
|
{
|
||||||
|
private static readonly DiagnosticDescriptor InvalidJson = new("GPG0001",
|
||||||
|
"Invalid JSON",
|
||||||
|
"Invalid gathering file: {0}",
|
||||||
|
nameof(GatheringSourceGenerator),
|
||||||
|
DiagnosticSeverity.Error,
|
||||||
|
true);
|
||||||
|
|
||||||
|
public void Initialize(GeneratorInitializationContext context)
|
||||||
|
{
|
||||||
|
// No initialization required for this generator.
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute(GeneratorExecutionContext context)
|
||||||
|
{
|
||||||
|
// Find schema definition
|
||||||
|
AdditionalText? gatheringSchema =
|
||||||
|
context.AdditionalFiles.SingleOrDefault(x => Path.GetFileName(x.Path) == "gatheringlocation-v1.json");
|
||||||
|
if (gatheringSchema != null)
|
||||||
|
GenerateGatheringSource(context, gatheringSchema);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GenerateGatheringSource(GeneratorExecutionContext context, AdditionalText jsonSchemaFile)
|
||||||
|
{
|
||||||
|
var gatheringSchema = JsonSchema.FromText(jsonSchemaFile.GetText()!.ToString());
|
||||||
|
|
||||||
|
List<(ushort, GatheringRoot)> gatheringLocations = [];
|
||||||
|
foreach (var (id, node) in Utils.GetAdditionalFiles(context, jsonSchemaFile, gatheringSchema, InvalidJson))
|
||||||
|
{
|
||||||
|
var gatheringLocation = node.Deserialize<GatheringRoot>()!;
|
||||||
|
gatheringLocations.Add((id, gatheringLocation));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gatheringLocations.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var partitionedLocations = gatheringLocations
|
||||||
|
.OrderBy(x => x.Item1)
|
||||||
|
.GroupBy(x => $"LoadLocation{x.Item1 / 100}")
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var methods = Utils.CreateMethods("LoadLocations", partitionedLocations, CreateInitializer);
|
||||||
|
|
||||||
|
var code =
|
||||||
|
CompilationUnit()
|
||||||
|
.WithUsings(
|
||||||
|
List(
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
UsingDirective(
|
||||||
|
IdentifierName("System")),
|
||||||
|
UsingDirective(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("System"),
|
||||||
|
IdentifierName("Numerics"))),
|
||||||
|
UsingDirective(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("System"),
|
||||||
|
IdentifierName("IO"))),
|
||||||
|
UsingDirective(
|
||||||
|
QualifiedName(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("System"), IdentifierName("Collections")),
|
||||||
|
IdentifierName("Generic"))),
|
||||||
|
UsingDirective(
|
||||||
|
QualifiedName(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("Questionable"),
|
||||||
|
IdentifierName("Model")),
|
||||||
|
IdentifierName("Gathering"))),
|
||||||
|
UsingDirective(
|
||||||
|
QualifiedName(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("Questionable"),
|
||||||
|
IdentifierName("Model")),
|
||||||
|
IdentifierName("Common")))
|
||||||
|
}))
|
||||||
|
.WithMembers(
|
||||||
|
SingletonList<MemberDeclarationSyntax>(
|
||||||
|
FileScopedNamespaceDeclaration(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("Questionable"),
|
||||||
|
IdentifierName("GatheringPaths")))
|
||||||
|
.WithMembers(
|
||||||
|
SingletonList<MemberDeclarationSyntax>(
|
||||||
|
ClassDeclaration("AssemblyGatheringLocationLoader")
|
||||||
|
.WithModifiers(
|
||||||
|
TokenList(Token(SyntaxKind.PartialKeyword)))
|
||||||
|
.WithMembers(List<MemberDeclarationSyntax>(methods))))))
|
||||||
|
.NormalizeWhitespace();
|
||||||
|
|
||||||
|
// Add the source code to the compilation.
|
||||||
|
context.AddSource("AssemblyGatheringLocationLoader.g.cs", code.ToFullString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static StatementSyntax[] CreateInitializer(List<(ushort QuestId, GatheringRoot Root)> quests)
|
||||||
|
{
|
||||||
|
List<StatementSyntax> statements = [];
|
||||||
|
|
||||||
|
foreach (var quest in quests)
|
||||||
|
{
|
||||||
|
statements.Add(
|
||||||
|
ExpressionStatement(
|
||||||
|
InvocationExpression(
|
||||||
|
IdentifierName("AddLocation"))
|
||||||
|
.WithArgumentList(
|
||||||
|
ArgumentList(
|
||||||
|
SeparatedList<ArgumentSyntax>(
|
||||||
|
new SyntaxNodeOrToken[]
|
||||||
|
{
|
||||||
|
Argument(
|
||||||
|
LiteralExpression(SyntaxKind.NumericLiteralExpression,
|
||||||
|
Literal(quest.QuestId))),
|
||||||
|
Token(SyntaxKind.CommaToken),
|
||||||
|
Argument(CreateGatheringRootExpression(quest.QuestId, quest.Root))
|
||||||
|
})))));
|
||||||
|
}
|
||||||
|
|
||||||
|
return statements.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ObjectCreationExpressionSyntax CreateGatheringRootExpression(ushort locationId, GatheringRoot root)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return ObjectCreationExpression(
|
||||||
|
IdentifierName(nameof(GatheringRoot)))
|
||||||
|
.WithInitializer(
|
||||||
|
InitializerExpression(
|
||||||
|
SyntaxKind.ObjectInitializerExpression,
|
||||||
|
SeparatedList<ExpressionSyntax>(
|
||||||
|
SyntaxNodeList(
|
||||||
|
AssignmentList(nameof(GatheringRoot.Author), root.Author).AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringRoot.TerritoryId), root.TerritoryId, default)
|
||||||
|
.AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringRoot.AetheryteShortcut), root.AetheryteShortcut, null),
|
||||||
|
AssignmentList(nameof(GatheringRoot.Nodes), root.Nodes).AsSyntaxNodeOrToken()))));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw new Exception($"GatheringGen[{locationId}]: {e.Message}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Nodes;
|
|
||||||
using Json.Schema;
|
using Json.Schema;
|
||||||
using Microsoft.CodeAnalysis;
|
using Microsoft.CodeAnalysis;
|
||||||
using Microsoft.CodeAnalysis.CSharp;
|
using Microsoft.CodeAnalysis.CSharp;
|
||||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
||||||
using static Questionable.QuestPathGenerator.RoslynShortcuts;
|
using static Questionable.QuestPathGenerator.RoslynShortcuts;
|
||||||
|
|
||||||
@ -38,47 +36,21 @@ public class QuestSourceGenerator : ISourceGenerator
|
|||||||
|
|
||||||
public void Execute(GeneratorExecutionContext context)
|
public void Execute(GeneratorExecutionContext context)
|
||||||
{
|
{
|
||||||
List<(ushort, QuestRoot)> quests = [];
|
|
||||||
|
|
||||||
// Find schema definition
|
// Find schema definition
|
||||||
AdditionalText jsonSchemaFile =
|
AdditionalText? questSchema =
|
||||||
context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "quest-v1.json");
|
context.AdditionalFiles.SingleOrDefault(x => Path.GetFileName(x.Path) == "quest-v1.json");
|
||||||
var questSchema = JsonSchema.FromText(jsonSchemaFile.GetText()!.ToString());
|
if (questSchema != null)
|
||||||
|
GenerateQuestSource(context, questSchema);
|
||||||
// Go through all files marked as an Additional File in file properties.
|
|
||||||
foreach (var additionalFile in context.AdditionalFiles)
|
|
||||||
{
|
|
||||||
if (additionalFile == null || additionalFile == jsonSchemaFile)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (Path.GetExtension(additionalFile.Path) != ".json")
|
|
||||||
continue;
|
|
||||||
|
|
||||||
string name = Path.GetFileName(additionalFile.Path);
|
|
||||||
if (!name.Contains('_'))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ushort id = ushort.Parse(name.Substring(0, name.IndexOf('_')));
|
|
||||||
|
|
||||||
var text = additionalFile.GetText();
|
|
||||||
if (text == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var questNode = JsonNode.Parse(text.ToString());
|
|
||||||
var evaluationResult = questSchema.Evaluate(questNode, new EvaluationOptions
|
|
||||||
{
|
|
||||||
Culture = CultureInfo.InvariantCulture,
|
|
||||||
OutputFormat = OutputFormat.List
|
|
||||||
});
|
|
||||||
if (!evaluationResult.IsValid)
|
|
||||||
{
|
|
||||||
var error = Diagnostic.Create(InvalidJson,
|
|
||||||
null,
|
|
||||||
Path.GetFileName(additionalFile.Path));
|
|
||||||
context.ReportDiagnostic(error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var quest = questNode.Deserialize<QuestRoot>()!;
|
private void GenerateQuestSource(GeneratorExecutionContext context, AdditionalText jsonSchemaFile)
|
||||||
|
{
|
||||||
|
var questSchema = JsonSchema.FromText(jsonSchemaFile.GetText()!.ToString());
|
||||||
|
|
||||||
|
List<(ushort, QuestRoot)> quests = [];
|
||||||
|
foreach (var (id, node) in Utils.GetAdditionalFiles(context, jsonSchemaFile, questSchema, InvalidJson))
|
||||||
|
{
|
||||||
|
var quest = node.Deserialize<QuestRoot>()!;
|
||||||
if (quest.Disabled)
|
if (quest.Disabled)
|
||||||
{
|
{
|
||||||
quest.Author = [];
|
quest.Author = [];
|
||||||
@ -97,38 +69,7 @@ public class QuestSourceGenerator : ISourceGenerator
|
|||||||
.GroupBy(x => $"LoadQuests{x.Item1 / 50}")
|
.GroupBy(x => $"LoadQuests{x.Item1 / 50}")
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
List<MethodDeclarationSyntax> methods =
|
var methods = Utils.CreateMethods("LoadQuests", partitionedQuests, CreateInitializer);
|
||||||
[
|
|
||||||
MethodDeclaration(
|
|
||||||
PredefinedType(
|
|
||||||
Token(SyntaxKind.VoidKeyword)),
|
|
||||||
Identifier("LoadQuests"))
|
|
||||||
.WithModifiers(
|
|
||||||
TokenList(
|
|
||||||
Token(SyntaxKind.PrivateKeyword),
|
|
||||||
Token(SyntaxKind.StaticKeyword)))
|
|
||||||
.WithBody(
|
|
||||||
Block(
|
|
||||||
partitionedQuests
|
|
||||||
.Select(x =>
|
|
||||||
ExpressionStatement(
|
|
||||||
InvocationExpression(
|
|
||||||
IdentifierName(x.Key))))))
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (var partition in partitionedQuests)
|
|
||||||
{
|
|
||||||
methods.Add(MethodDeclaration(
|
|
||||||
PredefinedType(
|
|
||||||
Token(SyntaxKind.VoidKeyword)),
|
|
||||||
Identifier(partition.Key))
|
|
||||||
.WithModifiers(
|
|
||||||
TokenList(
|
|
||||||
Token(SyntaxKind.PrivateKeyword),
|
|
||||||
Token(SyntaxKind.StaticKeyword)))
|
|
||||||
.WithBody(
|
|
||||||
Block(CreateInitializer(partition.ToList()))));
|
|
||||||
}
|
|
||||||
|
|
||||||
var code =
|
var code =
|
||||||
CompilationUnit()
|
CompilationUnit()
|
||||||
@ -156,7 +97,13 @@ public class QuestSourceGenerator : ISourceGenerator
|
|||||||
QualifiedName(
|
QualifiedName(
|
||||||
IdentifierName("Questionable"),
|
IdentifierName("Questionable"),
|
||||||
IdentifierName("Model")),
|
IdentifierName("Model")),
|
||||||
IdentifierName("V1")))
|
IdentifierName("Questing"))),
|
||||||
|
UsingDirective(
|
||||||
|
QualifiedName(
|
||||||
|
QualifiedName(
|
||||||
|
IdentifierName("Questionable"),
|
||||||
|
IdentifierName("Model")),
|
||||||
|
IdentifierName("Common")))
|
||||||
}))
|
}))
|
||||||
.WithMembers(
|
.WithMembers(
|
||||||
SingletonList<MemberDeclarationSyntax>(
|
SingletonList<MemberDeclarationSyntax>(
|
||||||
|
@ -6,7 +6,9 @@ using System.Numerics;
|
|||||||
using Microsoft.CodeAnalysis;
|
using Microsoft.CodeAnalysis;
|
||||||
using Microsoft.CodeAnalysis.CSharp;
|
using Microsoft.CodeAnalysis.CSharp;
|
||||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Gathering;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
||||||
|
|
||||||
namespace Questionable.QuestPathGenerator;
|
namespace Questionable.QuestPathGenerator;
|
||||||
@ -312,6 +314,32 @@ public static class RoslynShortcuts
|
|||||||
Assignment(nameof(SkipAetheryteCondition.InSameTerritory),
|
Assignment(nameof(SkipAetheryteCondition.InSameTerritory),
|
||||||
skipAetheryteCondition.InSameTerritory, emptyAetheryte.InSameTerritory)))));
|
skipAetheryteCondition.InSameTerritory, emptyAetheryte.InSameTerritory)))));
|
||||||
}
|
}
|
||||||
|
else if (value is GatheringNodeLocation nodeLocation)
|
||||||
|
{
|
||||||
|
var emptyLocation = new GatheringNodeLocation();
|
||||||
|
return ObjectCreationExpression(
|
||||||
|
IdentifierName(nameof(GatheringNodeLocation)))
|
||||||
|
.WithInitializer(
|
||||||
|
InitializerExpression(
|
||||||
|
SyntaxKind.ObjectInitializerExpression,
|
||||||
|
SeparatedList<ExpressionSyntax>(
|
||||||
|
SyntaxNodeList(
|
||||||
|
Assignment(nameof(GatheringNodeLocation.DataId), nodeLocation.DataId,
|
||||||
|
emptyLocation.DataId)
|
||||||
|
.AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringNodeLocation.Position), nodeLocation.Position,
|
||||||
|
emptyLocation.Position).AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringNodeLocation.MinimumAngle), nodeLocation.MinimumAngle,
|
||||||
|
emptyLocation.MinimumAngle).AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringNodeLocation.MaximumAngle), nodeLocation.MaximumAngle,
|
||||||
|
emptyLocation.MaximumAngle).AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringNodeLocation.MinimumDistance),
|
||||||
|
nodeLocation.MinimumDistance, emptyLocation.MinimumDistance)
|
||||||
|
.AsSyntaxNodeOrToken(),
|
||||||
|
Assignment(nameof(GatheringNodeLocation.MaximumDistance),
|
||||||
|
nodeLocation.MaximumDistance, emptyLocation.MaximumDistance)
|
||||||
|
.AsSyntaxNodeOrToken()))));
|
||||||
|
}
|
||||||
else if (value is null)
|
else if (value is null)
|
||||||
return LiteralExpression(SyntaxKind.NullLiteralExpression);
|
return LiteralExpression(SyntaxKind.NullLiteralExpression);
|
||||||
}
|
}
|
||||||
|
109
QuestPathGenerator/Utils.cs
Normal file
109
QuestPathGenerator/Utils.cs
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
|
using Json.Schema;
|
||||||
|
using Microsoft.CodeAnalysis;
|
||||||
|
using Microsoft.CodeAnalysis.CSharp;
|
||||||
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
|
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
||||||
|
|
||||||
|
namespace Questionable.QuestPathGenerator;
|
||||||
|
|
||||||
|
public static class Utils
|
||||||
|
{
|
||||||
|
public static IEnumerable<(ushort, JsonNode)> GetAdditionalFiles(GeneratorExecutionContext context,
|
||||||
|
AdditionalText jsonSchemaFile, JsonSchema jsonSchema, DiagnosticDescriptor invalidJson)
|
||||||
|
{
|
||||||
|
var commonSchemaFile = context.AdditionalFiles.Single(x => Path.GetFileName(x.Path) == "common-schema.json");
|
||||||
|
List<AdditionalText> jsonSchemaFiles = [jsonSchemaFile, commonSchemaFile];
|
||||||
|
|
||||||
|
SchemaRegistry.Global.Register(
|
||||||
|
new Uri("https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json"),
|
||||||
|
JsonSchema.FromText(commonSchemaFile.GetText()!.ToString()));
|
||||||
|
|
||||||
|
foreach (var additionalFile in context.AdditionalFiles)
|
||||||
|
{
|
||||||
|
if (additionalFile == null || jsonSchemaFiles.Contains(additionalFile))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (Path.GetExtension(additionalFile.Path) != ".json")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string name = Path.GetFileName(additionalFile.Path);
|
||||||
|
if (!name.Contains("_"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ushort id = ushort.Parse(name.Substring(0, name.IndexOf('_')));
|
||||||
|
|
||||||
|
var text = additionalFile.GetText();
|
||||||
|
if (text == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var node = JsonNode.Parse(text.ToString());
|
||||||
|
if (node == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string? schemaLocation = node["$schema"]?.GetValue<string?>();
|
||||||
|
if (schemaLocation == null || new Uri(schemaLocation) != jsonSchema.GetId())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var evaluationResult = jsonSchema.Evaluate(node, new EvaluationOptions
|
||||||
|
{
|
||||||
|
Culture = CultureInfo.InvariantCulture,
|
||||||
|
OutputFormat = OutputFormat.List,
|
||||||
|
});
|
||||||
|
if (!evaluationResult.IsValid)
|
||||||
|
{
|
||||||
|
var error = Diagnostic.Create(invalidJson,
|
||||||
|
null,
|
||||||
|
Path.GetFileName(additionalFile.Path));
|
||||||
|
context.ReportDiagnostic(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return (id, node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MethodDeclarationSyntax> CreateMethods<T>(string prefix,
|
||||||
|
List<IGrouping<string, (ushort, T)>> partitions,
|
||||||
|
Func<List<(ushort, T)>, StatementSyntax[]> toInitializers)
|
||||||
|
{
|
||||||
|
List<MethodDeclarationSyntax> methods =
|
||||||
|
[
|
||||||
|
MethodDeclaration(
|
||||||
|
PredefinedType(
|
||||||
|
Token(SyntaxKind.VoidKeyword)),
|
||||||
|
Identifier(prefix))
|
||||||
|
.WithModifiers(
|
||||||
|
TokenList(
|
||||||
|
Token(SyntaxKind.PrivateKeyword),
|
||||||
|
Token(SyntaxKind.StaticKeyword)))
|
||||||
|
.WithBody(
|
||||||
|
Block(
|
||||||
|
partitions
|
||||||
|
.Select(x =>
|
||||||
|
ExpressionStatement(
|
||||||
|
InvocationExpression(
|
||||||
|
IdentifierName(x.Key))))))
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach (var partition in partitions)
|
||||||
|
{
|
||||||
|
methods.Add(MethodDeclaration(
|
||||||
|
PredefinedType(
|
||||||
|
Token(SyntaxKind.VoidKeyword)),
|
||||||
|
Identifier(partition.Key))
|
||||||
|
.WithModifiers(
|
||||||
|
TokenList(
|
||||||
|
Token(SyntaxKind.PrivateKeyword),
|
||||||
|
Token(SyntaxKind.StaticKeyword)))
|
||||||
|
.WithBody(
|
||||||
|
Block(toInitializers(partition.ToList()))));
|
||||||
|
}
|
||||||
|
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using Questionable.Model.Questing;
|
||||||
using Questionable.Model.V1;
|
|
||||||
|
|
||||||
namespace Questionable.QuestPaths;
|
namespace Questionable.QuestPaths;
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
<LogicalName>Questionable.QuestPaths.QuestSchema</LogicalName>
|
<LogicalName>Questionable.QuestPaths.QuestSchema</LogicalName>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<AdditionalFiles Include="quest-v1.json" />
|
<AdditionalFiles Include="quest-v1.json" />
|
||||||
|
<AdditionalFiles Include="..\Questionable.Model\common-schema.json" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition="'$(Configuration)' == 'Release'">
|
<ItemGroup Condition="'$(Configuration)' == 'Release'">
|
||||||
|
@ -154,7 +154,7 @@
|
|||||||
},
|
},
|
||||||
"AetheryteShortcut": {
|
"AetheryteShortcut": {
|
||||||
"description": "The Aetheryte to teleport to (before moving)",
|
"description": "The Aetheryte to teleport to (before moving)",
|
||||||
"$ref": "#/$defs/Aetheryte"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte"
|
||||||
},
|
},
|
||||||
"AethernetShortcut": {
|
"AethernetShortcut": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@ -162,7 +162,7 @@
|
|||||||
"minItems": 2,
|
"minItems": 2,
|
||||||
"maxItems": 2,
|
"maxItems": 2,
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/$defs/AethernetShard"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ItemId": {
|
"ItemId": {
|
||||||
@ -183,7 +183,7 @@
|
|||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
"CompletionQuestVariablesFlags": {
|
"CompletionQuestVariablesFlags": {
|
||||||
"$ref": "#/$defs/CompletionFlags"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags"
|
||||||
},
|
},
|
||||||
"Flying": {
|
"Flying": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -271,7 +271,7 @@
|
|||||||
"additionalProperties": false
|
"additionalProperties": false
|
||||||
},
|
},
|
||||||
"CompletionQuestVariablesFlags": {
|
"CompletionQuestVariablesFlags": {
|
||||||
"$ref": "#/$defs/CompletionFlags"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags"
|
||||||
},
|
},
|
||||||
"RequiredQuestVariables": {
|
"RequiredQuestVariables": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@ -383,7 +383,7 @@
|
|||||||
"then": {
|
"then": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"Aetheryte": {
|
"Aetheryte": {
|
||||||
"$ref": "#/$defs/Aetheryte"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte"
|
||||||
},
|
},
|
||||||
"DataId": {
|
"DataId": {
|
||||||
"type": "null"
|
"type": "null"
|
||||||
@ -415,7 +415,7 @@
|
|||||||
"then": {
|
"then": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"AethernetShard": {
|
"AethernetShard": {
|
||||||
"$ref": "#/$defs/AethernetShard"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard"
|
||||||
},
|
},
|
||||||
"DataId": {
|
"DataId": {
|
||||||
"type": "null"
|
"type": "null"
|
||||||
@ -507,7 +507,7 @@
|
|||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"CompletionQuestVariablesFlags": {
|
"CompletionQuestVariablesFlags": {
|
||||||
"$ref": "#/$defs/CompletionFlags"
|
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags"
|
||||||
},
|
},
|
||||||
"IgnoreQuestMarker": {
|
"IgnoreQuestMarker": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
@ -1073,300 +1073,5 @@
|
|||||||
"QuestSequence",
|
"QuestSequence",
|
||||||
"Author"
|
"Author"
|
||||||
],
|
],
|
||||||
"additionalProperties": false,
|
"additionalProperties": false
|
||||||
"$defs": {
|
|
||||||
"Aetheryte": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"Gridania",
|
|
||||||
"Central Shroud - Bentbranch Meadows",
|
|
||||||
"East Shroud - Hawthorne Hut",
|
|
||||||
"South Shroud - Quarrymill",
|
|
||||||
"South Shroud - Camp Tranquil",
|
|
||||||
"North Shroud - Fallgourd Float",
|
|
||||||
"Ul'dah",
|
|
||||||
"Western Thanalan - Horizon",
|
|
||||||
"Central Thanalan - Black Brush Station",
|
|
||||||
"Eastern Thanalan - Camp Drybone",
|
|
||||||
"Southern Thanalan - Little Ala Mhigo",
|
|
||||||
"Southern Thanalan - Forgotten Springs",
|
|
||||||
"Northern Thanalan - Camp Bluefog",
|
|
||||||
"Northern Thanalan - Ceruleum Processing Plant",
|
|
||||||
"Limsa Lominsa",
|
|
||||||
"Middle La Noscea - Summerford Farms",
|
|
||||||
"Lower La Noscea - Moraby Drydocks",
|
|
||||||
"Eastern La Noscea - Costa Del Sol",
|
|
||||||
"Eastern La Noscea - Wineport",
|
|
||||||
"Western La Noscea - Swiftperch",
|
|
||||||
"Western La Noscea - Aleport",
|
|
||||||
"Upper La Noscea - Camp Bronze Lake",
|
|
||||||
"Outer La Noscea - Camp Overlook",
|
|
||||||
"Coerthas Central Highlands - Camp Dragonhead",
|
|
||||||
"Mor Dhona",
|
|
||||||
"Gold Saucer",
|
|
||||||
"Wolves' Den Pier",
|
|
||||||
"Ishgard",
|
|
||||||
"Idyllshire",
|
|
||||||
"Coerthas Western Highlands - Falcon's Nest",
|
|
||||||
"The Sea of Clouds - Camp Cloudtop",
|
|
||||||
"The Sea of Clouds - Ok' Zundu",
|
|
||||||
"Azys Lla - Helix",
|
|
||||||
"The Dravanian Forelands - Tailfeather",
|
|
||||||
"The Dravanian Forelands - Anyx Trine",
|
|
||||||
"The Churning Mists - Moghome",
|
|
||||||
"The Churning Mists - Zenith",
|
|
||||||
"Rhalgr's Reach",
|
|
||||||
"Fringes - Castrum Oriens",
|
|
||||||
"Fringes - Peering Stones",
|
|
||||||
"Peaks - Ala Gannha",
|
|
||||||
"Peaks - Ala Ghiri",
|
|
||||||
"Lochs - Porta Praetoria",
|
|
||||||
"Lochs - Ala Mhigan Quarter",
|
|
||||||
"Kugane",
|
|
||||||
"Ruby Sea - Tamamizu",
|
|
||||||
"Ruby Sea - Onokoro",
|
|
||||||
"Yanxia - Namai",
|
|
||||||
"Yanxia - House of the Fierce",
|
|
||||||
"Azim Steppe - Reunion",
|
|
||||||
"Azim Steppe - Dawn Throne",
|
|
||||||
"Azim Steppe - Dhoro Iloh",
|
|
||||||
"Doman Enclave",
|
|
||||||
"Crystarium",
|
|
||||||
"Eulmore",
|
|
||||||
"Lakeland - Fort Jobb",
|
|
||||||
"Lakeland - Ostall Imperative",
|
|
||||||
"Kholusia - Stilltide",
|
|
||||||
"Kholusia - Wright",
|
|
||||||
"Kholusia - Tomra",
|
|
||||||
"Amh Araeng - Mord Souq",
|
|
||||||
"Amh Araeng - Inn at Journey's Head",
|
|
||||||
"Amh Araeng - Twine",
|
|
||||||
"Rak'tika - Slitherbough",
|
|
||||||
"Rak'tika - Fanow",
|
|
||||||
"Il Mheg - Lydha Lran",
|
|
||||||
"Il Mheg - Pia Enni",
|
|
||||||
"Il Mheg - Wolekdorf",
|
|
||||||
"Tempest - Ondo Cups",
|
|
||||||
"Tempest - Macarenses Angle",
|
|
||||||
"Old Sharlayan",
|
|
||||||
"Radz-at-Han",
|
|
||||||
"Labyrinthos - Archeion",
|
|
||||||
"Labyrinthos - Sharlayan Hamlet",
|
|
||||||
"Labyrinthos - Aporia",
|
|
||||||
"Thavnair - Yedlihmad",
|
|
||||||
"Thavnair - Great Work",
|
|
||||||
"Thavnair - Palaka's Stand",
|
|
||||||
"Garlemald - Camp Broken Glass",
|
|
||||||
"Garlemald - Tertium",
|
|
||||||
"Mare Lamentorum - Sinus Lacrimarum",
|
|
||||||
"Mare Lamentorum - Bestways Burrow",
|
|
||||||
"Elpis - Anagnorisis",
|
|
||||||
"Elpis - Twelve Wonders",
|
|
||||||
"Elpis - Poieten Oikos",
|
|
||||||
"Ultima Thule - Reah Tahra",
|
|
||||||
"Ultima Thule - Abode of the Ea",
|
|
||||||
"Ultima Thule - Base Omicron",
|
|
||||||
"Tuliyollal",
|
|
||||||
"Solution Nine",
|
|
||||||
"Urqopacha - Wachunpelo",
|
|
||||||
"Urqopacha - Worlar's Echo",
|
|
||||||
"Kozama'uka - Ok'hanu",
|
|
||||||
"Kozama'uka - Many Fires",
|
|
||||||
"Kozama'uka - Earthenshire",
|
|
||||||
"Yak T'el - Iq Br'aax",
|
|
||||||
"Yak T'el - Mamook",
|
|
||||||
"Shaaloani - Hhusatahwi",
|
|
||||||
"Shaaloani - Sheshenewezi Springs",
|
|
||||||
"Shaaloani - Mehwahhetsoan",
|
|
||||||
"Heritage Found - Yyasulani Station",
|
|
||||||
"Heritage Found - The Outskirts",
|
|
||||||
"Heritage Found - Electrope Strike",
|
|
||||||
"Living Memory - Leynode Mnemo",
|
|
||||||
"Living Memory - Leynode Pyro",
|
|
||||||
"Living Memory - Leynode Aero"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"AethernetShard": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"[Gridania] Aetheryte Plaza",
|
|
||||||
"[Gridania] Archers' Guild",
|
|
||||||
"[Gridania] Leatherworkers' Guild & Shaded Bower",
|
|
||||||
"[Gridania] Lancers' Guild",
|
|
||||||
"[Gridania] Conjurers' Guild",
|
|
||||||
"[Gridania] Botanists' Guild",
|
|
||||||
"[Gridania] Mih Khetto's Amphitheatre",
|
|
||||||
"[Gridania] Blue Badger Gate (Central Shroud)",
|
|
||||||
"[Gridania] Yellow Serpent Gate (North Shroud)",
|
|
||||||
"[Gridania] White Wolf Gate (Central Shroud)",
|
|
||||||
"[Gridania] Airship Landing",
|
|
||||||
"[Ul'dah] Aetheryte Plaza",
|
|
||||||
"[Ul'dah] Adventurers' Guild",
|
|
||||||
"[Ul'dah] Thaumaturges' Guild",
|
|
||||||
"[Ul'dah] Gladiators' Guild",
|
|
||||||
"[Ul'dah] Miners' Guild",
|
|
||||||
"[Ul'dah] Weavers' Guild",
|
|
||||||
"[Ul'dah] Goldsmiths' Guild",
|
|
||||||
"[Ul'dah] Sapphire Avenue Exchange",
|
|
||||||
"[Ul'dah] Alchemists' Guild",
|
|
||||||
"[Ul'dah] Gate of the Sultana (Western Thanalan)",
|
|
||||||
"[Ul'dah] Gate of Nald (Central Thanalan)",
|
|
||||||
"[Ul'dah] Gate of Thal (Central Thanalan)",
|
|
||||||
"[Ul'dah] The Chamber of Rule",
|
|
||||||
"[Ul'dah] Airship Landing",
|
|
||||||
"[Limsa Lominsa] Aetheryte Plaza",
|
|
||||||
"[Limsa Lominsa] Arcanists' Guild",
|
|
||||||
"[Limsa Lominsa] Fishermens' Guild",
|
|
||||||
"[Limsa Lominsa] Hawkers' Alley",
|
|
||||||
"[Limsa Lominsa] The Aftcastle",
|
|
||||||
"[Limsa Lominsa] Culinarians' Guild",
|
|
||||||
"[Limsa Lominsa] Marauders' Guild",
|
|
||||||
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)",
|
|
||||||
"[Limsa Lominsa] Tempest Gate (Lower La Noscea)",
|
|
||||||
"[Limsa Lominsa] Airship Landing",
|
|
||||||
"[Ishgard] Aetheryte Plaza",
|
|
||||||
"[Ishgard] The Forgotten Knight",
|
|
||||||
"[Ishgard] Skysteel Manufactory",
|
|
||||||
"[Ishgard] The Brume",
|
|
||||||
"[Ishgard] Athenaeum Astrologicum",
|
|
||||||
"[Ishgard] The Jeweled Crozier",
|
|
||||||
"[Ishgard] Saint Reymanaud's Cathedral",
|
|
||||||
"[Ishgard] The Tribunal",
|
|
||||||
"[Ishgard] The Last Vigil",
|
|
||||||
"[Ishgard] The Gates of Judgement (Coerthas Central Highlands)",
|
|
||||||
"[Idyllshire] Aetheryte Plaza",
|
|
||||||
"[Idyllshire] West Idyllshire",
|
|
||||||
"[Idyllshire] Prologue Gate (Western Hinterlands)",
|
|
||||||
"[Idyllshire] Epilogue Gate (Eastern Hinterlands)",
|
|
||||||
"[Rhalgr's Reach] Aetheryte Plaza",
|
|
||||||
"[Rhalgr's Reach] Western Rhalgr's Reach",
|
|
||||||
"[Rhalgr's Reach] Northeastern Rhalgr's Reach",
|
|
||||||
"[Rhalgr's Reach] Fringes Gate",
|
|
||||||
"[Rhalgr's Reach] Peaks Gate",
|
|
||||||
"[Kugane] Aetheryte Plaza",
|
|
||||||
"[Kugane] Shiokaze Hostelry",
|
|
||||||
"[Kugane] Pier #1",
|
|
||||||
"[Kugane] Thavnairian Consulate",
|
|
||||||
"[Kugane] Kogane Dori Markets",
|
|
||||||
"[Kugane] Bokairo Inn",
|
|
||||||
"[Kugane] The Ruby Bazaar",
|
|
||||||
"[Kugane] Sekiseigumi Barracks",
|
|
||||||
"[Kugane] Rakuza District",
|
|
||||||
"[Kugane] The Ruby Price",
|
|
||||||
"[Kugane] Airship Landing",
|
|
||||||
"[Crystarium] Aetheryte Plaza",
|
|
||||||
"[Crystarium] Musica Universalis Markets",
|
|
||||||
"[Crystarium] Temenos Rookery",
|
|
||||||
"[Crystarium] The Dossal Gate",
|
|
||||||
"[Crystarium] The Pendants",
|
|
||||||
"[Crystarium] The Amaro Launch",
|
|
||||||
"[Crystarium] The Crystalline Mean",
|
|
||||||
"[Crystarium] The Cabinet of Curiosity",
|
|
||||||
"[Crystarium] Tessellation (Lakeland)",
|
|
||||||
"[Eulmore] Aetheryte Plaza",
|
|
||||||
"[Eulmore] Southeast Derelicts",
|
|
||||||
"[Eulmore] Nightsoil Pots",
|
|
||||||
"[Eulmore] The Glory Gate",
|
|
||||||
"[Eulmore] The Mainstay",
|
|
||||||
"[Eulmore] The Path to Glory (Kholusia)",
|
|
||||||
"[Old Sharlayan] Aetheryte Plaza",
|
|
||||||
"[Old Sharlayan] The Studium",
|
|
||||||
"[Old Sharlayan] The Baldesion Annex",
|
|
||||||
"[Old Sharlayan] The Rostra",
|
|
||||||
"[Old Sharlayan] The Leveilleur Estate",
|
|
||||||
"[Old Sharlayan] Journey's End",
|
|
||||||
"[Old Sharlayan] Scholar's Harbor",
|
|
||||||
"[Old Sharlayan] The Hall of Artifice (Labyrinthos)",
|
|
||||||
"[Radz-at-Han] Aetheryte Plaza",
|
|
||||||
"[Radz-at-Han] Meghaduta",
|
|
||||||
"[Radz-at-Han] Ruveydah Fibers",
|
|
||||||
"[Radz-at-Han] Airship Landing",
|
|
||||||
"[Radz-at-Han] Alzadaal's Peace",
|
|
||||||
"[Radz-at-Han] Hall of the Radiant Host",
|
|
||||||
"[Radz-at-Han] Mehryde's Meyhane",
|
|
||||||
"[Radz-at-Han] Kama",
|
|
||||||
"[Radz-at-Han] The High Crucible of Al-Kimiya",
|
|
||||||
"[Radz-at-Han] The Gate of First Sight (Thavnair)",
|
|
||||||
"[Tuliyollal] Aetheryte Plaza",
|
|
||||||
"[Tuliyollal] Dirigible Landing",
|
|
||||||
"[Tuliyollal] The Resplendent Quarter",
|
|
||||||
"[Tuliyollal] The For'ard Cabins",
|
|
||||||
"[Tuliyollal] Bayside Bevy Marketplace",
|
|
||||||
"[Tuliyollal] Vollok Shoonsa",
|
|
||||||
"[Tuliyollal] Wachumeqimeqi",
|
|
||||||
"[Tuliyollal] Brightploom Post",
|
|
||||||
"[Tuliyollal] Arch of the Dawn (Urqopacha)",
|
|
||||||
"[Tuliyollal] Arch of the Dawn (Kozama'uka)",
|
|
||||||
"[Tuliyollal] Ihuykatumu (Kozama'uka)",
|
|
||||||
"[Tuliyollal] Dirigible Landing (Yak T'el)",
|
|
||||||
"[Tuliyollal] Xak Tural Skygate (Shaaloani)",
|
|
||||||
"[Solution Nine] Aetheryte Plaza",
|
|
||||||
"[Solution Nine] Information Center",
|
|
||||||
"[Solution Nine] True Vue",
|
|
||||||
"[Solution Nine] Neon Stein",
|
|
||||||
"[Solution Nine] The Arcadion",
|
|
||||||
"[Solution Nine] Resolution",
|
|
||||||
"[Solution Nine] Nexus Arcade",
|
|
||||||
"[Solution Nine] Residential Sector",
|
|
||||||
"[Solution Nine] Scanning Port Nine (Heritage Found)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"CompletionFlags": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset",
|
|
||||||
"items": {
|
|
||||||
"oneOf": [
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"High": {
|
|
||||||
"type": [
|
|
||||||
"number",
|
|
||||||
"null"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 15
|
|
||||||
},
|
|
||||||
"Low": {
|
|
||||||
"type": [
|
|
||||||
"number",
|
|
||||||
"null"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 15
|
|
||||||
},
|
|
||||||
"Negative": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"Mode": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"Bitwise",
|
|
||||||
"Exact"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "number",
|
|
||||||
"enum": [
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
4,
|
|
||||||
8,
|
|
||||||
16,
|
|
||||||
32,
|
|
||||||
64,
|
|
||||||
128
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"minItems": 6,
|
|
||||||
"maxItems": 6
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
9
Questionable.Model/AssemblyModelLoader.cs
Normal file
9
Questionable.Model/AssemblyModelLoader.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Questionable.Model;
|
||||||
|
|
||||||
|
public static class AssemblyModelLoader
|
||||||
|
{
|
||||||
|
public static Stream CommonSchema =>
|
||||||
|
typeof(AssemblyModelLoader).Assembly.GetManifestResourceStream("Questionable.Model.CommonSchema")!;
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
public sealed class AetheryteConverter() : EnumConverter<EAetheryteLocation>(Values)
|
public sealed class AetheryteConverter() : EnumConverter<EAetheryteLocation>(Values)
|
||||||
{
|
{
|
@ -5,7 +5,7 @@ using System.Linq;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
public abstract class EnumConverter<T> : JsonConverter<T>
|
public abstract class EnumConverter<T> : JsonConverter<T>
|
||||||
where T : Enum
|
where T : Enum
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
public sealed class StringListOrValueConverter : JsonConverter<List<string>>
|
public sealed class StringListOrValueConverter : JsonConverter<List<string>>
|
||||||
{
|
{
|
@ -3,7 +3,7 @@ using System.Numerics;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
public sealed class VectorConverter : JsonConverter<Vector3>
|
public sealed class VectorConverter : JsonConverter<Vector3>
|
||||||
{
|
{
|
@ -1,7 +1,8 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common.Converter;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Common;
|
||||||
|
|
||||||
[JsonConverter(typeof(AetheryteConverter))]
|
[JsonConverter(typeof(AetheryteConverter))]
|
||||||
public enum EAetheryteLocation
|
public enum EAetheryteLocation
|
13
Questionable.Model/Gathering/GatheringNodeLocation.cs
Normal file
13
Questionable.Model/Gathering/GatheringNodeLocation.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System.Numerics;
|
||||||
|
|
||||||
|
namespace Questionable.Model.Gathering;
|
||||||
|
|
||||||
|
public sealed class GatheringNodeLocation
|
||||||
|
{
|
||||||
|
public uint DataId { get; set; }
|
||||||
|
public Vector3 Position { get; set; }
|
||||||
|
public float? MinimumAngle { get; set; }
|
||||||
|
public float? MaximumAngle { get; set; }
|
||||||
|
public float? MinimumDistance { get; set; } = 0.5f;
|
||||||
|
public float? MaximumDistance { get; set; } = 3f;
|
||||||
|
}
|
18
Questionable.Model/Gathering/GatheringRoot.cs
Normal file
18
Questionable.Model/Gathering/GatheringRoot.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
|
namespace Questionable.Model.Gathering;
|
||||||
|
|
||||||
|
public sealed class GatheringRoot
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(StringListOrValueConverter))]
|
||||||
|
public List<string> Author { get; set; } = [];
|
||||||
|
public ushort TerritoryId { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(AetheryteConverter))]
|
||||||
|
public EAetheryteLocation? AetheryteShortcut { get; set; }
|
||||||
|
|
||||||
|
public List<GatheringNodeLocation> Nodes { get; set; } = [];
|
||||||
|
}
|
@ -1,7 +1,8 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(AethernetShortcutConverter))]
|
[JsonConverter(typeof(AethernetShortcutConverter))]
|
||||||
public sealed class AethernetShortcut
|
public sealed class AethernetShortcut
|
@ -1,4 +1,4 @@
|
|||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class ChatMessage
|
public sealed class ChatMessage
|
||||||
{
|
{
|
@ -1,6 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class ComplexCombatData
|
public sealed class ComplexCombatData
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class ActionConverter() : EnumConverter<EAction>(Values)
|
public sealed class ActionConverter() : EnumConverter<EAction>(Values)
|
||||||
{
|
{
|
@ -1,6 +1,8 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class AethernetShardConverter() : EnumConverter<EAetheryteLocation>(Values)
|
public sealed class AethernetShardConverter() : EnumConverter<EAetheryteLocation>(Values)
|
||||||
{
|
{
|
@ -3,8 +3,9 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
using Questionable.Model.Common;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class AethernetShortcutConverter : JsonConverter<AethernetShortcut>
|
public sealed class AethernetShortcutConverter : JsonConverter<AethernetShortcut>
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class DialogueChoiceTypeConverter() : EnumConverter<EDialogChoiceType>(Values)
|
public sealed class DialogueChoiceTypeConverter() : EnumConverter<EDialogChoiceType>(Values)
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class EmoteConverter() : EnumConverter<EEmote>(Values)
|
public sealed class EmoteConverter() : EnumConverter<EEmote>(Values)
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class EnemySpawnTypeConverter() : EnumConverter<EEnemySpawnType>(Values)
|
public sealed class EnemySpawnTypeConverter() : EnumConverter<EEnemySpawnType>(Values)
|
||||||
{
|
{
|
@ -2,7 +2,7 @@
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class ExcelRefConverter : JsonConverter<ExcelRef>
|
public sealed class ExcelRefConverter : JsonConverter<ExcelRef>
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>(Values)
|
public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>(Values)
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class JumpTypeConverter() : EnumConverter<EJumpType>(Values)
|
public sealed class JumpTypeConverter() : EnumConverter<EJumpType>(Values)
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class LockedSkipConditionConverter() : EnumConverter<ELockedSkipCondition>(Values)
|
public sealed class LockedSkipConditionConverter() : EnumConverter<ELockedSkipCondition>(Values)
|
||||||
{
|
{
|
@ -2,7 +2,7 @@
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class QuestWorkConfigConverter : JsonConverter<QuestWorkValue>
|
public sealed class QuestWorkConfigConverter : JsonConverter<QuestWorkValue>
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class QuestWorkModeConverter() : EnumConverter<EQuestWorkMode>(Values)
|
public sealed class QuestWorkModeConverter() : EnumConverter<EQuestWorkMode>(Values)
|
||||||
{
|
{
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1.Converter;
|
namespace Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
public sealed class SkipConditionConverter() : EnumConverter<EExtraSkipCondition>(Values)
|
public sealed class SkipConditionConverter() : EnumConverter<EExtraSkipCondition>(Values)
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class DialogueChoice
|
public sealed class DialogueChoice
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(ActionConverter))]
|
[JsonConverter(typeof(ActionConverter))]
|
||||||
public enum EAction
|
public enum EAction
|
@ -1,4 +1,4 @@
|
|||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public enum EDialogChoiceType
|
public enum EDialogChoiceType
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(EmoteConverter))]
|
[JsonConverter(typeof(EmoteConverter))]
|
||||||
public enum EEmote
|
public enum EEmote
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(EnemySpawnTypeConverter))]
|
[JsonConverter(typeof(EnemySpawnTypeConverter))]
|
||||||
public enum EEnemySpawnType
|
public enum EEnemySpawnType
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(SkipConditionConverter))]
|
[JsonConverter(typeof(SkipConditionConverter))]
|
||||||
public enum EExtraSkipCondition
|
public enum EExtraSkipCondition
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(InteractionTypeConverter))]
|
[JsonConverter(typeof(InteractionTypeConverter))]
|
||||||
public enum EInteractionType
|
public enum EInteractionType
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(JumpTypeConverter))]
|
[JsonConverter(typeof(JumpTypeConverter))]
|
||||||
public enum EJumpType
|
public enum EJumpType
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(LockedSkipConditionConverter))]
|
[JsonConverter(typeof(LockedSkipConditionConverter))]
|
||||||
public enum ELockedSkipCondition
|
public enum ELockedSkipCondition
|
@ -1,7 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(QuestWorkModeConverter))]
|
[JsonConverter(typeof(QuestWorkModeConverter))]
|
||||||
public enum EQuestWorkMode
|
public enum EQuestWorkMode
|
@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public class ExcelRef
|
public class ExcelRef
|
||||||
{
|
{
|
@ -1,8 +1,9 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common.Converter;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class JumpDestination
|
public sealed class JumpDestination
|
||||||
{
|
{
|
@ -1,8 +1,9 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common.Converter;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class QuestRoot
|
public sealed class QuestRoot
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class QuestSequence
|
public sealed class QuestSequence
|
||||||
{
|
{
|
@ -1,9 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Common.Converter;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class QuestStep
|
public sealed class QuestStep
|
||||||
{
|
{
|
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
[JsonConverter(typeof(QuestWorkConfigConverter))]
|
[JsonConverter(typeof(QuestWorkConfigConverter))]
|
||||||
public sealed class QuestWorkValue(byte? high, byte? low, EQuestWorkMode mode)
|
public sealed class QuestWorkValue(byte? high, byte? low, EQuestWorkMode mode)
|
@ -1,4 +1,4 @@
|
|||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class SkipAetheryteCondition
|
public sealed class SkipAetheryteCondition
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class SkipConditions
|
public sealed class SkipConditions
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class SkipItemConditions
|
public sealed class SkipItemConditions
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace Questionable.Model.V1;
|
namespace Questionable.Model.Questing;
|
||||||
|
|
||||||
public sealed class SkipStepConditions
|
public sealed class SkipStepConditions
|
||||||
{
|
{
|
@ -13,4 +13,12 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="System.Text.Json" Version="8.0.4" />
|
<PackageReference Include="System.Text.Json" Version="8.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="common-schema.json" />
|
||||||
|
<EmbeddedResource Include="common-schema.json">
|
||||||
|
<LogicalName>Questionable.Model.CommonSchema</LogicalName>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
299
Questionable.Model/common-schema.json
Normal file
299
Questionable.Model/common-schema.json
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json",
|
||||||
|
"$defs": {
|
||||||
|
"Aetheryte": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"Gridania",
|
||||||
|
"Central Shroud - Bentbranch Meadows",
|
||||||
|
"East Shroud - Hawthorne Hut",
|
||||||
|
"South Shroud - Quarrymill",
|
||||||
|
"South Shroud - Camp Tranquil",
|
||||||
|
"North Shroud - Fallgourd Float",
|
||||||
|
"Ul'dah",
|
||||||
|
"Western Thanalan - Horizon",
|
||||||
|
"Central Thanalan - Black Brush Station",
|
||||||
|
"Eastern Thanalan - Camp Drybone",
|
||||||
|
"Southern Thanalan - Little Ala Mhigo",
|
||||||
|
"Southern Thanalan - Forgotten Springs",
|
||||||
|
"Northern Thanalan - Camp Bluefog",
|
||||||
|
"Northern Thanalan - Ceruleum Processing Plant",
|
||||||
|
"Limsa Lominsa",
|
||||||
|
"Middle La Noscea - Summerford Farms",
|
||||||
|
"Lower La Noscea - Moraby Drydocks",
|
||||||
|
"Eastern La Noscea - Costa Del Sol",
|
||||||
|
"Eastern La Noscea - Wineport",
|
||||||
|
"Western La Noscea - Swiftperch",
|
||||||
|
"Western La Noscea - Aleport",
|
||||||
|
"Upper La Noscea - Camp Bronze Lake",
|
||||||
|
"Outer La Noscea - Camp Overlook",
|
||||||
|
"Coerthas Central Highlands - Camp Dragonhead",
|
||||||
|
"Mor Dhona",
|
||||||
|
"Gold Saucer",
|
||||||
|
"Wolves' Den Pier",
|
||||||
|
"Ishgard",
|
||||||
|
"Idyllshire",
|
||||||
|
"Coerthas Western Highlands - Falcon's Nest",
|
||||||
|
"The Sea of Clouds - Camp Cloudtop",
|
||||||
|
"The Sea of Clouds - Ok' Zundu",
|
||||||
|
"Azys Lla - Helix",
|
||||||
|
"The Dravanian Forelands - Tailfeather",
|
||||||
|
"The Dravanian Forelands - Anyx Trine",
|
||||||
|
"The Churning Mists - Moghome",
|
||||||
|
"The Churning Mists - Zenith",
|
||||||
|
"Rhalgr's Reach",
|
||||||
|
"Fringes - Castrum Oriens",
|
||||||
|
"Fringes - Peering Stones",
|
||||||
|
"Peaks - Ala Gannha",
|
||||||
|
"Peaks - Ala Ghiri",
|
||||||
|
"Lochs - Porta Praetoria",
|
||||||
|
"Lochs - Ala Mhigan Quarter",
|
||||||
|
"Kugane",
|
||||||
|
"Ruby Sea - Tamamizu",
|
||||||
|
"Ruby Sea - Onokoro",
|
||||||
|
"Yanxia - Namai",
|
||||||
|
"Yanxia - House of the Fierce",
|
||||||
|
"Azim Steppe - Reunion",
|
||||||
|
"Azim Steppe - Dawn Throne",
|
||||||
|
"Azim Steppe - Dhoro Iloh",
|
||||||
|
"Doman Enclave",
|
||||||
|
"Crystarium",
|
||||||
|
"Eulmore",
|
||||||
|
"Lakeland - Fort Jobb",
|
||||||
|
"Lakeland - Ostall Imperative",
|
||||||
|
"Kholusia - Stilltide",
|
||||||
|
"Kholusia - Wright",
|
||||||
|
"Kholusia - Tomra",
|
||||||
|
"Amh Araeng - Mord Souq",
|
||||||
|
"Amh Araeng - Inn at Journey's Head",
|
||||||
|
"Amh Araeng - Twine",
|
||||||
|
"Rak'tika - Slitherbough",
|
||||||
|
"Rak'tika - Fanow",
|
||||||
|
"Il Mheg - Lydha Lran",
|
||||||
|
"Il Mheg - Pia Enni",
|
||||||
|
"Il Mheg - Wolekdorf",
|
||||||
|
"Tempest - Ondo Cups",
|
||||||
|
"Tempest - Macarenses Angle",
|
||||||
|
"Old Sharlayan",
|
||||||
|
"Radz-at-Han",
|
||||||
|
"Labyrinthos - Archeion",
|
||||||
|
"Labyrinthos - Sharlayan Hamlet",
|
||||||
|
"Labyrinthos - Aporia",
|
||||||
|
"Thavnair - Yedlihmad",
|
||||||
|
"Thavnair - Great Work",
|
||||||
|
"Thavnair - Palaka's Stand",
|
||||||
|
"Garlemald - Camp Broken Glass",
|
||||||
|
"Garlemald - Tertium",
|
||||||
|
"Mare Lamentorum - Sinus Lacrimarum",
|
||||||
|
"Mare Lamentorum - Bestways Burrow",
|
||||||
|
"Elpis - Anagnorisis",
|
||||||
|
"Elpis - Twelve Wonders",
|
||||||
|
"Elpis - Poieten Oikos",
|
||||||
|
"Ultima Thule - Reah Tahra",
|
||||||
|
"Ultima Thule - Abode of the Ea",
|
||||||
|
"Ultima Thule - Base Omicron",
|
||||||
|
"Tuliyollal",
|
||||||
|
"Solution Nine",
|
||||||
|
"Urqopacha - Wachunpelo",
|
||||||
|
"Urqopacha - Worlar's Echo",
|
||||||
|
"Kozama'uka - Ok'hanu",
|
||||||
|
"Kozama'uka - Many Fires",
|
||||||
|
"Kozama'uka - Earthenshire",
|
||||||
|
"Yak T'el - Iq Br'aax",
|
||||||
|
"Yak T'el - Mamook",
|
||||||
|
"Shaaloani - Hhusatahwi",
|
||||||
|
"Shaaloani - Sheshenewezi Springs",
|
||||||
|
"Shaaloani - Mehwahhetsoan",
|
||||||
|
"Heritage Found - Yyasulani Station",
|
||||||
|
"Heritage Found - The Outskirts",
|
||||||
|
"Heritage Found - Electrope Strike",
|
||||||
|
"Living Memory - Leynode Mnemo",
|
||||||
|
"Living Memory - Leynode Pyro",
|
||||||
|
"Living Memory - Leynode Aero"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"AethernetShard": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"[Gridania] Aetheryte Plaza",
|
||||||
|
"[Gridania] Archers' Guild",
|
||||||
|
"[Gridania] Leatherworkers' Guild & Shaded Bower",
|
||||||
|
"[Gridania] Lancers' Guild",
|
||||||
|
"[Gridania] Conjurers' Guild",
|
||||||
|
"[Gridania] Botanists' Guild",
|
||||||
|
"[Gridania] Mih Khetto's Amphitheatre",
|
||||||
|
"[Gridania] Blue Badger Gate (Central Shroud)",
|
||||||
|
"[Gridania] Yellow Serpent Gate (North Shroud)",
|
||||||
|
"[Gridania] White Wolf Gate (Central Shroud)",
|
||||||
|
"[Gridania] Airship Landing",
|
||||||
|
"[Ul'dah] Aetheryte Plaza",
|
||||||
|
"[Ul'dah] Adventurers' Guild",
|
||||||
|
"[Ul'dah] Thaumaturges' Guild",
|
||||||
|
"[Ul'dah] Gladiators' Guild",
|
||||||
|
"[Ul'dah] Miners' Guild",
|
||||||
|
"[Ul'dah] Weavers' Guild",
|
||||||
|
"[Ul'dah] Goldsmiths' Guild",
|
||||||
|
"[Ul'dah] Sapphire Avenue Exchange",
|
||||||
|
"[Ul'dah] Alchemists' Guild",
|
||||||
|
"[Ul'dah] Gate of the Sultana (Western Thanalan)",
|
||||||
|
"[Ul'dah] Gate of Nald (Central Thanalan)",
|
||||||
|
"[Ul'dah] Gate of Thal (Central Thanalan)",
|
||||||
|
"[Ul'dah] The Chamber of Rule",
|
||||||
|
"[Ul'dah] Airship Landing",
|
||||||
|
"[Limsa Lominsa] Aetheryte Plaza",
|
||||||
|
"[Limsa Lominsa] Arcanists' Guild",
|
||||||
|
"[Limsa Lominsa] Fishermens' Guild",
|
||||||
|
"[Limsa Lominsa] Hawkers' Alley",
|
||||||
|
"[Limsa Lominsa] The Aftcastle",
|
||||||
|
"[Limsa Lominsa] Culinarians' Guild",
|
||||||
|
"[Limsa Lominsa] Marauders' Guild",
|
||||||
|
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)",
|
||||||
|
"[Limsa Lominsa] Tempest Gate (Lower La Noscea)",
|
||||||
|
"[Limsa Lominsa] Airship Landing",
|
||||||
|
"[Ishgard] Aetheryte Plaza",
|
||||||
|
"[Ishgard] The Forgotten Knight",
|
||||||
|
"[Ishgard] Skysteel Manufactory",
|
||||||
|
"[Ishgard] The Brume",
|
||||||
|
"[Ishgard] Athenaeum Astrologicum",
|
||||||
|
"[Ishgard] The Jeweled Crozier",
|
||||||
|
"[Ishgard] Saint Reymanaud's Cathedral",
|
||||||
|
"[Ishgard] The Tribunal",
|
||||||
|
"[Ishgard] The Last Vigil",
|
||||||
|
"[Ishgard] The Gates of Judgement (Coerthas Central Highlands)",
|
||||||
|
"[Idyllshire] Aetheryte Plaza",
|
||||||
|
"[Idyllshire] West Idyllshire",
|
||||||
|
"[Idyllshire] Prologue Gate (Western Hinterlands)",
|
||||||
|
"[Idyllshire] Epilogue Gate (Eastern Hinterlands)",
|
||||||
|
"[Rhalgr's Reach] Aetheryte Plaza",
|
||||||
|
"[Rhalgr's Reach] Western Rhalgr's Reach",
|
||||||
|
"[Rhalgr's Reach] Northeastern Rhalgr's Reach",
|
||||||
|
"[Rhalgr's Reach] Fringes Gate",
|
||||||
|
"[Rhalgr's Reach] Peaks Gate",
|
||||||
|
"[Kugane] Aetheryte Plaza",
|
||||||
|
"[Kugane] Shiokaze Hostelry",
|
||||||
|
"[Kugane] Pier #1",
|
||||||
|
"[Kugane] Thavnairian Consulate",
|
||||||
|
"[Kugane] Kogane Dori Markets",
|
||||||
|
"[Kugane] Bokairo Inn",
|
||||||
|
"[Kugane] The Ruby Bazaar",
|
||||||
|
"[Kugane] Sekiseigumi Barracks",
|
||||||
|
"[Kugane] Rakuza District",
|
||||||
|
"[Kugane] The Ruby Price",
|
||||||
|
"[Kugane] Airship Landing",
|
||||||
|
"[Crystarium] Aetheryte Plaza",
|
||||||
|
"[Crystarium] Musica Universalis Markets",
|
||||||
|
"[Crystarium] Temenos Rookery",
|
||||||
|
"[Crystarium] The Dossal Gate",
|
||||||
|
"[Crystarium] The Pendants",
|
||||||
|
"[Crystarium] The Amaro Launch",
|
||||||
|
"[Crystarium] The Crystalline Mean",
|
||||||
|
"[Crystarium] The Cabinet of Curiosity",
|
||||||
|
"[Crystarium] Tessellation (Lakeland)",
|
||||||
|
"[Eulmore] Aetheryte Plaza",
|
||||||
|
"[Eulmore] Southeast Derelicts",
|
||||||
|
"[Eulmore] Nightsoil Pots",
|
||||||
|
"[Eulmore] The Glory Gate",
|
||||||
|
"[Eulmore] The Mainstay",
|
||||||
|
"[Eulmore] The Path to Glory (Kholusia)",
|
||||||
|
"[Old Sharlayan] Aetheryte Plaza",
|
||||||
|
"[Old Sharlayan] The Studium",
|
||||||
|
"[Old Sharlayan] The Baldesion Annex",
|
||||||
|
"[Old Sharlayan] The Rostra",
|
||||||
|
"[Old Sharlayan] The Leveilleur Estate",
|
||||||
|
"[Old Sharlayan] Journey's End",
|
||||||
|
"[Old Sharlayan] Scholar's Harbor",
|
||||||
|
"[Old Sharlayan] The Hall of Artifice (Labyrinthos)",
|
||||||
|
"[Radz-at-Han] Aetheryte Plaza",
|
||||||
|
"[Radz-at-Han] Meghaduta",
|
||||||
|
"[Radz-at-Han] Ruveydah Fibers",
|
||||||
|
"[Radz-at-Han] Airship Landing",
|
||||||
|
"[Radz-at-Han] Alzadaal's Peace",
|
||||||
|
"[Radz-at-Han] Hall of the Radiant Host",
|
||||||
|
"[Radz-at-Han] Mehryde's Meyhane",
|
||||||
|
"[Radz-at-Han] Kama",
|
||||||
|
"[Radz-at-Han] The High Crucible of Al-Kimiya",
|
||||||
|
"[Radz-at-Han] The Gate of First Sight (Thavnair)",
|
||||||
|
"[Tuliyollal] Aetheryte Plaza",
|
||||||
|
"[Tuliyollal] Dirigible Landing",
|
||||||
|
"[Tuliyollal] The Resplendent Quarter",
|
||||||
|
"[Tuliyollal] The For'ard Cabins",
|
||||||
|
"[Tuliyollal] Bayside Bevy Marketplace",
|
||||||
|
"[Tuliyollal] Vollok Shoonsa",
|
||||||
|
"[Tuliyollal] Wachumeqimeqi",
|
||||||
|
"[Tuliyollal] Brightploom Post",
|
||||||
|
"[Tuliyollal] Arch of the Dawn (Urqopacha)",
|
||||||
|
"[Tuliyollal] Arch of the Dawn (Kozama'uka)",
|
||||||
|
"[Tuliyollal] Ihuykatumu (Kozama'uka)",
|
||||||
|
"[Tuliyollal] Dirigible Landing (Yak T'el)",
|
||||||
|
"[Tuliyollal] Xak Tural Skygate (Shaaloani)",
|
||||||
|
"[Solution Nine] Aetheryte Plaza",
|
||||||
|
"[Solution Nine] Information Center",
|
||||||
|
"[Solution Nine] True Vue",
|
||||||
|
"[Solution Nine] Neon Stein",
|
||||||
|
"[Solution Nine] The Arcadion",
|
||||||
|
"[Solution Nine] Resolution",
|
||||||
|
"[Solution Nine] Nexus Arcade",
|
||||||
|
"[Solution Nine] Residential Sector",
|
||||||
|
"[Solution Nine] Scanning Port Nine (Heritage Found)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CompletionFlags": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset",
|
||||||
|
"items": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"High": {
|
||||||
|
"type": [
|
||||||
|
"number",
|
||||||
|
"null"
|
||||||
|
],
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 15
|
||||||
|
},
|
||||||
|
"Low": {
|
||||||
|
"type": [
|
||||||
|
"number",
|
||||||
|
"null"
|
||||||
|
],
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 15
|
||||||
|
},
|
||||||
|
"Negative": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"Mode": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"Bitwise",
|
||||||
|
"Exact"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"enum": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
4,
|
||||||
|
8,
|
||||||
|
16,
|
||||||
|
32,
|
||||||
|
64,
|
||||||
|
128
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"minItems": 6,
|
||||||
|
"maxItems": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Questionable.Model", "Quest
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuestPathGenerator.Tests", "QuestPathGenerator.Tests\QuestPathGenerator.Tests.csproj", "{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuestPathGenerator.Tests", "QuestPathGenerator.Tests\QuestPathGenerator.Tests.csproj", "{4FD6F346-8961-4BD5-BDA2-E5F426DE4FC7}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GatheringPaths", "GatheringPaths\GatheringPaths.csproj", "{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GatheringPathRenderer", "GatheringPathRenderer\GatheringPathRenderer.csproj", "{F514DA95-9867-4F3F-8062-ACE0C62E8740}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
@ -45,6 +49,14 @@ Global
|
|||||||
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.Build.0 = Debug|x64
|
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Debug|x64.Build.0 = Debug|x64
|
||||||
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.ActiveCfg = Release|x64
|
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.ActiveCfg = Release|x64
|
||||||
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.Build.0 = Release|x64
|
{C91EEF13-A1AC-4A40-B695-DD4E378E5989}.Release|x64.Build.0 = Release|x64
|
||||||
|
{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{8BF98BEF-6F00-4197-91ED-75F8F1C35FFB}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{F514DA95-9867-4F3F-8062-ACE0C62E8740}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{F514DA95-9867-4F3F-8062-ACE0C62E8740}.Release|x64.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -14,7 +14,7 @@ using FFXIVClientStructs.FFXIV.Client.System.Memory;
|
|||||||
using FFXIVClientStructs.FFXIV.Client.System.String;
|
using FFXIVClientStructs.FFXIV.Client.System.String;
|
||||||
using Lumina.Excel.GeneratedSheets;
|
using Lumina.Excel.GeneratedSheets;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable;
|
namespace Questionable;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ using FFXIVClientStructs.FFXIV.Common.Math;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.CombatModules;
|
using Questionable.Controller.CombatModules;
|
||||||
using Questionable.Controller.Utils;
|
using Questionable.Controller.Utils;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller;
|
namespace Questionable.Controller;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ using LLib.GameUI;
|
|||||||
using Lumina.Excel.GeneratedSheets;
|
using Lumina.Excel.GeneratedSheets;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
using Quest = Questionable.Model.Quest;
|
using Quest = Questionable.Model.Quest;
|
||||||
using ValueType = FFXIVClientStructs.FFXIV.Component.GUI.ValueType;
|
using ValueType = FFXIVClientStructs.FFXIV.Component.GUI.ValueType;
|
||||||
|
|
||||||
|
@ -18,8 +18,10 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Questionable.Controller.NavigationOverrides;
|
using Questionable.Controller.NavigationOverrides;
|
||||||
using Questionable.External;
|
using Questionable.External;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common.Converter;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Controller;
|
namespace Questionable.Controller;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ using Questionable.Controller.Steps;
|
|||||||
using Questionable.Controller.Steps.Shared;
|
using Questionable.Controller.Steps.Shared;
|
||||||
using Questionable.External;
|
using Questionable.External;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller;
|
namespace Questionable.Controller;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ using Dalamud.Plugin;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
using Questionable.QuestPaths;
|
using Questionable.QuestPaths;
|
||||||
using Questionable.Validation;
|
using Questionable.Validation;
|
||||||
using Questionable.Validation.Validators;
|
using Questionable.Validation.Validators;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Common;
|
namespace Questionable.Controller.Steps.Common;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps;
|
namespace Questionable.Controller.Steps;
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game.Object;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
using ObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind;
|
using ObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ using Questionable.Controller.Steps.Common;
|
|||||||
using Questionable.Controller.Steps.Shared;
|
using Questionable.Controller.Steps.Shared;
|
||||||
using Questionable.Controller.Utils;
|
using Questionable.Controller.Utils;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ using Dalamud.Game.ClientState.Conditions;
|
|||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ using FFXIVClientStructs.FFXIV.Client.Game;
|
|||||||
using Lumina.Excel.GeneratedSheets;
|
using Lumina.Excel.GeneratedSheets;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
using Quest = Questionable.Model.Quest;
|
using Quest = Questionable.Model.Quest;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
@ -8,7 +8,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.Steps.Shared;
|
using Questionable.Controller.Steps.Shared;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ using Dalamud.Plugin.Services;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Questionable.External;
|
using Questionable.External;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
|
||||||
|
@ -13,7 +13,8 @@ using Questionable.Controller.Steps.Shared;
|
|||||||
using Questionable.Controller.Utils;
|
using Questionable.Controller.Utils;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
using AethernetShortcut = Questionable.Controller.Steps.Shared.AethernetShortcut;
|
using AethernetShortcut = Questionable.Controller.Steps.Shared.AethernetShortcut;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Interactions;
|
namespace Questionable.Controller.Steps.Interactions;
|
||||||
|
@ -8,8 +8,10 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.External;
|
using Questionable.External;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
using Questionable.Model.V1.Converter;
|
using Questionable.Model.Common.Converter;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
|
using Questionable.Model.Questing.Converter;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ using Questionable.Controller.NavigationOverrides;
|
|||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -11,7 +11,8 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.Utils;
|
using Questionable.Controller.Utils;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ using Questionable.Controller.Steps.Common;
|
|||||||
using Questionable.Controller.Utils;
|
using Questionable.Controller.Utils;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Questionable.Controller.Steps.Common;
|
using Questionable.Controller.Steps.Common;
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Steps.Shared;
|
namespace Questionable.Controller.Steps.Shared;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
|||||||
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
|
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller.Steps.Shared;
|
using Questionable.Controller.Steps.Shared;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Questing;
|
||||||
|
|
||||||
namespace Questionable.Controller.Utils;
|
namespace Questionable.Controller.Utils;
|
||||||
|
|
||||||
|
@ -4,8 +4,7 @@ using System.Linq;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using Lumina.Excel.GeneratedSheets;
|
using Lumina.Excel.GeneratedSheets;
|
||||||
using Microsoft.Extensions.Logging;
|
using Questionable.Model.Common;
|
||||||
using Questionable.Model.V1;
|
|
||||||
|
|
||||||
namespace Questionable.Data;
|
namespace Questionable.Data;
|
||||||
|
|
||||||
|
2
Questionable/External/LifestreamIpc.cs
vendored
2
Questionable/External/LifestreamIpc.cs
vendored
@ -1,7 +1,7 @@
|
|||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
using Dalamud.Plugin.Ipc;
|
using Dalamud.Plugin.Ipc;
|
||||||
using Questionable.Data;
|
using Questionable.Data;
|
||||||
using Questionable.Model.V1;
|
using Questionable.Model.Common;
|
||||||
|
|
||||||
namespace Questionable.External;
|
namespace Questionable.External;
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user