Add tab to view available daily quests only
This commit is contained in:
parent
70c47e20fb
commit
8462b86544
@ -552,7 +552,7 @@ internal sealed unsafe class QuestFunctions
|
|||||||
if (questInfo.GrandCompany != GrandCompany.None && questInfo.GrandCompany != GetGrandCompany())
|
if (questInfo.GrandCompany != GrandCompany.None && questInfo.GrandCompany != GetGrandCompany())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (questInfo.AlliedSociety != EAlliedSociety.None)
|
if (questInfo.AlliedSociety != EAlliedSociety.None && questInfo.IsRepeatable)
|
||||||
return !IsDailyAlliedSocietyQuestAndAvailableToday(questId);
|
return !IsDailyAlliedSocietyQuestAndAvailableToday(questId);
|
||||||
|
|
||||||
return !HasCompletedPreviousQuests(questInfo, extraCompletedQuest) || !HasCompletedPreviousInstances(questInfo);
|
return !HasCompletedPreviousQuests(questInfo, extraCompletedQuest) || !HasCompletedPreviousInstances(questInfo);
|
||||||
|
@ -264,6 +264,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
|
|||||||
|
|
||||||
serviceCollection.AddSingleton<QuestJournalComponent>();
|
serviceCollection.AddSingleton<QuestJournalComponent>();
|
||||||
serviceCollection.AddSingleton<GatheringJournalComponent>();
|
serviceCollection.AddSingleton<GatheringJournalComponent>();
|
||||||
|
serviceCollection.AddSingleton<AlliedSocietyJournalComponent>();
|
||||||
|
|
||||||
serviceCollection.AddSingleton<OneTimeSetupWindow>();
|
serviceCollection.AddSingleton<OneTimeSetupWindow>();
|
||||||
serviceCollection.AddSingleton<QuestWindow>();
|
serviceCollection.AddSingleton<QuestWindow>();
|
||||||
|
@ -0,0 +1,97 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Dalamud.Interface.Colors;
|
||||||
|
using Dalamud.Interface.Utility.Raii;
|
||||||
|
using ImGuiNET;
|
||||||
|
using Questionable.Controller;
|
||||||
|
using Questionable.Data;
|
||||||
|
using Questionable.Functions;
|
||||||
|
using Questionable.Model;
|
||||||
|
using Questionable.Windows.QuestComponents;
|
||||||
|
|
||||||
|
namespace Questionable.Windows.JournalComponents;
|
||||||
|
|
||||||
|
internal sealed class AlliedSocietyJournalComponent
|
||||||
|
{
|
||||||
|
private static readonly string[] RankNames =
|
||||||
|
["Neutral", "Recognized", "Friendly", "Trusted", "Respected", "Honored", "Sworn", "Allied"];
|
||||||
|
|
||||||
|
private readonly QuestFunctions _questFunctions;
|
||||||
|
private readonly AlliedSocietyQuestFunctions _alliedSocietyQuestFunctions;
|
||||||
|
private readonly QuestData _questData;
|
||||||
|
private readonly QuestRegistry _questRegistry;
|
||||||
|
private readonly QuestTooltipComponent _questTooltipComponent;
|
||||||
|
private readonly UiUtils _uiUtils;
|
||||||
|
|
||||||
|
public AlliedSocietyJournalComponent(
|
||||||
|
QuestFunctions questFunctions,
|
||||||
|
AlliedSocietyQuestFunctions alliedSocietyQuestFunctions,
|
||||||
|
QuestData questData,
|
||||||
|
QuestRegistry questRegistry,
|
||||||
|
QuestTooltipComponent questTooltipComponent,
|
||||||
|
UiUtils uiUtils)
|
||||||
|
{
|
||||||
|
_questFunctions = questFunctions;
|
||||||
|
_alliedSocietyQuestFunctions = alliedSocietyQuestFunctions;
|
||||||
|
_questData = questData;
|
||||||
|
_questRegistry = questRegistry;
|
||||||
|
_questTooltipComponent = questTooltipComponent;
|
||||||
|
_uiUtils = uiUtils;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DrawAlliedSocietyQuests()
|
||||||
|
{
|
||||||
|
using var tab = ImRaii.TabItem("Allied Societies");
|
||||||
|
if (!tab)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (EAlliedSociety alliedSociety in Enum.GetValues<EAlliedSociety>().Where(x => x != EAlliedSociety.None))
|
||||||
|
{
|
||||||
|
List<QuestInfo> quests = _alliedSocietyQuestFunctions.GetAvailableAlliedSocietyQuests(alliedSociety)
|
||||||
|
.Select(x => (QuestInfo)_questData.GetQuestInfo(x))
|
||||||
|
.ToList();
|
||||||
|
if (quests.Count == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
bool containsNewQuests = quests.Any(x => !_questFunctions.IsQuestComplete(x.QuestId));
|
||||||
|
if (containsNewQuests)
|
||||||
|
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudYellow);
|
||||||
|
|
||||||
|
if (!ImGui.CollapsingHeader($"{alliedSociety}###AlliedSociety{(int)alliedSociety}"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (containsNewQuests)
|
||||||
|
ImGui.PopStyleColor();
|
||||||
|
|
||||||
|
if (alliedSociety <= EAlliedSociety.Ixal)
|
||||||
|
{
|
||||||
|
for (byte i = 1; i <= 8; ++i)
|
||||||
|
{
|
||||||
|
var questsByRank = quests.Where(x => x.AlliedSocietyRank == i).ToList();
|
||||||
|
if (questsByRank.Count == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ImGui.Text(RankNames[i - 1]);
|
||||||
|
foreach (var quest in questsByRank)
|
||||||
|
DrawQuest(quest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var quest in quests)
|
||||||
|
DrawQuest(quest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawQuest(QuestInfo quest)
|
||||||
|
{
|
||||||
|
var (color, icon, tooltipText) = _uiUtils.GetQuestStyle(quest.QuestId);
|
||||||
|
if (!_questRegistry.IsKnownQuest(quest.QuestId))
|
||||||
|
color = ImGuiColors.DalamudGrey;
|
||||||
|
|
||||||
|
if (_uiUtils.ChecklistItem($"{quest.Name} ({tooltipText})", color, icon))
|
||||||
|
_questTooltipComponent.Draw(quest);
|
||||||
|
}
|
||||||
|
}
|
@ -11,18 +11,21 @@ namespace Questionable.Windows;
|
|||||||
internal sealed class JournalProgressWindow : LWindow, IDisposable
|
internal sealed class JournalProgressWindow : LWindow, IDisposable
|
||||||
{
|
{
|
||||||
private readonly QuestJournalComponent _questJournalComponent;
|
private readonly QuestJournalComponent _questJournalComponent;
|
||||||
|
private readonly AlliedSocietyJournalComponent _alliedSocietyJournalComponent;
|
||||||
private readonly GatheringJournalComponent _gatheringJournalComponent;
|
private readonly GatheringJournalComponent _gatheringJournalComponent;
|
||||||
private readonly QuestRegistry _questRegistry;
|
private readonly QuestRegistry _questRegistry;
|
||||||
private readonly IClientState _clientState;
|
private readonly IClientState _clientState;
|
||||||
|
|
||||||
public JournalProgressWindow(
|
public JournalProgressWindow(
|
||||||
QuestJournalComponent questJournalComponent,
|
QuestJournalComponent questJournalComponent,
|
||||||
|
AlliedSocietyJournalComponent alliedSocietyJournalComponent,
|
||||||
GatheringJournalComponent gatheringJournalComponent,
|
GatheringJournalComponent gatheringJournalComponent,
|
||||||
QuestRegistry questRegistry,
|
QuestRegistry questRegistry,
|
||||||
IClientState clientState)
|
IClientState clientState)
|
||||||
: base("Journal Progress###QuestionableJournalProgress")
|
: base("Journal Progress###QuestionableJournalProgress")
|
||||||
{
|
{
|
||||||
_questJournalComponent = questJournalComponent;
|
_questJournalComponent = questJournalComponent;
|
||||||
|
_alliedSocietyJournalComponent = alliedSocietyJournalComponent;
|
||||||
_gatheringJournalComponent = gatheringJournalComponent;
|
_gatheringJournalComponent = gatheringJournalComponent;
|
||||||
_questRegistry = questRegistry;
|
_questRegistry = questRegistry;
|
||||||
_clientState = clientState;
|
_clientState = clientState;
|
||||||
@ -60,6 +63,7 @@ internal sealed class JournalProgressWindow : LWindow, IDisposable
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
_questJournalComponent.DrawQuests();
|
_questJournalComponent.DrawQuests();
|
||||||
|
_alliedSocietyJournalComponent.DrawAlliedSocietyQuests();
|
||||||
_gatheringJournalComponent.DrawGatheringItems();
|
_gatheringJournalComponent.DrawGatheringItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user