muffin v6.20

This commit is contained in:
alydev 2025-10-11 12:31:50 +10:00
parent caeae47568
commit 103df55767
7 changed files with 1003 additions and 1076 deletions

File diff suppressed because it is too large Load diff

View file

@ -142,8 +142,6 @@ internal sealed class QuestController : MiniTaskController<QuestController>
private DateTime _lastAutoRefresh = DateTime.MinValue; private DateTime _lastAutoRefresh = DateTime.MinValue;
private readonly AlliedSocietyData _alliedSocietyData = new AlliedSocietyData();
private const char ClipboardSeparator = ';'; private const char ClipboardSeparator = ';';
public EAutomationType AutomationType public EAutomationType AutomationType
@ -945,18 +943,11 @@ internal sealed class QuestController : MiniTaskController<QuestController>
_combatController.Stop("Execute next step"); _combatController.Stop("Execute next step");
_gatheringController.Stop("Execute next step"); _gatheringController.Stop("Execute next step");
try try
{
if (CurrentQuest.Sequence == byte.MaxValue && CurrentQuest.Quest.Info.AlliedSociety != EAlliedSociety.None && _configuration.General.BatchAlliedSocietyTurnIns)
{
EnqueueBatchedAlliedSocietyTurnIns(questSequence, step);
}
else
{ {
foreach (ITask item in _taskCreator.CreateTasks(CurrentQuest.Quest, CurrentQuest.Sequence, questSequence, step)) foreach (ITask item in _taskCreator.CreateTasks(CurrentQuest.Quest, CurrentQuest.Sequence, questSequence, step))
{ {
_taskQueue.Enqueue(item); _taskQueue.Enqueue(item);
} }
}
ResetAutoRefreshState(); ResetAutoRefreshState();
return; return;
} }
@ -975,86 +966,6 @@ internal sealed class QuestController : MiniTaskController<QuestController>
goto IL_01e8; goto IL_01e8;
} }
private void EnqueueBatchedAlliedSocietyTurnIns(QuestSequence seq, QuestStep? step)
{
QuestProgress currentQuest = CurrentQuest;
if (currentQuest == null)
{
return;
}
EAlliedSociety alliedSociety = currentQuest.Quest.Info.AlliedSociety;
if (alliedSociety == EAlliedSociety.None)
{
return;
}
List<(QuestId, byte, int)> list = new List<(QuestId, byte, int)>();
foreach (Quest allQuest in _questRegistry.AllQuests)
{
if (allQuest == null || allQuest.Info.AlliedSociety != alliedSociety || !_questFunctions.IsQuestAccepted(allQuest.Id))
{
continue;
}
QuestProgressInfo questProgressInfo = _questFunctions.GetQuestProgressInfo(allQuest.Id);
if (questProgressInfo != null)
{
int item = 0;
if (allQuest.Id is QuestId item2)
{
list.Add((item2, questProgressInfo.Sequence, item));
}
}
}
if (list.Count == 0)
{
return;
}
foreach (var (questId, b, num) in list.Where<(QuestId, byte, int)>(((QuestId Id, byte Sequence, int StepIndex) x) => x.Sequence < byte.MaxValue))
{
if (!_questRegistry.TryGetQuest(questId, out Quest quest))
{
continue;
}
QuestSequence questSequence = quest.FindSequence(b);
if (questSequence == null)
{
continue;
}
QuestStep step2 = null;
if (num >= 0 && num < questSequence.Steps.Count)
{
step2 = questSequence.FindStep(num);
}
foreach (ITask item3 in _taskCreator.CreateTasks(quest, b, questSequence, step2))
{
_taskQueue.Enqueue(item3);
}
}
foreach (KeyValuePair<uint, List<QuestId>> item4 in _alliedSocietyData.GroupQuestsByTurnInIssuer(list.Select<(QuestId, byte, int), QuestId>(((QuestId Id, byte Sequence, int StepIndex) x) => x.Id)))
{
_ = item4.Key;
List<QuestId> value = item4.Value;
if (value.Count == 0)
{
continue;
}
QuestId questId2 = value[0];
if (!_questRegistry.TryGetQuest(questId2, out Quest quest2))
{
continue;
}
QuestSequence questSequence2 = quest2.FindSequence(byte.MaxValue);
if (questSequence2 == null)
{
continue;
}
QuestStep step3 = questSequence2.FindStep(0);
foreach (ITask item5 in _taskCreator.CreateTasks(quest2, byte.MaxValue, questSequence2, step3))
{
_taskQueue.Enqueue(item5);
}
}
}
public string ToStatString() public string ToStatString()
{ {
ITask task = _taskQueue.CurrentTaskExecutor?.CurrentTask; ITask task = _taskQueue.CurrentTaskExecutor?.CurrentTask;

View file

@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Runtime.InteropServices;
using Questionable.Model; using Questionable.Model;
using Questionable.Model.Common; using Questionable.Model.Common;
using Questionable.Model.Questing; using Questionable.Model.Questing;
@ -261,53 +260,4 @@ internal sealed class AlliedSocietyData
break; break;
} }
} }
public bool TryGetTurnInIssuers(ElementId elementId, out uint[] issuerDataIds)
{
EAlliedSociety commonAlliedSocietyTurnIn = GetCommonAlliedSocietyTurnIn(elementId);
if (commonAlliedSocietyTurnIn == EAlliedSociety.None)
{
issuerDataIds = Array.Empty<uint>();
return false;
}
GetCommonAlliedSocietyNpcs(commonAlliedSocietyTurnIn, out uint[] normalNpcs, out uint[] mountNpcs);
if (normalNpcs.Length != 0)
{
issuerDataIds = normalNpcs;
}
else if (mountNpcs.Length != 0)
{
issuerDataIds = mountNpcs;
}
else
{
issuerDataIds = Array.Empty<uint>();
}
return issuerDataIds.Length != 0;
}
public Dictionary<uint, List<QuestId>> GroupQuestsByTurnInIssuer(IEnumerable<QuestId> quests)
{
Dictionary<uint, List<QuestId>> dictionary = new Dictionary<uint, List<QuestId>>();
foreach (QuestId quest in quests)
{
if (TryGetTurnInIssuers(quest, out uint[] issuerDataIds) && issuerDataIds.Length != 0)
{
uint key = issuerDataIds[0];
if (dictionary.TryGetValue(key, out var value))
{
value.Add(quest);
continue;
}
int num = 1;
List<QuestId> list = new List<QuestId>(num);
CollectionsMarshal.SetCount(list, num);
Span<QuestId> span = CollectionsMarshal.AsSpan(list);
int index = 0;
span[index] = quest;
dictionary[key] = list;
}
}
return dictionary;
}
} }

