1
0
forked from liza/Questionable

Some jumping, open DF for duties

This commit is contained in:
Liza 2024-06-01 14:30:20 +02:00
parent f9a4008564
commit a5bb4f15cb
Signed by: liza
GPG Key ID: 7199F8D727D55F67
45 changed files with 259 additions and 247 deletions

View File

@ -75,7 +75,6 @@ internal sealed class MovementController : IDisposable
start = end; start = end;
} }
_pluginLog.Information($"Distance: {actualDistance}");
unsafe unsafe
{ {
// 70 is ~10 seconds of sprint // 70 is ~10 seconds of sprint
@ -119,8 +118,9 @@ internal sealed class MovementController : IDisposable
{ {
if (AetheryteConverter.IsLargeAetheryte((EAetheryteLocation)Destination.DataId)) if (AetheryteConverter.IsLargeAetheryte((EAetheryteLocation)Destination.DataId))
{ {
// TODO verify this // TODO verify the first part of this, is there any aetheryte like that?
if (Math.Abs(localPlayerPosition.Y - gameObject.Position.Y) < 2.95f) if (localPlayerPosition.Y - gameObject.Position.Y < 2.95f &&
localPlayerPosition.Y - gameObject.Position.Y > -0.9f)
Stop(); Stop();
} }
else else

View File

@ -27,6 +27,7 @@ internal sealed class QuestController
private readonly IPluginLog _pluginLog; private readonly IPluginLog _pluginLog;
private readonly ICondition _condition; private readonly ICondition _condition;
private readonly IChatGui _chatGui; private readonly IChatGui _chatGui;
private readonly IFramework _framework;
private readonly AetheryteData _aetheryteData; private readonly AetheryteData _aetheryteData;
private readonly LifestreamIpc _lifestreamIpc; private readonly LifestreamIpc _lifestreamIpc;
private readonly TerritoryData _territoryData; private readonly TerritoryData _territoryData;
@ -34,7 +35,7 @@ internal sealed class QuestController
public QuestController(DalamudPluginInterface pluginInterface, IDataManager dataManager, IClientState clientState, public QuestController(DalamudPluginInterface pluginInterface, IDataManager dataManager, IClientState clientState,
GameFunctions gameFunctions, MovementController movementController, IPluginLog pluginLog, ICondition condition, GameFunctions gameFunctions, MovementController movementController, IPluginLog pluginLog, ICondition condition,
IChatGui chatGui, AetheryteData aetheryteData, LifestreamIpc lifestreamIpc) IChatGui chatGui, IFramework framework, AetheryteData aetheryteData, LifestreamIpc lifestreamIpc)
{ {
_pluginInterface = pluginInterface; _pluginInterface = pluginInterface;
_dataManager = dataManager; _dataManager = dataManager;
@ -44,6 +45,7 @@ internal sealed class QuestController
_pluginLog = pluginLog; _pluginLog = pluginLog;
_condition = condition; _condition = condition;
_chatGui = chatGui; _chatGui = chatGui;
_framework = framework;
_aetheryteData = aetheryteData; _aetheryteData = aetheryteData;
_lifestreamIpc = lifestreamIpc; _lifestreamIpc = lifestreamIpc;
_territoryData = new TerritoryData(dataManager); _territoryData = new TerritoryData(dataManager);
@ -358,7 +360,13 @@ internal sealed class QuestController
if (step.TargetTerritoryId == _clientState.TerritoryType) if (step.TargetTerritoryId == _clientState.TerritoryType)
{ {
_pluginLog.Information("Skipping any movement"); _pluginLog.Information("Zone transition, skipping movement");
}
else if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
(_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
(step.JumpDestination.StopDistance ?? 1f))
{
_pluginLog.Information("We're at the jump destination, skipping movement");
} }
else if (step.Position != null) else if (step.Position != null)
{ {
@ -582,7 +590,9 @@ internal sealed class QuestController
break; break;
case EInteractionType.Duty: case EInteractionType.Duty:
// TODO open duty finder if (step.ContentFinderConditionId != null)
_gameFunctions.OpenDutyFinder(step.ContentFinderConditionId.Value);
break; break;
case EInteractionType.SinglePlayerDuty: case EInteractionType.SinglePlayerDuty:
@ -591,9 +601,24 @@ internal sealed class QuestController
break; break;
case EInteractionType.Jump: case EInteractionType.Jump:
// TODO implement somehow?? if (step.JumpDestination != null && !_condition[ConditionFlag.Jumping])
{
float stopDistance = step.JumpDestination.StopDistance ?? 1f;
if ((_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <= stopDistance)
IncreaseStepCount();
else
{
_movementController.NavigateTo(EMovementType.Quest, step.DataId,
[step.JumpDestination.Position],
false, step.JumpDestination.StopDistance ?? stopDistance);
_framework.RunOnTick(() => ActionManager.Instance()->UseAction(ActionType.GeneralAction, 2),
TimeSpan.FromSeconds(step.JumpDestination.DelaySeconds ?? 0.5f));
}
}
break; break;
case EInteractionType.ShouldBeAJump:
case EInteractionType.Instruction: case EInteractionType.Instruction:
// Need to manually forward // Need to manually forward
break; break;

View File

@ -42,6 +42,7 @@ internal sealed unsafe class GameFunctions
private readonly delegate* unmanaged<Utf8String*, int, IntPtr, void> _sanitiseString; private readonly delegate* unmanaged<Utf8String*, int, IntPtr, void> _sanitiseString;
private readonly ReadOnlyDictionary<ushort, byte> _territoryToAetherCurrentCompFlgSet; private readonly ReadOnlyDictionary<ushort, byte> _territoryToAetherCurrentCompFlgSet;
private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands; private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands;
private readonly ReadOnlyDictionary<uint, ushort> _contentFinderConditionToContentId;
private readonly IObjectTable _objectTable; private readonly IObjectTable _objectTable;
private readonly ITargetManager _targetManager; private readonly ITargetManager _targetManager;
@ -74,6 +75,10 @@ internal sealed unsafe class GameFunctions
.Where(x => x.Command != null && x.Command.StartsWith('/')) .Where(x => x.Command != null && x.Command.StartsWith('/'))
.ToDictionary(x => (EEmote)x.RowId, x => x.Command!) .ToDictionary(x => (EEmote)x.RowId, x => x.Command!)
.AsReadOnly(); .AsReadOnly();
_contentFinderConditionToContentId = dataManager.GetExcelSheet<ContentFinderCondition>()
.Where(x => x.RowId > 0 && x.Content > 0)
.ToDictionary(x => x.RowId, x => x.Content)
.AsReadOnly();
} }
// FIXME // FIXME
@ -364,7 +369,7 @@ internal sealed unsafe class GameFunctions
if (gameObject != null) if (gameObject != null)
{ {
var position = (FFXIVClientStructs.FFXIV.Common.Math.Vector3)gameObject.Position; var position = (FFXIVClientStructs.FFXIV.Common.Math.Vector3)gameObject.Position;
ActionManager.Instance()->UseActionLocation(ActionType.KeyItem, itemId, gameObject.ObjectId, &position); ActionManager.Instance()->UseActionLocation(ActionType.KeyItem, itemId, location: &position);
} }
} }
@ -417,4 +422,17 @@ internal sealed unsafe class GameFunctions
return false; return false;
} }
public void OpenDutyFinder(uint contentFinderConditionId)
{
if (_contentFinderConditionToContentId.TryGetValue(contentFinderConditionId, out ushort contentId))
{
if (UIState.IsInstanceContentUnlocked(contentId))
AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId);
else
_pluginLog.Error($"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
}
else
_pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})");
}
} }

