1
0
Fork 0
forked from aly/qstbak

muffin v7.5.1

This commit is contained in:
alydev 2026-05-01 08:59:48 +10:00
parent a6481e7b9a
commit 965a736f84
59 changed files with 4112 additions and 5059 deletions

View file

@ -51,175 +51,136 @@ internal sealed class BlacklistConfigComponent : ConfigComponent
public override void DrawTab()
{
//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_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Blacklist###QuestBlacklist");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Blacklist###QuestBlacklist");
if (!tabItemDisposable)
{
if (!val)
return;
}
ImGui.TextWrapped("Blacklisted quests will never be automatically picked up or executed by Questionable.");
ImGui.TextWrapped("Use this to permanently skip specific quests you don't want to do.");
ImGui.Separator();
DrawCurrentlyAcceptedQuests();
HashSet<ElementId> blacklistedQuests = base.Configuration.General.BlacklistedQuests;
ImU8String text = new ImU8String(22, 1);
text.AppendLiteral("Blacklisted Quests (");
text.AppendFormatted(blacklistedQuests.Count);
text.AppendLiteral("):");
ImGui.Text(text);
using (ImRaii.ChildDisposable childDisposable = ImRaii.Child("BlacklistedQuestsList", new Vector2(-1f, 200f), border: true))
{
if ((bool)childDisposable)
{
return;
}
ImGui.TextWrapped("Blacklisted quests will never be automatically picked up or executed by Questionable.");
ImGui.TextWrapped("Use this to permanently skip specific quests you don't want to do.");
ImGui.Separator();
DrawCurrentlyAcceptedQuests();
HashSet<ElementId> blacklistedQuests = base.Configuration.General.BlacklistedQuests;
ImU8String text = new ImU8String(22, 1);
text.AppendLiteral("Blacklisted Quests (");
text.AppendFormatted(blacklistedQuests.Count);
text.AppendLiteral("):");
ImGui.Text(text);
ChildDisposable val2 = ImRaii.Child((ImU8String)"BlacklistedQuestsList", new Vector2(-1f, 200f), true);
try
{
if (ChildDisposable.op_Implicit(val2))
if (blacklistedQuests.Count > 0)
{
if (blacklistedQuests.Count > 0)
ElementId elementId = null;
int num = 0;
foreach (ElementId item in blacklistedQuests.OrderBy((ElementId x) => x.ToString()))
{
ElementId elementId = null;
int num = 0;
foreach (ElementId item in blacklistedQuests.OrderBy((ElementId x) => x.ToString()))
if (!_questRegistry.TryGetQuest(item, out Quest quest))
{
IdDisposable val3;
if (!_questRegistry.TryGetQuest(item, out Quest quest))
ImU8String id = new ImU8String(5, 1);
id.AppendLiteral("Quest");
id.AppendFormatted(item);
using (ImRaii.PushId(id))
{
ImU8String imU8String = new ImU8String(5, 1);
imU8String.AppendLiteral("Quest");
imU8String.AppendFormatted(item);
val3 = ImRaii.PushId(imU8String, true);
try
{
ImGui.AlignTextToFramePadding();
Vector4 col = new Vector4(0.7f, 0.7f, 0.7f, 1f);
ImU8String text2 = new ImU8String(16, 1);
text2.AppendLiteral("Unknown Quest (");
text2.AppendFormatted(item);
text2.AppendLiteral(")");
ImGui.TextColored(in col, text2);
ImGui.SameLine(ImGui.GetContentRegionAvail().X - ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 2f);
if (ImGuiComponents.IconButton($"##Remove{num}", FontAwesomeIcon.Times))
{
elementId = item;
}
}
finally
{
((IDisposable)val3)?.Dispose();
}
num++;
continue;
}
ImU8String imU8String2 = new ImU8String(5, 1);
imU8String2.AppendLiteral("Quest");
imU8String2.AppendFormatted(item);
val3 = ImRaii.PushId(imU8String2, true);
try
{
(Vector4, FontAwesomeIcon, string) questStyle = _uiUtils.GetQuestStyle(item);
bool flag;
using (_pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push())
{
ImGui.AlignTextToFramePadding();
ImGui.TextColored(in questStyle.Item1, questStyle.Item2.ToIconString());
flag = ImGui.IsItemHovered();
}
ImGui.SameLine();
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(quest.Info.Name);
flag |= ImGui.IsItemHovered();
if (flag)
{
_questTooltipComponent.Draw(quest.Info);
}
Vector4 col = new Vector4(0.7f, 0.7f, 0.7f, 1f);
ImU8String text2 = new ImU8String(16, 1);
text2.AppendLiteral("Unknown Quest (");
text2.AppendFormatted(item);
text2.AppendLiteral(")");
ImGui.TextColored(in col, text2);
ImGui.SameLine(ImGui.GetContentRegionAvail().X - ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 2f);
if (ImGuiComponents.IconButton($"##Remove{num}", FontAwesomeIcon.Times))
{
elementId = item;
}
if (ImGui.IsItemHovered())
{
ImGui.SetTooltip("Remove from blacklist");
}
}
finally
{
((IDisposable)val3)?.Dispose();
}
num++;
continue;
}
if (elementId != null)
ImU8String id2 = new ImU8String(5, 1);
id2.AppendLiteral("Quest");
id2.AppendFormatted(item);
using (ImRaii.PushId(id2))
{
base.Configuration.General.BlacklistedQuests.Remove(elementId);
Save();
(Vector4, FontAwesomeIcon, string) questStyle = _uiUtils.GetQuestStyle(item);
bool flag;
using (_pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push())
{
ImGui.AlignTextToFramePadding();
ImGui.TextColored(in questStyle.Item1, questStyle.Item2.ToIconString());
flag = ImGui.IsItemHovered();
}
ImGui.SameLine();
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(quest.Info.Name);
flag |= ImGui.IsItemHovered();
if (flag)
{
_questTooltipComponent.Draw(quest.Info);
}
ImGui.SameLine(ImGui.GetContentRegionAvail().X - ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 2f);
if (ImGuiComponents.IconButton($"##Remove{num}", FontAwesomeIcon.Times))
{
elementId = item;
}
if (ImGui.IsItemHovered())
{
ImGui.SetTooltip("Remove from blacklist");
}
}
num++;
}
else
if (elementId != null)
{
ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(0.7f, 0.7f, 0.7f, 1f));
ImGui.TextWrapped("No quests blacklisted. Use the dropdown above or add from currently accepted quests.");
ImGui.PopStyleColor();
base.Configuration.General.BlacklistedQuests.Remove(elementId);
Save();
}
}
}
finally
{
((ChildDisposable)(ref val2)).Dispose();
}
_questSelector.DrawSelection();
if (blacklistedQuests.Count <= 0)
{
return;
}
DisabledDisposable val4 = ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl));
try
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, "Clear All"))
else
{
base.Configuration.General.BlacklistedQuests.Clear();
Save();
ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(0.7f, 0.7f, 0.7f, 1f));
ImGui.TextWrapped("No quests blacklisted. Use the dropdown above or add from currently accepted quests.");
ImGui.PopStyleColor();
}
}
finally
{
((IDisposable)val4)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("Hold CTRL to enable this button.");
}
}
finally
_questSelector.DrawSelection();
if (blacklistedQuests.Count <= 0)
{
((TabItemDisposable)(ref val)).Dispose();
return;
}
using (ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl)))
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, "Clear All"))
{
base.Configuration.General.BlacklistedQuests.Clear();
Save();
}
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("Hold CTRL to enable this button.");
}
}
private void DrawCurrentlyAcceptedQuests()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
List<Quest> currentlyAcceptedQuests = GetCurrentlyAcceptedQuests();
ImGui.Text("Currently Accepted Quests:");
ChildDisposable val = ImRaii.Child((ImU8String)"AcceptedQuestsList", new Vector2(-1f, 100f), true);
try
using (ImRaii.ChildDisposable childDisposable = ImRaii.Child("AcceptedQuestsList", new Vector2(-1f, 100f), border: true))
{
if (ChildDisposable.op_Implicit(val))
if ((bool)childDisposable)
{
if (currentlyAcceptedQuests.Count > 0)
{
foreach (Quest item in currentlyAcceptedQuests)
{
ImU8String imU8String = new ImU8String(13, 1);
imU8String.AppendLiteral("AcceptedQuest");
imU8String.AppendFormatted(item.Id);
IdDisposable val2 = ImRaii.PushId(imU8String, true);
try
ImU8String id = new ImU8String(13, 1);
id.AppendLiteral("AcceptedQuest");
id.AppendFormatted(item.Id);
using (ImRaii.PushId(id))
{
(Vector4, FontAwesomeIcon, string) questStyle = _uiUtils.GetQuestStyle(item.Id);
bool flag = false;
@ -238,8 +199,7 @@ internal sealed class BlacklistConfigComponent : ConfigComponent
_questTooltipComponent.Draw(item.Info);
}
ImGui.SameLine(ImGui.GetContentRegionAvail().X - ImGui.CalcTextSize(FontAwesomeIcon.Ban.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 2f);
DisabledDisposable val3 = ImRaii.Disabled(flag2);
try
using (ImRaii.Disabled(flag2))
{
if (ImGuiComponents.IconButton($"##Blacklist{item.Id}", FontAwesomeIcon.Ban))
{
@ -247,19 +207,11 @@ internal sealed class BlacklistConfigComponent : ConfigComponent
Save();
}
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip(flag2 ? "Quest already blacklisted" : "Add this quest to blacklist");
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
}
else
@ -270,10 +222,6 @@ internal sealed class BlacklistConfigComponent : ConfigComponent
}
}
}
finally
{
((ChildDisposable)(ref val)).Dispose();
}
ImGui.Spacing();
}

View file

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using Dalamud.Bindings.ImGui;
using Dalamud.Game.Text;
@ -59,52 +58,31 @@ internal abstract class ConfigComponent
protected static void DrawNotes(bool enabledByDefault, IEnumerable<string> notes)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
ColorDisposable val = new ColorDisposable();
try
using ImRaii.ColorDisposable colorDisposable = new ImRaii.ColorDisposable();
colorDisposable.Push(ImGuiCol.TextDisabled, (!enabledByDefault) ? ImGuiColors.DalamudYellow : ImGuiColors.ParsedBlue);
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
val.Push(ImGuiCol.TextDisabled, (!enabledByDefault) ? ImGuiColors.DalamudYellow : ImGuiColors.ParsedBlue, true);
ImGui.SameLine();
FontDisposable val2 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
if (!enabledByDefault)
{
if (!enabledByDefault)
{
ImGui.TextDisabled(FontAwesomeIcon.ExclamationTriangle.ToIconString());
}
else
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
ImGui.TextDisabled(FontAwesomeIcon.ExclamationTriangle.ToIconString());
}
finally
else
{
((IDisposable)val2)?.Dispose();
}
if (!ImGui.IsItemHovered())
{
return;
}
TooltipDisposable val3 = ImRaii.Tooltip();
try
{
ImGui.TextColored(ImGuiColors.DalamudYellow, "While testing, the following issues have been found:");
foreach (string note in notes)
{
ImGui.BulletText(note);
}
}
finally
{
((TooltipDisposable)(ref val3)).Dispose();
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
}
finally
if (!ImGui.IsItemHovered())
{
((IDisposable)val)?.Dispose();
return;
}
using (ImRaii.Tooltip())
{
ImGui.TextColored(ImGuiColors.DalamudYellow, "While testing, the following issues have been found:");
foreach (string note in notes)
{
ImGui.BulletText(note);
}
}
}
}

View file

