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

@ -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();