View File

@ -19,7 +19,8 @@ public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>
{ EInteractionType.WaitForManualProgress, "WaitForManualProgress" }, { EInteractionType.WaitForManualProgress, "WaitForManualProgress" },
{ EInteractionType.Duty, "Duty" }, { EInteractionType.Duty, "Duty" },
{ EInteractionType.SinglePlayerDuty, "SinglePlayerDuty" }, { EInteractionType.SinglePlayerDuty, "SinglePlayerDuty" },
{ EInteractionType.Jump, "ShouldBeAJump" }, { EInteractionType.Jump, "Jump" },
{ EInteractionType.ShouldBeAJump, "ShouldBeAJump" },
{ EInteractionType.Instruction, "Instruction" }, { EInteractionType.Instruction, "Instruction" },
}; };
} }

View File

@ -19,9 +19,13 @@ public enum EInteractionType
WaitForManualProgress, WaitForManualProgress,
Duty, Duty,
SinglePlayerDuty, SinglePlayerDuty,
Jump, Jump,
/// <summary>
/// Needs to be adjusted for coords etc. in the quest data.
/// </summary>
ShouldBeAJump,
/// <summary> /// <summary>
/// Needs to be manually continued. /// Needs to be manually continued.
/// </summary> /// </summary>

View File

@ -0,0 +1,14 @@
using System.Numerics;
using System.Text.Json.Serialization;
using Questionable.Model.V1.Converter;
namespace Questionable.Model.V1;
public sealed class JumpDestination
{
[JsonConverter(typeof(VectorConverter))]
public Vector3 Position { get; set; }
public float? StopDistance { get; set; }
public float? DelaySeconds { get; set; }
}

