muffin v6.13

This commit is contained in:
alydev 2025-10-09 08:30:06 +10:00
parent 0950798597
commit b08d196477
10 changed files with 1304 additions and 1038 deletions

View file

@ -520,6 +520,18 @@ internal sealed class QuestController : MiniTaskController<QuestController>
else if (!_questFunctions.IsQuestComplete(_startedQuest.Quest.Id))
{
_logger.LogInformation("Quest {QuestId} was abandoned, clearing started quest", _startedQuest.Quest.Id);
(ElementId, byte)? tuple = (from x in ManualPriorityQuests
where _questFunctions.IsReadyToAcceptQuest(x.Id)
select ((ElementId Id, byte))(Id: x.Id, 0)).FirstOrDefault();
if (tuple.HasValue)
{
(ElementId, byte) valueOrDefault = tuple.GetValueOrDefault();
if ((object)valueOrDefault.Item1 != null && _questRegistry.TryGetQuest(valueOrDefault.Item1, out Quest quest))
{
_logger.LogInformation("Setting priority quest {QuestId} as next quest", valueOrDefault.Item1);
SetNextQuest(quest);
}
}
_startedQuest = null;
Stop("Quest abandoned");
return;
@ -551,9 +563,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>
}
byte b;
QuestProgress questProgress;
ElementId CurrentQuest;
byte Sequence;
MainScenarioQuestState State;
ElementId elementId;
MainScenarioQuestState mainScenarioQuestState;
if (_simulatedQuest != null)
{
b = _simulatedQuest.Sequence;
@ -577,8 +588,38 @@ internal sealed class QuestController : MiniTaskController<QuestController>
ExecuteNextStep();
}
}
else if (_startedQuest != null)
else
{
ElementId CurrentQuest;
byte Sequence;
MainScenarioQuestState State;
if (_startedQuest == null)
{
_questFunctions.GetCurrentQuest(AutomationType != EAutomationType.SingleQuestB).Deconstruct(out CurrentQuest, out Sequence, out State);
elementId = CurrentQuest;
b = Sequence;
mainScenarioQuestState = State;
(ElementId, byte)? tuple2 = (from x in ManualPriorityQuests
where _questFunctions.IsQuestAccepted(x.Id)
select (Id: x.Id, _questFunctions.GetQuestProgressInfo(x.Id)?.Sequence ?? 0)).FirstOrDefault();
if (tuple2.HasValue)
{
(ElementId, byte) valueOrDefault2 = tuple2.GetValueOrDefault();
if ((object)valueOrDefault2.Item1 != null)
{
(elementId, b) = valueOrDefault2;
goto IL_0813;
}
}
Quest quest2 = ManualPriorityQuests.FirstOrDefault((Quest x) => _questFunctions.IsReadyToAcceptQuest(x.Id));
if (quest2 != null)
{
_logger.LogInformation("Setting ready priority quest {QuestId} as next quest", quest2.Id);
SetNextQuest(quest2);
return;
}
goto IL_0813;
}
questProgress = _startedQuest;
b = _startedQuest.Sequence;
QuestProgressInfo questProgressInfo2 = _questFunctions.GetQuestProgressInfo(_startedQuest.Quest.Id);
@ -590,117 +631,42 @@ internal sealed class QuestController : MiniTaskController<QuestController>
if (AutomationType == EAutomationType.Manual || !IsRunning)
{
_questFunctions.GetCurrentQuest(AutomationType != EAutomationType.SingleQuestB).Deconstruct(out CurrentQuest, out Sequence, out State);
ElementId elementId = CurrentQuest;
ElementId elementId2 = CurrentQuest;
byte sequence = Sequence;
(ElementId, byte)? tuple = (from x in ManualPriorityQuests
where _questFunctions.IsReadyToAcceptQuest(x.Id) || _questFunctions.IsQuestAccepted(x.Id)
(ElementId, byte)? tuple4 = (from x in ManualPriorityQuests
where _questFunctions.IsQuestAccepted(x.Id)
select (Id: x.Id, _questFunctions.GetQuestProgressInfo(x.Id)?.Sequence ?? 0)).FirstOrDefault();
if (tuple.HasValue)
if (tuple4.HasValue)
{
(ElementId, byte) valueOrDefault = tuple.GetValueOrDefault();
if ((object)valueOrDefault.Item1 != null)
(ElementId, byte) valueOrDefault3 = tuple4.GetValueOrDefault();
if ((object)valueOrDefault3.Item1 != null)
{
(elementId, sequence) = valueOrDefault;
(elementId2, sequence) = valueOrDefault3;
}
}
if (elementId != null && elementId.Value != 0 && _startedQuest.Quest.Id != elementId)
if (elementId2 != null && elementId2.Value != 0 && _startedQuest.Quest.Id != elementId2)
{
_logger.LogInformation("Game current quest changed from {OldQuest} to {NewQuest}, updating started quest", _startedQuest.Quest.Id, elementId);
if (_questRegistry.TryGetQuest(elementId, out Quest quest))
_logger.LogInformation("Game current quest changed from {OldQuest} to {NewQuest}, updating started quest", _startedQuest.Quest.Id, elementId2);
if (_questRegistry.TryGetQuest(elementId2, out Quest quest3))
{
_logger.LogInformation("Switching to new quest: {QuestName}", quest.Info.Name);
_startedQuest = new QuestProgress(quest, sequence);
if (_clientState.LocalPlayer != null && _clientState.LocalPlayer.Level < quest.Info.Level)
_logger.LogInformation("Switching to new quest: {QuestName}", quest3.Info.Name);
_startedQuest = new QuestProgress(quest3, sequence);
if (_clientState.LocalPlayer != null && _clientState.LocalPlayer.Level < quest3.Info.Level)
{
_logger.LogInformation("Stopping automation, player level ({PlayerLevel}) < quest level ({QuestLevel}", _clientState.LocalPlayer.Level, quest.Info.Level);
_logger.LogInformation("Stopping automation, player level ({PlayerLevel}) < quest level ({QuestLevel}", _clientState.LocalPlayer.Level, quest3.Info.Level);
Stop("Quest level too high");
}
questProgress = _startedQuest;
}
else
{
_logger.LogInformation("New quest {QuestId} not found in registry", elementId);
_logger.LogInformation("New quest {QuestId} not found in registry", elementId2);
}
}
}
}
else
{
_questFunctions.GetCurrentQuest(AutomationType != EAutomationType.SingleQuestB).Deconstruct(out CurrentQuest, out Sequence, out State);
ElementId elementId2 = CurrentQuest;
b = Sequence;
MainScenarioQuestState mainScenarioQuestState = State;
(ElementId, byte)? tuple3 = (from x in ManualPriorityQuests
where _questFunctions.IsReadyToAcceptQuest(x.Id) || _questFunctions.IsQuestAccepted(x.Id)
select (Id: x.Id, _questFunctions.GetQuestProgressInfo(x.Id)?.Sequence ?? 0)).FirstOrDefault();
if (tuple3.HasValue)
{
(ElementId, byte) valueOrDefault2 = tuple3.GetValueOrDefault();
if ((object)valueOrDefault2.Item1 != null)
{
(elementId2, b) = valueOrDefault2;
}
}
if (elementId2 == null || elementId2.Value == 0)
{
if (_startedQuest != null)
{
switch (mainScenarioQuestState)
{
case MainScenarioQuestState.Unavailable:
_logger.LogWarning("MSQ information not available, doing nothing");
return;
case MainScenarioQuestState.LoadingScreen:
_logger.LogWarning("On loading screen, no MSQ - doing nothing");
return;
}
_logger.LogInformation("No current quest, resetting data [CQI: {CurrrentQuestData}], [CQ: {QuestData}], [MSQ: {MsqData}]", _questFunctions.GetCurrentQuestInternal(allowNewMsq: true), _questFunctions.GetCurrentQuest(), _questFunctions.GetMainScenarioQuest());
_startedQuest = null;
Stop("Resetting current quest");
}
questProgress = null;
}
else
{
if (_startedQuest == null || _startedQuest.Quest.Id != elementId2)
{
Quest quest2;
if (_configuration.Stop.Enabled && _startedQuest != null && _configuration.Stop.QuestsToStopAfter.Contains(_startedQuest.Quest.Id) && _questFunctions.IsQuestComplete(_startedQuest.Quest.Id))
{
ElementId id = _startedQuest.Quest.Id;
_logger.LogInformation("Reached stopping point (quest: {QuestId})", id);
_chatGui.Print("Completed quest '" + _startedQuest.Quest.Info.Name + "', which is configured as a stopping point.", "Questionable", 576);
_startedQuest = null;
Stop($"Stopping point [{id}] reached");
}
else if (_questRegistry.TryGetQuest(elementId2, out quest2))
{
_logger.LogInformation("New quest: {QuestName}", quest2.Info.Name);
_startedQuest = new QuestProgress(quest2, b);
if (_clientState.LocalPlayer != null && _clientState.LocalPlayer.Level < quest2.Info.Level)
{
_logger.LogInformation("Stopping automation, player level ({PlayerLevel}) < quest level ({QuestLevel}", _clientState.LocalPlayer.Level, quest2.Info.Level);
Stop("Quest level too high");
return;
}
if (AutomationType == EAutomationType.SingleQuestB)
{
_logger.LogInformation("Single quest is finished");
AutomationType = EAutomationType.Manual;
}
CheckNextTasks("Different Quest");
}
else if (_startedQuest != null)
{
_logger.LogInformation("No active quest anymore? Not sure what happened...");
_startedQuest = null;
Stop("No active Quest");
}
return;
}
questProgress = _startedQuest;
}
}
goto IL_0b43;
IL_0b43:
if (questProgress == null)
{
DebugState = "No quest active";
@ -758,6 +724,68 @@ internal sealed class QuestController : MiniTaskController<QuestController>
{
DebugState = null;
}
return;
IL_0813:
if (elementId == null || elementId.Value == 0)
{
if (_startedQuest != null)
{
switch (mainScenarioQuestState)
{
case MainScenarioQuestState.Unavailable:
_logger.LogWarning("MSQ information not available, doing nothing");
return;
case MainScenarioQuestState.LoadingScreen:
_logger.LogWarning("On loading screen, no MSQ - doing nothing");
return;
}
_logger.LogInformation("No current quest, resetting data [CQI: {CurrrentQuestData}], [CQ: {QuestData}], [MSQ: {MsqData}]", _questFunctions.GetCurrentQuestInternal(allowNewMsq: true), _questFunctions.GetCurrentQuest(), _questFunctions.GetMainScenarioQuest());
_startedQuest = null;
Stop("Resetting current quest");
}
questProgress = null;
}
else
{
if (_startedQuest == null || _startedQuest.Quest.Id != elementId)
{
Quest quest4;
if (_configuration.Stop.Enabled && _startedQuest != null && _configuration.Stop.QuestsToStopAfter.Contains(_startedQuest.Quest.Id) && _questFunctions.IsQuestComplete(_startedQuest.Quest.Id))
{
ElementId id = _startedQuest.Quest.Id;
_logger.LogInformation("Reached stopping point (quest: {QuestId})", id);
_chatGui.Print("Completed quest '" + _startedQuest.Quest.Info.Name + "', which is configured as a stopping point.", "Questionable", 576);
_startedQuest = null;
Stop($"Stopping point [{id}] reached");
}
else if (_questRegistry.TryGetQuest(elementId, out quest4))
{
_logger.LogInformation("New quest: {QuestName}", quest4.Info.Name);
_startedQuest = new QuestProgress(quest4, b);
if (_clientState.LocalPlayer != null && _clientState.LocalPlayer.Level < quest4.Info.Level)
{
_logger.LogInformation("Stopping automation, player level ({PlayerLevel}) < quest level ({QuestLevel}", _clientState.LocalPlayer.Level, quest4.Info.Level);
Stop("Quest level too high");
return;
}
if (AutomationType == EAutomationType.SingleQuestB)
{
_logger.LogInformation("Single quest is finished");
AutomationType = EAutomationType.Manual;
}
CheckNextTasks("Different Quest");
}
else if (_startedQuest != null)
{
_logger.LogInformation("No active quest anymore? Not sure what happened...");
_startedQuest = null;
Stop("No active Quest");
}
return;
}
questProgress = _startedQuest;
}
goto IL_0b43;
}
}