1
0
Fork 0
forked from aly/qstbak

muffin v7.5.6

This commit is contained in:
alydev 2026-08-17 20:27:25 +10:00
parent 6266f9e6b7
commit addf2d530f
619 changed files with 264792 additions and 446022 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit, Size = 64)]
internal struct _206D_206B_200D_200D_202E_202E_206E_202C_200C_206B_202D_202B_200B_200B_200C_200C_206C_206E_200B_202B_206A_200C_206D_206C_200D_206F_200E_206B_206E_200B_200D_200D_206B_200D_206F_200B_206F_202D_200D_202E
{
}

1453
QuestPaths/-Module-.cs Normal file

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,9 @@
</PropertyGroup>
<ItemGroup>
<None Remove="Questionable.QuestPaths.QuestSchema" />
<None Remove="Questionable.QuestPaths.QuestBundle" />
<EmbeddedResource Include="Questionable.QuestPaths.QuestSchema" LogicalName="Questionable.QuestPaths.QuestSchema" />
<EmbeddedResource Include="Questionable.QuestPaths.QuestBundle" LogicalName="Questionable.QuestPaths.QuestBundle" />
</ItemGroup>
<ItemGroup>
<Reference Include="Questionable.Model">

Binary file not shown.

View file

@ -114,34 +114,7 @@
"null"
],
"description": "Set if pathfinding should stop closer or further away from the default stop distance",
"minimum": 0.25
},
"LandingZones": {
"description": "Convex polygon boundaries for randomized movement destinations. When present, Position becomes the interaction target and a random point within a zone is used as the movement destination.",
"type": "array",
"items": {
"type": "object",
"properties": {
"Vertices": {
"type": "array",
"items": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-vector3.json"
},
"minItems": 3
},
"YTolerance": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"Vertices"
],
"additionalProperties": false
}
"minimum": 0
},
"IgnoreDistanceToObject": {
"type": "boolean",
@ -199,7 +172,9 @@
"AcceptQuest",
"CompleteQuest",
"InitiateLeve",
"FateAction"
"FateAction",
"Fish",
"CriticalEncounter"
]
},
"Disabled": {
@ -215,7 +190,15 @@
"boolean",
"null"
],
"description": "If true, will mount regardless of distance to position. If false, will unmount."
"description": "Travel hint: If true, will mount regardless of distance to position. If false, will unmount. Ignored by SmartNav auto-decide when not set. For quest-mechanical mount requirements, use MountRequired/DismountRequired instead."
},
"MountRequired": {
"type": "boolean",
"description": "Quest mechanic: the quest requires the player to be mounted (e.g. mounted escort, chocobo race). Takes priority over Mount and auto-decide."
},
"DismountRequired": {
"type": "boolean",
"description": "Quest mechanic: the quest requires the player to be on foot (e.g. interaction that fails while mounted). Takes priority over Mount and auto-decide."
},
"Fly": {
"type": "boolean",
@ -231,19 +214,6 @@
"null"
]
},
"AetheryteShortcut": {
"description": "The Aetheryte to teleport to (before moving)",
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-aetheryte.json"
},
"AethernetShortcut": {
"type": "array",
"description": "A pair of aethernet locations (from + to) to use as a shortcut",
"minItems": 2,
"maxItems": 2,
"items": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-aethernetshard.json"
}
},
"ItemId": {
"type": [
"number",
@ -365,7 +335,7 @@
"type": "number"
},
"TerritoryId": {
"type": "number"
"type": "integer"
}
},
"required": [
@ -385,7 +355,7 @@
"type": "number"
},
"TerritoryId": {
"type": "number"
"type": "integer"
}
},
"required": [
@ -409,115 +379,6 @@
}
},
"additionalProperties": false
},
"AetheryteShortcutIf": {
"type": "object",
"properties": {
"Never": {
"type": "boolean"
},
"InSameTerritory": {
"type": "boolean"
},
"InTerritory": {
"type": "array",
"items": {
"type": "integer"
}
},
"QuestsAccepted": {
"type": "array",
"items": {
"type": [
"number",
"string"
]
}
},
"QuestsCompleted": {
"type": "array",
"items": {
"type": [
"number",
"string"
]
}
},
"AetheryteLocked": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-aetheryte.json"
},
"AetheryteUnlocked": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-aetheryte.json"
},
"RequiredQuestVariablesNotMet": {
"type": "boolean"
},
"NearPosition": {
"type": "object",
"properties": {
"Position": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-vector3.json"
},
"MaximumDistance": {
"type": "number"
},
"TerritoryId": {
"type": "number"
}
},
"required": [
"Position",
"MaximumDistance",
"TerritoryId"
],
"additionalProperties": false
},
"NotNearPosition": {
"type": "object",
"properties": {
"Position": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-vector3.json"
},
"MaximumDistance": {
"type": "number"
},
"TerritoryId": {
"type": "number"
}
},
"required": [
"Position",
"MaximumDistance",
"TerritoryId"
],
"additionalProperties": false
},
"ExtraCondition": {
"type": "string",
"enum": [
"SkipFreeFantasia"
]
}
},
"additionalProperties": false
},
"AethernetShortcutIf": {
"type": "object",
"properties": {
"Never": {
"type": "boolean"
},
"InSameTerritory": {
"type": "boolean"
},
"AetheryteLocked": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-aetheryte.json"
},
"AetheryteUnlocked": {
"$ref": "https://github.com/WigglyMuffin/Questionable/raw/refs/heads/main/Questionable.Model/common-aetheryte.json"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
@ -629,14 +490,14 @@
"then": {
"properties": {
"PickUpItemId": {
"type": "number"
"type": "integer"
},
"GCPurchase": {
"type": "object",
"description": "Configuration for purchasing an item from the Grand Company Exchange shop",
"properties": {
"ItemId": {
"type": "number",
"type": "integer",
"description": "The item ID to purchase from the GC shop"
},
"RankTab": {
@ -899,16 +760,31 @@
"Position",
"EnemySpawnType"
],
"oneOf": [
"allOf": [
{
"required": [
"KillEnemyDataIds"
]
},
{
"required": [
"ComplexCombatData"
]
"if": {
"properties": {
"EnemySpawnType": {
"not": {
"const": "FinishCombatIfAny"
}
}
}
},
"then": {
"oneOf": [
{
"required": [
"KillEnemyDataIds"
]
},
{
"required": [
"ComplexCombatData"
]
}
]
}
}
]
}
@ -1485,6 +1361,28 @@
]
}
},
{
"if": {
"properties": {
"InteractionType": {
"const": "CriticalEncounter"
}
}
},
"then": {
"properties": {
"CriticalEncounterId": {
"type": "integer",
"description": "The DynamicEvent sheet row id of the critical encounter",
"exclusiveMinimum": 0
}
},
"required": [
"TerritoryId",
"CriticalEncounterId"
]
}
},
{
"if": {
"properties": {
@ -1499,7 +1397,8 @@
"type": "string",
"description": "The status to disable",
"enum": [
"Hidden"
"Hidden",
"Transfiguration"
]
}
},
@ -1713,39 +1612,13 @@
"exclusiveMinimum": 0,
"exclusiveMaximum": 3000
},
"Enabled": {
"type": "boolean"
},
"Notes": {
"type": "array",
"items": {
"type": "string"
}
},
"DutyMode": {
"type": "integer",
"description": "Overrides the default duty mode for this specific duty. 0 = Duty Support, 1 = Unsync (Solo), 2 = Unsync (Party). If not specified, uses the global configuration setting.",
"enum": [0, 1, 2]
},
"TestedAutoDutyVersion": {
"type": "string",
"pattern": "^0\\.\\d+\\.\\d+\\.\\d+$"
},
"TestedBossModVersion": {
"type": "string",
"pattern": "^0\\.\\d+\\.\\d+\\.\\d+$"
},
"LowPriority": {
"type": "boolean",
"description": "Indicates that this dungeon is included in the 'Skip certain optional dungeons and raids' option"
},
"$": {
"type": "string"
"type": "string",
"description": "Dev Comment (not visible in-game)"
}
},
"required": [
"ContentFinderConditionId",
"Enabled"
"ContentFinderConditionId"
],
"additionalProperties": false
},
@ -1774,32 +1647,16 @@
"SinglePlayerDutyOptions": {
"type": "object",
"properties": {
"Enabled": {
"type": "boolean"
},
"Notes": {
"type": "array",
"items": {
"type": "string"
}
},
"Index": {
"type": "integer",
"minimum": 0,
"maximum": 1,
"description": "If a quest has multiple solo instances (which affects 5 quests total), indicates which one this is"
},
"TestedBossModVersion": {
"type": "string",
"pattern": "^0\\.\\d+\\.\\d+\\.\\d+$"
},
"$": {
"type": "string"
}
},
"TODO_required": [
"Enabled"
],
"additionalProperties": false
}
}
@ -1833,7 +1690,7 @@
"then": {
"properties": {
"TaxiStandId": {
"type": "number"
"type": "integer"
}
},
"required": [
@ -1904,7 +1761,7 @@
"then": {
"properties": {
"ItemCount": {
"type": "number"
"type": "integer"
},
"RequireHq": {
"type": "boolean",
@ -1934,18 +1791,18 @@
"type": "object",
"properties": {
"ItemId": {
"type": "number"
"type": "integer"
},
"AlternativeItemId": {
"description": "For leves that allow you to gather two items with different chance percentage, this is the preferred item if the gathering chance is 100% (after buffs)",
"type": "number"
"type": "integer"
},
"ItemCount": {
"type": "number",
"type": "integer",
"exclusiveMinimum": 0
},
"Collectability": {
"type": "number",
"type": "integer",
"minimum": 0,
"maximum": 1000
}
@ -1966,24 +1823,49 @@
"if": {
"properties": {
"InteractionType": {
"anyOf": [
{
"const": "WaitForManualProgress"
},
{
"const": "Instruction"
},
{
"const": "Snipe"
}
]
"const": "Fish"
}
}
},
"then": {
"required": [
"Comment"
]
"properties": {
"ItemsToGather": {
"type": "array",
"description": "The fish to catch at the fishing spot.",
"items": {
"type": "object",
"properties": {
"ItemId": {
"type": "integer"
},
"ItemCount": {
"type": "integer",
"exclusiveMinimum": 0
},
"Collectability": {
"type": "integer",
"minimum": 0,
"maximum": 1000
}
},
"required": [
"ItemId",
"ItemCount"
]
}
}
},
"if": {
"required": [
"CompletionQuestVariablesFlags"
]
},
"then": {},
"else": {
"required": [
"ItemsToGather"
]
}
}
},
{

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,66 @@
using System;
using System.Runtime.CompilerServices;
namespace Questionable.QuestPaths;
internal static class PathBundleSecret
{
private static readonly byte[] A;
private static readonly byte[] B;
internal static byte[] Key()
{
byte[] array = new byte[A.Length];
int num = 0;
int num2 = 320407520;
while (true)
{
int num3 = num2;
int num4 = 320407521;
int num5 = num3;
switch ((num5 | num4) - (num5 & num4))
{
case 3:
num2 = 320407520;
break;
case 0:
return array;
case 2:
{
int num6 = num;
byte num7 = A[num];
num4 = B[num];
num5 = num7;
int num8 = num5 + num4;
int num9 = num5 & num4;
array[num6] = (byte)(num8 - (num9 + num9));
int num10 = num;
num4 = 1;
num5 = num10;
num = (num5 | num4) + (num5 & num4);
num2 = 320407520;
break;
}
case 1:
num2 = ((num < array.Length) ? 320407523 : 320407521);
break;
}
}
}
static PathBundleSecret()
{
byte[] array = new byte[32];
_206B_200D_200D_200D_200F_202A_200E_202D_202B_206C_206B_206D_202E_202A_206D_206A_200E_200C_202D_206D_206C_202B_202B_206D_202D_202C_200C_202D_200D_206F_200F_206B_206F_206B_206E_200F_200E_200E_200C_202D_202E((Array)array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
A = array;
byte[] array2 = new byte[32];
_206B_200D_200D_200D_200F_202A_200E_202D_202B_206C_206B_206D_202E_202A_206D_206A_200E_200C_202D_206D_206C_202B_202B_206D_202D_202C_200C_202D_200D_206F_200F_206B_206F_206B_206E_200F_200E_200E_200C_202D_202E((Array)array2, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
B = array2;
}
static void _206B_200D_200D_200D_200F_202A_200E_202D_202B_206C_206B_206D_202E_202A_206D_206A_200E_200C_202D_206D_206C_202B_202B_206D_202D_202C_200C_202D_200D_206F_200F_206B_206F_206B_206E_200F_200E_200E_200C_202D_202E(Array P_0, RuntimeFieldHandle P_1)
{
RuntimeHelpers.InitializeArray(P_0, P_1);
}
}