View File

@ -38,6 +38,8 @@ public class QuestStep
public EEnemySpawnType? EnemySpawnType { get; set; } public EEnemySpawnType? EnemySpawnType { get; set; }
public IList<uint> KillEnemyDataIds { get; set; } = new List<uint>(); public IList<uint> KillEnemyDataIds { get; set; } = new List<uint>();
public JumpDestination? JumpDestination { get; set; }
public uint? ContentFinderConditionId { get; set; }
public IList<ESkipCondition> SkipIf { get; set; } = new List<ESkipCondition>(); public IList<ESkipCondition> SkipIf { get; set; } = new List<ESkipCondition>();
} }

View File

@ -53,15 +53,9 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2011959,
"Position": {
"X": -636.4081,
"Y": -0.015319824,
"Z": -663.81323
},
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Tower of Zot" "ContentFinderConditionId": 783
} }
] ]
}, },

View File

@ -98,15 +98,9 @@
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{ {
"DataId": 2012113,
"Position": {
"X": -525.8717,
"Y": -190.02063,
"Z": -676.875
},
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Tower of Babil" "ContentFinderConditionId": 785
} }
] ]
}, },

View File

@ -39,14 +39,9 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2012122,
"Position": {
"X": 99.96179,
"Y": -0.015319824,
"Z": 103.227295
},
"TerritoryId": 1028, "TerritoryId": 1028,
"InteractionType": "Duty", "InteractionType": "Duty",
"ContentFinderConditionId": 802,
"Comment": "The Dark Inside" "Comment": "The Dark Inside"
} }
] ]

View File

@ -63,15 +63,9 @@
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{ {
"DataId": 2012228,
"Position": {
"X": 205.82886,
"Y": 1.7547607,
"Z": 761.50134
},
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Vanaspati" "ContentFinderConditionId": 789
} }
] ]
}, },

View File

@ -48,13 +48,20 @@
}, },
{ {
"Position": { "Position": {
"X": 346.73517, "X": 475.2184,
"Y": -15.572778, "Y": -17.473314,
"Z": -105.96149 "Z": 47.986946
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo", "InteractionType": "Jump",
"Comment": "Needs manual jumping" "JumpDestination": {
"Position": {
"X": 477.34882,
"Y": -16.407324,
"Z": 43.802086
},
"DelaySeconds": 0.25
}
}, },
{ {
"DataId": 1040052, "DataId": 1040052,
@ -78,6 +85,7 @@
"Y": -14.757837, "Y": -14.757837,
"Z": -115.15985 "Z": -115.15985
}, },
"StopDistance": 7,
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -95,6 +103,7 @@
"StopDistance": 0.5, "StopDistance": 0.5,
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true,
"DisableNavmesh": true "DisableNavmesh": true
}, },
{ {
@ -141,10 +150,33 @@
"Sequence": 6, "Sequence": 6,
"Steps": [ "Steps": [
{ {
"Position": {
"X": -55.662647,
"Y": -16.696985,
"Z": -81.29199
},
"StopDistance": 0.25,
"TerritoryId": 961,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": -58.75509,
"Y": -15.402463,
"Z": -83.133934
}
},
"DisableNavmesh": true
},
{
"Position": {
"X": -64.19198,
"Y": -15.332472,
"Z": -84.65695
},
"StopDistance": 0.25,
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Emote", "InteractionType": "Emote",
"Emote": "wave", "Emote": "wave"
"Comment": "Need to jump manually"
} }
] ]
}, },

