forked from liza/Questionable
API 10; DT aetheryte/aethernet data
This commit is contained in:
parent
a842bec29f
commit
28d297ec7c
2
LLib
2
LLib
@ -1 +1 @@
|
|||||||
Subproject commit b5125d4b3f7cdc0c7514a01764e5b5d4d85f80a7
|
Subproject commit 93fac6efb01a1272192d929fd863328271512ea4
|
@ -223,7 +223,25 @@
|
|||||||
"Elpis - Poieten Oikos",
|
"Elpis - Poieten Oikos",
|
||||||
"Ultima Thule - Reah Tahra",
|
"Ultima Thule - Reah Tahra",
|
||||||
"Ultima Thule - Abode of the Ea",
|
"Ultima Thule - Abode of the Ea",
|
||||||
"Ultima Thule - Base Omicron"
|
"Ultima Thule - Base Omicron",
|
||||||
|
"Tuliyollal",
|
||||||
|
"Solution Nine",
|
||||||
|
"Urqopacha - Wachunpelo",
|
||||||
|
"Urqopacha - Worlar's Echo",
|
||||||
|
"Kozama'uka - Ok'hanu",
|
||||||
|
"Kozama'uka - Many Fires",
|
||||||
|
"Kozama'uka - Earthenshire",
|
||||||
|
"Yak T'el - Iq Br'aax",
|
||||||
|
"Yak T'el - Mamook",
|
||||||
|
"Shaaloani - Hhusatahwi",
|
||||||
|
"Shaaloani - Sheshenewezi Springs",
|
||||||
|
"Shaaloani - Mehwahhetsoan",
|
||||||
|
"Heritage Found - Yyasulani Station",
|
||||||
|
"Heritage Found - The Outskirts",
|
||||||
|
"Heritage Found - Electrope Strike",
|
||||||
|
"Living Memory - Leynode Mnemo",
|
||||||
|
"Living Memory - Leynode Pyro",
|
||||||
|
"Living Memory - Leynode Aero"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"AethernetShortcut": {
|
"AethernetShortcut": {
|
||||||
@ -331,7 +349,29 @@
|
|||||||
"[Radz-at-Han] Mehryde's Meyhane",
|
"[Radz-at-Han] Mehryde's Meyhane",
|
||||||
"[Radz-at-Han] Kama",
|
"[Radz-at-Han] Kama",
|
||||||
"[Radz-at-Han] The High Crucible of Al-Kimiya",
|
"[Radz-at-Han] The High Crucible of Al-Kimiya",
|
||||||
"[Radz-at-Han] The Gate of First Sight (Thavnair)"
|
"[Radz-at-Han] The Gate of First Sight (Thavnair)",
|
||||||
|
"[Tuliyollal] Aetheryte Plaza",
|
||||||
|
"[Tuliyollal] Dirigible Landing",
|
||||||
|
"[Tuliyollal] The Resplendent Quarter",
|
||||||
|
"[Tuliyollal] The For'ard Cabins",
|
||||||
|
"[Tuliyollal] Bayside Bevy Marketplace",
|
||||||
|
"[Tuliyollal] Vollok Shoonsa",
|
||||||
|
"[Tuliyollal] Wachumeqimeqi",
|
||||||
|
"[Tuliyollal] Brightploom Post",
|
||||||
|
"[Tuliyollal] Arch of the Dawn (Urqopacha)",
|
||||||
|
"[Tuliyollal] Arch of the Dawn (Kozama'uka)",
|
||||||
|
"[Tuliyollal] Ihuykatumu (Kozama'uka)",
|
||||||
|
"[Tuliyollal] Dirigible Landing (Yak T'el)",
|
||||||
|
"[Tuliyollal] Xak Tural Skygate (Shaaloani)",
|
||||||
|
"[Solution Nine] Aetheryte Plaza",
|
||||||
|
"[Solution Nine] Information Center",
|
||||||
|
"[Solution Nine] True Vue",
|
||||||
|
"[Solution Nine] Neon Stein",
|
||||||
|
"[Solution Nine] The Arcadion",
|
||||||
|
"[Solution Nine] Resolution",
|
||||||
|
"[Solution Nine] Nexus Arcade",
|
||||||
|
"[Solution Nine] Residential Sector",
|
||||||
|
"[Solution Nine] Scanning Port Nine (Heritage Found)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -345,7 +385,6 @@
|
|||||||
},
|
},
|
||||||
"SkipIf": {
|
"SkipIf": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"description": "TODO Not implemented",
|
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
@ -118,6 +118,30 @@ public sealed class AethernetShortcutConverter : JsonConverter<AethernetShortcut
|
|||||||
{ EAetheryteLocation.RadzAtHanKama, "[Radz-at-Han] Kama" },
|
{ EAetheryteLocation.RadzAtHanKama, "[Radz-at-Han] Kama" },
|
||||||
{ EAetheryteLocation.RadzAtHanHighCrucible, "[Radz-at-Han] The High Crucible of Al-Kimiya" },
|
{ EAetheryteLocation.RadzAtHanHighCrucible, "[Radz-at-Han] The High Crucible of Al-Kimiya" },
|
||||||
{ EAetheryteLocation.RadzAtHanGateOfFirstSight, "[Radz-at-Han] The Gate of First Sight (Thavnair)" },
|
{ EAetheryteLocation.RadzAtHanGateOfFirstSight, "[Radz-at-Han] The Gate of First Sight (Thavnair)" },
|
||||||
|
|
||||||
|
{ EAetheryteLocation.Tuliyollal, "[Tuliyollal] Aetheryte Plaza" },
|
||||||
|
{ EAetheryteLocation.TuliyollalDirigibleLanding, "[Tuliyollal] Dirigible Landing" },
|
||||||
|
{ EAetheryteLocation.TuliyollalTheResplendentQuarter, "[Tuliyollal] The Resplendent Quarter" },
|
||||||
|
{ EAetheryteLocation.TuliyollalTheForardCabins, "[Tuliyollal] The For'ard Cabins" },
|
||||||
|
{ EAetheryteLocation.TuliyollalBaysideBevyMarketplace, "[Tuliyollal] Bayside Bevy Marketplace" },
|
||||||
|
{ EAetheryteLocation.TuliyollalVollokShoonsa, "[Tuliyollal] Vollok Shoonsa" },
|
||||||
|
{ EAetheryteLocation.TuliyollalWachumeqimeqi, "[Tuliyollal] Wachumeqimeqi" },
|
||||||
|
{ EAetheryteLocation.TuliyollalBrightploomPost, "[Tuliyollal] Brightploom Post" },
|
||||||
|
{ EAetheryteLocation.TuliyollalArchOfTheDawnUrqopacha, "[Tuliyollal] Arch of the Dawn (Urqopacha)" },
|
||||||
|
{ EAetheryteLocation.TuliyollalArchOfTheDawnKozamauka, "[Tuliyollal] Arch of the Dawn (Kozama'uka)" },
|
||||||
|
{ EAetheryteLocation.TuliyollalIhuykatumu, "[Tuliyollal] Ihuykatumu (Kozama'uka)" },
|
||||||
|
{ EAetheryteLocation.TuliyollalDirigibleLandingYakTel, "[Tuliyollal] Dirigible Landing (Yak T'el)" },
|
||||||
|
{ EAetheryteLocation.TuliyollalXakTuralSkygate, "[Tuliyollal] Xak Tural Skygate (Shaaloani)" },
|
||||||
|
|
||||||
|
{ EAetheryteLocation.SolutionNine, "[Solution Nine] Aetheryte Plaza" },
|
||||||
|
{ EAetheryteLocation.SolutionNineInformationCenter, "[Solution Nine] Information Center" },
|
||||||
|
{ EAetheryteLocation.SolutionNineTrueVue, "[Solution Nine] True Vue" },
|
||||||
|
{ EAetheryteLocation.SolutionNineNeonStein, "[Solution Nine] Neon Stein" },
|
||||||
|
{ EAetheryteLocation.SolutionNineTheArcadion, "[Solution Nine] The Arcadion" },
|
||||||
|
{ EAetheryteLocation.SolutionNineResolution, "[Solution Nine] Resolution" },
|
||||||
|
{ EAetheryteLocation.SolutionNineNexusArcade, "[Solution Nine] Nexus Arcade" },
|
||||||
|
{ EAetheryteLocation.SolutionNineResidentialSector, "[Solution Nine] Residential Sector" },
|
||||||
|
{ EAetheryteLocation.SolutionNineScanningPortNine, "[Solution Nine] Scanning Port Nine (Heritage Found)" },
|
||||||
};
|
};
|
||||||
|
|
||||||
private static readonly Dictionary<string, EAetheryteLocation> StringToEnum =
|
private static readonly Dictionary<string, EAetheryteLocation> StringToEnum =
|
||||||
|
@ -7,7 +7,6 @@ public sealed class AetheryteConverter() : EnumConverter<EAetheryteLocation>(Val
|
|||||||
private static readonly Dictionary<EAetheryteLocation, string> Values = new()
|
private static readonly Dictionary<EAetheryteLocation, string> Values = new()
|
||||||
{
|
{
|
||||||
{ EAetheryteLocation.Gridania, "Gridania" },
|
{ EAetheryteLocation.Gridania, "Gridania" },
|
||||||
|
|
||||||
{ EAetheryteLocation.CentralShroudBentbranchMeadows, "Central Shroud - Bentbranch Meadows" },
|
{ EAetheryteLocation.CentralShroudBentbranchMeadows, "Central Shroud - Bentbranch Meadows" },
|
||||||
{ EAetheryteLocation.EastShroudHawthorneHut, "East Shroud - Hawthorne Hut" },
|
{ EAetheryteLocation.EastShroudHawthorneHut, "East Shroud - Hawthorne Hut" },
|
||||||
{ EAetheryteLocation.SouthShroudQuarrymill, "South Shroud - Quarrymill" },
|
{ EAetheryteLocation.SouthShroudQuarrymill, "South Shroud - Quarrymill" },
|
||||||
@ -101,7 +100,26 @@ public sealed class AetheryteConverter() : EnumConverter<EAetheryteLocation>(Val
|
|||||||
{ EAetheryteLocation.ElpisPoietenOikos, "Elpis - Poieten Oikos" },
|
{ EAetheryteLocation.ElpisPoietenOikos, "Elpis - Poieten Oikos" },
|
||||||
{ EAetheryteLocation.UltimaThuleReahTahra, "Ultima Thule - Reah Tahra" },
|
{ EAetheryteLocation.UltimaThuleReahTahra, "Ultima Thule - Reah Tahra" },
|
||||||
{ EAetheryteLocation.UltimaThuleAbodeOfTheEa, "Ultima Thule - Abode of the Ea" },
|
{ EAetheryteLocation.UltimaThuleAbodeOfTheEa, "Ultima Thule - Abode of the Ea" },
|
||||||
{ EAetheryteLocation.UltimaThuleBaseOmicron, "Ultima Thule - Base Omicron" }
|
{ EAetheryteLocation.UltimaThuleBaseOmicron, "Ultima Thule - Base Omicron" },
|
||||||
|
|
||||||
|
{ EAetheryteLocation.Tuliyollal, "Tuliyollal" },
|
||||||
|
{ EAetheryteLocation.SolutionNine, "Solution Nine" },
|
||||||
|
{ EAetheryteLocation.UrqopachaWachunpelo, "Urqopacha - Wachunpelo" },
|
||||||
|
{ EAetheryteLocation.UrqopachaWorlarsEcho, "Urqopacha - Worlar's Echo" },
|
||||||
|
{ EAetheryteLocation.KozamaukaOkHanu, "Kozama'uka - Ok'hanu" },
|
||||||
|
{ EAetheryteLocation.KozamaukaManyFires, "Kozama'uka - Many Fires" },
|
||||||
|
{ EAetheryteLocation.KozamaukaEarthenshire, "Kozama'uka - Earthenshire" },
|
||||||
|
{ EAetheryteLocation.YakTelIqBraax, "Yak T'el - Iq Br'aax" },
|
||||||
|
{ EAetheryteLocation.YakTelMamook, "Yak T'el - Mamook" },
|
||||||
|
{ EAetheryteLocation.ShaaloaniHhusatahwi, "Shaaloani - Hhusatahwi" },
|
||||||
|
{ EAetheryteLocation.ShaaloaniShesheneweziSprings, "Shaaloani - Sheshenewezi Springs" },
|
||||||
|
{ EAetheryteLocation.ShaaloaniMehwahhetsoan, "Shaaloani - Mehwahhetsoan" },
|
||||||
|
{ EAetheryteLocation.HeritageFoundYyasulaniStation, "Heritage Found - Yyasulani Station" },
|
||||||
|
{ EAetheryteLocation.HeritageFoundTheOutskirts, "Heritage Found - The Outskirts" },
|
||||||
|
{ EAetheryteLocation.HeritageFoundElectropeStrike, "Heritage Found - Electrope Strike" },
|
||||||
|
{ EAetheryteLocation.LivingMemoryLeynodeMnemo, "Living Memory - Leynode Mnemo" },
|
||||||
|
{ EAetheryteLocation.LivingMemoryLeynodePyro, "Living Memory - Leynode Pyro" },
|
||||||
|
{ EAetheryteLocation.LivingMemoryLeynodeAero, "Living Memory - Leynode Aero" },
|
||||||
};
|
};
|
||||||
|
|
||||||
public static bool IsLargeAetheryte(EAetheryteLocation aetheryte) => Values.ContainsKey(aetheryte);
|
public static bool IsLargeAetheryte(EAetheryteLocation aetheryte) => Values.ContainsKey(aetheryte);
|
||||||
|
@ -205,5 +205,47 @@ public enum EAetheryteLocation
|
|||||||
ElpisPoietenOikos = 178,
|
ElpisPoietenOikos = 178,
|
||||||
UltimaThuleReahTahra = 179,
|
UltimaThuleReahTahra = 179,
|
||||||
UltimaThuleAbodeOfTheEa = 180,
|
UltimaThuleAbodeOfTheEa = 180,
|
||||||
UltimaThuleBaseOmicron = 181
|
UltimaThuleBaseOmicron = 181,
|
||||||
|
|
||||||
|
Tuliyollal = 216,
|
||||||
|
|
||||||
|
TuliyollalDirigibleLanding = 218,
|
||||||
|
TuliyollalTheResplendentQuarter = 219,
|
||||||
|
TuliyollalTheForardCabins = 220,
|
||||||
|
TuliyollalBaysideBevyMarketplace = 221,
|
||||||
|
TuliyollalVollokShoonsa = 222,
|
||||||
|
TuliyollalWachumeqimeqi = 223,
|
||||||
|
TuliyollalBrightploomPost = 224,
|
||||||
|
TuliyollalArchOfTheDawnUrqopacha = 225,
|
||||||
|
TuliyollalArchOfTheDawnKozamauka = 226,
|
||||||
|
TuliyollalIhuykatumu = 227,
|
||||||
|
TuliyollalDirigibleLandingYakTel = 228,
|
||||||
|
TuliyollalXakTuralSkygate = 229,
|
||||||
|
|
||||||
|
SolutionNine = 217,
|
||||||
|
SolutionNineInformationCenter = 230,
|
||||||
|
SolutionNineTrueVue = 231,
|
||||||
|
SolutionNineNeonStein = 232,
|
||||||
|
SolutionNineTheArcadion = 233,
|
||||||
|
SolutionNineResolution = 234,
|
||||||
|
SolutionNineNexusArcade = 235,
|
||||||
|
SolutionNineResidentialSector = 236,
|
||||||
|
SolutionNineScanningPortNine = 237,
|
||||||
|
|
||||||
|
UrqopachaWachunpelo = 200,
|
||||||
|
UrqopachaWorlarsEcho = 201,
|
||||||
|
KozamaukaOkHanu = 202,
|
||||||
|
KozamaukaManyFires = 203,
|
||||||
|
KozamaukaEarthenshire = 204,
|
||||||
|
YakTelIqBraax = 205,
|
||||||
|
YakTelMamook = 206,
|
||||||
|
ShaaloaniHhusatahwi = 207,
|
||||||
|
ShaaloaniShesheneweziSprings = 208,
|
||||||
|
ShaaloaniMehwahhetsoan = 209,
|
||||||
|
HeritageFoundYyasulaniStation = 210,
|
||||||
|
HeritageFoundTheOutskirts = 211,
|
||||||
|
HeritageFoundElectropeStrike = 212,
|
||||||
|
LivingMemoryLeynodeMnemo = 213,
|
||||||
|
LivingMemoryLeynodePyro = 214,
|
||||||
|
LivingMemoryLeynodeAero = 215,
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ internal sealed unsafe class ChatFunctions
|
|||||||
/// <exception cref="InvalidOperationException">If the signature for this function could not be found</exception>
|
/// <exception cref="InvalidOperationException">If the signature for this function could not be found</exception>
|
||||||
private void SendMessageUnsafe(byte[] message)
|
private void SendMessageUnsafe(byte[] message)
|
||||||
{
|
{
|
||||||
var uiModule = (IntPtr)Framework.Instance()->GetUiModule();
|
var uiModule = (IntPtr)Framework.Instance()->GetUIModule();
|
||||||
|
|
||||||
using var payload = new ChatPayload(message);
|
using var payload = new ChatPayload(message);
|
||||||
var mem1 = Marshal.AllocHGlobal(400);
|
var mem1 = Marshal.AllocHGlobal(400);
|
||||||
@ -141,7 +141,7 @@ internal sealed unsafe class ChatFunctions
|
|||||||
|
|
||||||
public void UseEmote(uint dataId, EEmote emote)
|
public void UseEmote(uint dataId, EEmote emote)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = _gameFunctions.FindObjectByDataId(dataId);
|
IGameObject? gameObject = _gameFunctions.FindObjectByDataId(dataId);
|
||||||
if (gameObject != null)
|
if (gameObject != null)
|
||||||
{
|
{
|
||||||
_targetManager.Target = gameObject;
|
_targetManager.Target = gameObject;
|
||||||
@ -157,7 +157,7 @@ internal sealed unsafe class ChatFunctions
|
|||||||
private static class Signatures
|
private static class Signatures
|
||||||
{
|
{
|
||||||
internal const string SendChat = "48 89 5C 24 ?? 57 48 83 EC 20 48 8B FA 48 8B D9 45 84 C9";
|
internal const string SendChat = "48 89 5C 24 ?? 57 48 83 EC 20 48 8B FA 48 8B D9 45 84 C9";
|
||||||
internal const string SanitiseString = "E8 ?? ?? ?? ?? EB 0A 48 8D 4C 24 ?? E8 ?? ?? ?? ?? 48 8D 8D";
|
internal const string SanitiseString = "E8 ?? ?? ?? ?? 48 8D 4C 24 ?? 0F B6 F0 E8 ?? ?? ?? ?? 48 8D 4D C0";
|
||||||
}
|
}
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Explicit)]
|
[StructLayout(LayoutKind.Explicit)]
|
||||||
|
@ -9,6 +9,7 @@ using Dalamud.Game.ClientState.Conditions;
|
|||||||
using Dalamud.Game.ClientState.Objects.Enums;
|
using Dalamud.Game.ClientState.Objects.Enums;
|
||||||
using Dalamud.Game.ClientState.Objects.SubKinds;
|
using Dalamud.Game.ClientState.Objects.SubKinds;
|
||||||
using Dalamud.Game.ClientState.Objects.Types;
|
using Dalamud.Game.ClientState.Objects.Types;
|
||||||
|
using Dalamud.Plugin.Ipc.Exceptions;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game;
|
using FFXIVClientStructs.FFXIV.Client.Game;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game.Control;
|
using FFXIVClientStructs.FFXIV.Client.Game.Control;
|
||||||
@ -43,8 +44,36 @@ internal sealed class MovementController : IDisposable
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsNavmeshReady => _navmeshIpc.IsReady;
|
public bool IsNavmeshReady
|
||||||
public bool IsPathRunning => _navmeshIpc.IsPathRunning;
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _navmeshIpc.IsReady;
|
||||||
|
}
|
||||||
|
catch (IpcNotReadyError)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPathRunning
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _navmeshIpc.IsPathRunning;
|
||||||
|
}
|
||||||
|
catch (IpcNotReadyError)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsPathfinding => _pathfindTask is { IsCompleted: false };
|
public bool IsPathfinding => _pathfindTask is { IsCompleted: false };
|
||||||
public DestinationData? Destination { get; set; }
|
public DestinationData? Destination { get; set; }
|
||||||
public DateTime MovementStartedAt { get; private set; } = DateTime.MaxValue;
|
public DateTime MovementStartedAt { get; private set; } = DateTime.MaxValue;
|
||||||
@ -121,8 +150,8 @@ internal sealed class MovementController : IDisposable
|
|||||||
}
|
}
|
||||||
else if (Destination.DataId != null)
|
else if (Destination.DataId != null)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = _gameFunctions.FindObjectByDataId(Destination.DataId.Value);
|
IGameObject? gameObject = _gameFunctions.FindObjectByDataId(Destination.DataId.Value);
|
||||||
if (gameObject is Character or EventObj)
|
if (gameObject is ICharacter or IEventObj)
|
||||||
{
|
{
|
||||||
if (Math.Abs(localPlayerPosition.Y - gameObject.Position.Y) < 1.95f)
|
if (Math.Abs(localPlayerPosition.Y - gameObject.Position.Y) < 1.95f)
|
||||||
Stop();
|
Stop();
|
||||||
|
@ -14,13 +14,13 @@ namespace Questionable.Controller;
|
|||||||
|
|
||||||
internal sealed class QuestRegistry
|
internal sealed class QuestRegistry
|
||||||
{
|
{
|
||||||
private readonly DalamudPluginInterface _pluginInterface;
|
private readonly IDalamudPluginInterface _pluginInterface;
|
||||||
private readonly IDataManager _dataManager;
|
private readonly IDataManager _dataManager;
|
||||||
private readonly ILogger<QuestRegistry> _logger;
|
private readonly ILogger<QuestRegistry> _logger;
|
||||||
|
|
||||||
private readonly Dictionary<ushort, Quest> _quests = new();
|
private readonly Dictionary<ushort, Quest> _quests = new();
|
||||||
|
|
||||||
public QuestRegistry(DalamudPluginInterface pluginInterface, IDataManager dataManager,
|
public QuestRegistry(IDalamudPluginInterface pluginInterface, IDataManager dataManager,
|
||||||
ILogger<QuestRegistry> logger)
|
ILogger<QuestRegistry> logger)
|
||||||
{
|
{
|
||||||
_pluginInterface = pluginInterface;
|
_pluginInterface = pluginInterface;
|
||||||
|
@ -161,7 +161,7 @@ internal static class Move
|
|||||||
|
|
||||||
public ETaskResult Update()
|
public ETaskResult Update()
|
||||||
{
|
{
|
||||||
GameObject? gameObject = gameFunctions.FindObjectByDataId(DataId);
|
IGameObject? gameObject = gameFunctions.FindObjectByDataId(DataId);
|
||||||
if (gameObject == null ||
|
if (gameObject == null ||
|
||||||
(gameObject.Position - clientState.LocalPlayer!.Position).Length() > StopDistance)
|
(gameObject.Position - clientState.LocalPlayer!.Position).Length() > StopDistance)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ internal static class EquipItem
|
|||||||
return ETaskResult.StillRunning;
|
return ETaskResult.StillRunning;
|
||||||
|
|
||||||
if (_targetSlots.Any(x =>
|
if (_targetSlots.Any(x =>
|
||||||
inventoryManager->GetInventorySlot(InventoryType.EquippedItems, x)->ItemID == _itemId))
|
inventoryManager->GetInventorySlot(InventoryType.EquippedItems, x)->ItemId == _itemId))
|
||||||
return ETaskResult.TaskComplete;
|
return ETaskResult.TaskComplete;
|
||||||
|
|
||||||
Equip();
|
Equip();
|
||||||
@ -100,7 +100,7 @@ internal static class EquipItem
|
|||||||
if (equippedContainer == null)
|
if (equippedContainer == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (_targetSlots.Any(slot => equippedContainer->GetInventorySlot(slot)->ItemID == _itemId))
|
if (_targetSlots.Any(slot => equippedContainer->GetInventorySlot(slot)->ItemId == _itemId))
|
||||||
{
|
{
|
||||||
logger.LogInformation("Already equipped {Item}, skipping step", _item.Name?.ToString());
|
logger.LogInformation("Already equipped {Item}, skipping step", _item.Name?.ToString());
|
||||||
return false;
|
return false;
|
||||||
@ -119,12 +119,12 @@ internal static class EquipItem
|
|||||||
for (ushort sourceSlot = 0; sourceSlot < sourceContainer->Size; sourceSlot++)
|
for (ushort sourceSlot = 0; sourceSlot < sourceContainer->Size; sourceSlot++)
|
||||||
{
|
{
|
||||||
var sourceItem = sourceContainer->GetInventorySlot(sourceSlot);
|
var sourceItem = sourceContainer->GetInventorySlot(sourceSlot);
|
||||||
if (sourceItem == null || sourceItem->ItemID != _itemId)
|
if (sourceItem == null || sourceItem->ItemId != _itemId)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Move the item to the first available slot
|
// Move the item to the first available slot
|
||||||
ushort targetSlot = _targetSlots
|
ushort targetSlot = _targetSlots
|
||||||
.Where(x => inventoryManager->GetInventorySlot(InventoryType.EquippedItems, x)->ItemID == 0)
|
.Where(x => inventoryManager->GetInventorySlot(InventoryType.EquippedItems, x)->ItemId == 0)
|
||||||
.Concat(_targetSlots).First();
|
.Concat(_targetSlots).First();
|
||||||
|
|
||||||
logger.LogInformation(
|
logger.LogInformation(
|
||||||
|
@ -59,7 +59,7 @@ internal static class Interact
|
|||||||
|
|
||||||
public bool Start()
|
public bool Start()
|
||||||
{
|
{
|
||||||
GameObject? gameObject = gameFunctions.FindObjectByDataId(DataId);
|
IGameObject? gameObject = gameFunctions.FindObjectByDataId(DataId);
|
||||||
if (gameObject == null)
|
if (gameObject == null)
|
||||||
{
|
{
|
||||||
logger.LogWarning("No game object with dataId {DataId}", DataId);
|
logger.LogWarning("No game object with dataId {DataId}", DataId);
|
||||||
@ -104,7 +104,7 @@ internal static class Interact
|
|||||||
|
|
||||||
if (!_interacted)
|
if (!_interacted)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = gameFunctions.FindObjectByDataId(DataId);
|
IGameObject? gameObject = gameFunctions.FindObjectByDataId(DataId);
|
||||||
if (gameObject == null || !gameObject.IsTargetable || !HasAnyMarker(gameObject))
|
if (gameObject == null || !gameObject.IsTargetable || !HasAnyMarker(gameObject))
|
||||||
return ETaskResult.StillRunning;
|
return ETaskResult.StillRunning;
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ internal static class Interact
|
|||||||
return ETaskResult.TaskComplete;
|
return ETaskResult.TaskComplete;
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe bool HasAnyMarker(GameObject gameObject)
|
private unsafe bool HasAnyMarker(IGameObject gameObject)
|
||||||
{
|
{
|
||||||
if (SkipMarkerCheck || gameObject.ObjectKind != ObjectKind.EventNpc)
|
if (SkipMarkerCheck || gameObject.ObjectKind != ObjectKind.EventNpc)
|
||||||
return true;
|
return true;
|
||||||
|
@ -10,7 +10,7 @@ namespace Questionable;
|
|||||||
|
|
||||||
internal sealed class DalamudInitializer : IDisposable
|
internal sealed class DalamudInitializer : IDisposable
|
||||||
{
|
{
|
||||||
private readonly DalamudPluginInterface _pluginInterface;
|
private readonly IDalamudPluginInterface _pluginInterface;
|
||||||
private readonly IFramework _framework;
|
private readonly IFramework _framework;
|
||||||
private readonly ICommandManager _commandManager;
|
private readonly ICommandManager _commandManager;
|
||||||
private readonly QuestController _questController;
|
private readonly QuestController _questController;
|
||||||
@ -20,7 +20,7 @@ internal sealed class DalamudInitializer : IDisposable
|
|||||||
private readonly QuestWindow _questWindow;
|
private readonly QuestWindow _questWindow;
|
||||||
private readonly ConfigWindow _configWindow;
|
private readonly ConfigWindow _configWindow;
|
||||||
|
|
||||||
public DalamudInitializer(DalamudPluginInterface pluginInterface, IFramework framework,
|
public DalamudInitializer(IDalamudPluginInterface pluginInterface, IFramework framework,
|
||||||
ICommandManager commandManager, QuestController questController, MovementController movementController,
|
ICommandManager commandManager, QuestController questController, MovementController movementController,
|
||||||
GameUiController gameUiController, NavigationShortcutController navigationShortcutController,
|
GameUiController gameUiController, NavigationShortcutController navigationShortcutController,
|
||||||
WindowSystem windowSystem, QuestWindow questWindow, DebugOverlay debugOverlay, ConfigWindow configWindow)
|
WindowSystem windowSystem, QuestWindow questWindow, DebugOverlay debugOverlay, ConfigWindow configWindow)
|
||||||
|
@ -28,7 +28,7 @@ internal sealed class AetheryteData
|
|||||||
TerritoryIds = territoryIds.AsReadOnly();
|
TerritoryIds = territoryIds.AsReadOnly();
|
||||||
|
|
||||||
TownTerritoryIds = dataManager.GetExcelSheet<TerritoryType>()!
|
TownTerritoryIds = dataManager.GetExcelSheet<TerritoryType>()!
|
||||||
.Where(x => x.RowId > 0 && !string.IsNullOrEmpty(x.Name) && x.TerritoryIntendedUse == 0)
|
.Where(x => x.RowId > 0 && !string.IsNullOrEmpty(x.Name) && x.TerritoryIntendedUse.Row == 0)
|
||||||
.Select(x => (ushort)x.RowId)
|
.Select(x => (ushort)x.RowId)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
@ -214,6 +214,41 @@ internal sealed class AetheryteData
|
|||||||
{ EAetheryteLocation.UltimaThuleReahTahra, new(-544.152f, 74.32666f, 269.6421f) },
|
{ EAetheryteLocation.UltimaThuleReahTahra, new(-544.152f, 74.32666f, 269.6421f) },
|
||||||
{ EAetheryteLocation.UltimaThuleAbodeOfTheEa, new(64.286255f, 272.48022f, -657.49603f) },
|
{ EAetheryteLocation.UltimaThuleAbodeOfTheEa, new(64.286255f, 272.48022f, -657.49603f) },
|
||||||
{ EAetheryteLocation.UltimaThuleBaseOmicron, new(489.2804f, 437.5829f, 333.63843f) },
|
{ EAetheryteLocation.UltimaThuleBaseOmicron, new(489.2804f, 437.5829f, 333.63843f) },
|
||||||
|
|
||||||
|
{ EAetheryteLocation.Tuliyollal, new(-24.093994f, 0.77819824f, 7.583679f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalDirigibleLanding, new(-413.68738f, 2.9754639f, -45.975464f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalTheResplendentQuarter, new(-187.1214f, 39.93274f, 6.088318f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalTheForardCabins, new(-149.73682f, -15.030151f, 198.90125f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalBaysideBevyMarketplace, new(-14.999634f, -10.025269f, 135.57642f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalVollokShoonsa, new(-99.13794f, 100.72473f, -222.03406f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalWachumeqimeqi, new(166.27747f, -17.990417f, 38.742676f) },
|
||||||
|
{ EAetheryteLocation.TuliyollalBrightploomPost, new(71.7937f, 47.074097f, -333.21124f) },
|
||||||
|
|
||||||
|
{ EAetheryteLocation.SolutionNine, new(-0.015319824f, 8.987488f, -0.015319824f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineInformationCenter, new(-30.441833f, -6.0579224f, 209.3385f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineTrueVue, new(382.6809f, 59.983154f, 76.67651f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineNeonStein, new(258.28943f, 50.736206f, 148.72961f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineTheArcadion, new(374.77686f, 60.01367f, 325.67322f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineResolution, new(-32.059265f, 38.04065f, -345.2354f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineNexusArcade, new(-160.05188f, -0.015319824f, 21.591492f) },
|
||||||
|
{ EAetheryteLocation.SolutionNineResidentialSector, new(-378.13385f, 13.992493f, 136.49194f) },
|
||||||
|
|
||||||
|
{ EAetheryteLocation.UrqopachaWachunpelo, new(332.96704f, -160.11298f, -416.22034f) },
|
||||||
|
{ EAetheryteLocation.UrqopachaWorlarsEcho, new(465.62903f, 114.94617f, 634.9126f) },
|
||||||
|
{ EAetheryteLocation.KozamaukaOkHanu, new(-169.51251f, 6.576599f, -479.42322f) },
|
||||||
|
{ EAetheryteLocation.KozamaukaManyFires, new(541.16125f, 117.41809f, 203.60107f) },
|
||||||
|
{ EAetheryteLocation.KozamaukaEarthenshire, new(-477.53113f, 124.04053f, 311.32983f) },
|
||||||
|
{ EAetheryteLocation.YakTelIqBraax, new(-397.05505f, 23.5141f, -431.93713f) },
|
||||||
|
{ EAetheryteLocation.YakTelMamook, new(721.40076f, -132.31104f, 526.1769f) },
|
||||||
|
{ EAetheryteLocation.ShaaloaniHhusatahwi, new(386.40417f, -0.19836426f, 467.61267f) },
|
||||||
|
{ EAetheryteLocation.ShaaloaniShesheneweziSprings, new(-291.70673f, 19.08899f, -114.54956f) },
|
||||||
|
{ EAetheryteLocation.ShaaloaniMehwahhetsoan, new(311.36023f, -14.175659f, -567.74243f) },
|
||||||
|
{ EAetheryteLocation.HeritageFoundYyasulaniStation, new(514.6105f, 145.86096f, 207.56836f) },
|
||||||
|
{ EAetheryteLocation.HeritageFoundTheOutskirts, new(-223.0412f, 31.937134f, -584.03906f) },
|
||||||
|
{ EAetheryteLocation.HeritageFoundElectropeStrike, new(-219.53156f, 32.913696f, 120.77515f) },
|
||||||
|
{ EAetheryteLocation.LivingMemoryLeynodeMnemo, new(-0.22894287f, 57.175537f, 796.9634f) },
|
||||||
|
{ EAetheryteLocation.LivingMemoryLeynodePyro, new(657.98413f, 28.976807f, -284.01617f) },
|
||||||
|
{ EAetheryteLocation.LivingMemoryLeynodeAero, new(-255.26825f, 59.433838f, -397.6654f) },
|
||||||
}
|
}
|
||||||
.AsReadOnly();
|
.AsReadOnly();
|
||||||
|
|
||||||
|
2
Questionable/External/LifestreamIpc.cs
vendored
2
Questionable/External/LifestreamIpc.cs
vendored
@ -10,7 +10,7 @@ internal sealed class LifestreamIpc
|
|||||||
private readonly AetheryteData _aetheryteData;
|
private readonly AetheryteData _aetheryteData;
|
||||||
private readonly ICallGateSubscriber<string, bool> _aethernetTeleport;
|
private readonly ICallGateSubscriber<string, bool> _aethernetTeleport;
|
||||||
|
|
||||||
public LifestreamIpc(DalamudPluginInterface pluginInterface, AetheryteData aetheryteData)
|
public LifestreamIpc(IDalamudPluginInterface pluginInterface, AetheryteData aetheryteData)
|
||||||
{
|
{
|
||||||
_aetheryteData = aetheryteData;
|
_aetheryteData = aetheryteData;
|
||||||
_aethernetTeleport = pluginInterface.GetIpcSubscriber<string, bool>("Lifestream.AethernetTeleport");
|
_aethernetTeleport = pluginInterface.GetIpcSubscriber<string, bool>("Lifestream.AethernetTeleport");
|
||||||
|
2
Questionable/External/NavmeshIpc.cs
vendored
2
Questionable/External/NavmeshIpc.cs
vendored
@ -20,7 +20,7 @@ internal sealed class NavmeshIpc
|
|||||||
private readonly ICallGateSubscriber<float, object> _pathSetTolerance;
|
private readonly ICallGateSubscriber<float, object> _pathSetTolerance;
|
||||||
private readonly ICallGateSubscriber<Vector3, bool, float, Vector3?> _queryPointOnFloor;
|
private readonly ICallGateSubscriber<Vector3, bool, float, Vector3?> _queryPointOnFloor;
|
||||||
|
|
||||||
public NavmeshIpc(DalamudPluginInterface pluginInterface)
|
public NavmeshIpc(IDalamudPluginInterface pluginInterface)
|
||||||
{
|
{
|
||||||
_isNavReady = pluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.IsReady");
|
_isNavReady = pluginInterface.GetIpcSubscriber<bool>("vnavmesh.Nav.IsReady");
|
||||||
_navPathfind =
|
_navPathfind =
|
||||||
|
4
Questionable/External/YesAlreadyIpc.cs
vendored
4
Questionable/External/YesAlreadyIpc.cs
vendored
@ -7,10 +7,10 @@ namespace Questionable.External;
|
|||||||
|
|
||||||
internal sealed class YesAlreadyIpc : IDisposable
|
internal sealed class YesAlreadyIpc : IDisposable
|
||||||
{
|
{
|
||||||
private readonly DalamudPluginInterface _pluginInterface;
|
private readonly IDalamudPluginInterface _pluginInterface;
|
||||||
private readonly IPluginLog _pluginLog;
|
private readonly IPluginLog _pluginLog;
|
||||||
|
|
||||||
public YesAlreadyIpc(DalamudPluginInterface pluginInterface, IPluginLog pluginLog)
|
public YesAlreadyIpc(IDalamudPluginInterface pluginInterface, IPluginLog pluginLog)
|
||||||
{
|
{
|
||||||
_pluginInterface = pluginInterface;
|
_pluginInterface = pluginInterface;
|
||||||
_pluginLog = pluginLog;
|
_pluginLog = pluginLog;
|
||||||
|
@ -6,6 +6,7 @@ using System.Numerics;
|
|||||||
using Dalamud.Game;
|
using Dalamud.Game;
|
||||||
using Dalamud.Game.ClientState.Conditions;
|
using Dalamud.Game.ClientState.Conditions;
|
||||||
using Dalamud.Game.ClientState.Objects;
|
using Dalamud.Game.ClientState.Objects;
|
||||||
|
using Dalamud.Game.ClientState.Objects.Types;
|
||||||
using Dalamud.Memory;
|
using Dalamud.Memory;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using Dalamud.Utility;
|
using Dalamud.Utility;
|
||||||
@ -25,8 +26,6 @@ using Questionable.Model.V1;
|
|||||||
using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
|
using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
|
||||||
using ContentFinderCondition = Lumina.Excel.GeneratedSheets.ContentFinderCondition;
|
using ContentFinderCondition = Lumina.Excel.GeneratedSheets.ContentFinderCondition;
|
||||||
using ContentTalk = Lumina.Excel.GeneratedSheets.ContentTalk;
|
using ContentTalk = Lumina.Excel.GeneratedSheets.ContentTalk;
|
||||||
using Emote = Lumina.Excel.GeneratedSheets.Emote;
|
|
||||||
using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject;
|
|
||||||
using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany;
|
using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany;
|
||||||
using Quest = Questionable.Model.Quest;
|
using Quest = Questionable.Model.Quest;
|
||||||
using TerritoryType = Lumina.Excel.GeneratedSheets.TerritoryType;
|
using TerritoryType = Lumina.Excel.GeneratedSheets.TerritoryType;
|
||||||
@ -140,17 +139,17 @@ internal sealed unsafe class GameFunctions
|
|||||||
// do the MSQ; if a side quest is the first item do that side quest.
|
// do the MSQ; if a side quest is the first item do that side quest.
|
||||||
//
|
//
|
||||||
// If no quests are marked as 'priority', accepting a new quest adds it to the top of the list.
|
// If no quests are marked as 'priority', accepting a new quest adds it to the top of the list.
|
||||||
for (int i = questManager->TrackedQuestsSpan.Length - 1; i >= 0; --i)
|
for (int i = questManager->TrackedQuests.Length - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
ushort currentQuest;
|
ushort currentQuest;
|
||||||
var trackedQuest = questManager->TrackedQuestsSpan[i];
|
var trackedQuest = questManager->TrackedQuests[i];
|
||||||
switch (trackedQuest.QuestType)
|
switch (trackedQuest.QuestType)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 1: // normal quest
|
case 1: // normal quest
|
||||||
currentQuest = questManager->NormalQuestsSpan[trackedQuest.Index].QuestId;
|
currentQuest = questManager->NormalQuests[trackedQuest.Index].QuestId;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +283,7 @@ internal sealed unsafe class GameFunctions
|
|||||||
playerState->IsAetherCurrentUnlocked(aetherCurrentId);
|
playerState->IsAetherCurrentUnlocked(aetherCurrentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject? FindObjectByDataId(uint dataId)
|
public IGameObject? FindObjectByDataId(uint dataId)
|
||||||
{
|
{
|
||||||
foreach (var gameObject in _objectTable)
|
foreach (var gameObject in _objectTable)
|
||||||
{
|
{
|
||||||
@ -300,15 +299,14 @@ internal sealed unsafe class GameFunctions
|
|||||||
|
|
||||||
public bool InteractWith(uint dataId)
|
public bool InteractWith(uint dataId)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = FindObjectByDataId(dataId);
|
IGameObject? gameObject = FindObjectByDataId(dataId);
|
||||||
if (gameObject != null)
|
if (gameObject != null)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Setting target with {DataId} to {ObjectId}", dataId, gameObject.ObjectId);
|
_logger.LogInformation("Setting target with {DataId} to {ObjectId}", dataId, gameObject.EntityId);
|
||||||
_targetManager.Target = null;
|
_targetManager.Target = null;
|
||||||
_targetManager.Target = gameObject;
|
_targetManager.Target = gameObject;
|
||||||
|
|
||||||
long result = (long)TargetSystem.Instance()->InteractWithObject(
|
long result = (long)TargetSystem.Instance()->InteractWithObject((GameObject*)gameObject.Address, false);
|
||||||
(FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)gameObject.Address, false);
|
|
||||||
|
|
||||||
_logger.LogInformation("Interact result: {Result}", result);
|
_logger.LogInformation("Interact result: {Result}", result);
|
||||||
return result > 0;
|
return result > 0;
|
||||||
@ -328,7 +326,7 @@ internal sealed unsafe class GameFunctions
|
|||||||
|
|
||||||
public bool UseItem(uint dataId, uint itemId)
|
public bool UseItem(uint dataId, uint itemId)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = FindObjectByDataId(dataId);
|
IGameObject? gameObject = FindObjectByDataId(dataId);
|
||||||
if (gameObject != null)
|
if (gameObject != null)
|
||||||
{
|
{
|
||||||
_targetManager.Target = gameObject;
|
_targetManager.Target = gameObject;
|
||||||
@ -343,10 +341,10 @@ internal sealed unsafe class GameFunctions
|
|||||||
|
|
||||||
public bool UseItemOnGround(uint dataId, uint itemId)
|
public bool UseItemOnGround(uint dataId, uint itemId)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = FindObjectByDataId(dataId);
|
IGameObject? gameObject = FindObjectByDataId(dataId);
|
||||||
if (gameObject != null)
|
if (gameObject != null)
|
||||||
{
|
{
|
||||||
var position = (FFXIVClientStructs.FFXIV.Common.Math.Vector3)gameObject.Position;
|
Vector3 position = gameObject.Position;
|
||||||
return ActionManager.Instance()->UseActionLocation(ActionType.KeyItem, itemId, location: &position);
|
return ActionManager.Instance()->UseActionLocation(ActionType.KeyItem, itemId, location: &position);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,7 +353,7 @@ internal sealed unsafe class GameFunctions
|
|||||||
|
|
||||||
public bool IsObjectAtPosition(uint dataId, Vector3 position, float distance)
|
public bool IsObjectAtPosition(uint dataId, Vector3 position, float distance)
|
||||||
{
|
{
|
||||||
GameObject? gameObject = FindObjectByDataId(dataId);
|
IGameObject? gameObject = FindObjectByDataId(dataId);
|
||||||
return gameObject != null && (gameObject.Position - position).Length() < distance;
|
return gameObject != null && (gameObject.Position - position).Length() < distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,18 +374,16 @@ internal sealed unsafe class GameFunctions
|
|||||||
|
|
||||||
private bool HasCharacterStatusPreventingMountOrSprint()
|
private bool HasCharacterStatusPreventingMountOrSprint()
|
||||||
{
|
{
|
||||||
var gameObject = GameObjectManager.GetGameObjectByIndex(0);
|
var localPlayer = _clientState.LocalPlayer;
|
||||||
if (gameObject != null && gameObject->ObjectKind == 1)
|
if (localPlayer == null)
|
||||||
{
|
return false;
|
||||||
var battleChara = (BattleChara*)gameObject;
|
|
||||||
StatusManager* statusManager = battleChara->GetStatusManager;
|
|
||||||
return statusManager->HasStatus(565) ||
|
|
||||||
statusManager->HasStatus(404) ||
|
|
||||||
statusManager->HasStatus(2729) ||
|
|
||||||
statusManager->HasStatus(2730);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
var battleChara = (BattleChara*)localPlayer.Address;
|
||||||
|
StatusManager* statusManager = battleChara->GetStatusManager();
|
||||||
|
return statusManager->HasStatus(565) ||
|
||||||
|
statusManager->HasStatus(404) ||
|
||||||
|
statusManager->HasStatus(2729) ||
|
||||||
|
statusManager->HasStatus(2730);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Mount()
|
public bool Mount()
|
||||||
|
@ -1,62 +1,20 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Dalamud.NET.Sdk/9.0.2">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0-windows</TargetFramework>
|
<Version>1.0</Version>
|
||||||
<Version>0.20</Version>
|
|
||||||
<LangVersion>12</LangVersion>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
|
||||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
|
||||||
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
|
|
||||||
<OutputPath>dist</OutputPath>
|
<OutputPath>dist</OutputPath>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
|
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
|
||||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
|
||||||
<DebugType>portable</DebugType>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<Import Project="..\LLib\LLib.targets"/>
|
||||||
<DalamudLibPath>$(appdata)\XIVLauncher\addon\Hooks\dev\</DalamudLibPath>
|
<Import Project="..\LLib\RenameZip.targets"/>
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))'">
|
|
||||||
<DalamudLibPath>$(DALAMUD_HOME)/</DalamudLibPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dalamud.Extensions.MicrosoftLogging" Version="4.0.1"/>
|
<PackageReference Include="Dalamud.Extensions.MicrosoftLogging" Version="4.0.1"/>
|
||||||
<PackageReference Include="DalamudPackager" Version="2.1.12"/>
|
|
||||||
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0" ExcludeAssets="runtime"/>
|
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0" ExcludeAssets="runtime"/>
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0"/>
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0"/>
|
||||||
<PackageReference Include="System.Text.Json" Version="8.0.3"/>
|
<PackageReference Include="System.Text.Json" Version="8.0.3"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Dalamud">
|
|
||||||
<HintPath>$(DalamudLibPath)Dalamud.dll</HintPath>
|
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="ImGui.NET">
|
|
||||||
<HintPath>$(DalamudLibPath)ImGui.NET.dll</HintPath>
|
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Lumina">
|
|
||||||
<HintPath>$(DalamudLibPath)Lumina.dll</HintPath>
|
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Lumina.Excel">
|
|
||||||
<HintPath>$(DalamudLibPath)Lumina.Excel.dll</HintPath>
|
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Newtonsoft.Json">
|
|
||||||
<HintPath>$(DalamudLibPath)Newtonsoft.Json.dll</HintPath>
|
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="FFXIVClientStructs">
|
|
||||||
<HintPath>$(DalamudLibPath)FFXIVClientStructs.dll</HintPath>
|
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\LLib\LLib.csproj"/>
|
<ProjectReference Include="..\LLib\LLib.csproj"/>
|
||||||
<ProjectReference Include="..\Questionable.Model\Questionable.Model.csproj"/>
|
<ProjectReference Include="..\Questionable.Model\Questionable.Model.csproj"/>
|
||||||
|
@ -7,7 +7,6 @@ using Dalamud.Interface.Windowing;
|
|||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Questionable.Controller;
|
using Questionable.Controller;
|
||||||
using Questionable.Controller.Steps;
|
using Questionable.Controller.Steps;
|
||||||
@ -25,7 +24,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
|
|||||||
{
|
{
|
||||||
private readonly ServiceProvider? _serviceProvider;
|
private readonly ServiceProvider? _serviceProvider;
|
||||||
|
|
||||||
public QuestionablePlugin(DalamudPluginInterface pluginInterface,
|
public QuestionablePlugin(IDalamudPluginInterface pluginInterface,
|
||||||
IClientState clientState,
|
IClientState clientState,
|
||||||
ITargetManager targetManager,
|
ITargetManager targetManager,
|
||||||
IFramework framework,
|
IFramework framework,
|
||||||
|
@ -13,7 +13,7 @@ namespace Questionable.Windows;
|
|||||||
|
|
||||||
internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
|
internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
|
||||||
{
|
{
|
||||||
private readonly DalamudPluginInterface _pluginInterface;
|
private readonly IDalamudPluginInterface _pluginInterface;
|
||||||
private readonly Configuration _configuration;
|
private readonly Configuration _configuration;
|
||||||
|
|
||||||
private readonly uint[] _mountIds;
|
private readonly uint[] _mountIds;
|
||||||
@ -23,7 +23,7 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
|
|||||||
["None (manually pick quest)", "Maelstrom", "Twin Adder" /*, "Immortal Flames"*/];
|
["None (manually pick quest)", "Maelstrom", "Twin Adder" /*, "Immortal Flames"*/];
|
||||||
|
|
||||||
[SuppressMessage("Performance", "CA1861", Justification = "One time initialization")]
|
[SuppressMessage("Performance", "CA1861", Justification = "One time initialization")]
|
||||||
public ConfigWindow(DalamudPluginInterface pluginInterface, Configuration configuration, IDataManager dataManager)
|
public ConfigWindow(IDalamudPluginInterface pluginInterface, Configuration configuration, IDataManager dataManager)
|
||||||
: base("Config - Questionable###QuestionableConfig", ImGuiWindowFlags.AlwaysAutoResize)
|
: base("Config - Questionable###QuestionableConfig", ImGuiWindowFlags.AlwaysAutoResize)
|
||||||
{
|
{
|
||||||
_pluginInterface = pluginInterface;
|
_pluginInterface = pluginInterface;
|
||||||
|
@ -26,7 +26,7 @@ namespace Questionable.Windows;
|
|||||||
|
|
||||||
internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
|
internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
|
||||||
{
|
{
|
||||||
private readonly DalamudPluginInterface _pluginInterface;
|
private readonly IDalamudPluginInterface _pluginInterface;
|
||||||
private readonly MovementController _movementController;
|
private readonly MovementController _movementController;
|
||||||
private readonly QuestController _questController;
|
private readonly QuestController _questController;
|
||||||
private readonly GameFunctions _gameFunctions;
|
private readonly GameFunctions _gameFunctions;
|
||||||
@ -40,7 +40,7 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
|
|||||||
private readonly QuestRegistry _questRegistry;
|
private readonly QuestRegistry _questRegistry;
|
||||||
private readonly ILogger<QuestWindow> _logger;
|
private readonly ILogger<QuestWindow> _logger;
|
||||||
|
|
||||||
public QuestWindow(DalamudPluginInterface pluginInterface,
|
public QuestWindow(IDalamudPluginInterface pluginInterface,
|
||||||
MovementController movementController,
|
MovementController movementController,
|
||||||
QuestController questController,
|
QuestController questController,
|
||||||
GameFunctions gameFunctions,
|
GameFunctions gameFunctions,
|
||||||
|
Loading…
Reference in New Issue
Block a user