muffin v7.5.0

This commit is contained in:
alydev 2026-05-01 05:17:35 +10:00
parent afafd5e377
commit a6481e7b9a
67 changed files with 4281 additions and 2372 deletions

View file

@ -61,30 +61,45 @@ internal sealed class AlliedSocietyJournalComponent
public void DrawAlliedSocietyQuests()
{
using ImRaii.IEndObject endObject = ImRaii.TabItem("Allied Societies");
if (!endObject)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Allied Societies");
try
{
return;
}
DrawDailyAllowanceHeader();
foreach (EAlliedSociety item in from x in Enum.GetValues<EAlliedSociety>()
where x != EAlliedSociety.None
select x)
{
List<QuestInfo> list = (from x in _alliedSocietyQuestFunctions.GetAvailableAlliedSocietyQuests(item)
select (QuestInfo)_questData.GetQuestInfo(x)).ToList();
if (list.Count != 0 && DrawAlliedSocietyHeader(item, list))
if (!val)
{
using (ImRaii.PushIndent())
return;
}
DrawDailyAllowanceHeader();
foreach (EAlliedSociety item in from x in Enum.GetValues<EAlliedSociety>()
where x != EAlliedSociety.None
select x)
{
List<QuestInfo> list = (from x in _alliedSocietyQuestFunctions.GetAvailableAlliedSocietyQuests(item)
select (QuestInfo)_questData.GetQuestInfo(x)).ToList();
if (list.Count != 0 && DrawAlliedSocietyHeader(item, list))
{
DrawAddToPriorityButtons(item, list);
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
DrawQuestList(item, list);
IndentDisposable val2 = ImRaii.PushIndent(1, true);
try
{
DrawAddToPriorityButtons(item, list);
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
DrawQuestList(item, list);
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
}
private unsafe void DrawDailyAllowanceHeader()
@ -271,10 +286,15 @@ internal sealed class AlliedSocietyJournalComponent
private static void DrawDisabledAddButton()
{
using (ImRaii.Disabled(disabled: true))
DisabledDisposable val = ImRaii.Disabled(true);
try
{
ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Plus, "Add to Priority");
}
finally
{
((IDisposable)val)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("No quests available to add (may be disabled, already in priority, or not available)");
@ -284,7 +304,8 @@ internal sealed class AlliedSocietyJournalComponent
private void DrawArrSocietyButtons(EAlliedSociety alliedSociety, List<QuestInfo> availableQuests, int dailyLimit, int remainingAllowances)
{
int num = Math.Min(Math.Min(dailyLimit, remainingAllowances), availableQuests.Count);
using (ImRaii.Disabled(remainingAllowances == 0))
DisabledDisposable val = ImRaii.Disabled(remainingAllowances == 0);
try
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Plus, num switch
{
@ -297,6 +318,10 @@ internal sealed class AlliedSocietyJournalComponent
AddQuestsToPriority(alliedSociety, availableQuests.Take(num).ToList());
}
}
finally
{
((IDisposable)val)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
DrawRecommendedButtonTooltip(num, remainingAllowances, dailyLimit, alliedSociety, availableQuests.Count);
@ -317,7 +342,8 @@ internal sealed class AlliedSocietyJournalComponent
ImGui.BeginTooltip();
if (remainingAllowances == 0)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, true);
try
{
ImU8String text = new ImU8String(0, 1);
text.AppendFormatted(SeIconChar.Cross.ToIconString());
@ -325,6 +351,10 @@ internal sealed class AlliedSocietyJournalComponent
ImGui.SameLine();
ImGui.TextUnformatted("No daily allowances remaining");
}
finally
{
((IDisposable)val)?.Dispose();
}
Vector4 col = ImGuiColors.DalamudGrey3;
ImU8String text2 = new ImU8String(44, 1);
text2.AppendLiteral("You've used all ");
@ -334,7 +364,8 @@ internal sealed class AlliedSocietyJournalComponent
}
else if (questsToAddCount == remainingAllowances && questsToAddCount < availableCount)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen, true);
try
{
ImU8String text3 = new ImU8String(0, 1);
text3.AppendFormatted(SeIconChar.QuestSync.ToIconString());
@ -347,6 +378,10 @@ internal sealed class AlliedSocietyJournalComponent
text4.AppendFormatted((questsToAddCount == 1) ? "quest" : "quests");
ImGui.TextUnformatted(text4);
}
finally
{
((IDisposable)val)?.Dispose();
}
Vector4 col = ImGuiColors.DalamudGrey3;
ImU8String text5 = new ImU8String(44, 2);
text5.AppendLiteral("You can complete ");
@ -360,7 +395,8 @@ internal sealed class AlliedSocietyJournalComponent
}
else if (questsToAddCount == dailyLimit)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen, true);
try
{
ImU8String text6 = new ImU8String(0, 1);
text6.AppendFormatted(SeIconChar.QuestSync.ToIconString());
@ -372,6 +408,10 @@ internal sealed class AlliedSocietyJournalComponent
text7.AppendLiteral(" quests");
ImGui.TextUnformatted(text7);
}
finally
{
((IDisposable)val)?.Dispose();
}
Vector4 col = ImGuiColors.DalamudGrey3;
ImU8String text8 = new ImU8String(51, 2);
text8.AppendLiteral("This will use ");
@ -385,7 +425,8 @@ internal sealed class AlliedSocietyJournalComponent
}
else if (questsToAddCount == availableCount)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen, true);
try
{
ImU8String text9 = new ImU8String(0, 1);
text9.AppendFormatted(SeIconChar.QuestSync.ToIconString());
@ -400,6 +441,10 @@ internal sealed class AlliedSocietyJournalComponent
text10.AppendFormatted((questsToAddCount == 1) ? "quest" : "quests");
ImGui.TextUnformatted(text10);
}
finally
{
((IDisposable)val)?.Dispose();
}
Vector4 col = ImGuiColors.DalamudGrey3;
ImU8String text11 = new ImU8String(37, 2);
text11.AppendLiteral("Uses ");
@ -413,7 +458,8 @@ internal sealed class AlliedSocietyJournalComponent
}
else
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow, true);
try
{
ImU8String text12 = new ImU8String(0, 1);
text12.AppendFormatted(SeIconChar.BoxedLetterQ.ToIconString());
@ -428,6 +474,10 @@ internal sealed class AlliedSocietyJournalComponent
text13.AppendFormatted((questsToAddCount == 1) ? "quest" : "quests");
ImGui.TextUnformatted(text13);
}
finally
{
((IDisposable)val)?.Dispose();
}
Vector4 col = ImGuiColors.DalamudGrey3;
ImU8String text14 = new ImU8String(55, 2);
text14.AppendLiteral("Limited by available quests (");
@ -447,7 +497,8 @@ internal sealed class AlliedSocietyJournalComponent
ImGui.BeginTooltip();
if (availableCount > remainingAllowances)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange, true);
try
{
ImU8String text = new ImU8String(0, 1);
text.AppendFormatted(SeIconChar.Cross.ToIconString());
@ -455,6 +506,10 @@ internal sealed class AlliedSocietyJournalComponent
ImGui.SameLine();
ImGui.TextUnformatted("Warning: Exceeds remaining allowances");
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.Spacing();
ImU8String text2 = new ImU8String(54, 1);
text2.AppendLiteral("This adds all ");
@ -473,7 +528,8 @@ internal sealed class AlliedSocietyJournalComponent
}
else if (availableCount > dailyLimit)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange, true);
try
{
ImU8String text4 = new ImU8String(0, 1);
text4.AppendFormatted(SeIconChar.Cross.ToIconString());
@ -481,6 +537,10 @@ internal sealed class AlliedSocietyJournalComponent
ImGui.SameLine();
ImGui.TextUnformatted("Warning: Exceeds daily optimal amount");
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.Spacing();
ImU8String text5 = new ImU8String(32, 1);
text5.AppendLiteral("This adds all ");
@ -503,7 +563,8 @@ internal sealed class AlliedSocietyJournalComponent
}
else
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen, true);
try
{
ImU8String text8 = new ImU8String(0, 1);
text8.AppendFormatted(SeIconChar.QuestSync.ToIconString());
@ -518,6 +579,10 @@ internal sealed class AlliedSocietyJournalComponent
text9.AppendFormatted((availableCount == 1) ? "quest" : "quests");
ImGui.TextUnformatted(text9);
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.Spacing();
Vector4 col = ImGuiColors.DalamudGrey3;
ImU8String text10 = new ImU8String(27, 2);
@ -561,7 +626,8 @@ internal sealed class AlliedSocietyJournalComponent
ImGui.Spacing();
if (availableQuests.Count <= remainingAllowances)
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen, true);
try
{
ImU8String text2 = new ImU8String(0, 1);
text2.AppendFormatted(SeIconChar.QuestSync.ToIconString());
@ -576,11 +642,16 @@ internal sealed class AlliedSocietyJournalComponent
text3.AppendFormatted((remainingAllowances == 1) ? "allowance" : "allowances");
ImGui.TextUnformatted(text3);
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.TextColored(ImGuiColors.DalamudGrey3, "All can be completed today");
}
else
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange))
ColorDisposable val = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudOrange, true);
try
{
ImU8String text4 = new ImU8String(0, 1);
text4.AppendFormatted(SeIconChar.Cross.ToIconString());
@ -592,6 +663,10 @@ internal sealed class AlliedSocietyJournalComponent
text5.AppendLiteral(")");
ImGui.TextUnformatted(text5);
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.TextColored(ImGuiColors.DalamudGrey3, "Some quests won't be completable until tomorrow");
}
ImGui.EndTooltip();