View File

@ -27,18 +27,16 @@
"Y": -26.995626, "Y": -26.995626,
"Z": 543.8281 "Z": 543.8281
}, },
"StopDistance": 0.5,
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo" "InteractionType": "Jump",
}, "JumpDestination": {
{ "Position": {
"Position": { "X": -144.54877,
"X": -137.80992, "Y": -26.230347,
"Y": -26.995626, "Z": 551.5067
"Z": 543.8281 }
}, }
"TerritoryId": 961,
"InteractionType": "ShouldBeAJump",
"Comment": "Jump on Ledge"
}, },
{ {
"DataId": 2012023, "DataId": 2012023,
@ -59,6 +57,7 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true,
"DisableNavmesh": true "DisableNavmesh": true
}, },
{ {

View File

@ -45,7 +45,8 @@
"Z": 546.50183 "Z": 546.50183
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"$.1": "QuestVariables if done first: 1 0 0 0 0 128"
}, },
{ {
"DataId": 2012136, "DataId": 2012136,
@ -129,7 +130,8 @@
"Z": 432.59787 "Z": 432.59787
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo" "InteractionType": "WalkTo",
"Mount": true
}, },
{ {
"DataId": 2012021, "DataId": 2012021,

View File

@ -29,7 +29,8 @@
"Z": 236.07227 "Z": 236.07227
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Elpis - Anagnorisis"
} }
] ]
}, },
@ -67,6 +68,17 @@
{ {
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{
"DataId": 2012029,
"Position": {
"X": -255.54291,
"Y": 143.05322,
"Z": -36.972656
},
"TerritoryId": 961,
"InteractionType": "AttuneAetherCurrent",
"AetherCurrentId": 2818383
},
{ {
"DataId": 2012146, "DataId": 2012146,
"Position": { "Position": {

View File

@ -114,7 +114,8 @@
"Z": -197.54811 "Z": -197.54811
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo" "InteractionType": "WalkTo",
"Mount": true
}, },
{ {
"DataId": 1040117, "DataId": 1040117,

View File

@ -21,17 +21,6 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 2012029,
"Position": {
"X": -255.54291,
"Y": 143.05322,
"Z": -36.972656
},
"TerritoryId": 961,
"InteractionType": "AttuneAetherCurrent",
"AetherCurrentId": 2818383
},
{ {
"Position": { "Position": {
"X": -297.88638, "X": -297.88638,

View File

@ -96,7 +96,7 @@
"Y": 294.93375, "Y": 294.93375,
"Z": -559.62463 "Z": -559.62463
}, },
"StopDistance": 5, "StopDistance": 6,
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -44,6 +44,7 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true,
"DisableNavmesh": true "DisableNavmesh": true
}, },
{ {

View File

@ -40,16 +40,9 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2012172,
"Position": {
"X": -412.49713,
"Y": 329.9458,
"Z": -765.80457
},
"StopDistance": 4,
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Ktisis Hyperborea" "ContentFinderConditionId": 787
} }
] ]
}, },

View File

@ -45,8 +45,9 @@
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Old Sharlayan",
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] Scholar's Harbor", "[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
] ]
} }

View File

@ -28,8 +28,7 @@
"Z": 457.04776 "Z": 457.04776
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "WalkTo", "InteractionType": "WalkTo"
"Comment": "TODO verify this is correct, there was an aether current prior to this"
}, },
{ {
"DataId": 2011989, "DataId": 2011989,

View File

@ -26,9 +26,11 @@
"Y": -28.723352, "Y": -28.723352,
"Z": -42.992764 "Z": -42.992764
}, },
"StopDistance": 0.75,
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet" "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
"Mount": true
}, },
{ {
"DataId": 1039687, "DataId": 1039687,
@ -70,6 +72,7 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Distracted Researcher", "Comment": "Distracted Researcher",
"$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 2 0" "$.1": "QuestVariables if done first: 1 0 0 0 2 0"
}, },
{ {
@ -82,6 +85,7 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Hyperventilating Engineer", "Comment": "Hyperventilating Engineer",
"$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 130 0" "$.1": "QuestVariables if done after [1]: 2 0 0 0 130 0"
}, },
{ {
@ -94,6 +98,7 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Harried Aetherologist", "Comment": "Harried Aetherologist",
"$.0": "[3]",
"$.1": "QuestVariables if done after [2]: 3 0 0 0 138 0" "$.1": "QuestVariables if done after [2]: 3 0 0 0 138 0"
}, },
{ {
@ -106,6 +111,7 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Grimacing Naturalist", "Comment": "Grimacing Naturalist",
"$.0": "[4]",
"$.1": "QuestVariables if done after [3]: 4 0 0 0 142 0" "$.1": "QuestVariables if done after [3]: 4 0 0 0 142 0"
}, },
{ {
@ -118,6 +124,7 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Ponderous Mathematician", "Comment": "Ponderous Mathematician",
"$.0": "[5]",
"$.1": "QuestVariables if done after [4]: 5 0 0 0 206 0" "$.1": "QuestVariables if done after [4]: 5 0 0 0 206 0"
}, },
{ {
@ -131,6 +138,7 @@
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Despondent Engineer", "Comment": "Despondent Engineer",
"Mount": true, "Mount": true,
"$.0": "[6]",
"$.1": "QuestVariables if done after [5]: 6 0 0 0 238 0" "$.1": "QuestVariables if done after [5]: 6 0 0 0 238 0"
}, },
{ {
@ -143,6 +151,8 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Skeptical Researcher", "Comment": "Skeptical Researcher",
"Mount": true,
"$.0": "[7]",
"$.1": "QuestVariables if done after [6]: 7 0 0 0 239 0" "$.1": "QuestVariables if done after [6]: 7 0 0 0 239 0"
}, },
{ {
@ -154,7 +164,9 @@
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Anxious Engineer" "Comment": "Anxious Engineer",
"$.0": "[8]",
"$.2": "QuestVariables if done first: 1 0 0 0 16 0"
} }
] ]
}, },

View File

@ -40,6 +40,7 @@
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true,
"DisableNavmesh": true "DisableNavmesh": true
}, },
{ {

View File

@ -94,14 +94,22 @@
}, },
{ {
"Position": { "Position": {
"X": -118.62926, "X": -120.48093,
"Y": -22.071072, "Y": -21.96263,
"Z": 681.35846 "Z": 685.2332
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "ShouldBeAJump", "InteractionType": "Jump",
"DisableNavmesh": true, "DisableNavmesh": true,
"Comment": "Navmesh can't jump" "JumpDestination": {
"Position": {
"X": -124.55376,
"Y": -19.659834,
"Z": 686.864
},
"StopDistance": 0.5,
"DelaySeconds": 0.25
}
}, },
{ {
"DataId": 2011986, "DataId": 2011986,
@ -112,7 +120,8 @@
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "AttuneAetherCurrent", "InteractionType": "AttuneAetherCurrent",
"AetherCurrentId": 2818317 "AetherCurrentId": 2818317,
"DisableNavmesh": true
}, },
{ {
"Position": { "Position": {
@ -122,6 +131,7 @@
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true,
"DisableNavmesh": true "DisableNavmesh": true
}, },
{ {

View File

@ -28,7 +28,8 @@
}, },
"AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet", "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "WalkTo" "InteractionType": "WalkTo",
"Mount": true
}, },
{ {
"DataId": 2012226, "DataId": 2012226,
@ -98,6 +99,7 @@
"Y": -191.11913, "Y": -191.11913,
"Z": 301.71655 "Z": 301.71655
}, },
"StopDistance": 7,
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -113,7 +115,8 @@
"Z": 301.63266 "Z": 301.63266
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"Comment": "TODO Should cancel navmesh if condition is [OccupiedInCutsceneEvent OR BetweenAreas]; then verify next marker distance"
} }
] ]
}, },

View File

