muffin v7.4.10

This commit is contained in:
alydev 2026-01-19 08:31:23 +10:00
parent 2df81c5d15
commit b8dd142c23
47 changed files with 3604 additions and 1058 deletions

View file

@ -2,4 +2,5 @@ namespace Questionable.Functions;
internal static class GameSignatures
{
internal const string EnqueueSnipeTask = "48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 50 48 8B F9 48 8D 4C 24 ??";
}

View file

@ -179,7 +179,6 @@ internal sealed class QuestFunctions
Questionable.Model.Quest quest;
bool flag = _questRegistry.TryGetQuest(questReference.CurrentQuest, out quest);
bool flag2 = IsQuestAccepted(questReference.CurrentQuest);
_logger.LogTrace("MSQ check: QuestId={QuestId}, InRegistry={InRegistry}, Level={QuestLevel}, CurrentLevel={CurrentLevel}, IsAccepted={IsAccepted}", questReference.CurrentQuest, flag, ((int?)quest?.Info.Level) ?? (-1), currentLevel, flag2);
EClassJob valueOrDefault = ((EClassJob?)_objectTable.LocalPlayer?.ClassJob.RowId).GetValueOrDefault();
if (valueOrDefault != EClassJob.Adventurer)
{
@ -193,7 +192,7 @@ internal sealed class QuestFunctions
return new QuestReference(questInfo.QuestId, QuestManager.GetQuestSequence(questInfo.QuestId.Value), questReference.State);
}
}
if (flag && quest.Info.Level > currentLevel && !flag2)
if (flag && quest.Info.Level > currentLevel && !flag2 && _configuration.General.MsqPriority != Configuration.EMsqPriorityMode.Manual)
{
if (_lastLoggedLevelLockedMsq != questReference.CurrentQuest)
{
@ -208,10 +207,10 @@ internal sealed class QuestFunctions
List<QuestId> lockedQuests = _questData.GetLockedClassQuests();
List<QuestInfo> list = (from x in classJobQuests.Where(delegate(QuestInfo x)
{
bool num2 = x.Level <= currentLevel && x.Level <= 5;
bool flag3 = !IsQuestComplete(x.QuestId);
bool flag4 = !lockedQuests.Contains(x.QuestId);
return num2 && flag3 && flag4;
bool num3 = x.Level <= currentLevel && x.Level <= 5;
bool flag4 = !IsQuestComplete(x.QuestId);
bool flag5 = !lockedQuests.Contains(x.QuestId);
return num3 && flag4 && flag5;
})
orderby x.Level
select x).ToList();
@ -276,24 +275,33 @@ internal sealed class QuestFunctions
_loggedNoClassQuestsAvailable = false;
_loggedAdventurerClass = false;
}
if (questReference.CurrentQuest != null && !IsQuestAccepted(questReference.CurrentQuest))
bool num = questReference.CurrentQuest != null && !IsQuestAccepted(questReference.CurrentQuest);
bool flag3 = true;
if (num)
{
if (allowNewMsq)
switch (_configuration.General.MsqPriority)
{
return questReference;
case Configuration.EMsqPriorityMode.Always:
if (allowNewMsq)
{
return questReference;
}
break;
case Configuration.EMsqPriorityMode.Manual:
flag3 = false;
break;
}
questReference = QuestReference.NoQuest(questReference.State);
}
List<(ElementId, byte)> list3 = new List<(ElementId, byte)>();
for (int num = ptr->TrackedQuests.Length - 1; num >= 0; num--)
for (int num2 = ptr->TrackedQuests.Length - 1; num2 >= 0; num2--)
{
TrackingWork trackingWork = ptr->TrackedQuests[num];
TrackingWork trackingWork = ptr->TrackedQuests[num2];
switch (trackingWork.QuestType)
{
case 1:
{
ElementId elementId2 = new QuestId(ptr->NormalQuests[trackingWork.Index].QuestId);
if (_questRegistry.IsKnownQuest(elementId2))
if (_questRegistry.IsKnownQuest(elementId2) && !IsQuestBlacklisted(elementId2))
{
list3.Add((elementId2, QuestManager.GetQuestSequence(elementId2.Value)));
}
@ -356,7 +364,7 @@ internal sealed class QuestFunctions
{
return new QuestReference(elementId3, QuestManager.GetQuestSequence(elementId3.Value), questReference.State);
}
if (questReference.CurrentQuest != null)
if (flag3 && questReference.CurrentQuest != null)
{
return questReference;
}
@ -687,6 +695,10 @@ internal sealed class QuestFunctions
public unsafe bool IsReadyToAcceptQuest(ElementId questId, bool ignoreLevel = false)
{
if (IsQuestBlacklisted(questId))
{
return false;
}
_questRegistry.TryGetQuest(questId, out Questionable.Model.Quest quest);
if (quest != null)
{
@ -712,15 +724,15 @@ internal sealed class QuestFunctions
{
return false;
}
goto IL_0077;
goto IL_0082;
}
}
if (IsQuestAcceptedOrComplete(questId))
{
return false;
}
goto IL_0077;
IL_0077:
goto IL_0082;
IL_0082:
if (IsQuestLocked(questId))
{
return false;
@ -752,6 +764,11 @@ internal sealed class QuestFunctions
return true;
}
public bool IsQuestBlacklisted(ElementId questId)
{
return _configuration.General.BlacklistedQuests.Contains(questId);
}
public bool IsQuestAcceptedOrComplete(ElementId elementId)
{
if (!IsQuestComplete(elementId))
@ -1069,18 +1086,17 @@ internal sealed class QuestFunctions
List<QuestSequence> list = quest?.Root?.QuestSequence;
if (list != null && list.Count > 0)
{
goto IL_0228;
goto IL_01fd;
}
}
if (_alreadyLoggedUnobtainableQuestsDetailed.Add(questId.Value))
{
_questData.ApplySeasonalOverride(questId, isSeasonal: true, null);
_logger.LogDebug("Quest {QuestId} unobtainable: journal genre {Genre} is 'event (seasonal)' and no quest path", questId, questInfo2.JournalGenre);
}
return true;
}
goto IL_0228;
IL_0228:
goto IL_01fd;
IL_01fd:
if (questInfo2.QuestLocks.Count > 0)
{
int num = questInfo2.QuestLocks.Count((QuestId x) => IsQuestComplete(x) || x.Equals(extraCompletedQuest));