View file

@ -62,42 +62,60 @@ internal sealed class DutyJournalComponent
public void DrawDuties()
{
using ImRaii.IEndObject endObject = ImRaii.TabItem("Duties");
if (!endObject)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Duties");
try
{
return;
}
if (ImGui.CollapsingHeader("Explanation", ImGuiTreeNodeFlags.DefaultOpen))
{
ImGui.Text("The list below shows all duties and their unlock status.");
ImGui.BulletText("'Unlocked' shows duties you have access to.");
ImGui.BulletText("'Completed' shows duties you have finished at least once.");
ImGui.BulletText("Click on a duty to see which quest unlocks it.");
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
}
DrawFilterControls();
if (_filteredCategories.Count > 0)
{
using (ImRaii.IEndObject endObject2 = ImRaii.Table("Duties", 3, ImGuiTableFlags.NoSavedSettings))
if (!val)
{
if (!endObject2)
{
return;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.NoHide);
ImGui.TableSetupColumn("Unlocked", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableSetupColumn("Completed", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableHeadersRow();
foreach (DutyCategory filteredCategory in _filteredCategories)
{
DrawCategory(filteredCategory);
}
return;
}
if (ImGui.CollapsingHeader("Explanation", ImGuiTreeNodeFlags.DefaultOpen))
{
ImGui.Text("The list below shows all duties and their unlock status.");
ImGui.BulletText("'Unlocked' shows duties you have access to.");
ImGui.BulletText("'Completed' shows duties you have finished at least once.");
ImGui.BulletText("Click on a duty to see which quest unlocks it.");
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
}
DrawFilterControls();
if (_filteredCategories.Count > 0)
{
TableDisposable val2 = ImRaii.Table((ImU8String)"Duties", 3, ImGuiTableFlags.NoSavedSettings);
try
{
if (!val2)
{
return;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.NoHide);
ImGui.TableSetupColumn("Unlocked", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableSetupColumn("Completed", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableHeadersRow();
foreach (DutyCategory filteredCategory in _filteredCategories)
{
DrawCategory(filteredCategory);
}
return;
}
finally
{
((TableDisposable)(ref val2)).Dispose();
}
}
ImGui.Text("No duties match your search.");
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
ImGui.Text("No duties match your search.");
}
private void DrawFilterControls()
@ -174,69 +192,78 @@ internal sealed class DutyJournalComponent
private void DrawDutyTooltip(DutyInfo duty)
{
using ImRaii.IEndObject endObject = ImRaii.Tooltip();
if (!endObject)
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
TooltipDisposable val = ImRaii.Tooltip();
try
{
return;
}
ImGui.TextColored(ImGuiColors.DalamudWhite, duty.Name);
Vector4 col = ImGuiColors.DalamudGrey;
ImU8String text = new ImU8String(12, 1);
text.AppendLiteral("Content ID: ");
text.AppendFormatted(duty.ContentFinderConditionId);
ImGui.TextColored(in col, text);
ImGui.Separator();
ImU8String text2 = new ImU8String(16, 1);
text2.AppendLiteral("Level Required: ");
text2.AppendFormatted(duty.Level);
ImGui.Text(text2);
if (duty.ItemLevel > 0)
{
ImU8String text3 = new ImU8String(21, 1);
text3.AppendLiteral("Item Level Required: ");
text3.AppendFormatted(duty.ItemLevel);
ImGui.Text(text3);
}
ImU8String text4 = new ImU8String(6, 1);
text4.AppendLiteral("Type: ");
text4.AppendFormatted(duty.ContentTypeName);
ImGui.Text(text4);
if (duty.IsHighEndDuty)
{
ImGui.SameLine();
ImGui.TextColored(ImGuiColors.DalamudOrange, "(High-End)");
}
ImGui.Separator();
if (duty.IsUnlocked)
{
ImGui.TextColored(ImGuiColors.ParsedGreen, "Status: Unlocked");
}
else
{
ImGui.TextColored(ImGuiColors.DalamudRed, "Status: Locked");
}
if (duty.UnlockQuests.Count > 0)
{
ImGui.Separator();
ImGui.Text("Unlock Quest(s):");
if (!((TooltipDisposable)(ref val)).Alive)
{
foreach (QuestId unlockQuest in duty.UnlockQuests)
{
if (_questData.TryGetQuestInfo(unlockQuest, out IQuestInfo questInfo))
{
var (color, icon, _) = _uiUtils.GetQuestStyle(unlockQuest);
_uiUtils.ChecklistItem($"{questInfo.Name} ({unlockQuest})", color, icon);
}
else
{
_uiUtils.ChecklistItem($"Unknown Quest ({unlockQuest})", ImGuiColors.DalamudGrey, FontAwesomeIcon.Question);
}
}
return;
}
ImGui.TextColored(ImGuiColors.DalamudWhite, duty.Name);
Vector4 col = ImGuiColors.DalamudGrey;
ImU8String text = new ImU8String(12, 1);
text.AppendLiteral("Content ID: ");
text.AppendFormatted(duty.ContentFinderConditionId);
ImGui.TextColored(in col, text);
ImGui.Separator();
ImU8String text2 = new ImU8String(16, 1);
text2.AppendLiteral("Level Required: ");
text2.AppendFormatted(duty.Level);
ImGui.Text(text2);
if (duty.ItemLevel > 0)
{
ImU8String text3 = new ImU8String(21, 1);
text3.AppendLiteral("Item Level Required: ");
text3.AppendFormatted(duty.ItemLevel);
ImGui.Text(text3);
}
ImU8String text4 = new ImU8String(6, 1);
text4.AppendLiteral("Type: ");
text4.AppendFormatted(duty.ContentTypeName);
ImGui.Text(text4);
if (duty.IsHighEndDuty)
{
ImGui.SameLine();
ImGui.TextColored(ImGuiColors.DalamudOrange, "(High-End)");
}
ImGui.Separator();
if (duty.IsUnlocked)
{
ImGui.TextColored(ImGuiColors.ParsedGreen, "Status: Unlocked");
}
else
{
ImGui.TextColored(ImGuiColors.DalamudRed, "Status: Locked");
}
if (duty.UnlockQuests.Count > 0)
{
ImGui.Separator();
ImGui.Text("Unlock Quest(s):");
{
foreach (QuestId unlockQuest in duty.UnlockQuests)
{
if (_questData.TryGetQuestInfo(unlockQuest, out IQuestInfo questInfo))
{
var (color, icon, _) = _uiUtils.GetQuestStyle(unlockQuest);
_uiUtils.ChecklistItem($"{questInfo.Name} ({unlockQuest})", color, icon);
}
else
{
_uiUtils.ChecklistItem($"Unknown Quest ({unlockQuest})", ImGuiColors.DalamudGrey, FontAwesomeIcon.Question);
}
}
return;
}
}
ImGui.Separator();
ImGui.TextColored(ImGuiColors.DalamudGrey, "No unlock quest data available.");
}
finally
{
((TooltipDisposable)(ref val)).Dispose();
}
ImGui.Separator();
ImGui.TextColored(ImGuiColors.DalamudGrey, "No unlock quest data available.");
}
private void DrawDutyStatus(bool? status)

View file

@ -202,36 +202,54 @@ internal sealed class GatheringJournalComponent
public void DrawGatheringItems()
{
using ImRaii.IEndObject endObject = ImRaii.TabItem("Gathering Points");
if (!endObject)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Gathering Points");
try
{
return;
}
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
if (ImGui.InputTextWithHint(string.Empty, "Search areas, gathering points and items", ref _searchText, 256))
{
UpdateFilter();
}
if (_filteredExpansions.Count > 0)
{
using (ImRaii.IEndObject endObject2 = ImRaii.Table("GatheringPoints", 3, ImGuiTableFlags.NoSavedSettings))
if (!val)
{
if (!endObject2)
{
return;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.NoHide);
ImGui.TableSetupColumn("Supported", ImGuiTableColumnFlags.WidthFixed, 100f * ImGui.GetIO().FontGlobalScale);
ImGui.TableSetupColumn("Collected", ImGuiTableColumnFlags.WidthFixed, 100f * ImGui.GetIO().FontGlobalScale);
ImGui.TableHeadersRow();
foreach (FilteredExpansion filteredExpansion in _filteredExpansions)
{
DrawExpansion(filteredExpansion);
}
return;
}
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
if (ImGui.InputTextWithHint(string.Empty, "Search areas, gathering points and items", ref _searchText, 256))
{
UpdateFilter();
}
if (_filteredExpansions.Count > 0)
{
TableDisposable val2 = ImRaii.Table((ImU8String)"GatheringPoints", 3, ImGuiTableFlags.NoSavedSettings);
try
{
if (!val2)
{
return;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.NoHide);
ImGui.TableSetupColumn("Supported", ImGuiTableColumnFlags.WidthFixed, 100f * ImGui.GetIO().FontGlobalScale);
ImGui.TableSetupColumn("Collected", ImGuiTableColumnFlags.WidthFixed, 100f * ImGui.GetIO().FontGlobalScale);
ImGui.TableHeadersRow();
foreach (FilteredExpansion filteredExpansion in _filteredExpansions)
{
DrawExpansion(filteredExpansion);
}
return;
}
finally
{
((TableDisposable)(ref val2)).Dispose();
}
}
ImGui.Text("No area, gathering point or item matches your search text.");
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
ImGui.Text("No area, gathering point or item matches your search text.");
}
private void DrawExpansion(FilteredExpansion expansion)

View file

@ -119,66 +119,84 @@ internal sealed class QuestJournalComponent
public void DrawQuests()
{
using ImRaii.IEndObject endObject = ImRaii.TabItem("Quests");
if (!endObject)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Quests");
try
{
return;
}
bool hideSeasonalEventsFromJournalProgress = _configuration.General.HideSeasonalEventsFromJournalProgress;
if (hideSeasonalEventsFromJournalProgress != _lastHideSeasonalGlobally)
{
_lastHideSeasonalGlobally = hideSeasonalEventsFromJournalProgress;
_logger.LogDebug("Configuration change detected: HideSeasonalEventsFromJournalProgress={Hide} - refreshing journal", hideSeasonalEventsFromJournalProgress);
UpdateFilter();
}
if (ImGui.CollapsingHeader("Explanation", ImGuiTreeNodeFlags.DefaultOpen))
{
ImGui.Text("The list below contains all quests that appear in your journal.");
ImGui.BulletText("'Supported' lists quests that Questionable can do for you");
ImGui.BulletText("'Completed' lists quests your current character has completed.");
ImGui.BulletText("Not all quests can be completed even if they're listed as available, e.g. starting city quest chains or past seasonal events.");
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
}
QuestJournalUtils.ShowFilterContextMenu(this);
ImGui.SameLine();
_questJournalUtils.AddAllAvailableQuests();
ImGui.SameLine();
if (ImGuiComponents.IconButton(FontAwesomeIcon.GlobeEurope))
{
Util.OpenLink("https://wigglymuffin.github.io/FFXIV-Tools/");
}
if (ImGui.IsItemHovered())
{
ImGui.SetTooltip("View All Quest Paths Online");
}
ImGui.SameLine();
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
if (ImGui.InputTextWithHint(string.Empty, "Search quests and categories", ref Filter.SearchText, 256))
{
UpdateFilter();
}
if (_filteredSections.Count > 0)
{
using (ImRaii.IEndObject endObject2 = ImRaii.Table("Quests", 3, ImGuiTableFlags.NoSavedSettings))
if (!val)
{
if (!endObject2)
{
return;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.NoHide);
ImGui.TableSetupColumn("Supported", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableSetupColumn("Completed", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableHeadersRow();
foreach (FilteredSection filteredSection in _filteredSections)
{
DrawSection(filteredSection);
}
return;
}
bool hideSeasonalEventsFromJournalProgress = _configuration.General.HideSeasonalEventsFromJournalProgress;
if (hideSeasonalEventsFromJournalProgress != _lastHideSeasonalGlobally)
{
_lastHideSeasonalGlobally = hideSeasonalEventsFromJournalProgress;
_logger.LogDebug("Configuration change detected: HideSeasonalEventsFromJournalProgress={Hide} - refreshing journal", hideSeasonalEventsFromJournalProgress);
UpdateFilter();
}
if (ImGui.CollapsingHeader("Explanation", ImGuiTreeNodeFlags.DefaultOpen))
{
ImGui.Text("The list below contains all quests that appear in your journal.");
ImGui.BulletText("'Supported' lists quests that Questionable can do for you");
ImGui.BulletText("'Completed' lists quests your current character has completed.");
ImGui.BulletText("Not all quests can be completed even if they're listed as available, e.g. starting city quest chains or past seasonal events.");
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
}
QuestJournalUtils.ShowFilterContextMenu(this);
ImGui.SameLine();
_questJournalUtils.AddAllAvailableQuests();
ImGui.SameLine();
if (ImGuiComponents.IconButton(FontAwesomeIcon.GlobeEurope))
{
Util.OpenLink("https://wigglymuffin.github.io/FFXIV-Tools/");
}
if (ImGui.IsItemHovered())
{
ImGui.SetTooltip("View All Quest Paths Online");
}
ImGui.SameLine();
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
if (ImGui.InputTextWithHint(string.Empty, "Search quests and categories", ref Filter.SearchText, 256))
{
UpdateFilter();
}
if (_filteredSections.Count > 0)
{
TableDisposable val2 = ImRaii.Table((ImU8String)"Quests", 3, ImGuiTableFlags.NoSavedSettings);
try
{
if (!val2)
{
return;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.NoHide);
ImGui.TableSetupColumn("Supported", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableSetupColumn("Completed", ImGuiTableColumnFlags.WidthFixed, 120f * ImGui.GetIO().FontGlobalScale);
ImGui.TableHeadersRow();
foreach (FilteredSection filteredSection in _filteredSections)
{
DrawSection(filteredSection);
}
return;
}
finally
{
((TableDisposable)(ref val2)).Dispose();
}
}
ImGui.Text("No quest or category matches your search.");
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
ImGui.Text("No quest or category matches your search.");
}
private void DrawSection(FilteredSection filter)

View file

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Dalamud.Bindings.ImGui;
@ -44,6 +45,9 @@ internal sealed class QuestJournalUtils
public void ShowContextMenu(IQuestInfo questInfo, Quest? quest, string label)
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
if (ImGui.IsItemClicked(ImGuiMouseButton.Right))
{
ImU8String strId = new ImU8String(12, 1);
@ -51,68 +55,90 @@ internal sealed class QuestJournalUtils
strId.AppendFormatted(questInfo.QuestId);
ImGui.OpenPopup(strId);
}
ImU8String id = new ImU8String(12, 1);
id.AppendLiteral("##QuestPopup");
id.AppendFormatted(questInfo.QuestId);
using ImRaii.IEndObject endObject = ImRaii.Popup(id);
if (!endObject)
ImU8String imU8String = new ImU8String(12, 1);
imU8String.AppendLiteral("##QuestPopup");
imU8String.AppendFormatted(questInfo.QuestId);
PopupDisposable val = ImRaii.Popup(imU8String);
try
{
return;
}
using (ImRaii.Disabled(!_questFunctions.IsReadyToAcceptQuest(questInfo.QuestId) || quest == null || quest.Root.Disabled))
{
if (ImGui.MenuItem("Start as next quest"))
if (!val)
{
_questController.SetNextQuest(quest);
_questController.Start(label);
return;
}
DisabledDisposable val2 = ImRaii.Disabled(!_questFunctions.IsReadyToAcceptQuest(questInfo.QuestId) || quest == null || quest.Root.Disabled);
try
{
if (ImGui.MenuItem("Start as next quest"))
{
_questController.SetNextQuest(quest);
_questController.Start(label);
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
if (!_questFunctions.IsReadyToAcceptQuest(questInfo.QuestId))
{
ImGui.SetTooltip("Quest is not ready to accept");
}
else if (quest == null)
{
ImGui.SetTooltip("Quest has no path available");
}
else if (quest.Root.Disabled)
{
ImGui.SetTooltip("Quest path is disabled");
}
}
List<ElementId> incompletePrerequisiteQuests = GetIncompletePrerequisiteQuests(questInfo);
val2 = ImRaii.Disabled(incompletePrerequisiteQuests.Count == 0);
try
{
if (ImGui.MenuItem(incompletePrerequisiteQuests.Count switch
{
0 => "Add quest and requirements to priority",
1 => "Add 1 quest to priority",
_ => $"Add {incompletePrerequisiteQuests.Count} quests to priority",
}))
{
AddRequiredQuestsToPriority(questInfo, incompletePrerequisiteQuests);
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
if (incompletePrerequisiteQuests.Count == 0)
{
ImGui.SetTooltip("No quests to add (quest may be complete, disabled, locked with no unlock path, or already in priority)");
}
else
{
ImGui.SetTooltip((incompletePrerequisiteQuests.Count == 1) ? "Add this quest to the priority list" : $"Add this quest and {incompletePrerequisiteQuests.Count - 1} required {((incompletePrerequisiteQuests.Count - 1 == 1) ? "quest" : "quests")} to the priority list in completion order");
}
}
bool flag = _commandManager.Commands.ContainsKey("/questinfo");
val2 = ImRaii.Disabled(!(questInfo.QuestId is QuestId) || !flag);
try
{
if (ImGui.MenuItem("View in Quest Map"))
{
_commandManager.ProcessCommand($"/questinfo {questInfo.QuestId}");
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
finally
{
if (!_questFunctions.IsReadyToAcceptQuest(questInfo.QuestId))
{
ImGui.SetTooltip("Quest is not ready to accept");
}
else if (quest == null)
{
ImGui.SetTooltip("Quest has no path available");
}
else if (quest.Root.Disabled)
{
ImGui.SetTooltip("Quest path is disabled");
}
}
List<ElementId> incompletePrerequisiteQuests = GetIncompletePrerequisiteQuests(questInfo);
using (ImRaii.Disabled(incompletePrerequisiteQuests.Count == 0))
{
if (ImGui.MenuItem(incompletePrerequisiteQuests.Count switch
{
0 => "Add quest and requirements to priority",
1 => "Add 1 quest to priority",
_ => $"Add {incompletePrerequisiteQuests.Count} quests to priority",
}))
{
AddRequiredQuestsToPriority(questInfo, incompletePrerequisiteQuests);
}
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
if (incompletePrerequisiteQuests.Count == 0)
{
ImGui.SetTooltip("No quests to add (quest may be complete, disabled, locked with no unlock path, or already in priority)");
}
else
{
ImGui.SetTooltip((incompletePrerequisiteQuests.Count == 1) ? "Add this quest to the priority list" : $"Add this quest and {incompletePrerequisiteQuests.Count - 1} required {((incompletePrerequisiteQuests.Count - 1 == 1) ? "quest" : "quests")} to the priority list in completion order");
}
}
bool flag = _commandManager.Commands.ContainsKey("/questinfo");
using (ImRaii.Disabled(!(questInfo.QuestId is QuestId) || !flag))
{
if (ImGui.MenuItem("View in Quest Map"))
{
_commandManager.ProcessCommand($"/questinfo {questInfo.QuestId}");
}
((PopupDisposable)(ref val)).Dispose();
}
}
@ -233,6 +259,9 @@ internal sealed class QuestJournalUtils
internal static void ShowFilterContextMenu(QuestJournalComponent journalUi)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
if (ImGuiComponents.IconButton(FontAwesomeIcon.Filter))
{
ImGui.OpenPopup("QuestFilters");
@ -241,32 +270,40 @@ internal sealed class QuestJournalUtils
{
ImGui.SetTooltip("Filter Options");
}
using ImRaii.IEndObject endObject = ImRaii.Popup("QuestFilters");
if (!ImRaii.IEndObject.op_True(endObject))
PopupDisposable val = ImRaii.Popup((ImU8String)"QuestFilters");
try
{
return;
}
if ((0u | (ImGui.Checkbox("Available Only", ref journalUi.Filter.AvailableOnly) ? 1u : 0u) | (ImGui.Checkbox("Hide Without Quest Paths", ref journalUi.Filter.HideNoPaths) ? 1u : 0u) | (ImGui.Checkbox("Hide Unobtainable", ref journalUi.Filter.HideUnobtainable) ? 1u : 0u)) != 0)
{
journalUi.UpdateFilter();
}
if (journalUi.Filter.AdvancedFiltersActive)
{
ImGui.Separator();
if (ImGui.Button("Clear Filters"))
if (!PopupDisposable.op_Implicit(val))
{
return;
}
if ((0u | (ImGui.Checkbox("Available Only", ref journalUi.Filter.AvailableOnly) ? 1u : 0u) | (ImGui.Checkbox("Hide Without Quest Paths", ref journalUi.Filter.HideNoPaths) ? 1u : 0u) | (ImGui.Checkbox("Hide Unobtainable", ref journalUi.Filter.HideUnobtainable) ? 1u : 0u)) != 0)
{
journalUi.Filter.AvailableOnly = false;
journalUi.Filter.HideNoPaths = false;
journalUi.Filter.HideUnobtainable = false;
journalUi.UpdateFilter();
}
if (journalUi.Filter.AdvancedFiltersActive)
{
ImGui.Separator();
if (ImGui.Button("Clear Filters"))
{
journalUi.Filter.AvailableOnly = false;
journalUi.Filter.HideNoPaths = false;
journalUi.Filter.HideUnobtainable = false;
journalUi.UpdateFilter();
}
}
}
finally
{
((PopupDisposable)(ref val)).Dispose();
}
}
public void AddAllAvailableQuests()
{
int num = _questRegistry.AllQuests.Count((Quest quest) => !quest.Root.Disabled && !_questFunctions.IsQuestRemoved(quest.Id) && _questFunctions.IsReadyToAcceptQuest(quest.Id) && !_questFunctions.IsQuestComplete(quest.Id) && !_questFunctions.IsQuestAccepted(quest.Id) && !quest.Info.IsRepeatable && quest.Info.AlliedSociety == EAlliedSociety.None && !(quest.Info is QuestInfo { MoogleDeliveryLevel: >0 }) && !_questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(quest.Id)));
using (ImRaii.Disabled(num == 0))
DisabledDisposable val = ImRaii.Disabled(num == 0);
try
{
if (ImGuiComponents.IconButton(FontAwesomeIcon.ListOl))
{
@ -275,6 +312,10 @@ internal sealed class QuestJournalUtils
_chatGui.Print($"Added {num2} {value} to priority queue.", "Questionable", 576);
}
}
finally
{
((IDisposable)val)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
object obj;

View file

@ -35,22 +35,34 @@ internal sealed class QuestRewardComponent
public void DrawItemRewards()
{
using ImRaii.IEndObject endObject = ImRaii.TabItem("Item Rewards");
if (!(!endObject))
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Item Rewards");
try
{
ImGui.Checkbox("Show rewards from seasonal event quests", ref _showEventRewards);
ImGui.Spacing();
ImGui.BulletText("Only untradeable items are listed (e.g. the Wind-up Airship can be sold on the market board).");
DrawGroup("Mounts", EItemRewardType.Mount);
DrawGroup("Minions", EItemRewardType.Minion);
DrawGroup("Orchestrion Rolls", EItemRewardType.OrchestrionRoll);
DrawGroup("Triple Triad Cards", EItemRewardType.TripleTriadCard);
DrawGroup("Fashion Accessories", EItemRewardType.FashionAccessory);
if (!(!val))
{
ImGui.Checkbox("Show rewards from seasonal event quests", ref _showEventRewards);
ImGui.Spacing();
ImGui.BulletText("Only untradeable items are listed (e.g. the Wind-up Airship can be sold on the market board).");
DrawGroup("Mounts", EItemRewardType.Mount);
DrawGroup("Minions", EItemRewardType.Minion);
DrawGroup("Orchestrion Rolls", EItemRewardType.OrchestrionRoll);
DrawGroup("Triple Triad Cards", EItemRewardType.TripleTriadCard);
DrawGroup("Fashion Accessories", EItemRewardType.FashionAccessory);
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
}
private void DrawGroup(string label, EItemRewardType type)
{
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
ImU8String label2 = new ImU8String(9, 2);
label2.AppendFormatted(label);
label2.AppendLiteral("###Reward");
@ -82,18 +94,30 @@ internal sealed class QuestRewardComponent
{
continue;
}
using ImRaii.IEndObject endObject = ImRaii.Tooltip();
if (!(!endObject))
TooltipDisposable val = ImRaii.Tooltip();
try
{
ImU8String text2 = new ImU8String(15, 1);
text2.AppendLiteral("Obtained from: ");
text2.AppendFormatted(questInfo.Name);
ImGui.Text(text2);
using (ImRaii.PushIndent())
if (((TooltipDisposable)(ref val)).Alive)
{
_questTooltipComponent.DrawInner(questInfo, showItemRewards: false);
ImU8String text2 = new ImU8String(15, 1);
text2.AppendLiteral("Obtained from: ");
text2.AppendFormatted(questInfo.Name);
ImGui.Text(text2);
IndentDisposable val2 = ImRaii.PushIndent(1, true);
try
{
_questTooltipComponent.DrawInner(questInfo, showItemRewards: false);
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
}
finally
{
((TooltipDisposable)(ref val)).Dispose();
}
}
}
}