@ -36,15 +36,9 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2012742,
"Position": {
"X": -238.26965,
"Y": -221.51526,
"Z": 341.29846
},
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Aitiascope" "ContentFinderConditionId": 786
} }
] ]
}, },
@ -52,14 +46,9 @@
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{ {
"DataId": 2012230,
"Position": {
"X": 99.95956,
"Y": -2.384186E-07,
"Z": 99.85896
},
"TerritoryId": 1030, "TerritoryId": 1030,
"InteractionType": "Interact" "InteractionType": "Duty",
"ContentFinderConditionId": 790
} }
] ]
}, },

View File

@ -24,15 +24,9 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 2012370,
"Position": {
"X": -3.1281738,
"Y": 637.07935,
"Z": -9.079163
},
"TerritoryId": 960, "TerritoryId": 960,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Dead Ends" "ContentFinderConditionId": 792
} }
] ]
}, },
@ -40,16 +34,9 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2012371,
"Position": {
"X": 100,
"Y": 0,
"Z": 106
},
"StopDistance": 5,
"TerritoryId": 1029, "TerritoryId": 1029,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Final Day" "ContentFinderConditionId": 796
} }
] ]
}, },

View File

@ -24,15 +24,9 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 2012839,
"Position": {
"X": -269.55066,
"Y": 0.10675049,
"Z": 610.65076
},
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Alzadaal's Legacy" "ContentFinderConditionId": 844
} }
] ]
}, },

View File

@ -68,15 +68,9 @@
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{ {
"DataId": 2013041,
"Position": {
"X": 110.06323,
"Y": -350.02673,
"Z": -89.463684
},
"TerritoryId": 1056, "TerritoryId": 1056,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Fell Court of Troia" "ContentFinderConditionId": 869
} }
] ]
}, },

View File

@ -37,16 +37,9 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2013052,
"Position": {
"X": 99.77076,
"Y": -19,
"Z": 176.985
},
"StopDistance": 5,
"TerritoryId": 1092, "TerritoryId": 1092,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Storm's Crown" "ContentFinderConditionId": 870
} }
] ]
}, },

View File

@ -53,16 +53,10 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2013225,
"Position": {
"X": 469.16907,
"Y": -18.204102,
"Z": 717.7081
},
"TerritoryId": 958, "TerritoryId": 958,
"StopDistance": 5,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Lapis Manalis" "Comment": "Lapis Manalis",
"ContentFinderConditionId": 896
} }
] ]
}, },

View File

@ -51,15 +51,9 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2013240,
"Position": {
"X": 657.3739,
"Y": -180.7837,
"Z": 45.63965
},
"TerritoryId": 1125, "TerritoryId": 1125,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Mount Ordeals" "ContentFinderConditionId": 886
} }
] ]
}, },

View File

@ -132,15 +132,9 @@
"Sequence": 7, "Sequence": 7,
"Steps": [ "Steps": [
{ {
"DataId": 2013359,
"Position": {
"X": 134.667,
"Y": -16.147,
"Z": 238.0937
},
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Aetherfont" "ContentFinderConditionId": 822
} }
] ]
}, },

View File

@ -36,15 +36,9 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2013364,
"Position": {
"X": 99.99231,
"Y": 0.015197754,
"Z": 101.823364
},
"TerritoryId": 1159, "TerritoryId": 1159,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Voidcast Dais" "ContentFinderConditionId": 949
} }
] ]
}, },

View File

@ -21,15 +21,9 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 2013410,
"Position": {
"X": 24.338135,
"Y": 56.65674,
"Z": 439.96326
},
"TerritoryId": 1162, "TerritoryId": 1162,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Lunar Subterrane" "ContentFinderConditionId": 823
} }
] ]
}, },
@ -52,15 +46,9 @@
"Sequence": 5, "Sequence": 5,
"Steps": [ "Steps": [
{ {
"DataId": 2013411,
"Position": {
"X": 100.0275,
"Y": 0,
"Z": 106.3549
},
"TerritoryId": 1181, "TerritoryId": 1181,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Abyssal Fracture" "ContentFinderConditionId": 964
} }
] ]
}, },

View File