View file

@ -212,26 +212,6 @@ internal sealed class GeneralConfigComponent : ConfigComponent
ImGui.TextColored(in col, text); ImGui.TextColored(in col, text);
ImGui.Unindent(); ImGui.Unindent();
} }
bool v9 = base.Configuration.General.BatchAlliedSocietyTurnIns;
if (ImGui.Checkbox("Batch allied society turn-ins", ref v9))
{
base.Configuration.General.BatchAlliedSocietyTurnIns = v9;
Save();
}
ImGui.SameLine();
using (ImRaii.PushFont(UiBuilder.IconFont))
{
ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString());
}
if (ImGui.IsItemHovered())
{
using (ImRaii.Tooltip())
{
ImGui.TextUnformatted("When enabled, allied society quests that share the same NPC will be turned in in a single conversation (batched).");
ImGui.TextUnformatted("If disabled, each allied society quest will be turned in individually.");
return;
}
}
} }
} }

View file

@ -107,14 +107,20 @@ internal sealed class QuestJournalUtils
HashSet<ElementId> visited = new HashSet<ElementId>(); HashSet<ElementId> visited = new HashSet<ElementId>();
CollectPrerequisitesRecursive(questInfo, list, visited); CollectPrerequisitesRecursive(questInfo, list, visited);
list.Reverse(); list.Reverse();
List<ElementId> list2 = (from qId in list List<ElementId> list2 = (from qId in list.Where(delegate(ElementId qId)
where !_questFunctions.IsQuestComplete(qId) {
if (!_questData.TryGetQuestInfo(qId, out IQuestInfo questInfo2))
{
return false;
}
return questInfo2.IsRepeatable || !_questFunctions.IsQuestComplete(qId);
})
where !_questFunctions.IsQuestUnobtainable(qId) where !_questFunctions.IsQuestUnobtainable(qId)
where _questRegistry.IsKnownQuest(qId) where _questRegistry.IsKnownQuest(qId)
where !_questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(qId)) where !_questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(qId))
select qId).ToList(); select qId).ToList();
list2.Reverse(); list2.Reverse();
if (!_questFunctions.IsQuestComplete(questInfo.QuestId) && !_questFunctions.IsQuestUnobtainable(questInfo.QuestId) && _questRegistry.IsKnownQuest(questInfo.QuestId) && !_questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(questInfo.QuestId))) if ((questInfo.IsRepeatable || !_questFunctions.IsQuestComplete(questInfo.QuestId)) && !_questFunctions.IsQuestUnobtainable(questInfo.QuestId) && _questRegistry.IsKnownQuest(questInfo.QuestId) && !_questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(questInfo.QuestId)))
{ {
list2.Add(questInfo.QuestId); list2.Add(questInfo.QuestId);
} }

