Add currently visible unaccepted quest markers to /qst zone (only for unknown/not mapped quests)
This commit is contained in:
parent
e239edb22c
commit
fb9e31cd80
@ -1,10 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Dalamud.Game.ClientState.Objects;
|
using Dalamud.Game.ClientState.Objects;
|
||||||
using Dalamud.Game.Command;
|
using Dalamud.Game.Command;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using Questionable.Data;
|
|
||||||
using Questionable.Model;
|
using Questionable.Model;
|
||||||
using Questionable.Windows;
|
using Questionable.Windows;
|
||||||
|
|
||||||
@ -23,13 +21,11 @@ internal sealed class CommandHandler : IDisposable
|
|||||||
private readonly QuestSelectionWindow _questSelectionWindow;
|
private readonly QuestSelectionWindow _questSelectionWindow;
|
||||||
private readonly ITargetManager _targetManager;
|
private readonly ITargetManager _targetManager;
|
||||||
private readonly GameFunctions _gameFunctions;
|
private readonly GameFunctions _gameFunctions;
|
||||||
private readonly IClientState _clientState;
|
|
||||||
|
|
||||||
public CommandHandler(ICommandManager commandManager, IChatGui chatGui, QuestController questController,
|
public CommandHandler(ICommandManager commandManager, IChatGui chatGui, QuestController questController,
|
||||||
MovementController movementController, QuestRegistry questRegistry,
|
MovementController movementController, QuestRegistry questRegistry,
|
||||||
ConfigWindow configWindow, DebugOverlay debugOverlay, QuestWindow questWindow,
|
ConfigWindow configWindow, DebugOverlay debugOverlay, QuestWindow questWindow,
|
||||||
QuestSelectionWindow questSelectionWindow, ITargetManager targetManager, GameFunctions gameFunctions,
|
QuestSelectionWindow questSelectionWindow, ITargetManager targetManager, GameFunctions gameFunctions)
|
||||||
IClientState clientState)
|
|
||||||
{
|
{
|
||||||
_commandManager = commandManager;
|
_commandManager = commandManager;
|
||||||
_chatGui = chatGui;
|
_chatGui = chatGui;
|
||||||
@ -42,7 +38,6 @@ internal sealed class CommandHandler : IDisposable
|
|||||||
_questSelectionWindow = questSelectionWindow;
|
_questSelectionWindow = questSelectionWindow;
|
||||||
_targetManager = targetManager;
|
_targetManager = targetManager;
|
||||||
_gameFunctions = gameFunctions;
|
_gameFunctions = gameFunctions;
|
||||||
_clientState = clientState;
|
|
||||||
|
|
||||||
_commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand)
|
_commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand)
|
||||||
{
|
{
|
||||||
@ -87,7 +82,7 @@ internal sealed class CommandHandler : IDisposable
|
|||||||
|
|
||||||
case "z":
|
case "z":
|
||||||
case "zone":
|
case "zone":
|
||||||
_questSelectionWindow.OpenForZone(_clientState.TerritoryType);
|
_questSelectionWindow.OpenForCurrentZone();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -9,6 +9,7 @@ using Dalamud.Interface.Components;
|
|||||||
using Dalamud.Interface.Utility.Raii;
|
using Dalamud.Interface.Utility.Raii;
|
||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
|
using FFXIVClientStructs.FFXIV.Client.Game.UI;
|
||||||
using FFXIVClientStructs.FFXIV.Client.UI;
|
using FFXIVClientStructs.FFXIV.Client.UI;
|
||||||
using ImGuiNET;
|
using ImGuiNET;
|
||||||
using LLib.GameUI;
|
using LLib.GameUI;
|
||||||
@ -30,6 +31,7 @@ internal sealed class QuestSelectionWindow : LWindow
|
|||||||
private readonly QuestRegistry _questRegistry;
|
private readonly QuestRegistry _questRegistry;
|
||||||
private readonly IDalamudPluginInterface _pluginInterface;
|
private readonly IDalamudPluginInterface _pluginInterface;
|
||||||
private readonly TerritoryData _territoryData;
|
private readonly TerritoryData _territoryData;
|
||||||
|
private readonly IClientState _clientState;
|
||||||
|
|
||||||
private List<QuestInfo> _quests = [];
|
private List<QuestInfo> _quests = [];
|
||||||
private List<QuestInfo> _offeredQuests = [];
|
private List<QuestInfo> _offeredQuests = [];
|
||||||
@ -37,7 +39,7 @@ internal sealed class QuestSelectionWindow : LWindow
|
|||||||
|
|
||||||
public QuestSelectionWindow(QuestData questData, IGameGui gameGui, IChatGui chatGui, GameFunctions gameFunctions,
|
public QuestSelectionWindow(QuestData questData, IGameGui gameGui, IChatGui chatGui, GameFunctions gameFunctions,
|
||||||
QuestController questController, QuestRegistry questRegistry, IDalamudPluginInterface pluginInterface,
|
QuestController questController, QuestRegistry questRegistry, IDalamudPluginInterface pluginInterface,
|
||||||
TerritoryData territoryData)
|
TerritoryData territoryData, IClientState clientState)
|
||||||
: base($"Quest Selection{WindowId}")
|
: base($"Quest Selection{WindowId}")
|
||||||
{
|
{
|
||||||
_questData = questData;
|
_questData = questData;
|
||||||
@ -48,6 +50,7 @@ internal sealed class QuestSelectionWindow : LWindow
|
|||||||
_questRegistry = questRegistry;
|
_questRegistry = questRegistry;
|
||||||
_pluginInterface = pluginInterface;
|
_pluginInterface = pluginInterface;
|
||||||
_territoryData = territoryData;
|
_territoryData = territoryData;
|
||||||
|
_clientState = clientState;
|
||||||
|
|
||||||
Size = new Vector2(500, 200);
|
Size = new Vector2(500, 200);
|
||||||
SizeCondition = ImGuiCond.Once;
|
SizeCondition = ImGuiCond.Once;
|
||||||
@ -57,18 +60,15 @@ internal sealed class QuestSelectionWindow : LWindow
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint TargetId { get; private set; }
|
|
||||||
public string TargetName { get; private set; } = string.Empty;
|
|
||||||
|
|
||||||
public unsafe void OpenForTarget(IGameObject? gameObject)
|
public unsafe void OpenForTarget(IGameObject? gameObject)
|
||||||
{
|
{
|
||||||
if (gameObject != null)
|
if (gameObject != null)
|
||||||
{
|
{
|
||||||
TargetId = gameObject.DataId;
|
var targetId = gameObject.DataId;
|
||||||
TargetName = gameObject.Name.ToString();
|
var targetName = gameObject.Name.ToString();
|
||||||
WindowName = $"Quests starting with {TargetName} [{TargetId}]{WindowId}";
|
WindowName = $"Quests starting with {targetName} [{targetId}]{WindowId}";
|
||||||
|
|
||||||
_quests = _questData.GetAllByIssuerDataId(TargetId);
|
_quests = _questData.GetAllByIssuerDataId(targetId);
|
||||||
if (_gameGui.TryGetAddonByName<AddonSelectIconString>("SelectIconString", out var addonSelectIconString))
|
if (_gameGui.TryGetAddonByName<AddonSelectIconString>("SelectIconString", out var addonSelectIconString))
|
||||||
{
|
{
|
||||||
var answers = GameUiController.GetChoices(addonSelectIconString);
|
var answers = GameUiController.GetChoices(addonSelectIconString);
|
||||||
@ -88,24 +88,30 @@ internal sealed class QuestSelectionWindow : LWindow
|
|||||||
IsOpen = _quests.Count > 0;
|
IsOpen = _quests.Count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenForZone(ushort territoryId)
|
public unsafe void OpenForCurrentZone()
|
||||||
{
|
{
|
||||||
TargetId = territoryId;
|
var territoryId = _clientState.TerritoryType;
|
||||||
TargetName = _territoryData.GetNameAndId(territoryId);
|
var territoryName = _territoryData.GetNameAndId(territoryId);
|
||||||
WindowName = $"Quests starting in {TargetName}{WindowId}";
|
WindowName = $"Quests starting in {territoryName}{WindowId}";
|
||||||
|
|
||||||
_quests = _questRegistry.AllQuests
|
_quests = _questRegistry.AllQuests
|
||||||
.Where(x => x.FindSequence(0)?.FindStep(0)?.TerritoryId == territoryId)
|
.Where(x => x.FindSequence(0)?.FindStep(0)?.TerritoryId == territoryId)
|
||||||
.Select(x => _questData.GetQuestInfo(x.QuestId))
|
.Select(x => _questData.GetQuestInfo(x.QuestId))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
foreach (var unacceptedQuest in Map.Instance()->UnacceptedQuestMarkers)
|
||||||
|
{
|
||||||
|
ushort questId = (ushort)(unacceptedQuest.ObjectiveId & 0xFFFF);
|
||||||
|
if (_quests.All(q => q.QuestId != questId))
|
||||||
|
_quests.Add(_questData.GetQuestInfo(questId));
|
||||||
|
}
|
||||||
|
|
||||||
_offeredQuests = [];
|
_offeredQuests = [];
|
||||||
IsOpen = true;
|
IsOpen = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnClose()
|
public override void OnClose()
|
||||||
{
|
{
|
||||||
TargetId = default;
|
|
||||||
TargetName = string.Empty;
|
|
||||||
_quests = [];
|
_quests = [];
|
||||||
_offeredQuests = [];
|
_offeredQuests = [];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user