@ -7,16 +7,9 @@
"Sequence": 7, "Sequence": 7,
"Steps": [ "Steps": [
{ {
"DataId": 2010235,
"Position": {
"X": -426.9627,
"Y": -229.08374,
"Z": 858.09106
},
"StopDistance": 5,
"TerritoryId": 818, "TerritoryId": 818,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Amaurot" "ContentFinderConditionId": 652
} }
] ]
}, },
@ -24,16 +17,9 @@
"Sequence": 9, "Sequence": 9,
"Steps": [ "Steps": [
{ {
"DataId": 2010236,
"Position": {
"X": 100.0382,
"Y": 4.768372E-07,
"Z": 106.0076
},
"StopDistance": 5,
"TerritoryId": 881, "TerritoryId": 881,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Dying Gasp" "ContentFinderConditionId": 687
} }
] ]
}, },

View File

@ -47,15 +47,9 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2010808,
"Position": {
"X": -123.55237,
"Y": -0.7172241,
"Z": 647.6997
},
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Grand Cosmos" "ContentFinderConditionId": 692
} }
] ]
}, },

View File

@ -38,16 +38,9 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2010952,
"Position": {
"X": -539.0652,
"Y": 63.97181,
"Z": 738.8608
},
"StopDistance": 5,
"TerritoryId": 814, "TerritoryId": 814,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Anamnesis Anyder" "ContentFinderConditionId": 714
} }
] ]
} }

View File

@ -52,15 +52,9 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2011101,
"Position": {
"X": 60.04639,
"Y": 82.82986,
"Z": 1.940211
},
"TerritoryId": 820, "TerritoryId": 820,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Heroes' Gauntlet" "ContentFinderConditionId": 737
} }
] ]
}, },

View File

@ -21,16 +21,9 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 2011103,
"Position": {
"X": 100,
"Y": 4.208088E-05,
"Z": 112.5434
},
"StopDistance": 5,
"TerritoryId": 931, "TerritoryId": 931,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "The Seat of Sacrifice" "ContentFinderConditionId": 738
} }
] ]
}, },

View File

@ -80,15 +80,9 @@
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{ {
"DataId": 2011334,
"Position": {
"X": 384.32886,
"Y": 75.48633,
"Z": -218.00574
},
"TerritoryId": 399, "TerritoryId": 399,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Matoya's Relict" "ContentFinderConditionId": 746
} }
] ]
}, },

View File

@ -57,15 +57,9 @@
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{ {
"DataId": 2011521,
"Position": {
"X": -24.368713,
"Y": 83.17688,
"Z": 12.893799
},
"TerritoryId": 130, "TerritoryId": 130,
"InteractionType": "Duty", "InteractionType": "Duty",
"Comment": "Paglth'an" "ContentFinderConditionId": 777
} }
] ]
}, },

View File

@ -105,6 +105,7 @@
"WaitForManualProgress", "WaitForManualProgress",
"Duty", "Duty",
"SinglePlayerDuty", "SinglePlayerDuty",
"Jump",
"ShouldBeAJump", "ShouldBeAJump",
"Instruction" "Instruction"
] ]
@ -375,6 +376,52 @@
"description": "The Item to use", "description": "The Item to use",
"exclusiveMinimum": 0 "exclusiveMinimum": 0
}, },
"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"
]
}
},
"required": [
"Position"
]
},
"ContentFinderConditionId": {
"type": "number",
"exclusiveMinimum": 0
},
"SkipIf": { "SkipIf": {
"type": "array", "type": "array",
"description": "TODO Not implemented", "description": "TODO Not implemented",

View File

@ -53,7 +53,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
_movementController = _movementController =
new MovementController(navmeshIpc, clientState, _gameFunctions, condition, pluginLog); new MovementController(navmeshIpc, clientState, _gameFunctions, condition, pluginLog);
_questController = new QuestController(pluginInterface, dataManager, _clientState, _gameFunctions, _questController = new QuestController(pluginInterface, dataManager, _clientState, _gameFunctions,
_movementController, pluginLog, condition, chatGui, aetheryteData, lifestreamIpc); _movementController, pluginLog, condition, chatGui, framework, aetheryteData, lifestreamIpc);
_windowSystem.AddWindow(new DebugWindow(_movementController, _questController, _gameFunctions, clientState, _windowSystem.AddWindow(new DebugWindow(_movementController, _questController, _gameFunctions, clientState,
targetManager)); targetManager));