muffin v6.21

This commit is contained in:
alydev 2025-10-12 13:34:40 +10:00
parent e192d07a7b
commit b7a9243899
4 changed files with 3461 additions and 2783 deletions

View file

@ -261,18 +261,59 @@ internal sealed class QuestJournalComponent
_questRegistry.TryGetQuest(questInfo.QuestId, out Quest quest);
ImGui.TableNextRow();
ImGui.TableNextColumn();
DrawQuestName(questInfo, out var expansionHovered);
DrawQuestTooltipAndContextMenu(questInfo, quest, expansionHovered);
ImGui.TableNextColumn();
DrawQuestSupportStatus(questInfo, quest);
ImGui.TableNextColumn();
DrawQuestCompletionStatus(questInfo);
}
private static void DrawQuestName(IQuestInfo questInfo, out bool expansionHovered)
{
expansionHovered = false;
if (questInfo.Expansion != (EExpansionVersion)255)
{
ImGui.PushFont(UiBuilder.MonoFont);
ImGui.PushStyleColor(ImGuiCol.Text, questInfo.Expansion.GetExpansionColor());
ImGui.TextUnformatted(questInfo.Expansion.ToAbbreviation().PadRight(3));
ImGui.PopStyleColor();
ImGui.PopFont();
if (ImGui.IsItemHovered())
{
expansionHovered = true;
}
ImGui.SameLine();
}
ImU8String id = new ImU8String(3, 2);
id.AppendFormatted(questInfo.Name);
id.AppendLiteral(" (");
id.AppendFormatted(questInfo.QuestId);
id.AppendLiteral(")");
ImGui.TreeNodeEx(id, ImGuiTreeNodeFlags.NoTreePushOnOpen | ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.SpanFullWidth);
if (ImGui.IsItemHovered())
}
private void DrawQuestTooltipAndContextMenu(IQuestInfo questInfo, Quest? quest, bool expansionHovered)
{
if ((ImGui.IsItemHovered() || expansionHovered) && questInfo.Expansion != (EExpansionVersion)255)
{
ImGui.BeginTooltip();
ImGui.PushStyleColor(ImGuiCol.Text, questInfo.Expansion.GetExpansionColor());
ImGui.TextUnformatted(questInfo.Expansion.ToFriendlyString());
ImGui.PopStyleColor();
ImGui.Separator();
_questTooltipComponent.Draw(questInfo);
ImGui.EndTooltip();
}
else if (ImGui.IsItemHovered() && questInfo.Expansion == (EExpansionVersion)255)
{
_questTooltipComponent.Draw(questInfo);
}
_questJournalUtils.ShowContextMenu(questInfo, quest, "QuestJournalComponent");
ImGui.TableNextColumn();
}
private void DrawQuestSupportStatus(IQuestInfo questInfo, Quest? quest)
{
float num;
using (_pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push())
{
@ -282,80 +323,78 @@ internal sealed class QuestJournalComponent
if (_questFunctions.IsQuestRemoved(questInfo.QuestId))
{
_uiUtils.ChecklistItem(string.Empty, ImGuiColors.DalamudGrey, FontAwesomeIcon.Minus);
}
else
{
if (quest != null)
{
QuestRoot root = quest.Root;
if (root != null && !root.Disabled)
{
List<ValidationIssue> issues = _questValidator.GetIssues(quest.Id);
if (issues.Any((ValidationIssue x) => x.Severity == EIssueSeverity.Error))
{
_uiUtils.ChecklistItem(string.Empty, ImGuiColors.DalamudRed, FontAwesomeIcon.ExclamationTriangle);
}
else if (issues.Count > 0)
{
_uiUtils.ChecklistItem(string.Empty, ImGuiColors.ParsedBlue, FontAwesomeIcon.InfoCircle);
}
else
{
_uiUtils.ChecklistItem(string.Empty, complete: true);
}
goto IL_0210;
}
}
_uiUtils.ChecklistItem(string.Empty, complete: false);
}
goto IL_0210;
IL_0210:
ImGui.TableNextColumn();
if (_questFunctions.IsQuestAccepted(questInfo.QuestId))
{
_uiUtils.ChecklistItem("Active", ImGuiColors.DalamudYellow, FontAwesomeIcon.PersonWalkingArrowRight);
return;
}
if (_questFunctions.IsQuestComplete(questInfo.QuestId))
if (quest != null)
{
if (questInfo.IsRepeatable)
QuestRoot root = quest.Root;
if (root != null && !root.Disabled)
{
bool num2 = _questFunctions.IsQuestLocked(questInfo.QuestId);
bool flag = _questFunctions.IsReadyToAcceptQuest(questInfo.QuestId);
if (!num2 && flag)
List<ValidationIssue> issues = _questValidator.GetIssues(quest.Id);
if (issues.Any((ValidationIssue x) => x.Severity == EIssueSeverity.Error))
{
_uiUtils.ChecklistItem("Available", ImGuiColors.ParsedBlue, FontAwesomeIcon.Running);
_uiUtils.ChecklistItem(string.Empty, ImGuiColors.DalamudRed, FontAwesomeIcon.ExclamationTriangle);
}
else if (issues.Count > 0)
{
_uiUtils.ChecklistItem(string.Empty, ImGuiColors.ParsedBlue, FontAwesomeIcon.InfoCircle);
}
else
{
_uiUtils.ChecklistItem("Complete", ImGuiColors.ParsedGreen, FontAwesomeIcon.Check);
_uiUtils.ChecklistItem(string.Empty, complete: true);
}
return;
}
else
{
_uiUtils.ChecklistItem("Complete", ImGuiColors.ParsedGreen, FontAwesomeIcon.Check);
}
}
_uiUtils.ChecklistItem(string.Empty, complete: false);
}
private void DrawQuestCompletionStatus(IQuestInfo questInfo)
{
if (_questFunctions.IsQuestAccepted(questInfo.QuestId))
{
_uiUtils.ChecklistItem("Active", ImGuiColors.DalamudYellow, FontAwesomeIcon.PersonWalkingArrowRight);
}
else if (_questFunctions.IsQuestComplete(questInfo.QuestId))
{
DrawCompletedQuestStatus(questInfo);
}
else
{
DrawIncompleteQuestStatus(questInfo);
}
}
private void DrawCompletedQuestStatus(IQuestInfo questInfo)
{
if (!questInfo.IsRepeatable)
{
_uiUtils.ChecklistItem("Complete", ImGuiColors.ParsedGreen, FontAwesomeIcon.Check);
return;
}
bool flag2 = false;
bool flag3 = _questFunctions.IsQuestUnobtainable(questInfo.QuestId);
bool flag4 = _questFunctions.IsQuestLocked(questInfo.QuestId);
bool flag5 = _questFunctions.IsReadyToAcceptQuest(questInfo.QuestId);
DateTime? seasonalQuestExpiry = questInfo.SeasonalQuestExpiry;
if (seasonalQuestExpiry.HasValue)
bool num = _questFunctions.IsQuestLocked(questInfo.QuestId);
bool flag = _questFunctions.IsReadyToAcceptQuest(questInfo.QuestId);
if (!num && flag)
{
DateTime valueOrDefault = seasonalQuestExpiry.GetValueOrDefault();
DateTime dateTime = ((valueOrDefault.Kind == DateTimeKind.Utc) ? valueOrDefault : valueOrDefault.ToUniversalTime());
if (DateTime.UtcNow > dateTime)
{
flag2 = true;
}
_uiUtils.ChecklistItem("Available", ImGuiColors.ParsedBlue, FontAwesomeIcon.Running);
}
if (flag2 || flag3)
else
{
_uiUtils.ChecklistItem("Complete", ImGuiColors.ParsedGreen, FontAwesomeIcon.Check);
}
}
private void DrawIncompleteQuestStatus(IQuestInfo questInfo)
{
bool num = IsQuestExpired(questInfo);
bool flag = _questFunctions.IsQuestUnobtainable(questInfo.QuestId);
bool flag2 = _questFunctions.IsQuestLocked(questInfo.QuestId);
bool flag3 = _questFunctions.IsReadyToAcceptQuest(questInfo.QuestId);
if (num || flag)
{
_uiUtils.ChecklistItem("Unobtainable", ImGuiColors.DalamudGrey, FontAwesomeIcon.Minus);
}
else if (flag4 || !flag5 || !_questRegistry.IsKnownQuest(questInfo.QuestId))
else if (flag2 || !flag3 || !_questRegistry.IsKnownQuest(questInfo.QuestId))
{
_uiUtils.ChecklistItem("Locked", ImGuiColors.DalamudRed, FontAwesomeIcon.Times);
}
@ -365,6 +404,18 @@ internal sealed class QuestJournalComponent
}
}
private static bool IsQuestExpired(IQuestInfo questInfo)
{
DateTime? seasonalQuestExpiry = questInfo.SeasonalQuestExpiry;
if (seasonalQuestExpiry.HasValue)
{
DateTime valueOrDefault = seasonalQuestExpiry.GetValueOrDefault();
DateTime dateTime = ((valueOrDefault.Kind == DateTimeKind.Utc) ? valueOrDefault : valueOrDefault.ToUniversalTime());
return DateTime.UtcNow > dateTime;
}
return false;
}
private static void DrawCount(int count, int total)
{
string text = 9999.ToString(CultureInfo.CurrentCulture);