View file

@ -37,8 +37,6 @@ internal sealed class Configuration : IPluginConfiguration
public int AutoStepRefreshDelaySeconds { get; set; } = 10; public int AutoStepRefreshDelaySeconds { get; set; } = 10;
public bool HideSeasonalEventsFromJournalProgress { get; set; } public bool HideSeasonalEventsFromJournalProgress { get; set; }
public bool BatchAlliedSocietyTurnIns { get; set; } = true;
} }
internal sealed class StopConfiguration internal sealed class StopConfiguration

View file

@ -2,15 +2,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14 # Visual Studio 14
VisualStudioVersion = 14.0.24720.0 VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuestPaths", "QuestPaths\QuestPaths.csproj", "{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuestPaths", "QuestPaths\QuestPaths.csproj", "{67FBC0A0-7E33-4060-A7F7-004405CEA1DC}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GatheringPaths", "GatheringPaths\GatheringPaths.csproj", "{11208A06-31FC-4E60-890B-16B1C4BF7DF4}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GatheringPaths", "GatheringPaths\GatheringPaths.csproj", "{9206394B-067C-4D9F-A8CD-0DA7B58AB460}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Questionable", "Questionable\Questionable.csproj", "{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Questionable", "Questionable\Questionable.csproj", "{3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Questionable.Model", "Questionable.Model\Questionable.Model.csproj", "{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Questionable.Model", "Questionable.Model\Questionable.Model.csproj", "{5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LLib", "LLib\LLib.csproj", "{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LLib", "LLib\LLib.csproj", "{F3111698-3780-499D-AF9B-EA62D8EA54C3}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -20,46 +20,46 @@ Global
Release|x64 = Release|x64 Release|x64 = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Debug|AnyCPU.Build.0 = Debug|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Debug|AnyCPU.Build.0 = Debug|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Debug|x64.ActiveCfg = Debug|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Debug|x64.ActiveCfg = Debug|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Debug|x64.Build.0 = Debug|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Debug|x64.Build.0 = Debug|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Release|AnyCPU.ActiveCfg = Release|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Release|AnyCPU.ActiveCfg = Release|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Release|AnyCPU.Build.0 = Release|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Release|AnyCPU.Build.0 = Release|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Release|x64.ActiveCfg = Release|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Release|x64.ActiveCfg = Release|AnyCPU
{9D7EBCB0-63A0-42D6-B893-6C057E5026F6}.Release|x64.Build.0 = Release|AnyCPU {67FBC0A0-7E33-4060-A7F7-004405CEA1DC}.Release|x64.Build.0 = Release|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Debug|AnyCPU.Build.0 = Debug|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Debug|AnyCPU.Build.0 = Debug|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Debug|x64.ActiveCfg = Debug|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Debug|x64.ActiveCfg = Debug|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Debug|x64.Build.0 = Debug|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Debug|x64.Build.0 = Debug|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Release|AnyCPU.ActiveCfg = Release|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Release|AnyCPU.ActiveCfg = Release|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Release|AnyCPU.Build.0 = Release|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Release|AnyCPU.Build.0 = Release|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Release|x64.ActiveCfg = Release|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Release|x64.ActiveCfg = Release|AnyCPU
{11208A06-31FC-4E60-890B-16B1C4BF7DF4}.Release|x64.Build.0 = Release|AnyCPU {9206394B-067C-4D9F-A8CD-0DA7B58AB460}.Release|x64.Build.0 = Release|AnyCPU
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Debug|AnyCPU.ActiveCfg = Debug|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Debug|AnyCPU.ActiveCfg = Debug|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Debug|AnyCPU.Build.0 = Debug|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Debug|AnyCPU.Build.0 = Debug|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Debug|x64.ActiveCfg = Debug|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Debug|x64.ActiveCfg = Debug|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Debug|x64.Build.0 = Debug|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Debug|x64.Build.0 = Debug|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Release|AnyCPU.ActiveCfg = Release|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Release|AnyCPU.ActiveCfg = Release|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Release|AnyCPU.Build.0 = Release|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Release|AnyCPU.Build.0 = Release|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Release|x64.ActiveCfg = Release|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Release|x64.ActiveCfg = Release|x64
{14AEAF19-6B62-4D0C-8957-A5312A03A0DD}.Release|x64.Build.0 = Release|x64 {3DFF6333-BF7E-4B93-ADA4-7F2111AB12FE}.Release|x64.Build.0 = Release|x64
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Debug|AnyCPU.Build.0 = Debug|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Debug|AnyCPU.Build.0 = Debug|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Debug|x64.ActiveCfg = Debug|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Debug|x64.ActiveCfg = Debug|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Debug|x64.Build.0 = Debug|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Debug|x64.Build.0 = Debug|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Release|AnyCPU.ActiveCfg = Release|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Release|AnyCPU.ActiveCfg = Release|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Release|AnyCPU.Build.0 = Release|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Release|AnyCPU.Build.0 = Release|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Release|x64.ActiveCfg = Release|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Release|x64.ActiveCfg = Release|AnyCPU
{00E7293F-0AB8-421E-A3D3-42E4D1C78EBD}.Release|x64.Build.0 = Release|AnyCPU {5D14B235-EAE5-4D9A-BEDE-7612D73FD7E7}.Release|x64.Build.0 = Release|AnyCPU
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Debug|AnyCPU.ActiveCfg = Debug|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Debug|AnyCPU.ActiveCfg = Debug|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Debug|AnyCPU.Build.0 = Debug|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Debug|AnyCPU.Build.0 = Debug|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Debug|x64.ActiveCfg = Debug|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Debug|x64.ActiveCfg = Debug|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Debug|x64.Build.0 = Debug|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Debug|x64.Build.0 = Debug|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Release|AnyCPU.ActiveCfg = Release|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Release|AnyCPU.ActiveCfg = Release|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Release|AnyCPU.Build.0 = Release|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Release|AnyCPU.Build.0 = Release|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Release|x64.ActiveCfg = Release|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Release|x64.ActiveCfg = Release|x64
{5BFC9AF6-6A76-46CF-901F-ABF5B1481A1C}.Release|x64.Build.0 = Release|x64 {F3111698-3780-499D-AF9B-EA62D8EA54C3}.Release|x64.Build.0 = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE