1
0
Fork 0
forked from aly/qstbak

muffin v7.4.6

This commit is contained in:
alydev 2025-12-24 05:01:16 +10:00
parent bb09805213
commit 1cc65e495d
13 changed files with 1291 additions and 949 deletions

View file

@ -52,15 +52,23 @@ internal sealed class DebugConfigComponent : ConfigComponent
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 v5 = base.Configuration.Advanced.DisableAutoDutyBareMode;
if (ImGui.Checkbox("Use Pre-Loop/Loop/Post-Loop settings", ref v5))
bool v6 = base.Configuration.Advanced.DisableAutoDutyBareMode;
if (ImGui.Checkbox("Use Pre-Loop/Loop/Post-Loop settings", ref v6))
{
base.Configuration.Advanced.DisableAutoDutyBareMode = v5;
base.Configuration.Advanced.DisableAutoDutyBareMode = v6;
Save();
}
ImGui.SameLine();
@ -70,42 +78,42 @@ internal sealed class DebugConfigComponent : ConfigComponent
ImGui.Text("Quest/Interaction Skips");
using (ImRaii.PushIndent())
{
bool v6 = base.Configuration.Advanced.SkipAetherCurrents;
if (ImGui.Checkbox("Don't pick up aether currents/aether current quests", ref v6))
bool v7 = base.Configuration.Advanced.SkipAetherCurrents;
if (ImGui.Checkbox("Don't pick up aether currents/aether current quests", ref v7))
{
base.Configuration.Advanced.SkipAetherCurrents = v6;
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 v7 = base.Configuration.Advanced.SkipClassJobQuests;
if (ImGui.Checkbox("Don't pick up class/job/role quests", ref v7))
bool v8 = base.Configuration.Advanced.SkipClassJobQuests;
if (ImGui.Checkbox("Don't pick up class/job/role quests", ref v8))
{
base.Configuration.Advanced.SkipClassJobQuests = v7;
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 v8 = base.Configuration.Advanced.SkipARealmRebornHardModePrimals;
if (ImGui.Checkbox("Don't pick up ARR hard mode primal quests", ref v8))
bool v9 = base.Configuration.Advanced.SkipARealmRebornHardModePrimals;
if (ImGui.Checkbox("Don't pick up ARR hard mode primal quests", ref v9))
{
base.Configuration.Advanced.SkipARealmRebornHardModePrimals = v8;
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 v9 = base.Configuration.Advanced.SkipCrystalTowerRaids;
if (ImGui.Checkbox("Don't pick up Crystal Tower quests", ref v9))
bool v10 = base.Configuration.Advanced.SkipCrystalTowerRaids;
if (ImGui.Checkbox("Don't pick up Crystal Tower quests", ref v10))
{
base.Configuration.Advanced.SkipCrystalTowerRaids = v9;
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 v10 = base.Configuration.Advanced.PreventQuestCompletion;
if (ImGui.Checkbox("Prevent quest completion", ref v10))
bool v11 = base.Configuration.Advanced.PreventQuestCompletion;
if (ImGui.Checkbox("Prevent quest completion", ref v11))
{
base.Configuration.Advanced.PreventQuestCompletion = v10;
base.Configuration.Advanced.PreventQuestCompletion = v11;
Save();
}
ImGui.SameLine();

View file

@ -43,6 +43,10 @@ internal sealed class GeneralConfigComponent : ConfigComponent
private bool _mountComboJustOpened;
private string _classJobSearchText = string.Empty;
private bool _classJobComboJustOpened;
public GeneralConfigComponent(IDalamudPluginInterface pluginInterface, Configuration configuration, IDataManager dataManager, ClassJobUtils classJobUtils, QuestRegistry questRegistry, TerritoryData territoryData)
: base(pluginInterface, configuration)
{
@ -155,17 +159,54 @@ internal sealed class GeneralConfigComponent : ConfigComponent
base.Configuration.General.GrandCompany = (FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany)currentItem2;
Save();
}
int currentItem3 = Array.IndexOf(_classJobIds, base.Configuration.General.CombatJob);
if (currentItem3 == -1)
int num3 = Array.IndexOf(_classJobIds, base.Configuration.General.CombatJob);
if (num3 == -1)
{
base.Configuration.General.CombatJob = EClassJob.Adventurer;
Save();
currentItem3 = 0;
num3 = 0;
}
if (ImGui.Combo((ImU8String)"Preferred Combat Job", ref currentItem3, (ReadOnlySpan<string>)_classJobNames, _classJobNames.Length))
string text2 = ((num3 >= 0 && num3 < _classJobNames.Length) ? _classJobNames[num3] : "Unknown");
if (ImGui.BeginCombo("Preferred Combat Job", text2, ImGuiComboFlags.HeightLarge))
{
base.Configuration.General.CombatJob = _classJobIds[currentItem3];
Save();
if (!_classJobComboJustOpened)
{
ImGui.SetKeyboardFocusHere();
_classJobComboJustOpened = true;
}
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##CombatJobSearch", "Search combat jobs...", ref _classJobSearchText, 256);
ImGui.Separator();
using (ImRaii.IEndObject endObject3 = ImRaii.Child("##CombatJobScrollArea", new Vector2(0f, 300f), border: false))
{
if (endObject3)
{
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
{
_classJobComboJustOpened = false;
}
ImGui.Separator();
ImGui.Text("UI");
@ -212,16 +253,38 @@ internal sealed class GeneralConfigComponent : ConfigComponent
ImGui.Text("Questing");
using (ImRaii.PushIndent())
{
bool v7 = base.Configuration.General.ConfigureTextAdvance;
if (ImGui.Checkbox("Automatically configure TextAdvance with the recommended settings", ref v7))
bool v7 = base.Configuration.General.CinemaMode;
if (ImGui.Checkbox("Cinema Mode (watch cutscenes)", ref v7))
{
base.Configuration.General.ConfigureTextAdvance = v7;
base.Configuration.General.CinemaMode = v7;
Save();
}
bool v8 = base.Configuration.General.SkipLowPriorityDuties;
if (ImGui.Checkbox("Unlock certain optional dungeons and raids (instead of waiting for completion)", ref v8))
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
base.Configuration.General.SkipLowPriorityDuties = v8;
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
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.");
}
}
bool v8 = base.Configuration.General.ConfigureTextAdvance;
if (ImGui.Checkbox("Automatically configure TextAdvance with the recommended settings", ref v8))
{
base.Configuration.General.ConfigureTextAdvance = v8;
Save();
}
bool v9 = base.Configuration.General.SkipLowPriorityDuties;
if (ImGui.Checkbox("Unlock certain optional dungeons and raids (instead of waiting for completion)", ref v9))
{
base.Configuration.General.SkipLowPriorityDuties = v9;
Save();
}
ImGui.SameLine();
@ -241,18 +304,18 @@ internal sealed class GeneralConfigComponent : ConfigComponent
{
if (_territoryData.TryGetContentFinderCondition(lowPriorityContentFinderConditionQuest.ContentFinderConditionId, out TerritoryData.ContentFinderConditionData contentFinderConditionData))
{
ImU8String text2 = new ImU8String(0, 1);
text2.AppendFormatted(contentFinderConditionData.Name);
ImGui.BulletText(text2);
ImU8String text3 = new ImU8String(0, 1);
text3.AppendFormatted(contentFinderConditionData.Name);
ImGui.BulletText(text3);
}
}
}
}
ImGui.Spacing();
bool v9 = base.Configuration.General.AutoStepRefreshEnabled;
if (ImGui.Checkbox("Automatically refresh quest steps when stuck", ref v9))
bool v10 = base.Configuration.General.AutoStepRefreshEnabled;
if (ImGui.Checkbox("Automatically refresh quest steps when stuck", ref v10))
{
base.Configuration.General.AutoStepRefreshEnabled = v9;
base.Configuration.General.AutoStepRefreshEnabled = v10;
Save();
}
ImGui.SameLine();
@ -268,37 +331,37 @@ internal sealed class GeneralConfigComponent : ConfigComponent
ImGui.Text("This helps resume automated quest completion when interruptions occur.");
}
}
using (ImRaii.Disabled(!v9))
using (ImRaii.Disabled(!v10))
{
ImGui.Indent();
int v10 = base.Configuration.General.AutoStepRefreshDelaySeconds;
int v11 = base.Configuration.General.AutoStepRefreshDelaySeconds;
ImGui.SetNextItemWidth(150f);
if (ImGui.SliderInt("Refresh delay (seconds)", ref v10, 10, 180))
if (ImGui.SliderInt("Refresh delay (seconds)", ref v11, 10, 180))
{
base.Configuration.General.AutoStepRefreshDelaySeconds = v10;
base.Configuration.General.AutoStepRefreshDelaySeconds = v11;
Save();
}
Vector4 col = new Vector4(0.7f, 0.7f, 0.7f, 1f);
ImU8String text3 = new ImU8String(77, 1);
text3.AppendLiteral("Quest steps will refresh automatically after ");
text3.AppendFormatted(v10);
text3.AppendLiteral(" seconds if no progress is made.");
ImGui.TextColored(in col, text3);
ImU8String text4 = new ImU8String(77, 1);
text4.AppendLiteral("Quest steps will refresh automatically after ");
text4.AppendFormatted(v11);
text4.AppendLiteral(" seconds if no progress is made.");
ImGui.TextColored(in col, text4);
ImGui.Unindent();
}
ImGui.Spacing();
ImGui.Separator();
ImGui.Text("Priority Quest Management");
bool v11 = base.Configuration.General.ClearPriorityQuestsOnLogout;
if (ImGui.Checkbox("Clear priority quests on character logout", ref v11))
bool v12 = base.Configuration.General.ClearPriorityQuestsOnLogout;
if (ImGui.Checkbox("Clear priority quests on character logout", ref v12))
{
base.Configuration.General.ClearPriorityQuestsOnLogout = v11;
base.Configuration.General.ClearPriorityQuestsOnLogout = v12;
Save();
}
bool v12 = base.Configuration.General.ClearPriorityQuestsOnCompletion;
if (ImGui.Checkbox("Remove priority quests when completed", ref v12))
bool v13 = base.Configuration.General.ClearPriorityQuestsOnCompletion;
if (ImGui.Checkbox("Remove priority quests when completed", ref v13))
{
base.Configuration.General.ClearPriorityQuestsOnCompletion = v12;
base.Configuration.General.ClearPriorityQuestsOnCompletion = v13;
Save();
}
ImGui.SameLine();

View file

@ -1,5 +1,6 @@
using System;
using System.Linq;
using System.Numerics;
using Dalamud.Bindings.ImGui;
using Dalamud.Game.Text;
using Dalamud.Interface.Utility.Raii;
@ -10,9 +11,21 @@ namespace Questionable.Windows.ConfigComponents;
internal sealed class NotificationConfigComponent : ConfigComponent
{
private readonly XivChatType[] _xivChatTypes;
private readonly string[] _chatTypeNames;
private string _chatChannelSearchText = string.Empty;
private bool _chatChannelComboJustOpened;
public NotificationConfigComponent(IDalamudPluginInterface pluginInterface, Configuration configuration)
: base(pluginInterface, configuration)
{
_xivChatTypes = (from x in Enum.GetValues<XivChatType>()
where x != XivChatType.StandardEmote
select x).ToArray();
_chatTypeNames = _xivChatTypes.Select((XivChatType t) => t.GetAttribute<XivChatTypeInfoAttribute>()?.FancyName ?? t.ToString()).ToArray();
}
public override void DrawTab()
@ -32,15 +45,52 @@ internal sealed class NotificationConfigComponent : ConfigComponent
{
using (ImRaii.PushIndent())
{
XivChatType[] array = (from x in Enum.GetValues<XivChatType>()
where x != XivChatType.StandardEmote
select x).ToArray();
int currentItem = Array.IndexOf(array, base.Configuration.Notifications.ChatType);
string[] array2 = array.Select((XivChatType t) => t.GetAttribute<XivChatTypeInfoAttribute>()?.FancyName ?? t.ToString()).ToArray();
if (ImGui.Combo((ImU8String)"Chat channel", ref currentItem, (ReadOnlySpan<string>)array2, array2.Length))
int num = Array.IndexOf(_xivChatTypes, base.Configuration.Notifications.ChatType);
if (num == -1)
{
base.Configuration.Notifications.ChatType = array[currentItem];
Save();
num = 0;
}
string text = ((num >= 0 && num < _chatTypeNames.Length) ? _chatTypeNames[num] : "Unknown");
if (ImGui.BeginCombo("Chat channel", text, ImGuiComboFlags.HeightLarge))
{
if (!_chatChannelComboJustOpened)
{
ImGui.SetKeyboardFocusHere();
_chatChannelComboJustOpened = true;
}
ImGui.SetNextItemWidth(-1f);
ImGui.InputTextWithHint("##ChatChannelSearch", "Search chat channels...", ref _chatChannelSearchText, 256);
ImGui.Separator();
using (ImRaii.IEndObject endObject2 = ImRaii.Child("##ChatChannelScrollArea", new Vector2(0f, 300f), border: false))
{
if (endObject2)
{
string value = _chatChannelSearchText.ToUpperInvariant();
for (int i = 0; i < _chatTypeNames.Length; i++)
{
if (string.IsNullOrEmpty(_chatChannelSearchText) || _chatTypeNames[i].ToUpperInvariant().Contains(value, StringComparison.Ordinal))
{
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();
}
}
}
}
}
ImGui.EndCombo();
}
else
{
_chatChannelComboJustOpened = false;
}
}
}