@ -1,4 +1,3 @@
using System;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
@ -16,150 +15,118 @@ internal sealed class DebugConfigComponent : ConfigComponent
public override void DrawTab()
{
//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)"Advanced###Debug");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Advanced###Debug");
if (!tabItemDisposable)
{
if (!val)
return;
}
ImGui.TextColored(ImGuiColors.DalamudRed, "Enabling any option here may cause unexpected behavior. Use at your own risk.");
ImGui.Separator();
DrawChocoboSettings();
ImGui.Separator();
bool v = base.Configuration.Advanced.DebugOverlay;
if (ImGui.Checkbox("Enable debug overlay", ref v))
{
base.Configuration.Advanced.DebugOverlay = v;
Save();
}
using (ImRaii.Disabled(!v))
{
using (ImRaii.PushIndent())
{
return;
}
ImGui.TextColored(ImGuiColors.DalamudRed, "Enabling any option here may cause unexpected behavior. Use at your own risk.");
ImGui.Separator();
DrawChocoboSettings();
ImGui.Separator();
bool v = base.Configuration.Advanced.DebugOverlay;
if (ImGui.Checkbox("Enable debug overlay", ref v))
{
base.Configuration.Advanced.DebugOverlay = v;
Save();
}
DisabledDisposable val2 = ImRaii.Disabled(!v);
IndentDisposable val3;
try
{
val3 = ImRaii.PushIndent(1, true);
try
bool v2 = base.Configuration.Advanced.CombatDataOverlay;
if (ImGui.Checkbox("Enable combat data overlay", ref v2))
{
bool v2 = base.Configuration.Advanced.CombatDataOverlay;
if (ImGui.Checkbox("Enable combat data overlay", ref v2))
{
base.Configuration.Advanced.CombatDataOverlay = v2;
Save();
}
}
finally
{
((IDisposable)val3)?.Dispose();
base.Configuration.Advanced.CombatDataOverlay = v2;
Save();
}
}
finally
}
bool v3 = base.Configuration.Advanced.NeverFly;
if (ImGui.Checkbox("Disable flying (even if unlocked for the zone)", ref v3))
{
base.Configuration.Advanced.NeverFly = v3;
Save();
}
bool v4 = base.Configuration.Advanced.AdditionalStatusInformation;
if (ImGui.Checkbox("Draw additional status information", ref v4))
{
base.Configuration.Advanced.AdditionalStatusInformation = v4;
Save();
}
bool v5 = base.Configuration.Advanced.DisablePartyWatchdog;
if (ImGui.Checkbox("Disable Party Watchdog", ref v5))
{
base.Configuration.Advanced.DisablePartyWatchdog = v5;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("The Party Watchdog stops Questionable when entering certain zones with other party members, or when entering unsupported content. Disabling this allows Questionable to continue working while in a party, but may cause unexpected behavior in group content.");
ImGui.Separator();
ImGui.Text("AutoDuty Settings");
using (ImRaii.PushIndent())
{
ImGui.AlignTextToFramePadding();
bool v6 = base.Configuration.Advanced.DisableAutoDutyBareMode;
if (ImGui.Checkbox("Use Pre-Loop/Loop/Post-Loop settings", ref v6))
{
((IDisposable)val2)?.Dispose();
}
bool v3 = base.Configuration.Advanced.NeverFly;
if (ImGui.Checkbox("Disable flying (even if unlocked for the zone)", ref v3))
{
base.Configuration.Advanced.NeverFly = v3;
Save();
}
bool v4 = base.Configuration.Advanced.AdditionalStatusInformation;
if (ImGui.Checkbox("Draw additional status information", ref v4))
{
base.Configuration.Advanced.AdditionalStatusInformation = v4;
Save();
}
bool v5 = base.Configuration.Advanced.DisablePartyWatchdog;
if (ImGui.Checkbox("Disable Party Watchdog", ref v5))
{
base.Configuration.Advanced.DisablePartyWatchdog = v5;
base.Configuration.Advanced.DisableAutoDutyBareMode = v6;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("The Party Watchdog stops Questionable when entering certain zones with other party members, or when entering unsupported content. Disabling this allows Questionable to continue working while in a party, but may cause unexpected behavior in group content.");
ImGui.Separator();
ImGui.Text("AutoDuty Settings");
val3 = ImRaii.PushIndent(1, true);
try
{
ImGui.AlignTextToFramePadding();
bool v6 = base.Configuration.Advanced.DisableAutoDutyBareMode;
if (ImGui.Checkbox("Use Pre-Loop/Loop/Post-Loop settings", ref v6))
{
base.Configuration.Advanced.DisableAutoDutyBareMode = v6;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Typically, the loop settings for AutoDuty are disabled when running dungeons with Questionable, since they can cause issues (or even shut down your PC).");
}
finally
{
((IDisposable)val3)?.Dispose();
}
ImGui.Separator();
ImGui.Text("Quest/Interaction Skips");
val3 = ImRaii.PushIndent(1, true);
try
{
bool v7 = base.Configuration.Advanced.SkipAetherCurrents;
if (ImGui.Checkbox("Don't pick up aether currents/aether current quests", ref v7))
{
base.Configuration.Advanced.SkipAetherCurrents = v7;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("If not done during the MSQ by Questionable, you have to manually pick up any missed aether currents/quests. There is no way to automatically pick up all missing aether currents.");
bool v8 = base.Configuration.Advanced.SkipClassJobQuests;
if (ImGui.Checkbox("Don't pick up class/job/role quests", ref v8))
{
base.Configuration.Advanced.SkipClassJobQuests = v8;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Class and job skills for A Realm Reborn, Heavensward and (for the Lv70 skills) Stormblood are locked behind quests. Not recommended if you plan on queueing for instances with duty finder/party finder.\n\nNote: This setting is ignored for the first class/job quest if your character is not high enough level to start the level 4 MSQ.");
bool v9 = base.Configuration.Advanced.SkipARealmRebornHardModePrimals;
if (ImGui.Checkbox("Don't pick up ARR hard mode primal quests", ref v9))
{
base.Configuration.Advanced.SkipARealmRebornHardModePrimals = v9;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Hard mode Ifrit/Garuda/Titan are required for the Patch 2.5 quest 'Good Intentions' and to start Heavensward.");
bool v10 = base.Configuration.Advanced.SkipCrystalTowerRaids;
if (ImGui.Checkbox("Don't pick up Crystal Tower quests", ref v10))
{
base.Configuration.Advanced.SkipCrystalTowerRaids = v10;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Crystal Tower raids are required for the Patch 2.55 quest 'A Time to Every Purpose' and to start Heavensward.");
bool v11 = base.Configuration.Advanced.PreventQuestCompletion;
if (ImGui.Checkbox("Prevent quest completion", ref v11))
{
base.Configuration.Advanced.PreventQuestCompletion = v11;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("When enabled, Questionable will not attempt to turn-in and complete quests. This will do everything automatically except the final turn-in step.");
}
finally
{
((IDisposable)val3)?.Dispose();
}
ImGuiComponents.HelpMarker("Typically, the loop settings for AutoDuty are disabled when running dungeons with Questionable, since they can cause issues (or even shut down your PC).");
}
finally
ImGui.Separator();
ImGui.Text("Quest/Interaction Skips");
using (ImRaii.PushIndent())
{
((TabItemDisposable)(ref val)).Dispose();
bool v7 = base.Configuration.Advanced.SkipAetherCurrents;
if (ImGui.Checkbox("Don't pick up aether currents/aether current quests", ref v7))
{
base.Configuration.Advanced.SkipAetherCurrents = v7;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("If not done during the MSQ by Questionable, you have to manually pick up any missed aether currents/quests. There is no way to automatically pick up all missing aether currents.");
bool v8 = base.Configuration.Advanced.SkipClassJobQuests;
if (ImGui.Checkbox("Don't pick up class/job/role quests", ref v8))
{
base.Configuration.Advanced.SkipClassJobQuests = v8;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Class and job skills for A Realm Reborn, Heavensward and (for the Lv70 skills) Stormblood are locked behind quests. Not recommended if you plan on queueing for instances with duty finder/party finder.\n\nNote: This setting is ignored for the first class/job quest if your character is not high enough level to start the level 4 MSQ.");
bool v9 = base.Configuration.Advanced.SkipARealmRebornHardModePrimals;
if (ImGui.Checkbox("Don't pick up ARR hard mode primal quests", ref v9))
{
base.Configuration.Advanced.SkipARealmRebornHardModePrimals = v9;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Hard mode Ifrit/Garuda/Titan are required for the Patch 2.5 quest 'Good Intentions' and to start Heavensward.");
bool v10 = base.Configuration.Advanced.SkipCrystalTowerRaids;
if (ImGui.Checkbox("Don't pick up Crystal Tower quests", ref v10))
{
base.Configuration.Advanced.SkipCrystalTowerRaids = v10;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Crystal Tower raids are required for the Patch 2.55 quest 'A Time to Every Purpose' and to start Heavensward.");
bool v11 = base.Configuration.Advanced.PreventQuestCompletion;
if (ImGui.Checkbox("Prevent quest completion", ref v11))
{
base.Configuration.Advanced.PreventQuestCompletion = v11;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("When enabled, Questionable will not attempt to turn-in and complete quests. This will do everything automatically except the final turn-in step.");
}
}
private void DrawChocoboSettings()
{
ImGui.Text("Chocobo Settings");
IndentDisposable val = ImRaii.PushIndent(1, true);
try
using (ImRaii.PushIndent())
{
ImGui.AlignTextToFramePadding();
ImGui.Text("Chocobo Name:");
@ -180,10 +147,6 @@ internal sealed class DebugConfigComponent : ConfigComponent
ImGui.SameLine();
ImGuiComponents.HelpMarker("The name to give your chocobo during the 'My Little Chocobo' quest.\nMust be 2-20 characters. First letter will be capitalized.\nIf left empty, defaults to 'Kweh'.");
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private static string FormatChocoboName(string name)

View file

@ -106,398 +106,285 @@ internal sealed class DutyConfigComponent : ConfigComponent
public override void DrawTab()
{
//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_0260: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_0267: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_0282: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0310: Unknown result type (might be due to invalid IL or missing references)
//IL_0315: Unknown result type (might be due to invalid IL or missing references)
//IL_0317: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Duties###Duties");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Duties###Duties");
if (!tabItemDisposable)
{
if (!val)
return;
}
bool v = base.Configuration.Duties.RunInstancedContentWithAutoDuty;
if (ImGui.Checkbox("Run instanced content with AutoDuty and BossMod", ref v))
{
base.Configuration.Duties.RunInstancedContentWithAutoDuty = v;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("The combat module used for this is configured by AutoDuty, ignoring whichever selection you've made in Questionable's \"General\" configuration.");
using (ImRaii.Disabled(!v))
{
using (ImRaii.PushIndent(ImGui.GetFrameHeight() + ImGui.GetStyle().ItemInnerSpacing.X))
{
return;
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed))
{
ImGui.TextUnformatted("Work in Progress:");
ImGui.BulletText("Duty Support mode is limited.");
ImGui.BulletText("Unsynced modes require being significantly overleveled or having a high-level party member.");
ImGui.BulletText("Most players will need to use Duty Support mode when progressing normally through the game.");
}
}
bool v = base.Configuration.Duties.RunInstancedContentWithAutoDuty;
if (ImGui.Checkbox("Run instanced content with AutoDuty and BossMod", ref v))
ImGui.Spacing();
bool v2 = base.Configuration.Duties.RunLevelingModeWhenUnderleveled;
if (ImGui.Checkbox("Run AutoDuty Leveling mode when underleveled for MSQ", ref v2))
{
base.Configuration.Duties.RunInstancedContentWithAutoDuty = v;
base.Configuration.Duties.RunLevelingModeWhenUnderleveled = v2;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("The combat module used for this is configured by AutoDuty, ignoring whichever selection you've made in Questionable's \"General\" configuration.");
DisabledDisposable val2 = ImRaii.Disabled(!v);
try
ImGuiComponents.HelpMarker("When enabled, Questionable will automatically run AutoDuty's Leveling mode when your character is underleveled for the next Main Scenario Quest.\n\nLeveling mode runs the highest available dungeon for your level to gain XP.\n\nThis is useful for characters without the Road to 90 XP buff who may not have enough XP to continue the MSQ.");
ImGui.Spacing();
ImGui.Text("Default duty mode:");
ImGui.SameLine();
int currentItem = (int)base.Configuration.Duties.DefaultDutyMode;
ImGui.SetNextItemWidth(200f);
if (ImGui.Combo((ImU8String)"##DefaultDutyMode", ref currentItem, (ReadOnlySpan<string>)DutyModeLabels, DutyModeLabels.Length))
{
IndentDisposable val3 = ImRaii.PushIndent(ImGui.GetFrameHeight() + ImGui.GetStyle().ItemInnerSpacing.X, true, true);
try
{
ColorDisposable val4 = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, true);
try
{
ImGui.TextUnformatted("Work in Progress:");
ImGui.BulletText("Duty Support mode is limited.");
ImGui.BulletText("Unsynced modes require being significantly overleveled or having a high-level party member.");
ImGui.BulletText("Most players will need to use Duty Support mode when progressing normally through the game.");
}
finally
{
((IDisposable)val4)?.Dispose();
}
}
finally
{
((IDisposable)val3)?.Dispose();
}
ImGui.Spacing();
bool v2 = base.Configuration.Duties.RunLevelingModeWhenUnderleveled;
if (ImGui.Checkbox("Run AutoDuty Leveling mode when underleveled for MSQ", ref v2))
{
base.Configuration.Duties.RunLevelingModeWhenUnderleveled = v2;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("When enabled, Questionable will automatically run AutoDuty's Leveling mode when your character is underleveled for the next Main Scenario Quest.\n\nLeveling mode runs the highest available dungeon for your level to gain XP.\n\nThis is useful for characters without the Road to 90 XP buff who may not have enough XP to continue the MSQ.");
ImGui.Spacing();
ImGui.Text("Default duty mode:");
ImGui.SameLine();
int currentItem = (int)base.Configuration.Duties.DefaultDutyMode;
ImGui.SetNextItemWidth(200f);
if (ImGui.Combo((ImU8String)"##DefaultDutyMode", ref currentItem, (ReadOnlySpan<string>)DutyModeLabels, DutyModeLabels.Length))
{
base.Configuration.Duties.DefaultDutyMode = (EDutyMode)currentItem;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("\ufffd Duty Support: Run with NPC party members (level synced)\n\ufffd Unsync (Solo): Run alone at your current level (unsynced)\n\ufffd Unsync (Party): Run with your party at current level (unsynced)\n\nYou can override this setting for individual duties below.");
base.Configuration.Duties.DefaultDutyMode = (EDutyMode)currentItem;
Save();
}
finally
ImGui.SameLine();
ImGuiComponents.HelpMarker("\ufffd Duty Support: Run with NPC party members (level synced)\n\ufffd Unsync (Solo): Run alone at your current level (unsynced)\n\ufffd Unsync (Party): Run with your party at current level (unsynced)\n\nYou can override this setting for individual duties below.");
}
ImGui.Separator();
using (ImRaii.Disabled(!v))
{
ImGui.Text("Questionable includes a default list of duties that work if AutoDuty and BossMod are installed.");
ImGui.Text("The included list of duties can change with each update, and is based on the following spreadsheet:");
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.GlobeEurope, "Open AutoDuty spreadsheet"))
{
((IDisposable)val2)?.Dispose();
Util.OpenLink("https://docs.google.com/spreadsheets/d/151RlpqRcCpiD_VbQn6Duf-u-S71EP7d0mx3j1PDNoNA/edit?pli=1#gid=0");
}
ImGui.Separator();
val2 = ImRaii.Disabled(!v);
try
ImGui.Text("You can override the settings for each individual duty:");
using ImRaii.TabBarDisposable tabBarDisposable = ImRaii.TabBar("DutyTypeTabs");
if ((bool)tabBarDisposable)
{
ImGui.Text("Questionable includes a default list of duties that work if AutoDuty and BossMod are installed.");
ImGui.Text("The included list of duties can change with each update, and is based on the following spreadsheet:");
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.GlobeEurope, "Open AutoDuty spreadsheet"))
using (ImRaii.TabItemDisposable tabItemDisposable2 = ImRaii.TabItem("Dungeons"))
{
Util.OpenLink("https://docs.google.com/spreadsheets/d/151RlpqRcCpiD_VbQn6Duf-u-S71EP7d0mx3j1PDNoNA/edit?pli=1#gid=0");
}
ImGui.Separator();
ImGui.Text("You can override the settings for each individual duty:");
TabBarDisposable val5 = ImRaii.TabBar((ImU8String)"DutyTypeTabs");
try
{
if (TabBarDisposable.op_Implicit(val5))
if ((bool)tabItemDisposable2)
{
TabItemDisposable val6 = ImRaii.TabItem((ImU8String)"Dungeons");
try
{
if (TabItemDisposable.op_Implicit(val6))
{
DrawConfigTable(v, _contentFinderConditionNames);
}
}
finally
{
((TabItemDisposable)(ref val6)).Dispose();
}
TabItemDisposable val7 = ImRaii.TabItem((ImU8String)"Trials");
try
{
if (TabItemDisposable.op_Implicit(val7))
{
DrawConfigTable(v, _allTrialNames);
}
}
finally
{
((TabItemDisposable)(ref val7)).Dispose();
}
TabItemDisposable val8 = ImRaii.TabItem((ImU8String)"Normal Raids");
try
{
if (TabItemDisposable.op_Implicit(val8))
{
DrawConfigTable(v, _allNormalRaidNames);
}
}
finally
{
((TabItemDisposable)(ref val8)).Dispose();
}
TabItemDisposable val9 = ImRaii.TabItem((ImU8String)"Alliance Raids");
try
{
if (TabItemDisposable.op_Implicit(val9))
{
DrawConfigTable(v, _allAllianceRaidNames);
}
}
finally
{
((TabItemDisposable)(ref val9)).Dispose();
}
DrawConfigTable(v, _contentFinderConditionNames);
}
DrawEnableAllButton();
ImGui.SameLine();
DrawClipboardButtons();
ImGui.SameLine();
DrawResetButton();
}
finally
using (ImRaii.TabItemDisposable tabItemDisposable3 = ImRaii.TabItem("Trials"))
{
((TabBarDisposable)(ref val5)).Dispose();
if ((bool)tabItemDisposable3)
{
DrawConfigTable(v, _allTrialNames);
}
}
using (ImRaii.TabItemDisposable tabItemDisposable4 = ImRaii.TabItem("Normal Raids"))
{
if ((bool)tabItemDisposable4)
{
DrawConfigTable(v, _allNormalRaidNames);
}
}
using ImRaii.TabItemDisposable tabItemDisposable5 = ImRaii.TabItem("Alliance Raids");
if ((bool)tabItemDisposable5)
{
DrawConfigTable(v, _allAllianceRaidNames);
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
DrawEnableAllButton();
ImGui.SameLine();
DrawClipboardButtons();
ImGui.SameLine();
DrawResetButton();
}
}
private void DrawConfigTable(bool runInstancedContentWithAutoDuty, Dictionary<EExpansionVersion, List<DutyInfo>> contentByExpansion)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
ChildDisposable val = ImRaii.Child((ImU8String)"DutyConfiguration", new Vector2(725f, 400f), true);
try
using ImRaii.ChildDisposable childDisposable = ImRaii.Child("DutyConfiguration", new Vector2(725f, 400f), border: true);
if (!childDisposable)
{
if (!val)
return;
}
EExpansionVersion[] values = Enum.GetValues<EExpansionVersion>();
for (int i = 0; i < values.Length; i++)
{
EExpansionVersion eExpansionVersion = values[i];
(int enabledCount, int totalCount) dutyCountsForExpansion = GetDutyCountsForExpansion(eExpansionVersion, contentByExpansion);
int item = dutyCountsForExpansion.enabledCount;
int item2 = dutyCountsForExpansion.totalCount;
string obj = ((item2 > 0) ? $"{eExpansionVersion.ToFriendlyString()} ({item}/{item2})" : eExpansionVersion.ToFriendlyString());
string key = eExpansionVersion.ToString();
ImGui.SetNextItemOpen(base.Configuration.Duties.ExpansionHeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
return;
}
EExpansionVersion[] values = Enum.GetValues<EExpansionVersion>();
for (int i = 0; i < values.Length; i++)
{
EExpansionVersion eExpansionVersion = values[i];
(int enabledCount, int totalCount) dutyCountsForExpansion = GetDutyCountsForExpansion(eExpansionVersion, contentByExpansion);
int item = dutyCountsForExpansion.enabledCount;
int item2 = dutyCountsForExpansion.totalCount;
string obj = ((item2 > 0) ? $"{eExpansionVersion.ToFriendlyString()} ({item}/{item2})" : eExpansionVersion.ToFriendlyString());
string key = eExpansionVersion.ToString();
ImGui.SetNextItemOpen(base.Configuration.Duties.ExpansionHeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
if (!base.Configuration.Duties.ExpansionHeaderStates.GetValueOrDefault(key, defaultValue: false))
{
if (!base.Configuration.Duties.ExpansionHeaderStates.GetValueOrDefault(key, defaultValue: false))
base.Configuration.Duties.ExpansionHeaderStates[key] = true;
Save();
}
ImU8String table = new ImU8String(6, 1);
table.AppendLiteral("Duties");
table.AppendFormatted(eExpansionVersion);
using ImRaii.TableDisposable tableDisposable = ImRaii.Table(table, 3, ImGuiTableFlags.SizingFixedFit);
if (!(bool)tableDisposable)
{
continue;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.WidthStretch);
ImGui.TableSetupColumn("Enabled", ImGuiTableColumnFlags.WidthFixed, 200f);
ImGui.TableSetupColumn("Mode", ImGuiTableColumnFlags.WidthFixed, 150f);
if (!contentByExpansion.TryGetValue(eExpansionVersion, out List<DutyInfo> value))
{
continue;
}
foreach (DutyInfo item3 in value)
{
item3.Deconstruct(out uint CfcId, out uint TerritoryId, out string Name);
uint num = CfcId;
uint value2 = TerritoryId;
string text = Name;
DutyOptions dutyOptions;
bool flag = _questRegistry.TryGetDutyByContentFinderConditionId(num, out dutyOptions);
ImGui.TableNextRow();
string[] array;
int currentItem;
if (flag)
{
base.Configuration.Duties.ExpansionHeaderStates[key] = true;
Save();
array = (dutyOptions.Enabled ? SupportedCfcOptions : UnsupportedCfcOptions);
currentItem = 0;
if (base.Configuration.Duties.WhitelistedDutyCfcIds.Contains(num))
{
currentItem = 1;
}
if (base.Configuration.Duties.BlacklistedDutyCfcIds.Contains(num))
{
currentItem = 2;
}
}
ImU8String imU8String = new ImU8String(6, 1);
imU8String.AppendLiteral("Duties");
imU8String.AppendFormatted(eExpansionVersion);
TableDisposable val2 = ImRaii.Table(imU8String, 3, ImGuiTableFlags.SizingFixedFit);
try
else
{
if (!TableDisposable.op_Implicit(val2))
array = new string[2] { "Disabled", "Enabled" };
currentItem = (base.Configuration.Duties.WhitelistedDutyCfcIds.Contains(num) ? 1 : 0);
}
if (ImGui.TableNextColumn())
{
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(text);
if (ImGui.IsItemHovered() && base.Configuration.Advanced.AdditionalStatusInformation)
{
continue;
}
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.WidthStretch);
ImGui.TableSetupColumn("Enabled", ImGuiTableColumnFlags.WidthFixed, 200f);
ImGui.TableSetupColumn("Mode", ImGuiTableColumnFlags.WidthFixed, 150f);
if (!contentByExpansion.TryGetValue(eExpansionVersion, out List<DutyInfo> value))
{
continue;
}
foreach (DutyInfo item3 in value)
{
item3.Deconstruct(out uint CfcId, out uint TerritoryId, out string Name);
uint num = CfcId;
uint value2 = TerritoryId;
string text = Name;
DutyOptions dutyOptions;
bool flag = _questRegistry.TryGetDutyByContentFinderConditionId(num, out dutyOptions);
ImGui.TableNextRow();
string[] array;
int currentItem;
if (flag)
using ImRaii.TooltipDisposable tooltipDisposable = ImRaii.Tooltip();
if (tooltipDisposable.Alive)
{
array = (dutyOptions.Enabled ? SupportedCfcOptions : UnsupportedCfcOptions);
currentItem = 0;
if (base.Configuration.Duties.WhitelistedDutyCfcIds.Contains(num))
ImGui.TextUnformatted(text);
ImGui.Separator();
ImU8String text2 = new ImU8String(13, 1);
text2.AppendLiteral("TerritoryId: ");
text2.AppendFormatted(value2);
ImGui.BulletText(text2);
ImU8String text3 = new ImU8String(26, 1);
text3.AppendLiteral("ContentFinderConditionId: ");
text3.AppendFormatted(num);
ImGui.BulletText(text3);
if (flag)
{
currentItem = 1;
ImGui.BulletText("Duty Support: Available");
}
if (base.Configuration.Duties.BlacklistedDutyCfcIds.Contains(num))
}
}
if (runInstancedContentWithAutoDuty && !_autoDutyIpc.HasPath(num))
{
ImGuiComponents.HelpMarker("This duty is not supported by AutoDuty", FontAwesomeIcon.Times, ImGuiColors.DalamudRed);
}
else if (flag && dutyOptions.Notes.Count > 0)
{
ConfigComponent.DrawNotes(dutyOptions.Enabled, dutyOptions.Notes);
}
}
if (ImGui.TableNextColumn())
{
ImU8String id = new ImU8String(16, 1);
id.AppendLiteral("##DungeonEnabled");
id.AppendFormatted(num);
using (ImRaii.PushId(id))
{
ImGui.SetNextItemWidth(200f);
if (ImGui.Combo((ImU8String)string.Empty, ref currentItem, (ReadOnlySpan<string>)array, array.Length))
{
base.Configuration.Duties.WhitelistedDutyCfcIds.Remove(num);
base.Configuration.Duties.BlacklistedDutyCfcIds.Remove(num);
if (flag)
{
currentItem = 2;
switch (currentItem)
{
case 1:
base.Configuration.Duties.WhitelistedDutyCfcIds.Add(num);
break;
case 2:
base.Configuration.Duties.BlacklistedDutyCfcIds.Add(num);
break;
}
}
else if (currentItem == 1)
{
base.Configuration.Duties.WhitelistedDutyCfcIds.Add(num);
}
Save();
}
}
}
if (!ImGui.TableNextColumn())
{
continue;
}
ImU8String id2 = new ImU8String(13, 1);
id2.AppendLiteral("##DungeonMode");
id2.AppendFormatted(num);
using (ImRaii.PushId(id2))
{
EDutyMode value3;
bool flag2 = base.Configuration.Duties.DutyModeOverrides.TryGetValue(num, out value3);
EDutyMode num2 = (flag2 ? value3 : ((EDutyMode)(-1)));
Name = "Use Default";
string[] dutyModeLabels = DutyModeLabels;
int num3 = 0;
string[] array2 = new string[1 + dutyModeLabels.Length];
array2[num3] = Name;
num3++;
ReadOnlySpan<string> readOnlySpan = new ReadOnlySpan<string>(dutyModeLabels);
readOnlySpan.CopyTo(new Span<string>(array2).Slice(num3, readOnlySpan.Length));
num3 += readOnlySpan.Length;
string[] array3 = array2;
int currentItem2 = (int)(num2 + 1);
ImGui.SetNextItemWidth(150f);
if (ImGui.Combo((ImU8String)string.Empty, ref currentItem2, (ReadOnlySpan<string>)array3, array3.Length))
{
if (currentItem2 == 0)
{
base.Configuration.Duties.DutyModeOverrides.Remove(num);
}
else
{
array = new string[2] { "Disabled", "Enabled" };
currentItem = (base.Configuration.Duties.WhitelistedDutyCfcIds.Contains(num) ? 1 : 0);
}
if (ImGui.TableNextColumn())
{
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(text);
if (ImGui.IsItemHovered() && base.Configuration.Advanced.AdditionalStatusInformation)
{
TooltipDisposable val3 = ImRaii.Tooltip();
try
{
if (((TooltipDisposable)(ref val3)).Alive)
{
ImGui.TextUnformatted(text);
ImGui.Separator();
ImU8String text2 = new ImU8String(13, 1);
text2.AppendLiteral("TerritoryId: ");
text2.AppendFormatted(value2);
ImGui.BulletText(text2);
ImU8String text3 = new ImU8String(26, 1);
text3.AppendLiteral("ContentFinderConditionId: ");
text3.AppendFormatted(num);
ImGui.BulletText(text3);
if (flag)
{
ImGui.BulletText("Duty Support: Available");
}
}
}
finally
{
((TooltipDisposable)(ref val3)).Dispose();
}
}
if (runInstancedContentWithAutoDuty && !_autoDutyIpc.HasPath(num))
{
ImGuiComponents.HelpMarker("This duty is not supported by AutoDuty", FontAwesomeIcon.Times, (Vector4?)ImGuiColors.DalamudRed);
}
else if (flag && dutyOptions.Notes.Count > 0)
{
ConfigComponent.DrawNotes(dutyOptions.Enabled, dutyOptions.Notes);
}
}
if (ImGui.TableNextColumn())
{
ImU8String imU8String2 = new ImU8String(16, 1);
imU8String2.AppendLiteral("##DungeonEnabled");
imU8String2.AppendFormatted(num);
IdDisposable val4 = ImRaii.PushId(imU8String2, true);
try
{
ImGui.SetNextItemWidth(200f);
if (ImGui.Combo((ImU8String)string.Empty, ref currentItem, (ReadOnlySpan<string>)array, array.Length))
{
base.Configuration.Duties.WhitelistedDutyCfcIds.Remove(num);
base.Configuration.Duties.BlacklistedDutyCfcIds.Remove(num);
if (flag)
{
switch (currentItem)
{
case 1:
base.Configuration.Duties.WhitelistedDutyCfcIds.Add(num);
break;
case 2:
base.Configuration.Duties.BlacklistedDutyCfcIds.Add(num);
break;
}
}
else if (currentItem == 1)
{
base.Configuration.Duties.WhitelistedDutyCfcIds.Add(num);
}
Save();
}
}
finally
{
((IDisposable)val4)?.Dispose();
}
}
if (!ImGui.TableNextColumn())
{
continue;
}
ImU8String imU8String3 = new ImU8String(13, 1);
imU8String3.AppendLiteral("##DungeonMode");
imU8String3.AppendFormatted(num);
IdDisposable val5 = ImRaii.PushId(imU8String3, true);
try
{
EDutyMode value3;
bool flag2 = base.Configuration.Duties.DutyModeOverrides.TryGetValue(num, out value3);
EDutyMode num2 = (flag2 ? value3 : ((EDutyMode)(-1)));
Name = "Use Default";
string[] dutyModeLabels = DutyModeLabels;
int num3 = 0;
string[] array2 = new string[1 + dutyModeLabels.Length];
array2[num3] = Name;
num3++;
ReadOnlySpan<string> readOnlySpan = new ReadOnlySpan<string>(dutyModeLabels);
readOnlySpan.CopyTo(new Span<string>(array2).Slice(num3, readOnlySpan.Length));
num3 += readOnlySpan.Length;
string[] array3 = array2;
int currentItem2 = (int)(num2 + 1);
ImGui.SetNextItemWidth(150f);
if (ImGui.Combo((ImU8String)string.Empty, ref currentItem2, (ReadOnlySpan<string>)array3, array3.Length))
{
if (currentItem2 == 0)
{
base.Configuration.Duties.DutyModeOverrides.Remove(num);
}
else
{
base.Configuration.Duties.DutyModeOverrides[num] = (EDutyMode)(currentItem2 - 1);
}
Save();
}
if (ImGui.IsItemHovered())
{
EDutyMode eDutyMode = (flag2 ? value3 : base.Configuration.Duties.DefaultDutyMode);
ImGui.SetTooltip(flag2 ? ("Override: " + DutyModeLabels[(int)eDutyMode]) : ("Using default: " + DutyModeLabels[(int)eDutyMode]));
}
}
finally
{
((IDisposable)val5)?.Dispose();
base.Configuration.Duties.DutyModeOverrides[num] = (EDutyMode)(currentItem2 - 1);
}
Save();
}
if (ImGui.IsItemHovered())
{
EDutyMode eDutyMode = (flag2 ? value3 : base.Configuration.Duties.DefaultDutyMode);
ImGui.SetTooltip(flag2 ? ("Override: " + DutyModeLabels[(int)eDutyMode]) : ("Using default: " + DutyModeLabels[(int)eDutyMode]));
}
}
finally
{
((TableDisposable)(ref val2)).Dispose();
}
}
else if (base.Configuration.Duties.ExpansionHeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.Duties.ExpansionHeaderStates[key] = false;
Save();
}
}
}
finally
{
((ChildDisposable)(ref val)).Dispose();
else if (base.Configuration.Duties.ExpansionHeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.Duties.ExpansionHeaderStates[key] = false;
Save();
}
}
}
@ -554,8 +441,7 @@ internal sealed class DutyConfigComponent : ConfigComponent
private void DrawClipboardButtons()
{
DisabledDisposable val = ImRaii.Disabled(base.Configuration.Duties.WhitelistedDutyCfcIds.Count + base.Configuration.Duties.BlacklistedDutyCfcIds.Count + base.Configuration.Duties.DutyModeOverrides.Count == 0);
try
using (ImRaii.Disabled(base.Configuration.Duties.WhitelistedDutyCfcIds.Count + base.Configuration.Duties.BlacklistedDutyCfcIds.Count + base.Configuration.Duties.DutyModeOverrides.Count == 0))
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Copy, "Export to clipboard"))
{
@ -565,14 +451,9 @@ internal sealed class DutyConfigComponent : ConfigComponent
ImGui.SetClipboardText("qst:duty:" + Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Join(";", first.Concat(second).Concat(second2)))));
}
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.SameLine();
string text = ImGui.GetClipboardText().Trim();
val = ImRaii.Disabled(string.IsNullOrEmpty(text) || !text.StartsWith("qst:duty:", StringComparison.InvariantCulture));
try
using (ImRaii.Disabled(string.IsNullOrEmpty(text) || !text.StartsWith("qst:duty:", StringComparison.InvariantCulture)))
{
if (!ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Paste, "Import from Clipboard"))
{
@ -611,16 +492,11 @@ internal sealed class DutyConfigComponent : ConfigComponent
}
Save();
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private void DrawResetButton()
{
DisabledDisposable val = ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl));
try
using (ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl)))
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Undo, "Reset to default"))
{
@ -631,10 +507,6 @@ internal sealed class DutyConfigComponent : ConfigComponent
Save();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("Hold CTRL to enable this button.");

View file

@ -95,532 +95,383 @@ internal sealed class GeneralConfigComponent : ConfigComponent
public override void DrawTab()
{
//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_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0301: Unknown result type (might be due to invalid IL or missing references)
//IL_042d: Unknown result type (might be due to invalid IL or missing references)
//IL_0432: Unknown result type (might be due to invalid IL or missing references)
//IL_0434: Unknown result type (might be due to invalid IL or missing references)
//IL_0737: Unknown result type (might be due to invalid IL or missing references)
//IL_073c: Unknown result type (might be due to invalid IL or missing references)
//IL_07de: Unknown result type (might be due to invalid IL or missing references)
//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
//IL_0885: Unknown result type (might be due to invalid IL or missing references)
//IL_088a: Unknown result type (might be due to invalid IL or missing references)
//IL_09ac: Unknown result type (might be due to invalid IL or missing references)
//IL_09b1: Unknown result type (might be due to invalid IL or missing references)
//IL_0ad2: Unknown result type (might be due to invalid IL or missing references)
//IL_0ad7: Unknown result type (might be due to invalid IL or missing references)
//IL_0c5e: Unknown result type (might be due to invalid IL or missing references)
//IL_0c63: Unknown result type (might be due to invalid IL or missing references)
//IL_0d05: Unknown result type (might be due to invalid IL or missing references)
//IL_0d0a: Unknown result type (might be due to invalid IL or missing references)
//IL_0dac: Unknown result type (might be due to invalid IL or missing references)
//IL_0db1: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"General###General");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("General###General");
if (!tabItemDisposable)
{
if (!val)
return;
}
int currentItem = (int)base.Configuration.General.CombatModule;
if (ImGui.Combo((ImU8String)"Preferred Combat Module", ref currentItem, (ReadOnlySpan<string>)_combatModuleNames, _combatModuleNames.Length))
{
base.Configuration.General.CombatModule = (Configuration.ECombatModule)currentItem;
Save();
}
int num = Array.FindIndex(_mountIds, (uint x) => x == base.Configuration.General.MountId);
if (num == -1)
{
num = 0;
base.Configuration.General.MountId = _mountIds[num];
Save();
}
string text = ((num >= 0 && num < _mountNames.Length) ? _mountNames[num] : "Unknown");
if (ImGui.BeginCombo("Preferred Mount", text, ImGuiComboFlags.HeightLarge))
{
if (!_mountComboJustOpened)
{
return;
ImGui.SetKeyboardFocusHere();
_mountComboJustOpened = true;
}
int currentItem = (int)base.Configuration.General.CombatModule;
if (ImGui.Combo((ImU8String)"Preferred Combat Module", ref currentItem, (ReadOnlySpan<string>)_combatModuleNames, _combatModuleNames.Length))
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##MountSearch", "Search mounts...", ref _mountSearchText, 256);
ImGui.Separator();
using (ImRaii.ChildDisposable childDisposable = ImRaii.Child("##MountScrollArea", new Vector2(0f, 300f), border: false))
{
base.Configuration.General.CombatModule = (Configuration.ECombatModule)currentItem;
Save();
}
int num = Array.FindIndex(_mountIds, (uint x) => x == base.Configuration.General.MountId);
if (num == -1)
{
num = 0;
base.Configuration.General.MountId = _mountIds[num];
Save();
}
string text = ((num >= 0 && num < _mountNames.Length) ? _mountNames[num] : "Unknown");
if (ImGui.BeginCombo("Preferred Mount", text, ImGuiComboFlags.HeightLarge))
{
if (!_mountComboJustOpened)
if ((bool)childDisposable)
{
ImGui.SetKeyboardFocusHere();
_mountComboJustOpened = true;
}
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##MountSearch", "Search mounts...", ref _mountSearchText, 256);
ImGui.Separator();
ChildDisposable val2 = ImRaii.Child((ImU8String)"##MountScrollArea", new Vector2(0f, 300f), false);
try
{
if (ChildDisposable.op_Implicit(val2))
string value = _mountSearchText.ToUpperInvariant();
for (int num2 = 0; num2 < _mountNames.Length; num2++)
{
string value = _mountSearchText.ToUpperInvariant();
for (int num2 = 0; num2 < _mountNames.Length; num2++)
if (string.IsNullOrEmpty(_mountSearchText) || _mountNames[num2].ToUpperInvariant().Contains(value, StringComparison.Ordinal))
{
if (string.IsNullOrEmpty(_mountSearchText) || _mountNames[num2].ToUpperInvariant().Contains(value, StringComparison.Ordinal))
bool flag = num2 == num;
if (ImGui.Selectable(_mountNames[num2], flag))
{
bool flag = num2 == num;
if (ImGui.Selectable(_mountNames[num2], flag))
{
base.Configuration.General.MountId = _mountIds[num2];
Save();
_mountSearchText = string.Empty;
ImGui.CloseCurrentPopup();
}
if (flag)
{
ImGui.SetItemDefaultFocus();
}
base.Configuration.General.MountId = _mountIds[num2];
Save();
_mountSearchText = string.Empty;
ImGui.CloseCurrentPopup();
}
if (flag)
{
ImGui.SetItemDefaultFocus();
}
}
}
}
finally
}
ImGui.EndCombo();
}
else
{
_mountComboJustOpened = false;
}
int currentItem2 = (int)base.Configuration.General.GrandCompany;
if (ImGui.Combo((ImU8String)"Preferred Grand Company", ref currentItem2, (ReadOnlySpan<string>)_grandCompanyNames, _grandCompanyNames.Length))
{
base.Configuration.General.GrandCompany = (FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany)currentItem2;
Save();
}
int currentItem3 = (int)base.Configuration.General.MsqPriority;
if (ImGui.Combo((ImU8String)"MSQ Priority", ref currentItem3, (ReadOnlySpan<string>)_msqPriorityNames, _msqPriorityNames.Length))
{
base.Configuration.General.MsqPriority = (Configuration.EMsqPriorityMode)currentItem3;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
ImGui.Text("Controls when the Main Scenario Quest (MSQ) is automatically accepted:");
ImGui.Spacing();
ImGui.BulletText("Always: Auto-accept MSQ immediately");
ImGui.BulletText("After Tracked: Complete accepted quests first, then pick up MSQ");
ImGui.BulletText("Manual: Never auto-accept MSQ, only do manually accepted quests");
}
}
int num3 = Array.IndexOf(_classJobIds, base.Configuration.General.CombatJob);
if (num3 == -1)
{
base.Configuration.General.CombatJob = EClassJob.Adventurer;
Save();
num3 = 0;
}
string text2 = ((num3 >= 0 && num3 < _classJobNames.Length) ? _classJobNames[num3] : "Unknown");
if (ImGui.BeginCombo("Preferred Combat Job", text2, ImGuiComboFlags.HeightLarge))
{
if (!_classJobComboJustOpened)
{
ImGui.SetKeyboardFocusHere();
_classJobComboJustOpened = true;
}
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##CombatJobSearch", "Search combat jobs...", ref _classJobSearchText, 256);
ImGui.Separator();
using (ImRaii.ChildDisposable childDisposable2 = ImRaii.Child("##CombatJobScrollArea", new Vector2(0f, 300f), border: false))
{
if ((bool)childDisposable2)
{
((ChildDisposable)(ref val2)).Dispose();
string value2 = _classJobSearchText.ToUpperInvariant();
for (int num4 = 0; num4 < _classJobNames.Length; num4++)
{
if (string.IsNullOrEmpty(_classJobSearchText) || _classJobNames[num4].ToUpperInvariant().Contains(value2, StringComparison.Ordinal))
{
bool flag2 = num4 == num3;
if (ImGui.Selectable(_classJobNames[num4], flag2))
{
base.Configuration.General.CombatJob = _classJobIds[num4];
Save();
_classJobSearchText = string.Empty;
ImGui.CloseCurrentPopup();
}
if (flag2)
{
ImGui.SetItemDefaultFocus();
}
}
}
}
ImGui.EndCombo();
}
else
ImGui.EndCombo();
}
else
{
_classJobComboJustOpened = false;
}
ImGui.Separator();
ImGui.Text("UI");
using (ImRaii.PushIndent())
{
bool v = base.Configuration.General.HideInAllInstances;
if (ImGui.Checkbox("Hide quest window in all instanced duties", ref v))
{
_mountComboJustOpened = false;
}
int currentItem2 = (int)base.Configuration.General.GrandCompany;
if (ImGui.Combo((ImU8String)"Preferred Grand Company", ref currentItem2, (ReadOnlySpan<string>)_grandCompanyNames, _grandCompanyNames.Length))
{
base.Configuration.General.GrandCompany = (FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany)currentItem2;
base.Configuration.General.HideInAllInstances = v;
Save();
}
int currentItem3 = (int)base.Configuration.General.MsqPriority;
if (ImGui.Combo((ImU8String)"MSQ Priority", ref currentItem3, (ReadOnlySpan<string>)_msqPriorityNames, _msqPriorityNames.Length))
bool v2 = base.Configuration.General.UseEscToCancelQuesting;
if (ImGui.Checkbox("Double tap ESC to cancel questing/movement", ref v2))
{
base.Configuration.General.MsqPriority = (Configuration.EMsqPriorityMode)currentItem3;
base.Configuration.General.UseEscToCancelQuesting = v2;
Save();
}
bool v3 = base.Configuration.General.StopOnPlayerInput;
if (ImGui.Checkbox("Stop automation when manually moving character", ref v3))
{
base.Configuration.General.StopOnPlayerInput = v3;
Save();
}
bool v4 = base.Configuration.General.ShowIncompleteSeasonalEvents;
if (ImGui.Checkbox("Show details for incomplete seasonal events", ref v4))
{
base.Configuration.General.ShowIncompleteSeasonalEvents = v4;
Save();
}
bool v5 = base.Configuration.General.HideSeasonalEventsFromJournalProgress;
if (ImGui.Checkbox("Hide Seasonal Events from Journal Progress", ref v5))
{
base.Configuration.General.HideSeasonalEventsFromJournalProgress = v5;
Save();
}
bool v6 = base.Configuration.General.ShowChangelogOnUpdate;
if (ImGui.Checkbox("Show changelog window when plugin updates", ref v6))
{
base.Configuration.General.ShowChangelogOnUpdate = v6;
Save();
}
}
ImGui.Separator();
ImGui.Text("Questing");
using (ImRaii.PushIndent())
{
bool v7 = base.Configuration.General.AutoSolveQte;
if (ImGui.Checkbox("Automatically solve Quick Time Events (QTEs)", ref v7))
{
base.Configuration.General.AutoSolveQte = v7;
Save();
}
ImGui.SameLine();
FontDisposable val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
if (ImGui.IsItemHovered())
{
((IDisposable)val3)?.Dispose();
using (ImRaii.Tooltip())
{
ImGui.Text("Automatically mashes the button during Active Time Maneuver (ATM)");
ImGui.Text("prompts that appear in certain duties and quest battles.");
}
}
bool v8 = base.Configuration.General.AutoSnipe;
if (ImGui.Checkbox("Automatically complete snipe quests", ref v8))
{
base.Configuration.General.AutoSnipe = v8;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val4 = ImRaii.Tooltip();
try
using (ImRaii.Tooltip())
{
ImGui.Text("Controls when the Main Scenario Quest (MSQ) is automatically accepted:");
ImGui.Spacing();
ImGui.BulletText("Always: Auto-accept MSQ immediately");
ImGui.BulletText("After Tracked: Complete accepted quests first, then pick up MSQ");
ImGui.BulletText("Manual: Never auto-accept MSQ, only do manually accepted quests");
}
finally
{
((TooltipDisposable)(ref val4)).Dispose();
ImGui.Text("Automatically completes sniping minigames introduced in Stormblood.");
ImGui.Text("When enabled, snipe targets are instantly hit without manual aiming.");
}
}
int num3 = Array.IndexOf(_classJobIds, base.Configuration.General.CombatJob);
if (num3 == -1)
bool v9 = base.Configuration.General.CinemaMode;
if (ImGui.Checkbox("Cinema Mode (watch cutscenes)", ref v9))
{
base.Configuration.General.CombatJob = EClassJob.Adventurer;
base.Configuration.General.CinemaMode = v9;
Save();
num3 = 0;
}
string text2 = ((num3 >= 0 && num3 < _classJobNames.Length) ? _classJobNames[num3] : "Unknown");
if (ImGui.BeginCombo("Preferred Combat Job", text2, ImGuiComboFlags.HeightLarge))
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
if (!_classJobComboJustOpened)
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
ImGui.SetKeyboardFocusHere();
_classJobComboJustOpened = true;
ImGui.Text("When enabled, cutscenes will NOT be automatically skipped.");
ImGui.Text("This allows you to experience the story while Questionable");
ImGui.Text("handles navigation, combat, and other gameplay automation.");
ImGui.Spacing();
ImGui.TextColored(new Vector4(0.7f, 0.7f, 0.7f, 1f), "Recommended for first-time story playthroughs.");
}
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##CombatJobSearch", "Search combat jobs...", ref _classJobSearchText, 256);
ImGui.Separator();
ChildDisposable val5 = ImRaii.Child((ImU8String)"##CombatJobScrollArea", new Vector2(0f, 300f), false);
try
}
bool v10 = base.Configuration.General.ConfigureTextAdvance;
if (ImGui.Checkbox("Automatically configure TextAdvance with the recommended settings", ref v10))
{
base.Configuration.General.ConfigureTextAdvance = v10;
Save();
}
bool v11 = base.Configuration.General.SkipLowPriorityDuties;
if (ImGui.Checkbox("Unlock certain optional dungeons and raids (instead of waiting for completion)", ref v11))
{
base.Configuration.General.SkipLowPriorityDuties = v11;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
if (ChildDisposable.op_Implicit(val5))
ImGui.Text("Questionable automatically picks up some optional quests (e.g. for aether currents, or the ARR alliance raids).");
ImGui.Text("If this setting is enabled, Questionable will continue with other quests, instead of waiting for manual completion of the duty.");
ImGui.Separator();
ImGui.Text("This affects the following dungeons and raids:");
foreach (var lowPriorityContentFinderConditionQuest in _questRegistry.LowPriorityContentFinderConditionQuests)
{
string value2 = _classJobSearchText.ToUpperInvariant();
for (int num4 = 0; num4 < _classJobNames.Length; num4++)
if (_territoryData.TryGetContentFinderCondition(lowPriorityContentFinderConditionQuest.ContentFinderConditionId, out TerritoryData.ContentFinderConditionData contentFinderConditionData))
{
if (string.IsNullOrEmpty(_classJobSearchText) || _classJobNames[num4].ToUpperInvariant().Contains(value2, StringComparison.Ordinal))
{
bool flag2 = num4 == num3;
if (ImGui.Selectable(_classJobNames[num4], flag2))
{
base.Configuration.General.CombatJob = _classJobIds[num4];
Save();
_classJobSearchText = string.Empty;
ImGui.CloseCurrentPopup();
}
if (flag2)
{
ImGui.SetItemDefaultFocus();
}
}
ImU8String text3 = new ImU8String(0, 1);
text3.AppendFormatted(contentFinderConditionData.Name);
ImGui.BulletText(text3);
}
}
}
finally
{
((ChildDisposable)(ref val5)).Dispose();
}
ImGui.EndCombo();
}
else
ImGui.Spacing();
bool v12 = base.Configuration.General.AutoStepRefreshEnabled;
if (ImGui.Checkbox("Automatically refresh quest steps when stuck", ref v12))
{
_classJobComboJustOpened = false;
base.Configuration.General.AutoStepRefreshEnabled = v12;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
ImGui.Text("Questionable will automatically refresh a quest step if it appears to be stuck after the configured delay.");
ImGui.Text("This helps resume automated quest completion when interruptions occur.");
}
}
using (ImRaii.Disabled(!v12))
{
ImGui.Indent();
int v13 = base.Configuration.General.AutoStepRefreshDelaySeconds;
ImGui.SetNextItemWidth(150f);
if (ImGui.SliderInt("Refresh delay (seconds)", ref v13, 10, 180))
{
base.Configuration.General.AutoStepRefreshDelaySeconds = v13;
Save();
}
Vector4 col = new Vector4(0.7f, 0.7f, 0.7f, 1f);
ImU8String text4 = new ImU8String(77, 1);
text4.AppendLiteral("Quest steps will refresh automatically after ");
text4.AppendFormatted(v13);
text4.AppendLiteral(" seconds if no progress is made.");
ImGui.TextColored(in col, text4);
ImGui.Unindent();
}
ImGui.Spacing();
ImGui.Separator();
ImGui.Text("UI");
IndentDisposable val6 = ImRaii.PushIndent(1, true);
try
ImGui.Text("Priority Quest Management");
bool v14 = base.Configuration.General.PersistPriorityQuestsBetweenSessions;
if (ImGui.Checkbox("Save priority quests between sessions", ref v14))
{
bool v = base.Configuration.General.HideInAllInstances;
if (ImGui.Checkbox("Hide quest window in all instanced duties", ref v))
base.Configuration.General.PersistPriorityQuestsBetweenSessions = v14;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
base.Configuration.General.HideInAllInstances = v;
Save();
}
bool v2 = base.Configuration.General.UseEscToCancelQuesting;
if (ImGui.Checkbox("Double tap ESC to cancel questing/movement", ref v2))
{
base.Configuration.General.UseEscToCancelQuesting = v2;
Save();
}
bool v3 = base.Configuration.General.StopOnPlayerInput;
if (ImGui.Checkbox("Stop automation when manually moving character", ref v3))
{
base.Configuration.General.StopOnPlayerInput = v3;
Save();
}
bool v4 = base.Configuration.General.ShowIncompleteSeasonalEvents;
if (ImGui.Checkbox("Show details for incomplete seasonal events", ref v4))
{
base.Configuration.General.ShowIncompleteSeasonalEvents = v4;
Save();
}
bool v5 = base.Configuration.General.HideSeasonalEventsFromJournalProgress;
if (ImGui.Checkbox("Hide Seasonal Events from Journal Progress", ref v5))
{
base.Configuration.General.HideSeasonalEventsFromJournalProgress = v5;
Save();
}
bool v6 = base.Configuration.General.ShowChangelogOnUpdate;
if (ImGui.Checkbox("Show changelog window when plugin updates", ref v6))
{
base.Configuration.General.ShowChangelogOnUpdate = v6;
Save();
ImGui.Text("When enabled, your priority quest list will be saved and restored");
ImGui.Text("when the plugin reloads or the game restarts.");
}
}
finally
bool v15 = base.Configuration.General.ClearPriorityQuestsOnLogout;
if (ImGui.Checkbox("Clear priority quests on character logout", ref v15))
{
((IDisposable)val6)?.Dispose();
base.Configuration.General.ClearPriorityQuestsOnLogout = v15;
Save();
}
ImGui.Separator();
ImGui.Text("Questing");
val6 = ImRaii.PushIndent(1, true);
try
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
bool v7 = base.Configuration.General.AutoSolveQte;
if (ImGui.Checkbox("Automatically solve Quick Time Events (QTEs)", ref v7))
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
base.Configuration.General.AutoSolveQte = v7;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val7 = ImRaii.Tooltip();
try
{
ImGui.Text("Automatically mashes the button during Active Time Maneuver (ATM)");
ImGui.Text("prompts that appear in certain duties and quest battles.");
}
finally
{
((TooltipDisposable)(ref val7)).Dispose();
}
}
bool v8 = base.Configuration.General.AutoSnipe;
if (ImGui.Checkbox("Automatically complete snipe quests", ref v8))
{
base.Configuration.General.AutoSnipe = v8;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val8 = ImRaii.Tooltip();
try
{
ImGui.Text("Automatically completes sniping minigames introduced in Stormblood.");
ImGui.Text("When enabled, snipe targets are instantly hit without manual aiming.");
}
finally
{
((TooltipDisposable)(ref val8)).Dispose();
}
}
bool v9 = base.Configuration.General.CinemaMode;
if (ImGui.Checkbox("Cinema Mode (watch cutscenes)", ref v9))
{
base.Configuration.General.CinemaMode = v9;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val9 = ImRaii.Tooltip();
try
{
ImGui.Text("When enabled, cutscenes will NOT be automatically skipped.");
ImGui.Text("This allows you to experience the story while Questionable");
ImGui.Text("handles navigation, combat, and other gameplay automation.");
ImGui.Spacing();
ImGui.TextColored(new Vector4(0.7f, 0.7f, 0.7f, 1f), "Recommended for first-time story playthroughs.");
}
finally
{
((TooltipDisposable)(ref val9)).Dispose();
}
}
bool v10 = base.Configuration.General.ConfigureTextAdvance;
if (ImGui.Checkbox("Automatically configure TextAdvance with the recommended settings", ref v10))
{
base.Configuration.General.ConfigureTextAdvance = v10;
Save();
}
bool v11 = base.Configuration.General.SkipLowPriorityDuties;
if (ImGui.Checkbox("Unlock certain optional dungeons and raids (instead of waiting for completion)", ref v11))
{
base.Configuration.General.SkipLowPriorityDuties = v11;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val10 = ImRaii.Tooltip();
try
{
ImGui.Text("Questionable automatically picks up some optional quests (e.g. for aether currents, or the ARR alliance raids).");
ImGui.Text("If this setting is enabled, Questionable will continue with other quests, instead of waiting for manual completion of the duty.");
ImGui.Separator();
ImGui.Text("This affects the following dungeons and raids:");
foreach (var lowPriorityContentFinderConditionQuest in _questRegistry.LowPriorityContentFinderConditionQuests)
{
if (_territoryData.TryGetContentFinderCondition(lowPriorityContentFinderConditionQuest.ContentFinderConditionId, out TerritoryData.ContentFinderConditionData contentFinderConditionData))
{
ImU8String text3 = new ImU8String(0, 1);
text3.AppendFormatted(contentFinderConditionData.Name);
ImGui.BulletText(text3);
}
}
}
finally
{
((TooltipDisposable)(ref val10)).Dispose();
}
}
ImGui.Spacing();
bool v12 = base.Configuration.General.AutoStepRefreshEnabled;
if (ImGui.Checkbox("Automatically refresh quest steps when stuck", ref v12))
{
base.Configuration.General.AutoStepRefreshEnabled = v12;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val11 = ImRaii.Tooltip();
try
{
ImGui.Text("Questionable will automatically refresh a quest step if it appears to be stuck after the configured delay.");
ImGui.Text("This helps resume automated quest completion when interruptions occur.");
}
finally
{
((TooltipDisposable)(ref val11)).Dispose();
}
}
DisabledDisposable val12 = ImRaii.Disabled(!v12);
try
{
ImGui.Indent();
int v13 = base.Configuration.General.AutoStepRefreshDelaySeconds;
ImGui.SetNextItemWidth(150f);
if (ImGui.SliderInt("Refresh delay (seconds)", ref v13, 10, 180))
{
base.Configuration.General.AutoStepRefreshDelaySeconds = v13;
Save();
}
Vector4 col = new Vector4(0.7f, 0.7f, 0.7f, 1f);
ImU8String text4 = new ImU8String(77, 1);
text4.AppendLiteral("Quest steps will refresh automatically after ");
text4.AppendFormatted(v13);
text4.AppendLiteral(" seconds if no progress is made.");
ImGui.TextColored(in col, text4);
ImGui.Unindent();
}
finally
{
((IDisposable)val12)?.Dispose();
}
ImGui.Spacing();
ImGui.Separator();
ImGui.Text("Priority Quest Management");
bool v14 = base.Configuration.General.PersistPriorityQuestsBetweenSessions;
if (ImGui.Checkbox("Save priority quests between sessions", ref v14))
{
base.Configuration.General.PersistPriorityQuestsBetweenSessions = v14;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val13 = ImRaii.Tooltip();
try
{
ImGui.Text("When enabled, your priority quest list will be saved and restored");
ImGui.Text("when the plugin reloads or the game restarts.");
}
finally
{
((TooltipDisposable)(ref val13)).Dispose();
}
}
bool v15 = base.Configuration.General.ClearPriorityQuestsOnLogout;
if (ImGui.Checkbox("Clear priority quests on character logout", ref v15))
{
base.Configuration.General.ClearPriorityQuestsOnLogout = v15;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val14 = ImRaii.Tooltip();
try
{
ImGui.Text("Clears the priority queue when your character logs out.");
ImGui.Text("This also clears the saved list if persistence is enabled.");
}
finally
{
((TooltipDisposable)(ref val14)).Dispose();
}
}
bool v16 = base.Configuration.General.ClearPriorityQuestsOnCompletion;
if (ImGui.Checkbox("Remove priority quests when completed", ref v16))
{
base.Configuration.General.ClearPriorityQuestsOnCompletion = v16;
Save();
}
ImGui.SameLine();
val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered())
{
TooltipDisposable val15 = ImRaii.Tooltip();
try
{
ImGui.Text("Automatically removes completed quests from your priority queue.");
ImGui.Text("This helps keep your priority list clean without manual intervention.");
return;
}
finally
{
((TooltipDisposable)(ref val15)).Dispose();
}
ImGui.Text("Clears the priority queue when your character logs out.");
ImGui.Text("This also clears the saved list if persistence is enabled.");
}
}
finally
bool v16 = base.Configuration.General.ClearPriorityQuestsOnCompletion;
if (ImGui.Checkbox("Remove priority quests when completed", ref v16))
{
((IDisposable)val6)?.Dispose();
base.Configuration.General.ClearPriorityQuestsOnCompletion = v16;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
ImGui.Text("Automatically removes completed quests from your priority queue.");
ImGui.Text("This helps keep your priority list clean without manual intervention.");
return;
}
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
}

View file

@ -30,97 +30,69 @@ internal sealed class NotificationConfigComponent : ConfigComponent
public override void DrawTab()
{
//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_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Notifications###Notifications");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Notifications###Notifications");
if (!tabItemDisposable)
{
if (!val)
return;
}
bool v = base.Configuration.Notifications.Enabled;
if (ImGui.Checkbox("Enable notifications when manual interaction is required", ref v))
{
base.Configuration.Notifications.Enabled = v;
Save();
}
using (ImRaii.Disabled(!base.Configuration.Notifications.Enabled))
{
using (ImRaii.PushIndent())
{
return;
}
bool v = base.Configuration.Notifications.Enabled;
if (ImGui.Checkbox("Enable notifications when manual interaction is required", ref v))
{
base.Configuration.Notifications.Enabled = v;
Save();
}
DisabledDisposable val2 = ImRaii.Disabled(!base.Configuration.Notifications.Enabled);
try
{
IndentDisposable val3 = ImRaii.PushIndent(1, true);
try
int num = Array.IndexOf(_xivChatTypes, base.Configuration.Notifications.ChatType);
if (num == -1)
{
int num = Array.IndexOf(_xivChatTypes, base.Configuration.Notifications.ChatType);
if (num == -1)
num = 0;
}
string text = ((num >= 0 && num < _chatTypeNames.Length) ? _chatTypeNames[num] : "Unknown");
if (ImGui.BeginCombo("Chat channel", text, ImGuiComboFlags.HeightLarge))
{
if (!_chatChannelComboJustOpened)
{
num = 0;
ImGui.SetKeyboardFocusHere();
_chatChannelComboJustOpened = true;
}
string text = ((num >= 0 && num < _chatTypeNames.Length) ? _chatTypeNames[num] : "Unknown");
if (ImGui.BeginCombo("Chat channel", text, ImGuiComboFlags.HeightLarge))
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##ChatChannelSearch", "Search chat channels...", ref _chatChannelSearchText, 256);
ImGui.Separator();
using (ImRaii.ChildDisposable childDisposable = ImRaii.Child("##ChatChannelScrollArea", new Vector2(0f, 300f), border: false))
{
if (!_chatChannelComboJustOpened)
if ((bool)childDisposable)
{
ImGui.SetKeyboardFocusHere();
_chatChannelComboJustOpened = true;
}
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##ChatChannelSearch", "Search chat channels...", ref _chatChannelSearchText, 256);
ImGui.Separator();
ChildDisposable val4 = ImRaii.Child((ImU8String)"##ChatChannelScrollArea", new Vector2(0f, 300f), false);
try
{
if (ChildDisposable.op_Implicit(val4))
string value = _chatChannelSearchText.ToUpperInvariant();
for (int i = 0; i < _chatTypeNames.Length; i++)
{
string value = _chatChannelSearchText.ToUpperInvariant();
for (int i = 0; i < _chatTypeNames.Length; i++)
if (string.IsNullOrEmpty(_chatChannelSearchText) || _chatTypeNames[i].ToUpperInvariant().Contains(value, StringComparison.Ordinal))
{
if (string.IsNullOrEmpty(_chatChannelSearchText) || _chatTypeNames[i].ToUpperInvariant().Contains(value, StringComparison.Ordinal))
bool flag = i == num;
if (ImGui.Selectable(_chatTypeNames[i], flag))
{
bool flag = i == num;
if (ImGui.Selectable(_chatTypeNames[i], flag))
{
base.Configuration.Notifications.ChatType = _xivChatTypes[i];
Save();
_chatChannelSearchText = string.Empty;
ImGui.CloseCurrentPopup();
}
if (flag)
{
ImGui.SetItemDefaultFocus();
}
base.Configuration.Notifications.ChatType = _xivChatTypes[i];
Save();
_chatChannelSearchText = string.Empty;
ImGui.CloseCurrentPopup();
}
if (flag)
{
ImGui.SetItemDefaultFocus();
}
}
}
}
finally
{
((ChildDisposable)(ref val4)).Dispose();
}
ImGui.EndCombo();
}
else
{
_chatChannelComboJustOpened = false;
}
ImGui.EndCombo();
}
finally
else
{
((IDisposable)val3)?.Dispose();
_chatChannelComboJustOpened = false;
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
}
}

View file

@ -74,31 +74,21 @@ internal sealed class PluginConfigComponent : ConfigComponent
public override void DrawTab()
{
//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)"Dependencies###Plugins");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Dependencies###Plugins");
if (!(!tabItemDisposable))
{
if (!(!val))
Draw(out var allRequiredInstalled);
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
if (allRequiredInstalled)
{
Draw(out var allRequiredInstalled);
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
if (allRequiredInstalled)
{
ImGui.TextColored(ImGuiColors.ParsedGreen, "All required plugins are installed.");
}
else
{
ImGui.TextColored(ImGuiColors.DalamudRed, "Required plugins are missing, Questionable will not work properly.");
}
ImGui.TextColored(ImGuiColors.ParsedGreen, "All required plugins are installed.");
}
else
{
ImGui.TextColored(ImGuiColors.DalamudRed, "Required plugins are missing, Questionable will not work properly.");
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
}
}
@ -111,27 +101,20 @@ internal sealed class PluginConfigComponent : ConfigComponent
}
ImGui.Text("Questionable requires the following plugins to work:");
allRequiredInstalled = true;
IndentDisposable val = ImRaii.PushIndent(1, true);
try
using (ImRaii.PushIndent())
{
foreach (PluginInfo requiredPlugin in RequiredPlugins)
{
allRequiredInstalled &= DrawPlugin(requiredPlugin, checklistPadding);
}
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
ImGui.Text("Questionable supports multiple rotation/combat plugins, please pick the one\nyou want to use:");
val = ImRaii.PushIndent(1, true);
try
using (ImRaii.PushIndent())
{
DisabledDisposable val2 = ImRaii.Disabled(_combatController.IsRunning);
try
using (ImRaii.Disabled(_combatController.IsRunning))
{
if (ImGui.RadioButton("No rotation/combat plugin (combat must be done manually)", _configuration.General.CombatModule == Questionable.Configuration.ECombatModule.None))
{
@ -142,37 +125,23 @@ internal sealed class PluginConfigComponent : ConfigComponent
allRequiredInstalled &= DrawCombatPlugin(Questionable.Configuration.ECombatModule.RotationSolverReborn, checklistPadding);
allRequiredInstalled &= DrawCombatPlugin(Questionable.Configuration.ECombatModule.WrathCombo, checklistPadding);
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
ImGui.Text("The following plugins are recommended, but not required:");
val = ImRaii.PushIndent(1, true);
try
using (ImRaii.PushIndent())
{
foreach (PluginInfo recommendedPlugin in _recommendedPlugins)
{
DrawPlugin(recommendedPlugin, checklistPadding);
}
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private bool DrawPlugin(PluginInfo plugin, float checklistPadding)
{
IdDisposable val = ImRaii.PushId((ImU8String)("plugin_" + plugin.DisplayName), true);
try
using (ImRaii.PushId("plugin_" + plugin.DisplayName))
{
IExposedPlugin exposedPlugin = FindInstalledPlugin(plugin);
bool flag = exposedPlugin != null;
@ -185,18 +154,13 @@ internal sealed class PluginConfigComponent : ConfigComponent
DrawPluginDetails(plugin, checklistPadding, flag);
return flag;
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private bool DrawCombatPlugin(Configuration.ECombatModule combatModule, float checklistPadding)
{
ImGui.Spacing();
PluginInfo pluginInfo = CombatPlugins[combatModule];
IdDisposable val = ImRaii.PushId((ImU8String)("plugin_" + pluginInfo.DisplayName), true);
try
using (ImRaii.PushId("plugin_" + pluginInfo.DisplayName))
{
IExposedPlugin exposedPlugin = FindInstalledPlugin(pluginInfo);
bool flag = exposedPlugin != null;
@ -221,16 +185,11 @@ internal sealed class PluginConfigComponent : ConfigComponent
DrawPluginDetails(pluginInfo, checklistPadding, flag);
return flag || _configuration.General.CombatModule != combatModule;
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private void DrawPluginDetails(PluginInfo plugin, float checklistPadding, bool isInstalled)
{
IndentDisposable val = ImRaii.PushIndent(checklistPadding, true, true);
try
using (ImRaii.PushIndent(checklistPadding))
{
if (!string.IsNullOrEmpty(plugin.Details))
{
@ -246,15 +205,10 @@ internal sealed class PluginConfigComponent : ConfigComponent
_uiUtils.ChecklistItem(item.DisplayName, isInstalled && flag2);
if (!string.IsNullOrEmpty(item.Details))
{
IndentDisposable val2 = ImRaii.PushIndent(checklistPadding, true, true);
try
using (ImRaii.PushIndent(checklistPadding))
{
ImGui.TextUnformatted(item.Details);
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
}
}
@ -285,10 +239,6 @@ internal sealed class PluginConfigComponent : ConfigComponent
ImGuiComponents.HelpMarker("Available on official Dalamud Repository");
}
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private IExposedPlugin? FindInstalledPlugin(PluginInfo pluginInfo)

View file

@ -289,576 +289,431 @@ internal sealed class SinglePlayerDutyConfigComponent : ConfigComponent
public override void DrawTab()
{
//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_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
TabItemDisposable val = ImRaii.TabItem((ImU8String)"Quest Battles###QuestBattles");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Quest Battles###QuestBattles");
if (!tabItemDisposable)
{
if (!val)
return;
}
bool v = base.Configuration.SinglePlayerDuties.RunSoloInstancesWithBossMod;
if (ImGui.Checkbox("Run quest battles with BossMod", ref v))
{
base.Configuration.SinglePlayerDuties.RunSoloInstancesWithBossMod = v;
Save();
}
using (ImRaii.PushIndent(ImGui.GetFrameHeight() + ImGui.GetStyle().ItemInnerSpacing.X))
{
using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed))
{
return;
}
bool v = base.Configuration.SinglePlayerDuties.RunSoloInstancesWithBossMod;
if (ImGui.Checkbox("Run quest battles with BossMod", ref v))
{
base.Configuration.SinglePlayerDuties.RunSoloInstancesWithBossMod = v;
Save();
}
IndentDisposable val2 = ImRaii.PushIndent(ImGui.GetFrameHeight() + ImGui.GetStyle().ItemInnerSpacing.X, true, true);
try
{
ColorDisposable val3 = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, true);
try
{
ImGui.TextUnformatted("Work in Progress:");
ImGui.BulletText("Will always use BossMod for combat (ignoring the configured combat module).");
ImGui.BulletText("Only a small subset of quest battles have been tested - most of which are in the MSQ.");
ImGui.BulletText("When retrying a failed battle, it will always start at 'Normal' difficulty.");
ImGui.BulletText("Please don't enable this option when using a BossMod fork (such as Reborn);\nwith the missing combat module configuration, it is unlikely to be compatible.");
}
finally
{
((IDisposable)val3)?.Dispose();
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
ImGui.Separator();
DisabledDisposable val4 = ImRaii.Disabled(!v);
try
{
ImGui.Text("Questionable includes a default list of quest battles that work if BossMod is installed.");
ImGui.Text("The included list of quest battles can change with each update.");
ImGui.Separator();
ImGui.Text("You can override the settings for each individual quest battle:");
TabBarDisposable val5 = ImRaii.TabBar((ImU8String)"QuestionableConfigTabs");
try
{
if (TabBarDisposable.op_Implicit(val5))
{
DrawMainScenarioConfigTable();
DrawJobQuestConfigTable();
DrawRoleQuestConfigTable();
DrawOtherQuestConfigTable();
}
DrawEnableAllButton();
ImGui.SameLine();
DrawClipboardButtons();
ImGui.SameLine();
DrawResetButton();
}
finally
{
((TabBarDisposable)(ref val5)).Dispose();
}
}
finally
{
((IDisposable)val4)?.Dispose();
ImGui.TextUnformatted("Work in Progress:");
ImGui.BulletText("Will always use BossMod for combat (ignoring the configured combat module).");
ImGui.BulletText("Only a small subset of quest battles have been tested - most of which are in the MSQ.");
ImGui.BulletText("When retrying a failed battle, it will always start at 'Normal' difficulty.");
ImGui.BulletText("Please don't enable this option when using a BossMod fork (such as Reborn);\nwith the missing combat module configuration, it is unlikely to be compatible.");
}
}
finally
ImGui.Separator();
using (ImRaii.Disabled(!v))
{
((TabItemDisposable)(ref val)).Dispose();
ImGui.Text("Questionable includes a default list of quest battles that work if BossMod is installed.");
ImGui.Text("The included list of quest battles can change with each update.");
ImGui.Separator();
ImGui.Text("You can override the settings for each individual quest battle:");
using ImRaii.TabBarDisposable tabBarDisposable = ImRaii.TabBar("QuestionableConfigTabs");
if ((bool)tabBarDisposable)
{
DrawMainScenarioConfigTable();
DrawJobQuestConfigTable();
DrawRoleQuestConfigTable();
DrawOtherQuestConfigTable();
}
DrawEnableAllButton();
ImGui.SameLine();
DrawClipboardButtons();
ImGui.SameLine();
DrawResetButton();
}
}
private void DrawMainScenarioConfigTable()
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
(int enabledCount, int totalCount) mainScenarioQuestCounts = GetMainScenarioQuestCounts();
int item = mainScenarioQuestCounts.enabledCount;
int item2 = mainScenarioQuestCounts.totalCount;
ImU8String imU8String = new ImU8String(30, 2);
imU8String.AppendLiteral("Main Scenario Quests (");
imU8String.AppendFormatted(item);
imU8String.AppendLiteral("/");
imU8String.AppendFormatted(item2);
imU8String.AppendLiteral(")###MSQ");
TabItemDisposable val = ImRaii.TabItem(imU8String);
try
ImU8String label = new ImU8String(30, 2);
label.AppendLiteral("Main Scenario Quests (");
label.AppendFormatted(item);
label.AppendLiteral("/");
label.AppendFormatted(item2);
label.AppendLiteral(")###MSQ");
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem(label);
if (!tabItemDisposable)
{
if (!val)
{
return;
}
ChildDisposable val2 = BeginChildArea();
try
{
if (!val2)
{
return;
}
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(_startingCityBattles[EAetheryteLocation.Limsa]);
int item3 = questBattleCounts.enabledCount;
int item4 = questBattleCounts.totalCount;
string obj = $"Limsa Lominsa ({ConfigComponent.FormatLevel(5)} - {ConfigComponent.FormatLevel(14)}) ({item3}/{item4})";
string key = "Limsa";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable("LimsaLominsa", _startingCityBattles[EAetheryteLocation.Limsa]);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
(int enabledCount, int totalCount) questBattleCounts2 = GetQuestBattleCounts(_startingCityBattles[EAetheryteLocation.Gridania]);
int item5 = questBattleCounts2.enabledCount;
int item6 = questBattleCounts2.totalCount;
string obj2 = $"Gridania ({ConfigComponent.FormatLevel(5)} - {ConfigComponent.FormatLevel(14)}) ({item5}/{item6})";
string key2 = "Gridania";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj2))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = true;
Save();
}
DrawQuestTable("Gridania", _startingCityBattles[EAetheryteLocation.Gridania]);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = false;
Save();
}
(int enabledCount, int totalCount) questBattleCounts3 = GetQuestBattleCounts(_startingCityBattles[EAetheryteLocation.Uldah]);
int item7 = questBattleCounts3.enabledCount;
int item8 = questBattleCounts3.totalCount;
string obj3 = $"Ul'dah ({ConfigComponent.FormatLevel(4)} - {ConfigComponent.FormatLevel(14)}) ({item7}/{item8})";
string key3 = "Uldah";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key3, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj3))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key3, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key3] = true;
Save();
}
DrawQuestTable("Uldah", _startingCityBattles[EAetheryteLocation.Uldah]);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key3, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key3] = false;
Save();
}
EExpansionVersion[] values = Enum.GetValues<EExpansionVersion>();
for (int i = 0; i < values.Length; i++)
{
EExpansionVersion eExpansionVersion = values[i];
if (!_mainScenarioBattles.TryGetValue(eExpansionVersion, out List<SinglePlayerDutyInfo> value))
{
continue;
}
(int enabledCount, int totalCount) questBattleCounts4 = GetQuestBattleCounts(value);
int item9 = questBattleCounts4.enabledCount;
int item10 = questBattleCounts4.totalCount;
string obj4 = $"{eExpansionVersion.ToFriendlyString()} ({item9}/{item10})";
string key4 = eExpansionVersion.ToString();
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key4, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj4))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key4, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key4] = true;
Save();
}
DrawQuestTable($"Duties{eExpansionVersion}", value);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key4, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key4] = false;
Save();
}
}
}
finally
{
((ChildDisposable)(ref val2)).Dispose();
}
return;
}
finally
using ImRaii.ChildDisposable childDisposable = BeginChildArea();
if (!childDisposable)
{
((TabItemDisposable)(ref val)).Dispose();
return;
}
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(_startingCityBattles[EAetheryteLocation.Limsa]);
int item3 = questBattleCounts.enabledCount;
int item4 = questBattleCounts.totalCount;
string obj = $"Limsa Lominsa ({ConfigComponent.FormatLevel(5)} - {ConfigComponent.FormatLevel(14)}) ({item3}/{item4})";
string key = "Limsa";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable("LimsaLominsa", _startingCityBattles[EAetheryteLocation.Limsa]);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
(int enabledCount, int totalCount) questBattleCounts2 = GetQuestBattleCounts(_startingCityBattles[EAetheryteLocation.Gridania]);
int item5 = questBattleCounts2.enabledCount;
int item6 = questBattleCounts2.totalCount;
string obj2 = $"Gridania ({ConfigComponent.FormatLevel(5)} - {ConfigComponent.FormatLevel(14)}) ({item5}/{item6})";
string key2 = "Gridania";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj2))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = true;
Save();
}
DrawQuestTable("Gridania", _startingCityBattles[EAetheryteLocation.Gridania]);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = false;
Save();
}
(int enabledCount, int totalCount) questBattleCounts3 = GetQuestBattleCounts(_startingCityBattles[EAetheryteLocation.Uldah]);
int item7 = questBattleCounts3.enabledCount;
int item8 = questBattleCounts3.totalCount;
string obj3 = $"Ul'dah ({ConfigComponent.FormatLevel(4)} - {ConfigComponent.FormatLevel(14)}) ({item7}/{item8})";
string key3 = "Uldah";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key3, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj3))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key3, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key3] = true;
Save();
}
DrawQuestTable("Uldah", _startingCityBattles[EAetheryteLocation.Uldah]);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key3, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key3] = false;
Save();
}
EExpansionVersion[] values = Enum.GetValues<EExpansionVersion>();
for (int i = 0; i < values.Length; i++)
{
EExpansionVersion eExpansionVersion = values[i];
if (!_mainScenarioBattles.TryGetValue(eExpansionVersion, out List<SinglePlayerDutyInfo> value))
{
continue;
}
(int enabledCount, int totalCount) questBattleCounts4 = GetQuestBattleCounts(value);
int item9 = questBattleCounts4.enabledCount;
int item10 = questBattleCounts4.totalCount;
string obj4 = $"{eExpansionVersion.ToFriendlyString()} ({item9}/{item10})";
string key4 = eExpansionVersion.ToString();
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key4, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj4))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key4, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key4] = true;
Save();
}
DrawQuestTable($"Duties{eExpansionVersion}", value);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key4, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key4] = false;
Save();
}
}
}
private void DrawJobQuestConfigTable()
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
(int enabledCount, int totalCount) jobQuestCounts = GetJobQuestCounts();
int item = jobQuestCounts.enabledCount;
int item2 = jobQuestCounts.totalCount;
ImU8String imU8String = new ImU8String(32, 2);
imU8String.AppendLiteral("Class/Job Quests (");
imU8String.AppendFormatted(item);
imU8String.AppendLiteral("/");
imU8String.AppendFormatted(item2);
imU8String.AppendLiteral(")###JobQuests");
TabItemDisposable val = ImRaii.TabItem(imU8String);
try
ImU8String label = new ImU8String(32, 2);
label.AppendLiteral("Class/Job Quests (");
label.AppendFormatted(item);
label.AppendLiteral("/");
label.AppendFormatted(item2);
label.AppendLiteral(")###JobQuests");
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem(label);
if (!tabItemDisposable)
{
if (!val)
{
return;
}
ChildDisposable val2 = BeginChildArea();
try
{
if (!val2)
{
return;
}
int num = 0;
foreach (var (eClassJob, num2) in _classJobUtils.SortedClassJobs)
{
if (eClassJob.IsCrafter() || eClassJob.IsGatherer() || !_jobQuestBattles.TryGetValue(eClassJob, out List<SinglePlayerDutyInfo> value))
{
continue;
}
if (num2 != num)
{
num = num2;
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
}
string text = eClassJob.ToFriendlyString();
if (eClassJob.IsClass())
{
text = text + " / " + eClassJob.AsJob().ToFriendlyString();
}
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(value);
int item3 = questBattleCounts.enabledCount;
int item4 = questBattleCounts.totalCount;
string obj = $"{text} ({item3}/{item4})";
string key = eClassJob.ToString();
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable($"JobQuests{eClassJob}", value);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
}
}
finally
{
((ChildDisposable)(ref val2)).Dispose();
}
return;
}
finally
using ImRaii.ChildDisposable childDisposable = BeginChildArea();
if (!childDisposable)
{
((TabItemDisposable)(ref val)).Dispose();
return;
}
int num = 0;
foreach (var (eClassJob, num2) in _classJobUtils.SortedClassJobs)
{
if (eClassJob.IsCrafter() || eClassJob.IsGatherer() || !_jobQuestBattles.TryGetValue(eClassJob, out List<SinglePlayerDutyInfo> value))
{
continue;
}
if (num2 != num)
{
num = num2;
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
}
string text = eClassJob.ToFriendlyString();
if (eClassJob.IsClass())
{
text = text + " / " + eClassJob.AsJob().ToFriendlyString();
}
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(value);
int item3 = questBattleCounts.enabledCount;
int item4 = questBattleCounts.totalCount;
string obj = $"{text} ({item3}/{item4})";
string key = eClassJob.ToString();
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable($"JobQuests{eClassJob}", value);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
}
}
private void DrawRoleQuestConfigTable()
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
(int enabledCount, int totalCount) roleQuestCounts = GetRoleQuestCounts();
int item = roleQuestCounts.enabledCount;
int item2 = roleQuestCounts.totalCount;
ImU8String imU8String = new ImU8String(28, 2);
imU8String.AppendLiteral("Role Quests (");
imU8String.AppendFormatted(item);
imU8String.AppendLiteral("/");
imU8String.AppendFormatted(item2);
imU8String.AppendLiteral(")###RoleQuests");
TabItemDisposable val = ImRaii.TabItem(imU8String);
try
ImU8String label = new ImU8String(28, 2);
label.AppendLiteral("Role Quests (");
label.AppendFormatted(item);
label.AppendLiteral("/");
label.AppendFormatted(item2);
label.AppendLiteral(")###RoleQuests");
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem(label);
if (!tabItemDisposable)
{
if (!val)
return;
}
using ImRaii.ChildDisposable childDisposable = BeginChildArea();
if (!childDisposable)
{
return;
}
foreach (var (eClassJob, value) in RoleQuestCategories)
{
if (!_roleQuestBattles.TryGetValue(eClassJob, out List<SinglePlayerDutyInfo> value2))
{
return;
continue;
}
ChildDisposable val2 = BeginChildArea();
try
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(value2);
int item3 = questBattleCounts.enabledCount;
int item4 = questBattleCounts.totalCount;
string obj = $"{value} ({item3}/{item4})";
string key = $"Role_{eClassJob}";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!val2)
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
return;
}
foreach (var (eClassJob, value) in RoleQuestCategories)
{
if (!_roleQuestBattles.TryGetValue(eClassJob, out List<SinglePlayerDutyInfo> value2))
{
continue;
}
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(value2);
int item3 = questBattleCounts.enabledCount;
int item4 = questBattleCounts.totalCount;
string obj = $"{value} ({item3}/{item4})";
string key = $"Role_{eClassJob}";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable($"RoleQuests{eClassJob}", value2);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
}
(int enabledCount, int totalCount) questBattleCounts2 = GetQuestBattleCounts(_otherRoleQuestBattles);
int item5 = questBattleCounts2.enabledCount;
int item6 = questBattleCounts2.totalCount;
string obj2 = $"General Role Quests ({item5}/{item6})";
string key2 = "Role_General";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj2))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = true;
Save();
}
DrawQuestTable("RoleQuestsGeneral", _otherRoleQuestBattles);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = false;
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable($"RoleQuests{eClassJob}", value2);
}
finally
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
((ChildDisposable)(ref val2)).Dispose();
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
}
finally
(int enabledCount, int totalCount) questBattleCounts2 = GetQuestBattleCounts(_otherRoleQuestBattles);
int item5 = questBattleCounts2.enabledCount;
int item6 = questBattleCounts2.totalCount;
string obj2 = $"General Role Quests ({item5}/{item6})";
string key2 = "Role_General";
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj2))
{
((TabItemDisposable)(ref val)).Dispose();
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = true;
Save();
}
DrawQuestTable("RoleQuestsGeneral", _otherRoleQuestBattles);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key2, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key2] = false;
Save();
}
}
private void DrawOtherQuestConfigTable()
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
(int enabledCount, int totalCount) otherQuestCounts = GetOtherQuestCounts();
int item = otherQuestCounts.enabledCount;
int item2 = otherQuestCounts.totalCount;
ImU8String imU8String = new ImU8String(29, 2);
imU8String.AppendLiteral("Other Quests (");
imU8String.AppendFormatted(item);
imU8String.AppendLiteral("/");
imU8String.AppendFormatted(item2);
imU8String.AppendLiteral(")###MiscQuests");
TabItemDisposable val = ImRaii.TabItem(imU8String);
try
ImU8String label = new ImU8String(29, 2);
label.AppendLiteral("Other Quests (");
label.AppendFormatted(item);
label.AppendLiteral("/");
label.AppendFormatted(item2);
label.AppendLiteral(")###MiscQuests");
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem(label);
if (!tabItemDisposable)
{
if (!val)
{
return;
}
ChildDisposable val2 = BeginChildArea();
try
{
if (!val2)
{
return;
}
foreach (var otherQuestBattle in _otherQuestBattles)
{
string item3 = otherQuestBattle.Label;
List<SinglePlayerDutyInfo> item4 = otherQuestBattle.Item2;
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(item4);
int item5 = questBattleCounts.enabledCount;
int item6 = questBattleCounts.totalCount;
string obj = $"{item3} ({item5}/{item6})";
string key = "Other_" + item3;
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable("Other" + item3, item4);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
}
}
finally
{
((ChildDisposable)(ref val2)).Dispose();
}
return;
}
finally
using ImRaii.ChildDisposable childDisposable = BeginChildArea();
if (!childDisposable)
{
((TabItemDisposable)(ref val)).Dispose();
return;
}
foreach (var otherQuestBattle in _otherQuestBattles)
{
string item3 = otherQuestBattle.Label;
List<SinglePlayerDutyInfo> item4 = otherQuestBattle.Item2;
(int enabledCount, int totalCount) questBattleCounts = GetQuestBattleCounts(item4);
int item5 = questBattleCounts.enabledCount;
int item6 = questBattleCounts.totalCount;
string obj = $"{item3} ({item5}/{item6})";
string key = "Other_" + item3;
ImGui.SetNextItemOpen(base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false), ImGuiCond.Always);
if (ImGui.CollapsingHeader(obj))
{
if (!base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = true;
Save();
}
DrawQuestTable("Other" + item3, item4);
}
else if (base.Configuration.SinglePlayerDuties.HeaderStates.GetValueOrDefault(key, defaultValue: false))
{
base.Configuration.SinglePlayerDuties.HeaderStates[key] = false;
Save();
}
}
}
private void DrawQuestTable(string label, IReadOnlyList<SinglePlayerDutyInfo> dutyInfos)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
TableDisposable val = ImRaii.Table((ImU8String)label, 2, ImGuiTableFlags.SizingFixedFit);
try
using ImRaii.TableDisposable tableDisposable = ImRaii.Table(label, 2, ImGuiTableFlags.SizingFixedFit);
if (!(bool)tableDisposable)
{
if (!TableDisposable.op_Implicit(val))
{
return;
}
ImGui.TableSetupColumn("Quest", ImGuiTableColumnFlags.WidthStretch);
ImGui.TableSetupColumn("Options", ImGuiTableColumnFlags.WidthFixed, 200f);
foreach (SinglePlayerDutyInfo dutyInfo in dutyInfos)
{
ImGui.TableNextRow();
string[] array = (dutyInfo.EnabledByDefault ? SupportedCfcOptions : UnsupportedCfcOptions);
int currentItem = 0;
if (base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Contains(dutyInfo.ContentFinderConditionId))
{
currentItem = 1;
}
if (base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Contains(dutyInfo.ContentFinderConditionId))
{
currentItem = 2;
}
if (ImGui.TableNextColumn())
{
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(dutyInfo.Name);
if (ImGui.IsItemHovered() && base.Configuration.Advanced.AdditionalStatusInformation)
{
TooltipDisposable val2 = ImRaii.Tooltip();
try
{
if (((TooltipDisposable)(ref val2)).Alive)
{
ImGui.TextUnformatted(dutyInfo.Name);
ImGui.Separator();
ImU8String text = new ImU8String(13, 1);
text.AppendLiteral("TerritoryId: ");
text.AppendFormatted(dutyInfo.TerritoryId);
ImGui.BulletText(text);
ImU8String text2 = new ImU8String(26, 1);
text2.AppendLiteral("ContentFinderConditionId: ");
text2.AppendFormatted(dutyInfo.ContentFinderConditionId);
ImGui.BulletText(text2);
}
}
finally
{
((TooltipDisposable)(ref val2)).Dispose();
}
}
if (!dutyInfo.Enabled)
{
ImGuiComponents.HelpMarker("Questionable doesn't include support for this quest.", FontAwesomeIcon.Times, (Vector4?)ImGuiColors.DalamudRed);
}
else if (dutyInfo.Notes.Count > 0)
{
ConfigComponent.DrawNotes(dutyInfo.EnabledByDefault, dutyInfo.Notes);
}
}
if (!ImGui.TableNextColumn())
{
continue;
}
ImU8String imU8String = new ImU8String(6, 1);
imU8String.AppendLiteral("##Duty");
imU8String.AppendFormatted(dutyInfo.ContentFinderConditionId);
IdDisposable val3 = ImRaii.PushId(imU8String, true);
try
{
DisabledDisposable val4 = ImRaii.Disabled(!dutyInfo.Enabled);
try
{
ImGui.SetNextItemWidth(200f);
if (ImGui.Combo((ImU8String)string.Empty, ref currentItem, (ReadOnlySpan<string>)array, array.Length))
{
base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Remove(dutyInfo.ContentFinderConditionId);
base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Remove(dutyInfo.ContentFinderConditionId);
switch (currentItem)
{
case 1:
base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Add(dutyInfo.ContentFinderConditionId);
break;
case 2:
base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Add(dutyInfo.ContentFinderConditionId);
break;
}
Save();
}
}
finally
{
((IDisposable)val4)?.Dispose();
}
}
finally
{
((IDisposable)val3)?.Dispose();
}
}
return;
}
finally
ImGui.TableSetupColumn("Quest", ImGuiTableColumnFlags.WidthStretch);
ImGui.TableSetupColumn("Options", ImGuiTableColumnFlags.WidthFixed, 200f);
foreach (SinglePlayerDutyInfo dutyInfo in dutyInfos)
{
((TableDisposable)(ref val)).Dispose();
ImGui.TableNextRow();
string[] array = (dutyInfo.EnabledByDefault ? SupportedCfcOptions : UnsupportedCfcOptions);
int currentItem = 0;
if (base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Contains(dutyInfo.ContentFinderConditionId))
{
currentItem = 1;
}
if (base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Contains(dutyInfo.ContentFinderConditionId))
{
currentItem = 2;
}
if (ImGui.TableNextColumn())
{
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted(dutyInfo.Name);
if (ImGui.IsItemHovered() && base.Configuration.Advanced.AdditionalStatusInformation)
{
using ImRaii.TooltipDisposable tooltipDisposable = ImRaii.Tooltip();
if (tooltipDisposable.Alive)
{
ImGui.TextUnformatted(dutyInfo.Name);
ImGui.Separator();
ImU8String text = new ImU8String(13, 1);
text.AppendLiteral("TerritoryId: ");
text.AppendFormatted(dutyInfo.TerritoryId);
ImGui.BulletText(text);
ImU8String text2 = new ImU8String(26, 1);
text2.AppendLiteral("ContentFinderConditionId: ");
text2.AppendFormatted(dutyInfo.ContentFinderConditionId);
ImGui.BulletText(text2);
}
}
if (!dutyInfo.Enabled)
{
ImGuiComponents.HelpMarker("Questionable doesn't include support for this quest.", FontAwesomeIcon.Times, ImGuiColors.DalamudRed);
}
else if (dutyInfo.Notes.Count > 0)
{
ConfigComponent.DrawNotes(dutyInfo.EnabledByDefault, dutyInfo.Notes);
}
}
if (!ImGui.TableNextColumn())
{
continue;
}
ImU8String id = new ImU8String(6, 1);
id.AppendLiteral("##Duty");
id.AppendFormatted(dutyInfo.ContentFinderConditionId);
using (ImRaii.PushId(id))
{
using (ImRaii.Disabled(!dutyInfo.Enabled))
{
ImGui.SetNextItemWidth(200f);
if (ImGui.Combo((ImU8String)string.Empty, ref currentItem, (ReadOnlySpan<string>)array, array.Length))
{
base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Remove(dutyInfo.ContentFinderConditionId);
base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Remove(dutyInfo.ContentFinderConditionId);
switch (currentItem)
{
case 1:
base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Add(dutyInfo.ContentFinderConditionId);
break;
case 2:
base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Add(dutyInfo.ContentFinderConditionId);
break;
}
Save();
}
}
}
}
}
private static ChildDisposable BeginChildArea()
private static ImRaii.ChildDisposable BeginChildArea()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
return ImRaii.Child((ImU8String)"DutyConfiguration", new Vector2(725f, 400f), true);
return ImRaii.Child("DutyConfiguration", new Vector2(725f, 400f), border: true);
}
private void DrawEnableAllButton()
@ -881,8 +736,7 @@ internal sealed class SinglePlayerDutyConfigComponent : ConfigComponent
private void DrawClipboardButtons()
{
DisabledDisposable val = ImRaii.Disabled(base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Count + base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Count == 0);
try
using (ImRaii.Disabled(base.Configuration.SinglePlayerDuties.WhitelistedSinglePlayerDutyCfcIds.Count + base.Configuration.SinglePlayerDuties.BlacklistedSinglePlayerDutyCfcIds.Count == 0))
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Copy, "Export to clipboard"))
{
@ -891,14 +745,9 @@ internal sealed class SinglePlayerDutyConfigComponent : ConfigComponent
ImGui.SetClipboardText("qst:single:" + Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Join(";", first.Concat(second)))));
}
}
finally
{
((IDisposable)val)?.Dispose();
}
ImGui.SameLine();
string text = ImGui.GetClipboardText().Trim();
val = ImRaii.Disabled(string.IsNullOrEmpty(text) || !text.StartsWith("qst:single:", StringComparison.InvariantCulture));
try
using (ImRaii.Disabled(string.IsNullOrEmpty(text) || !text.StartsWith("qst:single:", StringComparison.InvariantCulture)))
{
if (!ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Paste, "Import from Clipboard"))
{
@ -922,16 +771,11 @@ internal sealed class SinglePlayerDutyConfigComponent : ConfigComponent
}
Save();
}
finally
{
((IDisposable)val)?.Dispose();
}
}
private void DrawResetButton()
{
DisabledDisposable val = ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl));
try
using (ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl)))
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Undo, "Reset to default"))
{
@ -940,10 +784,6 @@ internal sealed class SinglePlayerDutyConfigComponent : ConfigComponent
Save();
}
}
finally
{
((IDisposable)val)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("Hold CTRL to enable this button.");

View file

@ -67,142 +67,112 @@ internal sealed class StopConditionComponent : ConfigComponent
public override void DrawTab()
{
//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)"Stop###StopConditionns");
try
using ImRaii.TabItemDisposable tabItemDisposable = ImRaii.TabItem("Stop###StopConditionns");
if (!tabItemDisposable)
{
if (!val)
return;
}
bool v = base.Configuration.Stop.Enabled;
if (ImGui.Checkbox("Enable stop conditions", ref v))
{
base.Configuration.Stop.Enabled = v;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Pause: Stops automation when condition is met, but allows resuming past it.\nStop: True stop, blocks automation from starting/resuming if condition is already met.");
ImGui.Separator();
using (ImRaii.Disabled(!v))
{
ImGui.Text("Stop when character level reaches:");
int currentItem = (int)base.Configuration.Stop.LevelStopMode;
ImGui.SetNextItemWidth(100f);
if (ImGui.Combo((ImU8String)"##LevelMode", ref currentItem, (ReadOnlySpan<string>)StopModeNames, StopModeNames.Length))
{
return;
}
bool v = base.Configuration.Stop.Enabled;
if (ImGui.Checkbox("Enable stop conditions", ref v))
{
base.Configuration.Stop.Enabled = v;
base.Configuration.Stop.LevelStopMode = (Configuration.EStopConditionMode)currentItem;
Save();
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("Pause: Stops automation when condition is met, but allows resuming past it.\nStop: True stop, blocks automation from starting/resuming if condition is already met.");
using (ImRaii.Disabled(base.Configuration.Stop.LevelStopMode == Questionable.Configuration.EStopConditionMode.Off))
{
int data = base.Configuration.Stop.TargetLevel;
ImGui.SetNextItemWidth(100f);
if (ImGui.InputInt("Target level", ref data, 1, 5))
{
base.Configuration.Stop.TargetLevel = Math.Max(1, Math.Min(100, data));
Save();
}
int num = _objectTable.LocalPlayer?.Level ?? 0;
if (num > 0)
{
ImGui.SameLine();
ImU8String text = new ImU8String(11, 1);
text.AppendLiteral("(Current: ");
text.AppendFormatted(num);
text.AppendLiteral(")");
ImGui.TextDisabled(text);
}
}
ImGui.Separator();
DisabledDisposable val2 = ImRaii.Disabled(!v);
try
ImGui.Text("Stop on quest sequence (global):");
int currentItem2 = (int)base.Configuration.Stop.SequenceStopMode;
ImGui.SetNextItemWidth(100f);
if (ImGui.Combo((ImU8String)"##SequenceMode", ref currentItem2, (ReadOnlySpan<string>)StopModeNames, StopModeNames.Length))
{
ImGui.Text("Stop when character level reaches:");
int currentItem = (int)base.Configuration.Stop.LevelStopMode;
base.Configuration.Stop.SequenceStopMode = (Configuration.EStopConditionMode)currentItem2;
Save();
}
ImGui.SameLine();
using (ImRaii.Disabled(base.Configuration.Stop.SequenceStopMode == Questionable.Configuration.EStopConditionMode.Off))
{
int data2 = base.Configuration.Stop.TargetSequence;
ImGui.SetNextItemWidth(100f);
if (ImGui.Combo((ImU8String)"##LevelMode", ref currentItem, (ReadOnlySpan<string>)StopModeNames, StopModeNames.Length))
if (ImGui.InputInt("Target sequence", ref data2, 1, 1))
{
base.Configuration.Stop.LevelStopMode = (Configuration.EStopConditionMode)currentItem;
base.Configuration.Stop.TargetSequence = Math.Max(0, Math.Min(255, data2));
Save();
}
ImGui.SameLine();
DisabledDisposable val3 = ImRaii.Disabled(base.Configuration.Stop.LevelStopMode == Questionable.Configuration.EStopConditionMode.Off);
try
QuestController.QuestProgress currentQuest = _questController.CurrentQuest;
if (currentQuest != null)
{
int data = base.Configuration.Stop.TargetLevel;
ImGui.SetNextItemWidth(100f);
if (ImGui.InputInt("Target level", ref data, 1, 5))
{
base.Configuration.Stop.TargetLevel = Math.Max(1, Math.Min(100, data));
Save();
}
int num = _objectTable.LocalPlayer?.Level ?? 0;
if (num > 0)
{
ImGui.SameLine();
ImU8String text = new ImU8String(11, 1);
text.AppendLiteral("(Current: ");
text.AppendFormatted(num);
text.AppendLiteral(")");
ImGui.TextDisabled(text);
}
int sequence = currentQuest.Sequence;
ImGui.SameLine();
ImU8String text2 = new ImU8String(11, 1);
text2.AppendLiteral("(Current: ");
text2.AppendFormatted(sequence);
text2.AppendLiteral(")");
ImGui.TextDisabled(text2);
}
finally
}
ImGui.TextWrapped("Note: Individual quest sequences below override this global setting.");
ImGui.Separator();
ImGui.Text("Stop when completing quests (or reaching specific sequences):");
DrawCurrentlyAcceptedQuests();
_questSelector.DrawSelection();
List<ElementId> questsToStopAfter = base.Configuration.Stop.QuestsToStopAfter;
if (questsToStopAfter.Count > 0)
{
using (ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl)))
{
((IDisposable)val3)?.Dispose();
}
ImGui.Separator();
ImGui.Text("Stop on quest sequence (global):");
int currentItem2 = (int)base.Configuration.Stop.SequenceStopMode;
ImGui.SetNextItemWidth(100f);
if (ImGui.Combo((ImU8String)"##SequenceMode", ref currentItem2, (ReadOnlySpan<string>)StopModeNames, StopModeNames.Length))
{
base.Configuration.Stop.SequenceStopMode = (Configuration.EStopConditionMode)currentItem2;
Save();
}
ImGui.SameLine();
val3 = ImRaii.Disabled(base.Configuration.Stop.SequenceStopMode == Questionable.Configuration.EStopConditionMode.Off);
try
{
int data2 = base.Configuration.Stop.TargetSequence;
ImGui.SetNextItemWidth(100f);
if (ImGui.InputInt("Target sequence", ref data2, 1, 1))
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, "Clear All"))
{
base.Configuration.Stop.TargetSequence = Math.Max(0, Math.Min(255, data2));
Save();
}
QuestController.QuestProgress currentQuest = _questController.CurrentQuest;
if (currentQuest != null)
{
int sequence = currentQuest.Sequence;
ImGui.SameLine();
ImU8String text2 = new ImU8String(11, 1);
text2.AppendLiteral("(Current: ");
text2.AppendFormatted(sequence);
text2.AppendLiteral(")");
ImGui.TextDisabled(text2);
}
}
finally
{
((IDisposable)val3)?.Dispose();
}
ImGui.TextWrapped("Note: Individual quest sequences below override this global setting.");
ImGui.Separator();
ImGui.Text("Stop when completing quests (or reaching specific sequences):");
DrawCurrentlyAcceptedQuests();
_questSelector.DrawSelection();
List<ElementId> questsToStopAfter = base.Configuration.Stop.QuestsToStopAfter;
if (questsToStopAfter.Count > 0)
{
val3 = ImRaii.Disabled(!ImGui.IsKeyDown(ImGuiKey.ModCtrl));
try
{
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, "Clear All"))
foreach (ElementId item in questsToStopAfter)
{
foreach (ElementId item in questsToStopAfter)
{
string key = item.ToString();
base.Configuration.Stop.QuestSequences.Remove(key);
base.Configuration.Stop.QuestStopModes.Remove(key);
}
base.Configuration.Stop.QuestsToStopAfter.Clear();
Save();
string key = item.ToString();
base.Configuration.Stop.QuestSequences.Remove(key);
base.Configuration.Stop.QuestStopModes.Remove(key);
}
base.Configuration.Stop.QuestsToStopAfter.Clear();
Save();
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("Hold CTRL to enable this button.");
}
ImGui.Separator();
ImGui.Text("(Drag arrow buttons to reorder)");
}
DrawStopQuestList(questsToStopAfter);
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip("Hold CTRL to enable this button.");
}
ImGui.Separator();
ImGui.Text("(Drag arrow buttons to reorder)");
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
finally
{
((TabItemDisposable)(ref val)).Dispose();
DrawStopQuestList(questsToStopAfter);
}
}
@ -221,11 +191,10 @@ internal sealed class StopConditionComponent : ConfigComponent
{
continue;
}
ImU8String imU8String = new ImU8String(5, 1);
imU8String.AppendLiteral("Quest");
imU8String.AppendFormatted(elementId);
IdDisposable val = ImRaii.PushId(imU8String, true);
try
ImU8String id = new ImU8String(5, 1);
id.AppendLiteral("Quest");
id.AppendFormatted(elementId);
using (ImRaii.PushId(id))
{
ImGui.AlignTextToFramePadding();
ImU8String text = new ImU8String(1, 1);
@ -283,8 +252,7 @@ internal sealed class StopConditionComponent : ConfigComponent
{
ImGui.SetTooltip("Stop at specific sequence (unchecked = stop on quest completion)");
}
DisabledDisposable val2 = ImRaii.Disabled(!v);
try
using (ImRaii.Disabled(!v))
{
ImGui.SameLine();
ImGui.Text("Seq:");
@ -300,21 +268,12 @@ internal sealed class StopConditionComponent : ConfigComponent
Save();
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
if (questsToStopAfter.Count > 1)
{
FontDisposable val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.SameLine(ImGui.GetContentRegionAvail().X + ImGui.GetStyle().WindowPadding.X - ImGui.CalcTextSize(FontAwesomeIcon.ArrowsUpDown.ToIconString()).X - ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 4f - ImGui.GetStyle().ItemSpacing.X);
}
finally
{
((IDisposable)val3)?.Dispose();
}
if (_draggedItem == elementId)
{
ImGuiComponents.IconButton("##Move", FontAwesomeIcon.ArrowsUpDown, ImGui.ColorConvertU32ToFloat4(ImGui.GetColorU32(ImGuiCol.ButtonActive)));
@ -331,25 +290,16 @@ internal sealed class StopConditionComponent : ConfigComponent
}
else
{
FontDisposable val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.SameLine(ImGui.GetContentRegionAvail().X + ImGui.GetStyle().WindowPadding.X - ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 2f);
}
finally
{
((IDisposable)val3)?.Dispose();
}
}
if (ImGuiComponents.IconButton($"##Remove{i}", FontAwesomeIcon.Times))
{
quest = quest3;
}
}
finally
{
((IDisposable)val)?.Dispose();
}
Vector2 item2 = new Vector2(item.X + x, ImGui.GetCursorScreenPos().Y - ImGui.GetStyle().ItemSpacing.Y + 2f);
list.Add((item, item2));
}
@ -390,25 +340,20 @@ internal sealed class StopConditionComponent : ConfigComponent
private void DrawCurrentlyAcceptedQuests()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
List<Quest> currentlyAcceptedQuests = GetCurrentlyAcceptedQuests();
ImGui.Text("Currently Accepted Quests:");
ChildDisposable val = ImRaii.Child((ImU8String)"AcceptedQuestsList", new Vector2(-1f, 120f), true);
try
using (ImRaii.ChildDisposable childDisposable = ImRaii.Child("AcceptedQuestsList", new Vector2(-1f, 120f), border: true))
{
if (ChildDisposable.op_Implicit(val))
if ((bool)childDisposable)
{
if (currentlyAcceptedQuests.Count > 0)
{
foreach (Quest item in currentlyAcceptedQuests)
{
ImU8String imU8String = new ImU8String(13, 1);
imU8String.AppendLiteral("AcceptedQuest");
imU8String.AppendFormatted(item.Id);
IdDisposable val2 = ImRaii.PushId(imU8String, true);
try
ImU8String id = new ImU8String(13, 1);
id.AppendLiteral("AcceptedQuest");
id.AppendFormatted(item.Id);
using (ImRaii.PushId(id))
{
(Vector4, FontAwesomeIcon, string) questStyle = _uiUtils.GetQuestStyle(item.Id);
bool flag = false;
@ -426,17 +371,11 @@ internal sealed class StopConditionComponent : ConfigComponent
{
_questTooltipComponent.Draw(item.Info);
}
FontDisposable val3 = ImRaii.PushFont(UiBuilder.IconFont, true);
try
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.SameLine(ImGui.GetContentRegionAvail().X + ImGui.GetStyle().WindowPadding.X - ImGui.CalcTextSize(FontAwesomeIcon.Plus.ToIconString()).X - ImGui.GetStyle().FramePadding.X * 2f);
}
finally
{
((IDisposable)val3)?.Dispose();
}
DisabledDisposable val4 = ImRaii.Disabled(flag2);
try
using (ImRaii.Disabled(flag2))
{
if (ImGuiComponents.IconButton($"##Add{item.Id}", FontAwesomeIcon.Plus))
{
@ -445,19 +384,11 @@ internal sealed class StopConditionComponent : ConfigComponent
Save();
}
}
finally
{
((IDisposable)val4)?.Dispose();
}
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
{
ImGui.SetTooltip(flag2 ? "Quest already added to stop conditions" : "Add this quest to stop conditions");
}
}
finally
{
((IDisposable)val2)?.Dispose();
}
}
}
else
@ -468,10 +399,6 @@ internal sealed class StopConditionComponent : ConfigComponent
}
}
}
finally
{
((ChildDisposable)(ref val)).Dispose();
}
ImGui.Spacing();
}