start = end;
}
- _pluginLog.Information($"Distance: {actualDistance}");
unsafe
{
// 70 is ~10 seconds of sprint
{
if (AetheryteConverter.IsLargeAetheryte((EAetheryteLocation)Destination.DataId))
{
- // TODO verify this
- if (Math.Abs(localPlayerPosition.Y - gameObject.Position.Y) < 2.95f)
+ // TODO verify the first part of this, is there any aetheryte like that?
+ if (localPlayerPosition.Y - gameObject.Position.Y < 2.95f &&
+ localPlayerPosition.Y - gameObject.Position.Y > -0.9f)
Stop();
}
else
private readonly IPluginLog _pluginLog;
private readonly ICondition _condition;
private readonly IChatGui _chatGui;
+ private readonly IFramework _framework;
private readonly AetheryteData _aetheryteData;
private readonly LifestreamIpc _lifestreamIpc;
private readonly TerritoryData _territoryData;
public QuestController(DalamudPluginInterface pluginInterface, IDataManager dataManager, IClientState clientState,
GameFunctions gameFunctions, MovementController movementController, IPluginLog pluginLog, ICondition condition,
- IChatGui chatGui, AetheryteData aetheryteData, LifestreamIpc lifestreamIpc)
+ IChatGui chatGui, IFramework framework, AetheryteData aetheryteData, LifestreamIpc lifestreamIpc)
{
_pluginInterface = pluginInterface;
_dataManager = dataManager;
_pluginLog = pluginLog;
_condition = condition;
_chatGui = chatGui;
+ _framework = framework;
_aetheryteData = aetheryteData;
_lifestreamIpc = lifestreamIpc;
_territoryData = new TerritoryData(dataManager);
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)
{
break;
case EInteractionType.Duty:
- // TODO open duty finder
+ if (step.ContentFinderConditionId != null)
+ _gameFunctions.OpenDutyFinder(step.ContentFinderConditionId.Value);
+
break;
case EInteractionType.SinglePlayerDuty:
break;
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;
+ case EInteractionType.ShouldBeAJump:
case EInteractionType.Instruction:
// Need to manually forward
break;
private readonly delegate* unmanaged<Utf8String*, int, IntPtr, void> _sanitiseString;
private readonly ReadOnlyDictionary<ushort, byte> _territoryToAetherCurrentCompFlgSet;
private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands;
+ private readonly ReadOnlyDictionary<uint, ushort> _contentFinderConditionToContentId;
private readonly IObjectTable _objectTable;
private readonly ITargetManager _targetManager;
.Where(x => x.Command != null && x.Command.StartsWith('/'))
.ToDictionary(x => (EEmote)x.RowId, x => x.Command!)
.AsReadOnly();
+ _contentFinderConditionToContentId = dataManager.GetExcelSheet<ContentFinderCondition>()
+ .Where(x => x.RowId > 0 && x.Content > 0)
+ .ToDictionary(x => x.RowId, x => x.Content)
+ .AsReadOnly();
}
// FIXME
if (gameObject != null)
{
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);
}
}
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})");
+ }
}
{ EInteractionType.WaitForManualProgress, "WaitForManualProgress" },
{ EInteractionType.Duty, "Duty" },
{ EInteractionType.SinglePlayerDuty, "SinglePlayerDuty" },
- { EInteractionType.Jump, "ShouldBeAJump" },
+ { EInteractionType.Jump, "Jump" },
+ { EInteractionType.ShouldBeAJump, "ShouldBeAJump" },
{ EInteractionType.Instruction, "Instruction" },
};
}
WaitForManualProgress,
Duty,
SinglePlayerDuty,
-
Jump,
+ /// <summary>
+ /// Needs to be adjusted for coords etc. in the quest data.
+ /// </summary>
+ ShouldBeAJump,
+
/// <summary>
/// Needs to be manually continued.
/// </summary>
--- /dev/null
+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; }
+}
public EEnemySpawnType? EnemySpawnType { get; set; }
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>();
}
"Sequence": 3,
"Steps": [
{
- "DataId": 2011959,
- "Position": {
- "X": -636.4081,
- "Y": -0.015319824,
- "Z": -663.81323
- },
"TerritoryId": 957,
"InteractionType": "Duty",
- "Comment": "The Tower of Zot"
+ "ContentFinderConditionId": 783
}
]
},
"Sequence": 4,
"Steps": [
{
- "DataId": 2012113,
- "Position": {
- "X": -525.8717,
- "Y": -190.02063,
- "Z": -676.875
- },
"TerritoryId": 958,
"InteractionType": "Duty",
- "Comment": "The Tower of Babil"
+ "ContentFinderConditionId": 785
}
]
},
"Sequence": 2,
"Steps": [
{
- "DataId": 2012122,
- "Position": {
- "X": 99.96179,
- "Y": -0.015319824,
- "Z": 103.227295
- },
"TerritoryId": 1028,
"InteractionType": "Duty",
+ "ContentFinderConditionId": 802,
"Comment": "The Dark Inside"
}
]
"Sequence": 4,
"Steps": [
{
- "DataId": 2012228,
- "Position": {
- "X": 205.82886,
- "Y": 1.7547607,
- "Z": 761.50134
- },
"TerritoryId": 957,
"InteractionType": "Duty",
- "Comment": "Vanaspati"
+ "ContentFinderConditionId": 789
}
]
},
},
{
"Position": {
- "X": 346.73517,
- "Y": -15.572778,
- "Z": -105.96149
+ "X": 475.2184,
+ "Y": -17.473314,
+ "Z": 47.986946
},
"TerritoryId": 961,
- "InteractionType": "WalkTo",
- "Comment": "Needs manual jumping"
+ "InteractionType": "Jump",
+ "JumpDestination": {
+ "Position": {
+ "X": 477.34882,
+ "Y": -16.407324,
+ "Z": 43.802086
+ },
+ "DelaySeconds": 0.25
+ }
},
{
"DataId": 1040052,
"Y": -14.757837,
"Z": -115.15985
},
+ "StopDistance": 7,
"TerritoryId": 961,
"InteractionType": "Interact"
}
"StopDistance": 0.5,
"TerritoryId": 961,
"InteractionType": "WalkTo",
+ "Mount": true,
"DisableNavmesh": true
},
{
"Sequence": 6,
"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,
"InteractionType": "Emote",
- "Emote": "wave",
- "Comment": "Need to jump manually"
+ "Emote": "wave"
}
]
},
"Y": -26.995626,
"Z": 543.8281
},
+ "StopDistance": 0.5,
"TerritoryId": 961,
- "InteractionType": "WalkTo"
- },
- {
- "Position": {
- "X": -137.80992,
- "Y": -26.995626,
- "Z": 543.8281
- },
- "TerritoryId": 961,
- "InteractionType": "ShouldBeAJump",
- "Comment": "Jump on Ledge"
+ "InteractionType": "Jump",
+ "JumpDestination": {
+ "Position": {
+ "X": -144.54877,
+ "Y": -26.230347,
+ "Z": 551.5067
+ }
+ }
},
{
"DataId": 2012023,
},
"TerritoryId": 961,
"InteractionType": "WalkTo",
+ "Mount": true,
"DisableNavmesh": true
},
{
"Z": 546.50183
},
"TerritoryId": 961,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "$.1": "QuestVariables if done first: 1 0 0 0 0 128"
},
{
"DataId": 2012136,
"Z": 432.59787
},
"TerritoryId": 961,
- "InteractionType": "WalkTo"
+ "InteractionType": "WalkTo",
+ "Mount": true
},
{
"DataId": 2012021,
"Z": 236.07227
},
"TerritoryId": 961,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Elpis - Anagnorisis"
}
]
},
{
"Sequence": 4,
"Steps": [
+ {
+ "DataId": 2012029,
+ "Position": {
+ "X": -255.54291,
+ "Y": 143.05322,
+ "Z": -36.972656
+ },
+ "TerritoryId": 961,
+ "InteractionType": "AttuneAetherCurrent",
+ "AetherCurrentId": 2818383
+ },
{
"DataId": 2012146,
"Position": {
"Z": -197.54811
},
"TerritoryId": 961,
- "InteractionType": "WalkTo"
+ "InteractionType": "WalkTo",
+ "Mount": true
},
{
"DataId": 1040117,
{
"Sequence": 1,
"Steps": [
- {
- "DataId": 2012029,
- "Position": {
- "X": -255.54291,
- "Y": 143.05322,
- "Z": -36.972656
- },
- "TerritoryId": 961,
- "InteractionType": "AttuneAetherCurrent",
- "AetherCurrentId": 2818383
- },
{
"Position": {
"X": -297.88638,
"Y": 294.93375,
"Z": -559.62463
},
- "StopDistance": 5,
+ "StopDistance": 6,
"TerritoryId": 961,
"InteractionType": "Interact"
}
},
"TerritoryId": 961,
"InteractionType": "WalkTo",
+ "Mount": true,
"DisableNavmesh": true
},
{
"Sequence": 2,
"Steps": [
{
- "DataId": 2012172,
- "Position": {
- "X": -412.49713,
- "Y": 329.9458,
- "Z": -765.80457
- },
- "StopDistance": 4,
"TerritoryId": 961,
"InteractionType": "Duty",
- "Comment": "Ktisis Hyperborea"
+ "ContentFinderConditionId": 787
}
]
},
},
"TerritoryId": 962,
"InteractionType": "Interact",
+ "AetheryteShortcut": "Old Sharlayan",
"AethernetShortcut": [
- "[Old Sharlayan] Scholar's Harbor",
+ "[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex"
]
}
"Z": 457.04776
},
"TerritoryId": 956,
- "InteractionType": "WalkTo",
- "Comment": "TODO verify this is correct, there was an aether current prior to this"
+ "InteractionType": "WalkTo"
},
{
"DataId": 2011989,
"Y": -28.723352,
"Z": -42.992764
},
+ "StopDistance": 0.75,
"TerritoryId": 956,
"InteractionType": "WalkTo",
- "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet"
+ "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
+ "Mount": true
},
{
"DataId": 1039687,
"TerritoryId": 956,
"InteractionType": "Interact",
"Comment": "Distracted Researcher",
+ "$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 2 0"
},
{
"TerritoryId": 956,
"InteractionType": "Interact",
"Comment": "Hyperventilating Engineer",
+ "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 130 0"
},
{
"TerritoryId": 956,
"InteractionType": "Interact",
"Comment": "Harried Aetherologist",
+ "$.0": "[3]",
"$.1": "QuestVariables if done after [2]: 3 0 0 0 138 0"
},
{
"TerritoryId": 956,
"InteractionType": "Interact",
"Comment": "Grimacing Naturalist",
+ "$.0": "[4]",
"$.1": "QuestVariables if done after [3]: 4 0 0 0 142 0"
},
{
"TerritoryId": 956,
"InteractionType": "Interact",
"Comment": "Ponderous Mathematician",
+ "$.0": "[5]",
"$.1": "QuestVariables if done after [4]: 5 0 0 0 206 0"
},
{
"InteractionType": "Interact",
"Comment": "Despondent Engineer",
"Mount": true,
+ "$.0": "[6]",
"$.1": "QuestVariables if done after [5]: 6 0 0 0 238 0"
},
{
"TerritoryId": 956,
"InteractionType": "Interact",
"Comment": "Skeptical Researcher",
+ "Mount": true,
+ "$.0": "[7]",
"$.1": "QuestVariables if done after [6]: 7 0 0 0 239 0"
},
{
},
"TerritoryId": 956,
"InteractionType": "Interact",
- "Comment": "Anxious Engineer"
+ "Comment": "Anxious Engineer",
+ "$.0": "[8]",
+ "$.2": "QuestVariables if done first: 1 0 0 0 16 0"
}
]
},
},
"TerritoryId": 956,
"InteractionType": "WalkTo",
+ "Mount": true,
"DisableNavmesh": true
},
{
},
{
"Position": {
- "X": -118.62926,
- "Y": -22.071072,
- "Z": 681.35846
+ "X": -120.48093,
+ "Y": -21.96263,
+ "Z": 685.2332
},
"TerritoryId": 956,
- "InteractionType": "ShouldBeAJump",
+ "InteractionType": "Jump",
"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,
},
"TerritoryId": 956,
"InteractionType": "AttuneAetherCurrent",
- "AetherCurrentId": 2818317
+ "AetherCurrentId": 2818317,
+ "DisableNavmesh": true
},
{
"Position": {
},
"TerritoryId": 956,
"InteractionType": "WalkTo",
+ "Mount": true,
"DisableNavmesh": true
},
{
},
"AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
"TerritoryId": 956,
- "InteractionType": "WalkTo"
+ "InteractionType": "WalkTo",
+ "Mount": true
},
{
"DataId": 2012226,
"Y": -191.11913,
"Z": 301.71655
},
+ "StopDistance": 7,
"TerritoryId": 956,
"InteractionType": "Interact"
}
"Z": 301.63266
},
"TerritoryId": 956,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Comment": "TODO Should cancel navmesh if condition is [OccupiedInCutsceneEvent OR BetweenAreas]; then verify next marker distance"
}
]
},
"Sequence": 2,
"Steps": [
{
- "DataId": 2012742,
- "Position": {
- "X": -238.26965,
- "Y": -221.51526,
- "Z": 341.29846
- },
"TerritoryId": 956,
"InteractionType": "Duty",
- "Comment": "Aitiascope"
+ "ContentFinderConditionId": 786
}
]
},
"Sequence": 4,
"Steps": [
{
- "DataId": 2012230,
- "Position": {
- "X": 99.95956,
- "Y": -2.384186E-07,
- "Z": 99.85896
- },
"TerritoryId": 1030,
- "InteractionType": "Interact"
+ "InteractionType": "Duty",
+ "ContentFinderConditionId": 790
}
]
},
"Sequence": 1,
"Steps": [
{
- "DataId": 2012370,
- "Position": {
- "X": -3.1281738,
- "Y": 637.07935,
- "Z": -9.079163
- },
"TerritoryId": 960,
"InteractionType": "Duty",
- "Comment": "The Dead Ends"
+ "ContentFinderConditionId": 792
}
]
},
"Sequence": 3,
"Steps": [
{
- "DataId": 2012371,
- "Position": {
- "X": 100,
- "Y": 0,
- "Z": 106
- },
- "StopDistance": 5,
"TerritoryId": 1029,
"InteractionType": "Duty",
- "Comment": "The Final Day"
+ "ContentFinderConditionId": 796
}
]
},
"Sequence": 1,
"Steps": [
{
- "DataId": 2012839,
- "Position": {
- "X": -269.55066,
- "Y": 0.10675049,
- "Z": 610.65076
- },
"TerritoryId": 957,
"InteractionType": "Duty",
- "Comment": "Alzadaal's Legacy"
+ "ContentFinderConditionId": 844
}
]
},
"Sequence": 4,
"Steps": [
{
- "DataId": 2013041,
- "Position": {
- "X": 110.06323,
- "Y": -350.02673,
- "Z": -89.463684
- },
"TerritoryId": 1056,
"InteractionType": "Duty",
- "Comment": "Fell Court of Troia"
+ "ContentFinderConditionId": 869
}
]
},
"Sequence": 3,
"Steps": [
{
- "DataId": 2013052,
- "Position": {
- "X": 99.77076,
- "Y": -19,
- "Z": 176.985
- },
- "StopDistance": 5,
"TerritoryId": 1092,
"InteractionType": "Duty",
- "Comment": "Storm's Crown"
+ "ContentFinderConditionId": 870
}
]
},
"Sequence": 3,
"Steps": [
{
- "DataId": 2013225,
- "Position": {
- "X": 469.16907,
- "Y": -18.204102,
- "Z": 717.7081
- },
"TerritoryId": 958,
- "StopDistance": 5,
"InteractionType": "Duty",
- "Comment": "Lapis Manalis"
+ "Comment": "Lapis Manalis",
+ "ContentFinderConditionId": 896
}
]
},
"Sequence": 3,
"Steps": [
{
- "DataId": 2013240,
- "Position": {
- "X": 657.3739,
- "Y": -180.7837,
- "Z": 45.63965
- },
"TerritoryId": 1125,
"InteractionType": "Duty",
- "Comment": "Mount Ordeals"
+ "ContentFinderConditionId": 886
}
]
},
"Sequence": 7,
"Steps": [
{
- "DataId": 2013359,
- "Position": {
- "X": 134.667,
- "Y": -16.147,
- "Z": 238.0937
- },
"TerritoryId": 962,
"InteractionType": "Duty",
- "Comment": "The Aetherfont"
+ "ContentFinderConditionId": 822
}
]
},
"Sequence": 2,
"Steps": [
{
- "DataId": 2013364,
- "Position": {
- "X": 99.99231,
- "Y": 0.015197754,
- "Z": 101.823364
- },
"TerritoryId": 1159,
"InteractionType": "Duty",
- "Comment": "The Voidcast Dais"
+ "ContentFinderConditionId": 949
}
]
},
"Sequence": 1,
"Steps": [
{
- "DataId": 2013410,
- "Position": {
- "X": 24.338135,
- "Y": 56.65674,
- "Z": 439.96326
- },
"TerritoryId": 1162,
"InteractionType": "Duty",
- "Comment": "The Lunar Subterrane"
+ "ContentFinderConditionId": 823
}
]
},
"Sequence": 5,
"Steps": [
{
- "DataId": 2013411,
- "Position": {
- "X": 100.0275,
- "Y": 0,
- "Z": 106.3549
- },
"TerritoryId": 1181,
"InteractionType": "Duty",
- "Comment": "The Abyssal Fracture"
+ "ContentFinderConditionId": 964
}
]
},
"Sequence": 7,
"Steps": [
{
- "DataId": 2010235,
- "Position": {
- "X": -426.9627,
- "Y": -229.08374,
- "Z": 858.09106
- },
- "StopDistance": 5,
"TerritoryId": 818,
"InteractionType": "Duty",
- "Comment": "Amaurot"
+ "ContentFinderConditionId": 652
}
]
},
"Sequence": 9,
"Steps": [
{
- "DataId": 2010236,
- "Position": {
- "X": 100.0382,
- "Y": 4.768372E-07,
- "Z": 106.0076
- },
- "StopDistance": 5,
"TerritoryId": 881,
"InteractionType": "Duty",
- "Comment": "The Dying Gasp"
+ "ContentFinderConditionId": 687
}
]
},
"Sequence": 2,
"Steps": [
{
- "DataId": 2010808,
- "Position": {
- "X": -123.55237,
- "Y": -0.7172241,
- "Z": 647.6997
- },
"TerritoryId": 813,
"InteractionType": "Duty",
- "Comment": "Grand Cosmos"
+ "ContentFinderConditionId": 692
}
]
},
"Sequence": 2,
"Steps": [
{
- "DataId": 2010952,
- "Position": {
- "X": -539.0652,
- "Y": 63.97181,
- "Z": 738.8608
- },
- "StopDistance": 5,
"TerritoryId": 814,
"InteractionType": "Duty",
- "Comment": "Anamnesis Anyder"
+ "ContentFinderConditionId": 714
}
]
}
"Sequence": 3,
"Steps": [
{
- "DataId": 2011101,
- "Position": {
- "X": 60.04639,
- "Y": 82.82986,
- "Z": 1.940211
- },
"TerritoryId": 820,
"InteractionType": "Duty",
- "Comment": "The Heroes' Gauntlet"
+ "ContentFinderConditionId": 737
}
]
},
"Sequence": 1,
"Steps": [
{
- "DataId": 2011103,
- "Position": {
- "X": 100,
- "Y": 4.208088E-05,
- "Z": 112.5434
- },
- "StopDistance": 5,
"TerritoryId": 931,
"InteractionType": "Duty",
- "Comment": "The Seat of Sacrifice"
+ "ContentFinderConditionId": 738
}
]
},
"Sequence": 4,
"Steps": [
{
- "DataId": 2011334,
- "Position": {
- "X": 384.32886,
- "Y": 75.48633,
- "Z": -218.00574
- },
"TerritoryId": 399,
"InteractionType": "Duty",
- "Comment": "Matoya's Relict"
+ "ContentFinderConditionId": 746
}
]
},
"Sequence": 3,
"Steps": [
{
- "DataId": 2011521,
- "Position": {
- "X": -24.368713,
- "Y": 83.17688,
- "Z": 12.893799
- },
"TerritoryId": 130,
"InteractionType": "Duty",
- "Comment": "Paglth'an"
+ "ContentFinderConditionId": 777
}
]
},
"WaitForManualProgress",
"Duty",
"SinglePlayerDuty",
+ "Jump",
"ShouldBeAJump",
"Instruction"
]
"description": "The Item to use",
"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": {
"type": "array",
"description": "TODO Not implemented",
_movementController =
new MovementController(navmeshIpc, clientState, _gameFunctions, condition, pluginLog);
_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,
targetManager));