Add Kai-Shirr/Ameliance unlock quests

pull/17/head
Liza 2024-08-19 23:51:48 +02:00
parent b07625c18f
commit 5375ec25bc
Signed by: liza
GPG Key ID: 7199F8D727D55F67
5 changed files with 269 additions and 18 deletions

View File

@ -5,17 +5,6 @@
{
"Sequence": 0,
"Steps": [
{
"Position": {
"X": 344.12048,
"Y": -120.3312,
"Z": -303.85397
},
"TerritoryId": 613,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Ruby Sea - Tamamizu",
"RequiredGatheredItems": []
},
{
"DataId": 1025878,
"Position": {
@ -25,6 +14,8 @@
},
"TerritoryId": 613,
"InteractionType": "Interact",
"RequiredGatheredItems": [],
"AetheryteShortcut": "Ruby Sea - Tamamizu",
"DialogueChoices": [
{
"Type": "List",

View File

@ -0,0 +1,64 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1031781,
"Position": {
"X": 24.246582,
"Y": 82.78206,
"Z": 25.77246
},
"TerritoryId": 820,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eulmore",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
},
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_SUBCTS640_03729_Q1_000_000",
"Answer": "TEXT_SUBCTS640_03729_A1_000_002"
}
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2010842,
"Position": {
"X": 27.450928,
"Y": 82.6886,
"Z": -45.456665
},
"TerritoryId": 820,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1031801,
"Position": {
"X": 52.8114,
"Y": 83.001076,
"Z": -65.38495
},
"TerritoryId": 820,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,80 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1042242,
"Position": {
"X": 72.43445,
"Y": 5.1,
"Z": -75.30328
},
"TerritoryId": 962,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Old Sharlayan",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2012872,
"Position": {
"X": -86.930725,
"Y": -12.985474,
"Z": 140.30664
},
"TerritoryId": 962,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] Scholar's Harbor"
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1042427,
"Position": {
"X": -84.06195,
"Y": -13.777,
"Z": 140.12354
},
"TerritoryId": 962,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1042428,
"Position": {
"X": 222.85791,
"Y": 24.942732,
"Z": -197.71118
},
"TerritoryId": 962,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Old Sharlayan] Scholar's Harbor",
"[Old Sharlayan] The Leveilleur Estate"
]
}
]
}
]
}

View File

@ -0,0 +1,98 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1041303,
"Position": {
"X": 209.55212,
"Y": 19.316555,
"Z": -110.70422
},
"TerritoryId": 962,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Old Sharlayan",
"AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Leveilleur Estate"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
},
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKZI003_04318_Q1_000_000",
"Answer": "TEXT_AKTKZI003_04318_A1_000_001"
}
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2012440,
"Position": {
"X": 213.9773,
"Y": 8.224609,
"Z": -33.737732
},
"TerritoryId": 962,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 2012441,
"Position": {
"X": 168.0476,
"Y": 1.296936,
"Z": 53.94055
},
"TerritoryId": 962,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1041303,
"Position": {
"X": 209.55212,
"Y": 19.316555,
"Z": -110.70422
},
"TerritoryId": 962,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Old Sharlayan] Journey's End",
"[Old Sharlayan] The Leveilleur Estate"
]
}
]
}
]
}

View File

@ -70,6 +70,7 @@ internal static class Move
TerritoryData territoryData,
AetheryteData aetheryteData)
{
public ElementId QuestId { get; set; } = null!;
public QuestStep Step { get; set; } = null!;
public Vector3 Destination { get; set; }
@ -90,9 +91,9 @@ internal static class Move
yield return new WaitConditionTask(() => movementController.IsNavmeshReady,
"Wait(navmesh ready)");
float distance = Step.CalculateActualStopDistance();
var position = clientState.LocalPlayer?.Position ?? new Vector3();
float actualDistance = (position - Destination).Length();
float stopDistance = Step.CalculateActualStopDistance();
Vector3? position = clientState.LocalPlayer?.Position;
float actualDistance = position == null ? float.MaxValue : Vector3.Distance(position.Value, Destination);
// if we teleport to a different zone, assume we always need to move; this is primarily relevant for cases
// where you're e.g. in Lakeland, and the step navigates via Crystarium → Tesselation back into the same
@ -101,8 +102,19 @@ internal static class Move
// Side effects of this check being broken include:
// - mounting when near the target npc (if you spawn close enough for the next step)
// - trying to fly when near the target npc (if close enough where no movement is required)
if (Step.AetheryteShortcut != null && aetheryteData.TerritoryIds[Step.AetheryteShortcut.Value] != Step.TerritoryId)
if (Step.AetheryteShortcut != null &&
aetheryteData.TerritoryIds[Step.AetheryteShortcut.Value] != Step.TerritoryId)
{
logger.LogDebug("Aetheryte: Changing distance to max, previous distance: {Distance}", actualDistance);
actualDistance = float.MaxValue;
}
if (QuestId is SatisfactionSupplyNpcId)
{
logger.LogDebug("SatisfactionSupply: Changing distance to max, previous distance: {Distance}",
actualDistance);
actualDistance = float.MaxValue;
}
if (Step.Mount == true)
yield return serviceProvider.GetRequiredService<MountTask>()
@ -115,7 +127,7 @@ internal static class Move
if (Step.Mount == null)
{
MountTask.EMountIf mountIf =
actualDistance > distance && Step.Fly == true &&
actualDistance > stopDistance && Step.Fly == true &&
gameFunctions.IsFlyingUnlocked(Step.TerritoryId)
? MountTask.EMountIf.Always
: MountTask.EMountIf.AwayFromPosition;
@ -123,20 +135,26 @@ internal static class Move
.With(Step.TerritoryId, mountIf, Destination);
}
if (actualDistance > distance)
if (actualDistance > stopDistance)
{
yield return serviceProvider.GetRequiredService<MoveInternal>()
.With(Step, Destination);
}
else
logger.LogInformation("Skipping move task, distance: {ActualDistance} < {StopDistance}",
actualDistance, stopDistance);
}
else
{
// navmesh won't move close enough
if (actualDistance > distance)
if (actualDistance > stopDistance)
{
yield return serviceProvider.GetRequiredService<MoveInternal>()
.With(Step, Destination);
}
else
logger.LogInformation("Skipping move task, distance: {ActualDistance} < {StopDistance}",
actualDistance, stopDistance);
}
if (Step.Fly == true && Step.Land == true)