forked from liza/Questionable
Compare commits
9 Commits
23cdea96f4
...
1723585e99
Author | SHA1 | Date | |
---|---|---|---|
|
1723585e99 | ||
|
731db59fd1 | ||
21c9e2fcac | |||
2c2e95682b | |||
24f95d58fe | |||
a840a9f42e | |||
e6ee91c19c | |||
477b7cb446 | |||
2a4ce09cda |
@ -1,5 +1,5 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>2.15</Version>
|
||||
<Version>2.16</Version>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
@ -42,14 +42,18 @@
|
||||
"X": 419.309,
|
||||
"Y": -10.25133,
|
||||
"Z": -784.8259
|
||||
}
|
||||
},
|
||||
"MinimumAngle": -25,
|
||||
"MaximumAngle": 85
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": 410.6989,
|
||||
"Y": -10.9656,
|
||||
"Z": -790.8315
|
||||
}
|
||||
},
|
||||
"MinimumAngle": -20,
|
||||
"MaximumAngle": 95
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -156,4 +160,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -52,8 +52,8 @@
|
||||
"Y": -47.86026,
|
||||
"Z": -394.9654
|
||||
},
|
||||
"MinimumAngle": -120,
|
||||
"MaximumAngle": 120
|
||||
"MinimumAngle": -145,
|
||||
"MaximumAngle": -95
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -160,4 +160,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -20,6 +20,15 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": -392.35907,
|
||||
"Y": -14.000012,
|
||||
"Z": 635.3141
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "WalkTo"
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": -415.87146,
|
||||
|
@ -55,6 +55,24 @@
|
||||
{
|
||||
"Sequence": 255,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 184.68884,
|
||||
"Y": 99.24859,
|
||||
"Z": -171.97504
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "WalkTo"
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": 148.14713,
|
||||
"Y": 100.07344,
|
||||
"Z": -135.20776
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "WalkTo"
|
||||
},
|
||||
{
|
||||
"DataId": 2013966,
|
||||
"Position": {
|
||||
|
@ -69,6 +69,7 @@
|
||||
"Y": 0.003171,
|
||||
"Z": 1.296936
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1171,
|
||||
"InteractionType": "CompleteQuest"
|
||||
}
|
||||
|
@ -21,6 +21,34 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1049443,
|
||||
"Position": {
|
||||
"X": -177.56934,
|
||||
"Y": 29.999998,
|
||||
"Z": -601.15967
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5153,
|
||||
"AetheryteShortcut": "Heritage Found - The Outskirts",
|
||||
"SkipConditions": {
|
||||
"AetheryteShortcutIf": {
|
||||
"InSameTerritory": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"DataId": 1050805,
|
||||
"Position": {
|
||||
"X": -153.09375,
|
||||
"Y": 34.946026,
|
||||
"Z": -581.0178
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5160
|
||||
},
|
||||
{
|
||||
"DataId": 1048053,
|
||||
"Position": {
|
||||
@ -29,8 +57,7 @@
|
||||
"Z": -828.58014
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Heritage Found - The Outskirts"
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -37,6 +37,17 @@
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1049505,
|
||||
"Position": {
|
||||
"X": -209.85736,
|
||||
"Y": 7.49638,
|
||||
"Z": 595.9104
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5159
|
||||
},
|
||||
{
|
||||
"DataId": 1048099,
|
||||
"Position": {
|
||||
@ -53,6 +64,17 @@
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1049501,
|
||||
"Position": {
|
||||
"X": -592.7062,
|
||||
"Y": -2.4803436,
|
||||
"Z": -489.28055
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5156
|
||||
},
|
||||
{
|
||||
"DataId": 1048116,
|
||||
"Position": {
|
||||
|
@ -32,7 +32,8 @@
|
||||
"Z": -565.48413
|
||||
},
|
||||
"TerritoryId": 1191,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "Interact",
|
||||
"Fly": true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -21,6 +21,17 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1050617,
|
||||
"Position": {
|
||||
"X": -631.4031,
|
||||
"Y": 2.9305653E-07,
|
||||
"Z": 497.12354
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5174
|
||||
},
|
||||
{
|
||||
"DataId": 1047884,
|
||||
"Position": {
|
||||
|
@ -21,6 +21,41 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048243,
|
||||
"Position": {
|
||||
"X": 57.87744,
|
||||
"Y": 53.200012,
|
||||
"Z": 772.03015
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Living Memory - Leynode Mnemo",
|
||||
"TargetTerritoryId": 1192,
|
||||
"SkipConditions": {
|
||||
"StepIf": {
|
||||
"QuestsCompleted": [
|
||||
5176
|
||||
]
|
||||
},
|
||||
"AetheryteShortcutIf": {
|
||||
"QuestsCompleted": [
|
||||
5176
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"DataId": 1050621,
|
||||
"Position": {
|
||||
"X": 477.1344,
|
||||
"Y": -0.034497976,
|
||||
"Z": 711.6654
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5176
|
||||
},
|
||||
{
|
||||
"DataId": 1047917,
|
||||
"Position": {
|
||||
|
@ -21,6 +21,44 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1050625,
|
||||
"Position": {
|
||||
"X": 628.6869,
|
||||
"Y": 24.99949,
|
||||
"Z": -283.3753
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5178,
|
||||
"AetheryteShortcut": "Living Memory - Leynode Pyro",
|
||||
"SkipConditions": {
|
||||
"AetheryteShortcutIf": {
|
||||
"QuestsCompleted": [
|
||||
5178
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"DataId": 1050632,
|
||||
"Position": {
|
||||
"X": 538.9944,
|
||||
"Y": 25.001822,
|
||||
"Z": -194.3847
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "AcceptQuest",
|
||||
"PickUpQuestId": 5179,
|
||||
"AetheryteShortcut": "Living Memory - Leynode Pyro",
|
||||
"SkipConditions": {
|
||||
"AetheryteShortcutIf": {
|
||||
"QuestsCompleted": [
|
||||
5179
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"DataId": 1047971,
|
||||
"Position": {
|
||||
|
@ -33,8 +33,12 @@
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "WalkTo",
|
||||
"AetheryteShortcut": "Living Memory - Leynode Mnemo",
|
||||
"$": "Leynode Mnemo to Meso Terminal waypoint"
|
||||
"$": "Leynode Mnemo to Meso Terminal waypoint",
|
||||
"SkipConditions": {
|
||||
"StepIf": {
|
||||
"Flying": "Unlocked"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"DataId": 1048014,
|
||||
@ -44,7 +48,8 @@
|
||||
"Z": 363.05774
|
||||
},
|
||||
"TerritoryId": 1192,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "Interact",
|
||||
"Fly": true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -42,6 +42,7 @@ internal sealed class InteractionUiController : IDisposable
|
||||
private readonly GatheringPointRegistry _gatheringPointRegistry;
|
||||
private readonly QuestRegistry _questRegistry;
|
||||
private readonly QuestData _questData;
|
||||
private readonly TerritoryData _territoryData;
|
||||
private readonly IGameGui _gameGui;
|
||||
private readonly ITargetManager _targetManager;
|
||||
private readonly IClientState _clientState;
|
||||
@ -61,6 +62,7 @@ internal sealed class InteractionUiController : IDisposable
|
||||
GatheringPointRegistry gatheringPointRegistry,
|
||||
QuestRegistry questRegistry,
|
||||
QuestData questData,
|
||||
TerritoryData territoryData,
|
||||
IGameGui gameGui,
|
||||
ITargetManager targetManager,
|
||||
IPluginLog pluginLog,
|
||||
@ -77,6 +79,7 @@ internal sealed class InteractionUiController : IDisposable
|
||||
_gatheringPointRegistry = gatheringPointRegistry;
|
||||
_questRegistry = questRegistry;
|
||||
_questData = questData;
|
||||
_territoryData = territoryData;
|
||||
_gameGui = gameGui;
|
||||
_targetManager = targetManager;
|
||||
_clientState = clientState;
|
||||
@ -101,7 +104,9 @@ internal sealed class InteractionUiController : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
private bool ShouldHandleUiInteractions => _isInitialCheck || _questController.IsRunning;
|
||||
private bool ShouldHandleUiInteractions => _isInitialCheck ||
|
||||
_questController.IsRunning ||
|
||||
_territoryData.IsQuestBattleInstance(_clientState.TerritoryType);
|
||||
|
||||
internal unsafe void HandleCurrentDialogueChoices()
|
||||
{
|
||||
|
@ -735,7 +735,9 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
|
||||
return false;
|
||||
|
||||
QuestStep? currentStep = currentSequence?.FindStep(currentQuest.Step);
|
||||
return currentStep?.AetheryteShortcut != null;
|
||||
return currentStep?.AetheryteShortcut != null &&
|
||||
(currentStep.SkipConditions?.AetheryteShortcutIf?.QuestsCompleted.Count ?? 0) == 0 &&
|
||||
(currentStep.SkipConditions?.AetheryteShortcutIf?.QuestsAccepted.Count ?? 0) == 0;
|
||||
}
|
||||
|
||||
public bool TryPickPriorityQuest()
|
||||
|
@ -41,7 +41,7 @@ internal static class Combat
|
||||
ArgumentNullException.ThrowIfNull(step.DataId);
|
||||
|
||||
yield return interactFactory.Interact(step.DataId.Value, quest, EInteractionType.None, true);
|
||||
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2));
|
||||
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));
|
||||
yield return CreateTask(quest, sequence, step);
|
||||
break;
|
||||
}
|
||||
@ -53,14 +53,14 @@ internal static class Combat
|
||||
|
||||
yield return useItemFactory.OnObject(quest.Id, step.DataId.Value, step.ItemId.Value,
|
||||
step.CompletionQuestVariablesFlags, true);
|
||||
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2));
|
||||
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));
|
||||
yield return CreateTask(quest, sequence, step);
|
||||
break;
|
||||
}
|
||||
|
||||
case EEnemySpawnType.AutoOnEnterArea:
|
||||
if (step.CombatDelaySecondsAtStart == null)
|
||||
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2));
|
||||
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));
|
||||
|
||||
// automatically triggered when entering area, i.e. only unmount
|
||||
yield return CreateTask(quest, sequence, step);
|
||||
|
@ -174,6 +174,14 @@ internal static class Interact
|
||||
logger.LogInformation("Interaction was most likely triggered");
|
||||
_interactionState = EInteractionState.InteractionConfirmed;
|
||||
}
|
||||
else if (dataId is >= 1047901 and <= 1047905 &&
|
||||
condition[ConditionFlag.Disguised] &&
|
||||
flag == ConditionFlag.Mounting71 && // why the fuck is this the flag that's used, instead of OccupiedIn[Quest]Event
|
||||
value)
|
||||
{
|
||||
logger.LogInformation("(A Knight of Alexandria) Interaction was most likely triggered");
|
||||
_interactionState = EInteractionState.InteractionConfirmed;
|
||||
}
|
||||
}
|
||||
|
||||
private enum EInteractionState
|
||||
|
@ -142,10 +142,10 @@ internal static class AethernetShortcut
|
||||
logger.LogInformation("Moving to S9 aetheryte");
|
||||
List<Vector3> nearbyPoints =
|
||||
[
|
||||
new(7.225532f, 8.467899f, -7.1670876f),
|
||||
new(7.177844f, 8.467899f, 7.2216787f),
|
||||
new(-7.0762224f, 8.467898f, 7.1924725f),
|
||||
new(-7.1289554f, 8.467898f, -7.0594683f)
|
||||
new(0, 8.442986f, 9),
|
||||
new(9, 8.442986f, 0),
|
||||
new(-9, 8.442986f, 0),
|
||||
new(0, 8.442986f, -9),
|
||||
];
|
||||
|
||||
Vector3 closestPoint = nearbyPoints.MinBy(x => (playerPosition - x).Length());
|
||||
|
@ -12,7 +12,7 @@ internal sealed class TerritoryData
|
||||
{
|
||||
private readonly ImmutableDictionary<uint, string> _territoryNames;
|
||||
private readonly ImmutableHashSet<ushort> _territoriesWithMount;
|
||||
private readonly ImmutableHashSet<ushort> _dutyTerritories;
|
||||
private readonly ImmutableDictionary<ushort, uint> _dutyTerritories;
|
||||
private readonly ImmutableDictionary<ushort, string> _instanceNames;
|
||||
|
||||
public TerritoryData(IDataManager dataManager)
|
||||
@ -35,8 +35,7 @@ internal sealed class TerritoryData
|
||||
|
||||
_dutyTerritories = dataManager.GetExcelSheet<TerritoryType>()!
|
||||
.Where(x => x.RowId > 0 && x.ContentFinderCondition.Row != 0)
|
||||
.Select(x => (ushort)x.RowId)
|
||||
.ToImmutableHashSet();
|
||||
.ToImmutableDictionary(x => (ushort)x.RowId, x => x.ContentFinderCondition.Value!.ContentType.Row);
|
||||
|
||||
_instanceNames = dataManager.GetExcelSheet<ContentFinderCondition>()!
|
||||
.Where(x => x.RowId > 0 && x.Content != 0 && x.ContentLinkType == 1 && x.ContentType.Row != 6)
|
||||
@ -56,7 +55,10 @@ internal sealed class TerritoryData
|
||||
|
||||
public bool CanUseMount(ushort territoryId) => _territoriesWithMount.Contains(territoryId);
|
||||
|
||||
public bool IsDutyInstance(ushort territoryId) => _dutyTerritories.Contains(territoryId);
|
||||
public bool IsDutyInstance(ushort territoryId) => _dutyTerritories.ContainsKey(territoryId);
|
||||
|
||||
public bool IsQuestBattleInstance(ushort territoryId) =>
|
||||
_dutyTerritories.TryGetValue(territoryId, out uint contentType) && contentType == 7;
|
||||
|
||||
public string? GetInstanceName(ushort instanceId) => _instanceNames.GetValueOrDefault(instanceId);
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ internal sealed class QuestInfo : IQuestInfo
|
||||
{
|
||||
new(new QuestId((ushort)(quest.PreviousQuest[0].Row & 0xFFFF)), quest.Unknown7),
|
||||
new(new QuestId((ushort)(quest.PreviousQuest[1].Row & 0xFFFF))),
|
||||
new(new QuestId((ushort)(quest.PreviousQuest[1].Row & 0xFFFF)))
|
||||
new(new QuestId((ushort)(quest.PreviousQuest[2].Row & 0xFFFF)))
|
||||
}
|
||||
.Where(x => x.QuestId.Value != 0)
|
||||
.ToImmutableList();
|
||||
|
@ -200,7 +200,7 @@ internal sealed class QuestTooltipComponent
|
||||
if (questInfo.IsMainScenarioQuest)
|
||||
name += $" ({questInfo.QuestId}, MSQ)";
|
||||
else
|
||||
name += $" {questInfo.Name} ({questInfo.QuestId})";
|
||||
name += $" ({questInfo.QuestId})";
|
||||
|
||||
return name;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user