1291 lines
44 KiB
JSON
1291 lines
44 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
|
|
"title": "Questionable V1",
|
|
"description": "A series of quest sequences",
|
|
"type": "object",
|
|
"properties": {
|
|
"$schema": {
|
|
"type": "string",
|
|
"const": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json"
|
|
},
|
|
"Author": {
|
|
"description": "Author of the quest sequence",
|
|
"type": [
|
|
"string",
|
|
"array"
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"Disabled": {
|
|
"type": "boolean"
|
|
},
|
|
"Comment": {
|
|
"type": "string"
|
|
},
|
|
"$": {
|
|
"type": "string",
|
|
"description": "Dev Comment (not visible in-game)"
|
|
},
|
|
"TerritoryBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"QuestSequence": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"Sequence": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 255
|
|
},
|
|
"Steps": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"DataId": {
|
|
"type": "integer",
|
|
"description": "The data id of the NPC/Object/Aetheryte/Aether Current",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"Position": {
|
|
"type": "object",
|
|
"description": "Position to (typically) walk to",
|
|
"properties": {
|
|
"X": {
|
|
"type": "number"
|
|
},
|
|
"Y": {
|
|
"type": "number"
|
|
},
|
|
"Z": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"X",
|
|
"Y",
|
|
"Z"
|
|
]
|
|
},
|
|
"StopDistance": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
],
|
|
"description": "Set if pathfinding should stop closer or further away from the default stop distance",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"IgnoreDistanceToObject": {
|
|
"type": "boolean",
|
|
"description": "Most interactions with objects are checked for a Y (height) difference of 2 in-game units. If set to true, the game won't attempt to get any closer if the height difference is larger than this."
|
|
},
|
|
"TerritoryId": {
|
|
"type": "integer",
|
|
"description": "The territory id associated with the location",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"TargetTerritoryId": {
|
|
"type": "integer",
|
|
"description": "If set, this step is complete (movement-wise) if this territory id is reached",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"InteractionType": {
|
|
"type": "string",
|
|
"description": "What to do at the position",
|
|
"enum": [
|
|
"Interact",
|
|
"WalkTo",
|
|
"AttuneAethernetShard",
|
|
"AttuneAetheryte",
|
|
"AttuneAetherCurrent",
|
|
"Combat",
|
|
"UseItem",
|
|
"EquipItem",
|
|
"Say",
|
|
"Emote",
|
|
"Action",
|
|
"WaitForNpcAtPosition",
|
|
"WaitForManualProgress",
|
|
"Duty",
|
|
"SinglePlayerDuty",
|
|
"Jump",
|
|
"Dive",
|
|
"Instruction",
|
|
"AcceptQuest",
|
|
"CompleteQuest"
|
|
]
|
|
},
|
|
"Disabled": {
|
|
"description": "Whether this step is disabled (see SkipIf for more control)",
|
|
"type": "boolean"
|
|
},
|
|
"DisableNavmesh": {
|
|
"description": "If true, will go to the position in a straight line instead of using pathfinding",
|
|
"type": "boolean"
|
|
},
|
|
"Mount": {
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
],
|
|
"description": "If true, will mount regardless of distance to position. If false, will unmount."
|
|
},
|
|
"Fly": {
|
|
"type": "boolean",
|
|
"description": "If true and flying is unlocked in a zone, will use a flight path"
|
|
},
|
|
"Land": {
|
|
"type": "boolean",
|
|
"description": "If true and flying, will attempt to land on the ground"
|
|
},
|
|
"Sprint": {
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
]
|
|
},
|
|
"AetheryteShortcutIf": {
|
|
"description": "The Aetheryte to teleport to (before moving)",
|
|
"$ref": "#/$defs/Aetheryte"
|
|
},
|
|
"AethernetShortcut": {
|
|
"type": "array",
|
|
"description": "A pair of aethernet locations (from + to) to use as a shortcut",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": {
|
|
"$ref": "#/$defs/AethernetShard"
|
|
}
|
|
},
|
|
"ItemId": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
],
|
|
"description": "The Item to use",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"SkipIf": {
|
|
"type": "null",
|
|
"deprecationMessage": "Please use SkipConditions instead"
|
|
},
|
|
"SkipConditions": {
|
|
"type": "object",
|
|
"properties": {
|
|
"StepIf": {
|
|
"type": "object",
|
|
"properties": {
|
|
"Never": {
|
|
"type": "boolean"
|
|
},
|
|
"Flying": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Locked",
|
|
"Unlocked"
|
|
]
|
|
},
|
|
"Chocobo": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Locked",
|
|
"Unlocked"
|
|
]
|
|
},
|
|
"NotTargetable": {
|
|
"type": "boolean"
|
|
},
|
|
"InTerritory": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"NotInTerritory": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"Item": {
|
|
"type": "object",
|
|
"properties": {
|
|
"NotInInventory": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"QuestsAccepted": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"QuestsCompleted": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ExtraCondition": {
|
|
"type": "string",
|
|
"enum": [
|
|
"WakingSandsMainArea"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"AetheryteShortcutIf": {
|
|
"type": "object",
|
|
"properties": {
|
|
"Never": {
|
|
"type": "boolean"
|
|
},
|
|
"InSameTerritory": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"CompletionQuestVariablesFlags": {
|
|
"$ref": "#/$defs/CompletionFlags"
|
|
},
|
|
"RequiredQuestVariables": {
|
|
"type": "array",
|
|
"description": "Certain quests (primarily beast tribes/allied societies) have a RNG element to spawning targets, and the step should be skipped in its entirety if none of the sets below match",
|
|
"minItems": 6,
|
|
"maxItems": 6,
|
|
"items": {
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"type": [
|
|
"number",
|
|
"object"
|
|
],
|
|
"properties": {
|
|
"High": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
],
|
|
"minimum": 0,
|
|
"maximum": 15
|
|
},
|
|
"Low": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
],
|
|
"minimum": 0,
|
|
"maximum": 15
|
|
}
|
|
},
|
|
"minimum": 0,
|
|
"maximum": 255
|
|
}
|
|
}
|
|
},
|
|
"DelaySecondsAtStart": {
|
|
"description": "Time to wait before starting",
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
]
|
|
},
|
|
"Comment": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"TerritoryId",
|
|
"InteractionType"
|
|
],
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"anyOf": [
|
|
{
|
|
"const": "Interact"
|
|
},
|
|
{
|
|
"const": "SinglePlayerDuty"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": [
|
|
"DataId"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "WalkTo"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": [
|
|
"Position"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "AttuneAetheryte"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"Aetheryte": {
|
|
"$ref": "#/$defs/Aetheryte"
|
|
},
|
|
"DataId": {
|
|
"type": "null"
|
|
},
|
|
"Position": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"required": [
|
|
"Aetheryte"
|
|
]
|
|
},
|
|
"else": {
|
|
"properties": {
|
|
"Aetheryte": {
|
|
"type": "null"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "AttuneAethernetShard"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"AethernetShard": {
|
|
"$ref": "#/$defs/AethernetShard"
|
|
},
|
|
"DataId": {
|
|
"type": "null"
|
|
},
|
|
"Position": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"required": [
|
|
"AethernetShard"
|
|
]
|
|
},
|
|
"else": {
|
|
"properties": {
|
|
"AethernetShard": {
|
|
"type": "null"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "AttuneAetherCurrent"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"AetherCurrentId": {
|
|
"type": "integer",
|
|
"description": "The aether current id, used to check if a given aetheryte is unlocked",
|
|
"exclusiveMinimum": 0
|
|
}
|
|
},
|
|
"required": [
|
|
"DataId",
|
|
"Position",
|
|
"AetherCurrentId"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Combat"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"EnemySpawnType": {
|
|
"type": "string",
|
|
"description": "Determines how enemy spawning is handled in combat locations",
|
|
"enum": [
|
|
"AutoOnEnterArea",
|
|
"AfterInteraction",
|
|
"AfterItemUse",
|
|
"OverworldEnemies"
|
|
]
|
|
},
|
|
"KillEnemyDataIds": {
|
|
"description": "The enemy data ids which are supposed to be killed",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"ComplexCombatData": {
|
|
"description": "If multiple different enemies are supposed to be killed in a single quest step, this typically is handled via items",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"DataId": {
|
|
"description": "The enemy data id which is supposed to be killed",
|
|
"type": "integer"
|
|
},
|
|
"MinimumKillCount": {
|
|
"description": "Overworld mobs: If this number of mobs has been killed, will wait a bit before attempting to pull another mob to see if the quest progresses",
|
|
"type": "integer"
|
|
},
|
|
"RewardItemId": {
|
|
"type": "integer"
|
|
},
|
|
"RewardItemCount": {
|
|
"type": "integer"
|
|
},
|
|
"CompletionQuestVariablesFlags": {
|
|
"$ref": "#/$defs/CompletionFlags"
|
|
},
|
|
"IgnoreQuestMarker": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"DataId"
|
|
]
|
|
}
|
|
},
|
|
"CombatDelaySecondsAtStart": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"Position",
|
|
"EnemySpawnType"
|
|
],
|
|
"oneOf": [
|
|
{
|
|
"required": [
|
|
"KillEnemyDataIds"
|
|
]
|
|
},
|
|
{
|
|
"required": [
|
|
"ComplexCombatData"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "UseItem"
|
|
},
|
|
"ItemId": {
|
|
"not": {
|
|
"const": 30362
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": [
|
|
"Position"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"anyOf": [
|
|
{
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "UseItem"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Combat"
|
|
},
|
|
"EnemySpawnType": {
|
|
"const": "AfterItemUse"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"GroundTarget": {
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
],
|
|
"default": false
|
|
}
|
|
},
|
|
"required": [
|
|
"ItemId"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "EquipItem"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": [
|
|
"ItemId"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"anyOf": [
|
|
{
|
|
"const": "Emote"
|
|
},
|
|
{
|
|
"const": "AcceptQuest"
|
|
},
|
|
{
|
|
"const": "CompleteQuest"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"Emote": {
|
|
"type": "string",
|
|
"description": "The emote to use",
|
|
"enum": [
|
|
"stretch",
|
|
"wave",
|
|
"rally",
|
|
"deny",
|
|
"pray",
|
|
"slap",
|
|
"doubt",
|
|
"psych",
|
|
"cheer",
|
|
"happy",
|
|
"poke",
|
|
"flex",
|
|
"soothe",
|
|
"me",
|
|
"welcome",
|
|
"imperialsalute",
|
|
"pet",
|
|
"dance",
|
|
"respect",
|
|
"lookout",
|
|
"kneel",
|
|
"bow"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Emote"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": [
|
|
"Position",
|
|
"Emote"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Say"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"ChatMessage": {
|
|
"type": "object",
|
|
"description": "The text to use with /say",
|
|
"properties": {
|
|
"ExcelSheet": {
|
|
"type": "string"
|
|
},
|
|
"Key": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"Key"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"ChatMessage"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Action"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"Action": {
|
|
"type": "string",
|
|
"description": "The action to use",
|
|
"enum": [
|
|
"Esuna",
|
|
"Physick",
|
|
"Siphon Snout",
|
|
"Red Gulal",
|
|
"Yellow Gulal",
|
|
"Blue Gulal"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"Action"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Jump"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"JumpDestination": {
|
|
"type": "object",
|
|
"properties": {
|
|
"Position": {
|
|
"type": "object",
|
|
"description": "Position to try reaching after the jump",
|
|
"properties": {
|
|
"X": {
|
|
"type": "number"
|
|
},
|
|
"Y": {
|
|
"type": "number"
|
|
},
|
|
"Z": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"X",
|
|
"Y",
|
|
"Z"
|
|
]
|
|
},
|
|
"StopDistance": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
],
|
|
"description": "Set if pathfinding should stop closer or further away from the default stop distance",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"DelaySeconds": {
|
|
"type": [
|
|
"number",
|
|
"null"
|
|
]
|
|
},
|
|
"Type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SingleJump",
|
|
"RepeatedJumps"
|
|
],
|
|
"default": "SingleJump"
|
|
}
|
|
},
|
|
"required": [
|
|
"Position"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"Position",
|
|
"JumpDestination"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"anyOf": [
|
|
{
|
|
"const": "Interact"
|
|
},
|
|
{
|
|
"const": "SinglePlayerDuty"
|
|
},
|
|
{
|
|
"const": "WaitForManualProgress"
|
|
},
|
|
{
|
|
"const": "AcceptQuest"
|
|
},
|
|
{
|
|
"const": "CompleteQuest"
|
|
},
|
|
{
|
|
"const": "Instruction"
|
|
},
|
|
{
|
|
"const": "Say"
|
|
},
|
|
{
|
|
"const": "Emote"
|
|
},
|
|
{
|
|
"const": "UseItem"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"DialogueChoices": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"Type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"YesNo",
|
|
"List"
|
|
]
|
|
},
|
|
"ExcelSheet": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"Type"
|
|
],
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"Type": {
|
|
"const": "YesNo"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"Prompt": {
|
|
"type": [
|
|
"string",
|
|
"integer"
|
|
]
|
|
},
|
|
"Yes": {
|
|
"type": "boolean",
|
|
"default": true
|
|
}
|
|
},
|
|
"required": [
|
|
"Prompt",
|
|
"Yes"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"Type": {
|
|
"const": "List"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"Prompt": {
|
|
"type": [
|
|
"string",
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"Answer": {
|
|
"type": [
|
|
"string",
|
|
"integer"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"Prompt",
|
|
"Answer"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"PointMenuChoices": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "Duty"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"ContentFinderConditionId": {
|
|
"type": "integer",
|
|
"exclusiveMinimum": 0,
|
|
"exclusiveMaximum": 3000
|
|
},
|
|
"DataId": {
|
|
"type": "null"
|
|
},
|
|
"Position": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"required": [
|
|
"ContentFinderConditionId"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "WaitForNpcAtPosition"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"NpcWaitDistance": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "AcceptQuest"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"PickUpQuestId": {
|
|
"type": [
|
|
"null",
|
|
"number"
|
|
],
|
|
"description": "Determines the quest which should be accepted. If empty/null, accepts the quest corresponding to the file name."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"InteractionType": {
|
|
"const": "CompleteQuest"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"TurnInQuestId": {
|
|
"type": [
|
|
"null",
|
|
"number"
|
|
],
|
|
"description": "Determines the quest which should be turned in. If empty/null, turns in the quest corresponding to the file name."
|
|
},
|
|
"NextQuestId": {
|
|
"type": [
|
|
"null",
|
|
"number"
|
|
],
|
|
"description": "For quest chains (e.g. DT healer role quests) Which quest to do next, given that you meet the required level."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"Comment": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"Sequence"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"$schema",
|
|
"QuestSequence",
|
|
"Author"
|
|
],
|
|
"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": {
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"enum": [
|
|
null,
|
|
1,
|
|
2,
|
|
4,
|
|
8,
|
|
16,
|
|
32,
|
|
64,
|
|
128,
|
|
-1,
|
|
-2,
|
|
-4,
|
|
-8,
|
|
-16,
|
|
-32,
|
|
-64,
|
|
-128
|
|
]
|
|
},
|
|
"minItems": 6,
|
|
"maxItems": 6
|
|
}
|
|
}
|
|
}
|