muffin v7.4.6
This commit is contained in:
parent
bb09805213
commit
1cc65e495d
13 changed files with 1291 additions and 949 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue